GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
DOM для Web-сервисов, часть 1(11724)
XML-формат обмена данными Сбалансированной системы показателей: практический пример (часть II)(10408)
XML и базы данных? Доверьтесь своей интуиции(10330)
XML Viewer (IBM alphaWorks)(9543)
Обзор XML-стандартов, часть 2(9261)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » XML » Использование XInclude для синхронизации WSDL с исходными схемами

Использование XInclude для синхронизации WSDL с исходными схемами


Intersoft Lab
market@iso.ru
http://www.iso.ru/

Дата: 22-01-2004
Автор: Юч Огбуджи (Uche Ogbuji)

Импорт формата полезной нагрузки в случае использования описаний сообщений document/literal

При использовании в Web-сервисе стиля document/literal схемы форматов обмена данными часто опираются на существующий стандарт документа. Это может вызвать проблемы с синхронизацией WSDL-файлов со стандартными схемами. В этой статье показано, как использовать XInclude, чтобы включить в WSDL-файл фрагменты внешней схемы.

Для того, чтобы формализовать XML-документ, который передается в Web-сервисе, в разделе types WSDL-файла можно разместить фрагмент XML-схемы. В большинстве случаев под этим понимается содержание тела сообщения SOAP (SOAP body). При использовании в Web-сервисе стиля RPC это обычно специализированный XML-формат, который преобразует конструкции XML-схемы W3C (W3C XML Schema, WXS) в формат SOAP. Такой подход характерен для Web-сервиса и не очень полезен вне его. Это разделение на XML-документ, который вероятно используется на уровне приложения в любой конечной точке (endpoint), и переданным формат часто является основной причиной критики использования в Web-сервисе стиля RPC и основанием для отстаивания стиля document/literal. Если читатель не знаком со стилем document/literal, необходимые сведения можно почерпнуть, обратившись к материалам, приведенным в разделе Ресурсы.

В случае использования стиля document/literal XML-формат, который весьма удобен для обработки на любой стороне, просто помещается в конверт и передается в низменном виде. Это означает, что подробности схемы, которые располагаются в разделе types WDDL, часто являются частью более широко используемой схемы. Этой схемой может быть даже известная схема, как, например, XHTML, Docbook или один из многочисленных XML-форматов для обмена бизнес-данными - UBL или OAGIS. Это означает, что включение этой схемы в WSDL-документы может привести к проблемам с синхронизацией или совместимостью. Что случится, если схема изменилась, а WSDL -нет? В этом случае могут возникнуть как ошибки, которые сложно определить, так и серьезные проблемы.

Инъекция включением

Конструкция XInclude, определенная консорциумом W3C, задает модель обработки и синтаксис для превращения ссылки на внешний документ в фактический XML в этом документе (или его части). Данный процесс называется включением (inclusion), он похож на инструкцию #include в C или C++. С технической точки зрения включение XML осуществляется объединением ряда информационных наборов XML в один составной Infoset. Если файл схемы хранится по какому-либо адресу, его можно включить в WSDL-файл. Предположим, что следующий документ должен быть отправлен в Web-сервисе, в котором используется стиль literal:



Листинг 1. Пример документа, отправляемого в Web-сервисе, в котором используется стиль literal
<?xml version="1.0" encoding="iso-8859-1"?>
<labels>
  <label>
    <quote>
      Midwinter Spring is its own season
    </quote>
    <name>Thomas Eliot</name>
    <address>
      <street>3 Prufrock Lane</street>
      <city>Stamford</city>
      <state>CT</state>
    </address>
  </label>
  <label>
    <name>Ezra Pound</name>
    <address>
      <street>45 Usura Place</street>
      <city>Hailey</city>
      <state>ID</state>
    </address>
  </label>
</labels>

Данный формат формализуется в XML-схеме W3C следующим образом:



Листинг 2. XML-схема W3C для документа, отправляемого в стиле literal
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
>
  <xs:element name="labels">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="label"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="label">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="quote"/>
        <xs:element ref="name"/>
        <xs:element ref="address"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="quote">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element ref="emph"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="emph" type="xs:string"/>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="address">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="street"/>
        <xs:element ref="city"/>
        <xs:element ref="state"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="street" type="xs:string"/>
  <xs:element name="city" type="xs:string"/>
  <xs:element name="state" type="xs:string"/>
</xs:schema>

Приведенный ниже пример (Листинг 3) - это раздел types из WSDL-файла, который включает необходимую часть определения схемы.



Листинг 3. Часть WSDL-файла, в котором для присоединения схемы используется XInclude
  <types xmlns:xi="http://www.w3.org/2001/XInclude">
    <schema>
      <xi:include
        href="/go.html?url=http://example.com/labels.xsd"
        xpointer="xmlns(xs=http://www.w3.org/2001/XMLSchema)
                  xpointer(/xs:schema/*)"
      />
    </schema>
  </types>

Лучше меньше, да лучше

Листинг 3 - это включение отнюдь не всего файла. В данном примере для WSDL требуются определения элемента из файла схемы, и поэтому для извлечения этого подмножества из всей схемы в Листинге 3 используется XPointer. В XPointer определено несколько схем для таких извлечений. Схема xmlns(...) определяет отображение пространств имен, а схема xpointer(...) задает выражения, которые определяют, какое подмножество документа будет использоваться. XPointer опирается на XPath, и выражение /xs:schema/* означает тоже самое, что и в XPath - то есть выбираются только потомки элемента xs:schema.

Важное замечание. Данный синтаксис XPointer соответствует требованиям Рабочей версии спецификации XPointer от 10 ноября 2003г., однако, он отличается от прежнего способа выражения XPointer в XInclude. Автор выяснил, что инструментальные средства пока еще не поддерживают последний вариант, и поэтому читателю, возможно, какое-то время придется пользоваться более ранней редакцией. Листинг 4 - эквивалент Листинга 3, записанный в соответствии с прежним синтаксисом XPointer.



Листинг 4. Вариант Листинга 3, в котором используются более ранний синтаксис XPointer
  <types xmlns:xi="http://www.w3.org/2001/XInclude">
    <schema>
      <xi:include
        href="/go.html?url=http://example.com/labels.xsd#
                  xmlns(xs=http://www.w3.org/2001/XMLSchema)
                  xpointer(/xs:schema/*)"
      />
    </schema>
  </types>

Примечание. Часть, начинающаяся с "xmlns(", обычно располагается сразу после знака "решетка", а не со следующей строки, однако, для удобства восприятия отформатированного текста после этого знака был добавлен символ разрыва строки.

Заключение

XInclude - прост и поддерживается многими инструментальными средствами XML. Это удобный инструмент для многих ситуаций, который может помочь улучшить сопровождение WSDL-документов в стиле document/literal.

Ресурсы

  • Исчерпывающие сведения об использовании в Web-сервисах стиля document/literal можно получить, прочитав статью Джеймса Маккарфи (James McCarthy) "Преимущества использования стиля document в Web-сервисах" (Reap the benefits of document style Web services, developerWorks, июнь 2002 г.) и статью Расселла Бутека (Russell Butek) "Какой стиль WSDL следует использовать" (Which style of WSDL should I use?, developerWorks, октябрь 2003г.).
  • В статье Билала Сиддикуи (Bilal Siddiqui) "Развертывание Web-сервисов с WSDL" (Deploying Web services with WSDL, developerWorks, ноябрь 2001г.) рассматривается ранняя версия WSDL.
  • Текущая версия спецификации "Язык описания Web сервисов, версия 1.2" (Web Services Description Language (WSDL) Version 1.2). Познакомится с будущей версией можно, прочитав "WSDL, версия 2.0, Часть 0. Основные понятия" (WSDL Version 2.0 Part 0: Primer).
  • Учебное пособие Юча Огбуджи (Uche Ogbuji) "Разработка на Python/XML с помощью 4Suite, часть 4: композиция и обновления" (Develop Python/XML with 4Suite, Part 4: Composition and updates) посвящено XInclude и XPointer - в нем рассказывается о более раннем синтаксисе XInclude (октябрь 2002г.).
  • Отличное введение в XInclude (более ранний синтаксис) - статья Эллиотта Расти Хэрольда (Elliotte Rusty Harold) "Использование XInclude" (Using XInclude).
  • Учебные пособия на ресурсе ZVON - XInclude и XPointer. Они также посвящены более ранней версии XInclude.
  • Наиболее подробная информации содержится в спецификациях "Включения XML (XInclude), версия 1.0" (XML Inclusions (XInclude) 1.0) и "Структура XPointer" (XPointer Framework), опубликованных на сайте консорциума W3C.
  • Множество других статей, рубрик, учебных пособий и заметок в разделах Web services и XML рубрики developerWorks.
  • На странице IBM Certified Developer in XML and related technologies приведена информация о том, как стать сертифицированным разработчиком XML.

Об авторе

Юч Огбуджи (Uche Ogbuji) - консультант и один из основателей Fourthought, компании, занимающейся поставками программного обеспечения и предоставлением консалтинговых услуг в области XML-решений для корпоративного управления знаниями. Fourthought разрабатывает 4Suite, платформу с открытым исходным кодом, для XML, RDF и приложений по управлению знаниями. Юч Огбуджи - инженер в области вычислительной техники, он родился в Нигерии, сейчас живет и работает в Боулдер-Сити (Boulder), штат Колорадо, США. С ним можно связаться по адресу uche.ogbuji@fourthought.com.

Оригинальный текст статьи можно посмотреть здесь: Use XInclude to synchronize WSDL with source schemata

 
12.03.2004
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.