69050

Язык WSDL. Основные концепции языка WSDL

Лекция

Информатика, кибернетика и программирование

И отправитель, и получатель сообщения SOAP должны иметь доступ к описанию используемой Web-службы. Отправитель нуждается в описании Web-службы, чтобы знать, как правильно форматировать сообщение, а получатель – для правильной его интерпретации. Поэтому необходим документ (в виде файла)...

Русский

2014-09-29

697.5 KB

13 чел.

 56

Лекция 4-16

6.2.3. Язык WSDL

 6.2.3.1. Основные концепции языка WSDL

 6.2.3.2. Компоненты документа WDSL

 6.2.3.2.1. Компонент Description

 6.2.3.2.2. Компонент Interface

 6.2.3.2.3. Компонент Interface Fault

 6.2.3.2.4. Компонент Interface Operation

 6.2.3.2.5. Компонент Interface Message Reference

 6.2.3.2.6. Компонент Interface Fault Reference

 6.2.3.2.7. Компонент Binding

 6.2.3.2.8. Компонент Binding Fault

 6.2.3.2.9. Компонент Binding Operation

 6.2.3.2.10. Компонент Binding Message Reference

 6.2.3.2.11. Компонент Binding Fault Reference

 6.2.3.2.12. Компонент Service

 6.2.3.2.13. Компонент Endpoint

 6.2.3.3. Использование схемы XML в WSDL

 6.2.3.4. Вставка внешних фрагментов в документ WSDL

 6.2.3.4.1. Элемент include

 6.2.3.4.2. Элемент import

 6.2.3.5. Элемент documentation

 6.2.3.6. Связывание WSDL 2.0 с протоколом SOAP

 6.2.3.6.1. Дополнительные атрибуты в элементах документа WSDL

 6.2.3.6.2. Компонент SOAP Module

 6.2.3.6.3. Компонент SOAP Header Block

 6.2.3.7. Связывание WSDL 2.0 с протоколом HTTP

 6.2.3.7.1. Дополнительные атрибуты в элементах документа WSDL

 6.2.3.7.2 Компонент HTTP Header

6.2.4. Служба UDDI

 6.2.4.1. Базовая архитектура UDDI

 6.2.4.2. Структуры данных реестра UDDI

 6.2.4.2.1. Структура  businessEntity

 6.2.4.2.2. Структура  businessService

 6.2.4.2.3. Структура  bindingTemplate

 6.2.4.2.4. Структура  tModel

 6.2.4.2.5. Структура  publisherAssertion

 6.2.4.2.6. Структура  operationalInfo

 6.2.4.3. Интерфейс прикладного программирования для UDDI

 6.2.4.3.1. Функции запроса данных

 6.2.4.3.2. Функции публикации

 6.2.4.3.3. Функции безопасности

 6.2.4.3.4. Функции подписки

6.2.5. Технология AJAX

 6.2.5.1. Средства технологии AJAX

 6.2.5.2. Объект XMLHTTPRequest

6.2.3. Язык WSDL

6.2.3.1. Основные концепции языка WSDL

И отправитель, и получатель сообщения SOAP должны иметь доступ к описанию используемой Web-службы. Отправитель нуждается в описании Web-службы, чтобы знать, как правильно форматировать сообщение, а получатель – для правильной его интерпретации. Поэтому необходим документ (в виде файла), в котором в формализованном виде содержались бы все данные, необходимые для клиента и провайдера Web-службы. Доступ к этому файлу в сети будет выполняться с использованием его URI.

Язык описания Web-служб – WSDL (Web Services Description Language) как раз и является таким средством, обеспечивающим модель и формат XML для описания Web-служб.

Первая спецификация WSDLWSDL 1.1 была принята консорциумом W3 на основе разработок фирм Ariba, IBM и Microsoft в марте 2001 г. Консорциум W3 начал разрабатывать свою спецификацию – WSDL 1.2, однако из-за существенных отличий от WSDL 1.1 номер версии был переименован в 2.0. Спецификация WSDL 2.0 была принята в июне 2007 г.

Описание Web-служб в языке WSDL определяется моделью компонент WSDL 2.0 и делится на два этапа: этап абстрактного описания и этап конкретного описания.

На этапе абстрактного описания Web-служба описывается в терминах сообщений, которые эта служба отправляет и получает. Сообщения задаются независимо от формата соединения с использованием описаний типов данных (обычно на основе типов данных схемы XML).  Шаблоны обмена сообщениями определяют последовательность и количество сообщений, а также отправителей и адресатов сообщений. Операции связывают шаблоны обмена сообщениями с одним или несколькими сообщениями, а интерфейсы группируют операции независимо от формата передачи.

На этапе конкретного описания связывание определяет детали передачи сообщения для одного или нескольких интерфейсов. Конечная точка ставит в соответствие связыванию сетевой адрес. И, наконец, службы группируют конечные точки, реализующие общий интерфейс.

Концептуальная модель компонентов WSDL 2.0 приведена на рис. 6.2.3.

Рис. 6.2.3. Концептуальная модель компонентов WSDL 2.0

Структурная схема компонент документа WSDL 2.0 представлена на рис. 6.2.4.

Рис. 6.2.4. Структурная схема компонент документа WSDL 2.0

(0… и 1… – диапазон количества повторений компонент)

В документе WSDL 2.0 в формате XML каждый компонент представляется одним или двумя элементами XML. Кроме того, некоторые элементы не имеют своего графического компонента. Структурная схема документа WSDL 2.0 в формате XML приведена на рис. 6.2.5 (на схеме не показан элемент documentation, который является первым дочерним элементом всех элементов, приведенных в схеме).

Рис. 6.2.5. Структурная схема элементов XML документа WSDL 2.0

(0… , 0…1 и 1… – диапазон количества повторений компонент,

? – необязательный атрибут)

Ниже рассматриваются компоненты и элементы XML документа WSDL 2.0.

6.2.3.2. Компоненты документа WDSL

Модель компонент WSDL 2.0 описывается как набор компонент со связанными с ними свойствами, описывающими различные параметры Web-служб. Свойства компонент могут следовать в любом порядке и являются уникальными для каждого компонента. Свойства компонента могут быть как обязательными (required), так и необязательными (optional). Если необязательное свойство компонента не задано, предполагается, что оно имеет специальное «пустое» значение.

6.2.3.2.1. Компонент Description

Компонент Description является корневым элементом документа WDSL и контейнером для двух категорий компонент: компонент WSDL 2.0 и компонент системных типов.

Компоненты WSDL 2.0 – это элементы интерфейса, связывания и служб, а компоненты системных типов – это объявления элементов и определение типа. Компоненты WSDL 2.0 определены в пространстве имен

"http://www.w3.org/ns/wsdl"

(в качестве имени этого пространства имен обычно используется wsdl).

Компоненты системных типов описывают ограничения на содержимое сообщения. Системные типы основаны на других типах моделей, обычно связанных с расширениями WSDL 2.0. Если они определяют данное, эквивалентное объявлению глобального элемента в схеме XML, то системный тип рассматривается как объявление.

Компонент объявления элемента определяет имя и модель содержимого для глобального элемента схемы XML. Компонент имеет свойство {name} (имя элемента) и  свойство {system} (пространство имен схемы XML).

Компонент определения типа задает модель содержимого для глобального типа схемы XML. Компонент также имеет свойство {name} (имя типа) и  свойство {system} (пространство имен схемы XML).

Компоненты системных типов определены в пространствах имен

"http://www.w3.org/2001/XMLSchema"

и

"http://www.w3.org/2001/XMLSchema-instance"

(в качестве имен этих пространств имен обычно используются имена xs и xsi).

Компоненты WSDL 2.0 и системных типов содержатся непосредственно в компоненте Description, т.е. являются компонентами верхнего уровня. В свою очередь компоненты верхнего уровня содержат вложенные (дочерние) компоненты. Вложенные компоненты имеют системное свойство parent, которое содержит ссылку на свой родительский компонент.

В дополнение к компонентам WSDL 2.0 и системных типов в компонент могут быть добавлены компоненты расширений WSDL 2.0. Кроме того, к существующим компонентам могут быть добавлены свойства расширения.

Компонент Description имеет следующее представление XML:

<description

     targetNamespace="xs:anyURI"

>

  <documentation />*

  [ <import /> | <include /> ]*

  <types />?

  [ <interface /> | <binding /> | <service /> ]*

</description>

Обязательный атрибут targetNamespace элемента description задает целевое пространство имен в виде URI для обрабатываемого человеком и компьютером документа, который прямо или косвенно семантику данного документа XML.

Для компонента Description определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interfaces} – набор компонент Interface, соответствующий всем элементам interface с учетом включаемых (с помощью элемента wsdl:include) или импортируемых (с помощью элемента wsdl:import) компонент Interface;
  •  свойство {bindings} – набор компонент Bindings, соответствующий всем элементам binding с учетом включаемых (с помощью элемента wsdl:include) или импортируемых (с помощью элемента wsdl:import) компонент Bindings;
  •  свойство {services} – набор компонент Services, соответствующий всем элементам service с учетом включаемых (с помощью элемента wsdl:include) или импортируемых (с помощью элемента wsdl:import) компонент Services;
  •  свойство {element declarations} – набор компонент Element Declarations, соответствующий всем элементам объявления, являющимися потомками элемента types с учетом включаемых (с помощью элемента xs:include) или импортируемых (с помощью элемента xs:import) компонент Element Declarations;
  •  свойство {type definitions} – набор компонент Type Definitions, соответствующий всем элементам типа, являющимися потомками элемента types с учетом включаемых (с помощью элемента xs:include) или импортируемых (с помощью элемента xs:import) компонент Type Definitions (объявления типов могут быть объявления простых или производных типов схемы XML, а также типов, определенных пользователем).

6.2.3.2.2. Компонент Interface

Компонент Interface описывает последовательность сообщений, отправляемых или принимаемых Web-службой. При описании связанные между собой сообщения группируются в операции, которые являются последовательностями входных и выходных сообщений.

Интерфейс может также расширять один или более других интерфейсов. Чтобы избежать рекурсии, интерфейс не должен появляться (прямо или косвенно), в наборе интерфейсов, которые он расширяет.  

Компонент Interface имеет следующее представление XML:

<interface

    name="xs:NCName"

    extends="список xs:QName"?

        styleDefault="список xs:anyURI"?

>

  <documentation />*

  [ <fault /> | <operation /> ]*

</interface>

Обязательный атрибут  name элемента interface совместно с атрибутом targetNamespace элемента description задает имя интерфейса (типа QName).

Необязательный атрибут  extends задает список интерфейсов (разделенных пробелами), для которых данный интерфейс является производным.

Необязательный атрибут  styleDefault задает список стилей по умолчанию (разделенных пробелами), используемых для конструирования свойств {element declaration} в свойстве {interface message references} для всех операций, содержащихся в данном элементе interface.

Для компонента Interface определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – полное имя интерфейса (типа QName), образуемое целевым пространством имен в элементе description и значением атрибута  name элемента interface.
  •  свойство {extended interfaces} – набор компонент Interface, соответствующих элементам списка в атрибуте extends;
  •  свойство {interface faults} – набор компонент Interface Fault, соответствующих дочерним элементам fault элемента  interface;
  •  свойство {interface operations} – набор компонент Interface Operation, соответствующих дочерним элементам operation элемента  interface.

6.2.3.2.3. Компонент Interface Fault

Ошибка – это событие, которое происходит во время во время обмена сообщениями и которое нарушает этот обмен. Это происходит, например, при возникновении сбоев при передаче сообщений или при преждевременном разрыве обмена одной из сторон. В результате ошибке генерируется сообщение, которое содержит причину и происхождение ошибки, а также другую информацию, например, стек трассировки ошибки.  

Компонент Interface Fault описывает ошибку, которая может произойти во время вызова операции в интерфейсе. Этот компонент объявляет абстрактную ошибку с заданным именем и задает содержимое сообщения об ошибке. Компонент Interface Operation указывает, когда и как формируется сообщение об ошибке. Одна и та же ошибка может появиться в разных операциях и на нее может быть ссылка при различных связываниях.

Компонент Interface Fault не описывает общие системные ошибки, такие как нехватка памяти или дискового пространства, хотя при любом обмене сообщениями эти ошибки такие ошибки также могут возникать.

Компонент Interface Fault имеет следующее представление XML:

<fault

    name="xs:NCName"

    element="объединение xs:QName и xs:token"

>

  <documentation />*

</fault>

Обязательный атрибут  name элемента fault определяет имя ошибки в заданном родительском элементе interface.

Необязательный атрибут  element задает ссылку типа QName на компонент  Element Declaration, либо ссылку на метку xs:token, если допустимыми значениями метки являются #any, #none или #other.

Для компонента Interface Fault определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – полное имя ошибки (типа QName), образуемое целевым пространством имен в элементе description и значением атрибута  name элемента fault.
  •  свойство {message content model} если задано значение атрибута element и его значение имеет тип QName, свойство имеет значение "#element", иначе значение свойства равно имени элемента, если он существует или значение "#other " в противном случае;
  •  свойство {element declaration} если задано значение атрибута element и его значение имеет тип QName, свойство имеет значение компонента Element Declaration из свойства {element declarations} компонента Description;
  •  свойство {parent} – компонент Interface, соответствующий родительскому элементу  interface для данного компонента.

6.2.3.2.4. Компонент Interface Operation

Компонент Interface Operation описывает операцию, поддерживаемую родительским интерфейсом. Операция определяет  набор обычных сообщений и сообщений об ошибках, которым Web-служба обменивается  с другими компонентами взаимодействия. Участники обмена, а также последовательность и количество сообщений, включенных в это взаимодействие, определяется шаблоном обмена сообщениями, используемым в операции. Web-служба, чья операция используется в шаблоне, становится одним из участников этого шаблона. Набор таких шаблонов  определен в спецификации дополнений к WSDL 2.0 – WSDL 2.0 Adjuncts.

Компонент Interface Operation имеет следующее представление XML:

<operation

    name="xs:NCName"

 pattern="xs:anyURI" 

    style="список xs:anyURI"

>

  <documentation />*

 [ <input /> | <output /> | <infault /> | <outfault /> ]*

</operation>

Обязательный атрибут  name элемента operation определяет имя операции в заданном родительском элементе interface.

Необязательный атрибут  pattern задает шаблон обмена сообщениями, используемый данным компонентом.

Необязательный атрибут  style определяет правила, используемые для создания свойств  {element declaration} в компонентах, которые является элементами определенного ниже свойства  {interface message references} данного компонента.

Для компонента Interface Operation определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – полное имя операции (типа QName), образуемое целевым пространством имен в элементе description и значением атрибута  name элемента operation.
  •  свойство {message exchange pattern} если задано значение атрибута pattern, свойство имеет значение этого атрибута, иначе значение свойства равно  "http://www.w3.org/ns/wsdl/in-out";
  •   свойство {interface message references} набор ссылок на сообщения, соответствующих дочерним элементам input и output элемента operation;
  •  свойство {interface fault references} набор ссылок на ошибки интерфейса, соответствующих дочерним элементам infault и outfault элемента operation;
  •  свойство {style} если задано значение атрибута style имеет тип QName, свойство содержит набор URI, заданных в этом атрибуте, иначе  свойство содержит набор URI, заданных в атрибуте styleDefault родительского элемента  interface, если же и этот атрибут не задан, свойство имеет пустое значение; 
  •  свойство {parent} – компонент Interface, соответствующий родительскому элементу  interface для данного компонента.

Атрибутом расширения для элемента operation является необязательный атрибут wsdlx:safe="xs:boolean", который задает обработку безопасности для операции (значение "true") или выключение обработки безопасности (значение "false"). По умолчанию, значение этого атрибута равно "false". Адрес URI пространства имен с префиксом wsdlx:

"http://www.w3.org/ns/wsdl-extensions".

При использовании атрибута wsdlx:safe для компонента Interface Operation добавляется свойство {safe}, значение которого равно значению этого атрибута.  

6.2.3.2.5. Компонент Interface Message Reference

Компонент Interface Message Reference определяет содержимое сообщения, которым обмениваются во время операции. По умолчанию, содержимое сообщения определяется типами данных схемы XML. Назначением компонента Interface Message Reference является установка соответствия между действительным элементом сообщения (объявлением элемента XML) и сообщением в шаблоне обмена сообщениями, идентифицируемым своей меткой.

Компонент Interface Message Reference имеет представление XML в виде двух элементов – input и output. Элемент input определяет входное сообщение и имеет следующий синтаксис:

<input

    messageLabel="xs:NCName"

    element="объединение xs:QName и xs:token"

>

  <documentation />*

</input>

Элемент output определяет выходное сообщение и имеет аналогичный синтаксис:

<output

    messageLabel="xs:NCName"

    element="объединение xs:QName и xs:token"

>

  <documentation />*

</output>

Необязательный атрибут  messageLabel элементов  input и output определяет роль данного сообщения в родительском элементе operation.

Необязательный атрибут  element задает ссылку типа QName на компонент  Element Declaration, либо ссылку на метку xs:token, если допустимыми значениями метки являются #any, #none или #other.

Для компонента Interface Message Reference определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {message label} – если  задано значение атрибута messageLabel, свойство имеет значение этого атрибута, иначе значение свойства равно  уникальному образцу сообщения, со значением направления сообщения, совпадающим со значением свойства {direction};
  •  свойство {direction} равно "in" для элемента  input и "out" для элемента  output;
  •   свойство {message content model} если задано значение атрибута element и его значение имеет тип QName, свойство имеет значение "#element", иначе значение свойства равно имени элемента, если он существует или значение "#other " в противном случае;
  •  свойство {element declaration} если задано значение атрибута element и его значение имеет тип QName, свойство имеет значение компонента Element Declaration из свойства {element declarations} компонента Description;
  •  свойство {parent} – компонент Interface Operation, соответствующий родительскому элементу  interface для данного компонента.

Шаблоны обмена сообщениями могут задаваться пользователями, однако в WSDL 2.0 определены следующие встроенные шаблоны:

  •  шаблон in-only задается для принимаемого сообщения, у которого для компонента Interface Message Reference значение свойства  {message label} равно "In", а   значение свойства {direction} равно "in" (даже в случае ошибки в принимаемом сообщении сообщение об ошибке не должно генерироваться);
  •   шаблон robust-in-only задается для принимаемого сообщения, у которого для компонента Interface Message Reference значение свойства  {message label} равно "In", а   значение свойства {direction} равно "in" (в случае ошибки в принимаемом сообщении может быть сгенерировано сообщение об ошибке);
  •  шаблон in-out состоит из двух сообщений – принимаемого и передаваемого, причем у первого из них  для компонента Interface Message Reference значение свойства  {message label} равно "In", а   значение свойства {direction} равно "in", а у второго компонента – соответственно "Out" и "out".

Свойство {message exchange pattern} компонента Interface Operation для указанных шаблонов имеет следующие значения:

  •  для шаблона in-only – "http://www.w3.org/ns/wsdl/in-only";
  •  для шаблона robust-in-only

"http://www.w3.org/ns/wsdl/robust-in-only ";

  •  для шаблона in-out – "http://www.w3.org/ns/wsdl/in-out".  

6.2.3.2.6. Компонент Interface Fault Reference

Компонент Interface Fault Reference сопоставляет тип, заданный компонентом Interface Fault, с сообщением об ошибке, которым обмениваются во время операции. По умолчанию, содержимое сообщения об ошибке определяется типами данных схемы XML. Назначением компонента Interface Fault Reference является установка соответствия между действительным элементом сообщения об ошибке (объявлением элемента XML) для содержимого сообщения, определенного в компоненте Interface Fault, и сообщением в шаблоне обмена сообщениями, идентифицируемым своей меткой. Для идентификации описываемого сообщения компонент Interface Fault Reference использует метку сообщения, которое определяет ошибку, как ключ.

Компонент Interface Fault Reference имеет представление XML в виде двух элементов – infault и outfault. Элемент infault определяет входное сообщение об ошибке и имеет следующий синтаксис:

<infault

    ref="xs:QName"

messageLabel="xs:NCName"

>

  <documentation />*

</infault>

Элемент outfault определяет выходное сообщение об ошибке и имеет аналогичный синтаксис:

<outfault

    ref="xs:QName"

messageLabel="xs:NCName"

>

  <documentation />*

</outfault>

Обязательный атрибут  ref элементов  infault и outfault задает ссылку типа QName на компонент  Interface Fault.

Необязательный атрибут  messageLabel идентифицирует сообщение об ошибке в шаблоне обмена сообщениями.

Для компонента Interface Fault Reference определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interface fault} – компонент   Interface Fault из свойства {interface faults} родительского компонента Interface или компонента Interface, который прямо или косвенно является родителем данного компонента со значением свойства  {name}, равным значению атрибута ref;
  •  свойство {message label} – если  задано значение атрибута messageLabel, свойство имеет значение этого атрибута, иначе значение свойства равно  уникальному образцу сообщения, со значением направления сообщения, совпадающим со значением свойства {direction};
  •  свойство {direction} равно "in" для элемента  infault  и "out" для элемента  outfault;
  •  свойство {parent} – компонент Interface Operation, соответствующий родительскому элементу  interface для данного компонента.

Пример использования компонента Interface и его компонент-потомков:

<?xml version="1.0" encoding="utf-8" ?>

<description

xmlns="http://www.w3.org/ns/wsdl"

targetNamespace="http://greath.example.com/2004/wsdl/resSvc"

xmlns:tns="http://greath.example.com/2004/wsdl/resSvc"

xmlns:ghns = "http://greath.example.com/2004/schemas/resSvc">

 <types>

         …

   </types>

  <interface name="reservationInterface">

     <fault name="invalidDataFault"

         element="ghns:invalidDataError"/>

     <operation name="opCheckAvailability"

         pattern="http://www.w3.org/ns/wsdl/in-out"

         style="http://www.w3.org/ns/wsdl/style/url">

         <input messageLabel="In"

              element="ghns:checkAvailability"/>

         <output messageLabel="Out"

              element="ghns:checkAvailabilityResponse"/>

         <outfault ref="tns:invalidDataFault"

messageLabel="Out"/>

     </operation>

 </interface>

</description>

В этом примере задан интерфейс с именем invalidDataFault. В этом интерфейсе задана ошибка с именем invalidDataFault и операция с именем opCheckAvailability.

Атрибут element в элементе fault определяет тип схемы сообщения об ошибке, предварительного определенного в элементе types.

Атрибут pattern в элементе operation определяет стандартный  шаблон сообщения in-out, т.е. сообщения могут быть как входными, так и выходными. Атрибут style в элементе operation определяет, что схема XML, определяющая набор правил для сериализации как URL.  

Атрибут messageLabel в элементе input определяет метку входного сообщения, а атрибут element в этом элементе определяет тип сообщения, как это предварительно определено в элементе types. Аналогичным образом задаются параметры выходного сообщения в элементе output.

Атрибут messageLabel в элементе outfault определяет метку выходного сообщения об ошибке, а атрибут ref в этом элементе ссылается на имя определенной в этом интерфейсе ошибки в элементе  fault.   

6.2.3.2.7. Компонент Binding

Компонент Binding описывает формат сообщения и протокол передачи, который может быть использован для определения конечной точки. Другими словами, этот компонент определяет детали реализации, необходимые для доступа к службе.

Компоненты Binding можно использовать для описания деталей как для всех интерфейсов, так и для любого заданного интерфейса. Кроме того, информация о связывании может быть определена в компоненте Binding Operation как для отдельной операции, так и для всех операций интерфейса. В компоненте Binding Fault определяются детали связывания при ошибках.

В самой спецификации WSDL 2.0 не содержится деталей связывания, однако в  спецификации дополнений – WSDL 2.0 Adjuncts определено связывание для протоколов  SOAP и HTTP.

Компонент Binding имеет следующее представление XML:

<binding

    name="xs:NCName"

 interface="xs:QName" 

    type="xs:anyURI"

>

  <documentation />*

 [ <fault /> | <operation />]*

</binding>

Обязательный атрибут  name элемента binding определяет имя операции в заданном родительском элементе description.

Необязательный атрибут  interface содержит ссылку на соответствующий компонент Interface.

Обязательный атрибут  type идентифицирует вид деталей связывания, определенный в компоненте Binding.

Для компонента Binding определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – полное имя связывания (типа QName), образуемое целевым пространством имен в элементе description и значением атрибута  name элемента binding;
  •  свойство {interface} компонент Interface, соответствующий ссылке, заданной в атрибуте interface;
  •   свойство {type} значение атрибута type;
  •  свойство {binding faults} набор компонент Binding Fault, соответствующий элементам fault данного связывания;
  •  свойство {binding operations} набор компонент Binding Operation, соответствующий элементам operation данного связывания.

6.2.3.2.8. Компонент Binding Fault

Компонент Binding Fault описывает связывание заданной ошибки в интерфейсе с заданным форматом сообщения. Определенная ошибка в интерфейсе определяется уникальным образом с помощью своего свойства {name}.

Компонент Binding Fault имеет следующее представление XML:

<fault

 ref="xs:QName" 

>

  <documentation />*

</fault>

Обязательный атрибут  ref элемента fault задает ссылку на ошибку в интерфейсе  (компонент Interface Fault).

Для компонента Binding Fault определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interface fault} – компонент Interface Fault, соответствующий ссылке, заданной в атрибуте ref.

6.2.3.2.9. Компонент Binding Operation

Компонент Binding Operation описывает формат или форматы сообщений и протокол взаимодействия, связанных с заданной операцией интерфейса для заданной конечной точки.

Компонент Binding Operation имеет следующее представление XML:

<operation

    ref="xs:QName"

>

  <documentation />*

 [ <input /> | <output /> | <infault /> | <outfault /> ]*

</operation>

Обязательный атрибут  ref элемента operation задает ссылку на ошибку операцию интерфейса  (компонент Interface Operation).

Для компонента Binding Operation определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interface operation} компонент Interface Operation, соответствующий ссылке, заданной в атрибуте ref;
  •   свойство {binding message references} набор компонент Binding Message Reference, соответствующих дочерним элементам input и output элемента operation;
  •  свойство {binding fault references} набор компонент Binding Fault Reference, соответствующих дочерним элементам infault и outfault элемента operation;
  •  свойство {parent} – компонент Binding, соответствующий родительскому элементу  binding для данного компонента.

6.2.3.2.10. Компонент Binding Message Reference

Компонент Binding Message Reference описывает связывание заданного сообщения, участвующего в операции, с заданным форматом сообщения.

Компонент Binding Message Reference имеет представление XML в виде двух элементов – input и output.

Элемент input определяет входное сообщение и имеет следующий синтаксис:

<input

    messageLabel="xs:NCName"

>

  <documentation />*

</input>

Элемент output определяет выходное сообщение и имеет аналогичный синтаксис:

<output

    messageLabel="xs:NCName"

>

  <documentation />*

</output>

Необязательный атрибут  messageLabel элементов  input и output определяет роль данного сообщения в родительском элементе operation.

Для компонента Binding Message Reference определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interface message reference} – компонент Interface Message Reference в свойстве  {interface message references} компонента Interface Operation значение атрибута name которого совпадает со значением атрибута messageLabel данного компонента;
  •  свойство {parent} – компонент Binding Operation, соответствующий родительскому элементу  operation для данного компонента.   

6.2.3.2.11. Компонент Binding Fault Reference

Компонент Binding Fault Reference описывает связывание заданной ошибки, участвующей в операции, с заданным форматом сообщения.

Компонент Binding Fault Reference имеет представление XML в виде двух элементов – infault и outfault. Элемент infault определяет входное сообщение об ошибке и имеет следующий синтаксис:

<infault

    ref="xs:QName"

messageLabel="xs:NCName"

>

  <documentation />*

</infault>

Элемент outfault определяет выходное сообщение об ошибке и имеет аналогичный синтаксис:

<outfault

    ref="xs:QName"

messageLabel="xs:NCName"

>

  <documentation />*

</outfault>

Обязательный атрибут  ref элементов  infault и outfault задает ссылку типа QName на компонент  Interface Fault.

Необязательный атрибут  messageLabel идентифицирует сообщение об ошибке в шаблоне обмена сообщениями.

Для компонента Binding Fault Reference определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {interface fault reference} – компонент Interface Fault Reference в свойстве  {interface fault references} компонента Interface Operation значение атрибута name которого совпадает со значением атрибута messageLabel и со свойством {interface fault} компонента Interface Fault из свойства {interface faults} родительского компонента Interface, у которого значение свойства  {name} равно значению атрибута ref;
  •  свойство {parent} – компонент Binding Operation, соответствующий родительскому элементу  binding для данного компонента.

Пример использования компонента Binding и его потомков:

<?xml version="1.0" encoding="utf-8" ?>

<description

   xmlns="http://www.w3.org/ns/wsdl"

   targetNamespace= "http://greath.example.com/2004/wsdl/resSvc"

   xmlns:tns= "http://greath.example.com/2004/wsdl/resSvc"

   xmlns:ghns = "http://greath.example.com/2004/schemas/resSvc"

   xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"

   xmlns:soap="http://www.w3.org/2003/05/soap-envelope">

 …

  <types>

     …

  </types>

    <interface  name = "reservationInterface" >

       …

  </interface>

  <binding name="reservationSOAPBinding"

    interface="tns:reservationInterface"

    type="http://www.w3.org/ns/wsdl/soap"               wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/">

     <operation ref="tns:opCheckAvailability"

wsoap:mep="http://www.w3.org/2003/05/soap/mep/soap-response"/>

       <fault ref="tns:invalidDataFault"

      wsoap:code="soap:Sender"/>

  </binding>

</description>

В этом примере последние два пространства имен (wsoap и soap) в элементе description определяют пространство имен рассматриваемого далее расширения SOAP для WSDL и пространство имен спецификации SOAP 1.2.

Атрибут name в элементе binding определяет имя связывания, атрибут  interface содержит ссылку на интерфейс, определенный в предыдущем примере, атрибут type указывает тип сообщения (SOAP 1.2), а атрибут wsoap:protocol указывает, что протоколом передачи сообщения SOAP является HTTP.

Атрибут ref в элементе operation ссылается на определенную в предыдущем примере операцию для определения деталей связывания, а атрибут wsoap:mep указывает, что в качестве шаблона обмена сообщениями будет определен шаблон ответа, определенный в спецификации SOAP.

Атрибут ref в элементе fault ссылается на определенное в предыдущем примере сообщение об ошибке, а атрибут wsoap:code задает код ошибки SOAP для сообщения об ошибке.

6.2.3.2.12. Компонент Service

Компонент Service описывает набор конечных точек, в которых обеспечивается заданная развернутая реализация обеспечиваемой службы.  

Компонент Service имеет следующее представление XML:

<service

    name="xs:NCName"

 interface="xs:QName" 

>

  <documentation />*

 <endpoint />+

</service>

Обязательный атрибут  name элемента service определяет имя службы в заданном родительском элементе description.

Обязательный атрибут  interface содержит ссылку на соответствующий компонент Interface, реализацией которого является данная служба.

Для компонента Service определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – полное имя службы (типа QName), образуемое целевым пространством имен в элементе description и значением атрибута  name элемента service;
  •  свойство {interface} компонент Interface, соответствующий ссылке, заданной в атрибуте interface;
  •  свойство {endpoints} набор компонент Endpoint, соответствующий дочерним элементам endpoint данного элемента.

6.2.3.2.13. Компонент Endpoint

Компонент Endpoint определяет особенности конечной точки, в которой доступна служба, определенная в родительском элементе.  

Компонент Endpoint имеет следующее представление XML:

<endpoint

    name="xs:NCName"

 binding="xs:QName"

 address="xs:anyURI" 

>

  <documentation />*

</endpoint>

Обязательный атрибут  name элемента service определяет имя службы в заданном родительском элементе description.

Обязательный атрибут  binding содержит ссылку на соответствующий компонент Binding.

Необязательный атрибут  address определяет адрес конечной точки.

Для компонента Endpoint определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} – значение атрибута  name данного элемента;
  •  свойство {binding} компонент Binding, соответствующий ссылке, заданной в атрибуте binding;
  •  свойство {address} если атрибут address задан, то свойство имеет значение этого атрибута, иначе свойство имеет пустое значение;
  •  свойство {parent} – компонент Service, соответствующий родительскому элементу  service для данного компонента.

Пример использования компонента Service и его потомков:

<?xml version="1.0" encoding="utf-8" ?>

<description

xmlns="http://www.w3.org/ns/wsdl"

  targetNamespace= "http://greath.example.com/2004/wsdl/resSvc"

xmlns:tns= "http://greath.example.com/2004/wsdl/resSvc"

   xmlns:ghns = "http://greath.example.com/2004/schemas/resSvc"

   xmlns:wsoap= "http://www.w3.org/ns/wsdl/soap"

   xmlns:soap="http://www.w3.org/2003/05/soap-envelope">

 …

  <types>

     

  </types>

    <interface  name = "reservationInterface" >

     …

  </interface>

 <binding name="reservationSOAPBinding"

         interface="tns:reservationInterface" … >

     

  </binding>

  <service name="reservationService"

      interface="tns:reservationInterface">

     <endpoint name="reservationEndpoint"

         binding="tns:reservationSOAPBinding"

   address ="http://greath.example.com/2004/reservation"/>

    </service>

 

</description>

В этом примере элемент service определяет службу для интерфейса и связывания, определенных в двух предыдущих примерах. Атрибут name этого элемента задает имя службы, а атрибут interface содержит ссылку на имя ранее определенного интерфейса reservationInterface.

Атрибут name элемента endpoint задает имя конечной точки, атрибут binding этого элемента содержит ссылку на имя ранее определенного связывания reservationSOAPBinding. Атрибут address элемента endpoint задает адрес URI, по которому можно получить доступ к службе, используя указанное в атрибуте binding связывание.

6.2.3.3. Использование схемы XML в WSDL

Компоненты схемы, содержащиеся в свойстве {element declarations} компонента Description обеспечивают систему типов для компонент Interface Message Reference и Interface Fault. Эти компоненты  задают свою структуру и содержимое, используя атрибут  element.

Элемент types задает данные схемы XML для документа WSDL с помощью  импорта внешней схемы XML, задания внутренней схемы XML, а также задания других расширений.

Этот элемент является дочерним элементом элемента description и имеет следующий синтаксис:

<types>

    <documentation />*

[ <xs:import namespace="xs:anyURI"

  schemaLocation="xs:anyURI"? /> |

 < xs:schema targetNamespace="xs:anyURI"?  /> |

 <другие элементы расширения />]*

</types>

Дочерний элемент xs:import, используемый в схеме XML, задает в атрибуте namespace пространство имен для объявления элементов и определений типов импортируемой схемы, а атрибут schemaLocation указывает местоположение импортируемой схемы.  

Внутренняя схема XML с заданным целевым пространством имен в атрибуте targetNamespace задается в элементе xs:schema.

Глобальные объявления элементов импортированной или встроенной схемы XML  доступны для компонент Interface Message Reference и Interface Fault, а глобальные определения типов доступны для всех других компонент документа WSDL. Полное имя QName объявления элемента создается из пространства имен, заданного в атрибуте targetNamespace схемы и значения атрибута name в элементе xs:element.

Пример импортирования и объявления схемы в элементе types:

<?xml version="1.0" encoding="utf-8" ?>

<description xmlns="http://www.w3.org/ns/wsdl"

targetNamespace=

"http://greath.example.com/2004/services/retrieveDetails"

xmlns:tns=

"http://greath.example.com/2004/services/retrieveDetails"

xmlns:wdetails=

"http://greath.example.com/2004/schemas/reservationDetails"

xmlns:xs="http://www.w3.org/2001/XMLSchema">

<types>

        <xs:schema id="items"

         targetNamespace=

"http://greath.example.com/2004/schemas/reservationItems">

      <xs:element

name="confirmationNumber" type="string"/>

          <xs:element name="checkInDate" type="date"/>

              <xs:element name="checkOutDate"

type="date" />

              <xs:element name="roomType" type="string"/>

              <xs:element name="smoking" type="boolean"/>

       </xs:schema>

<xs:schema id="details"

         targetNamespace=

"http://greath.example.com/2004/schemas/reservationDetails"

         xmlns:items=

"http://greath.example.com/2004/schemas/reservationItems">

<xs:import namespace=

"http://greath.example.com/2004/schemas/reservationItems"

              schemaLocation="#items" />

              <xs:element name="reservationDetails">

                   <xs:complexType>

                     <xs:sequence>

                               <xs:element

 ref="items:confirmationNumber"/>

                                <xs:element

 ref="items:checkInDate"/>

                                <xs:element

 ref="items:checkOutDate"/>

                               <xs:element

 ref="items:roomType"/>

                               <xs:element

 ref="items:smoking" />

                      </xs:sequence>

                  </xs:complexType>

          </xs:element>

  </xs:schema>

</types>

    <interface name="retrieveDetailsInterface">

<operation name="retrieve"

         pattern="http://www.w3.org/ns/wsdl/in-out">

            <input messageLabel="In" element="#none"/>

             <output messageLabel="Out"

              element="wdetails:reservationDetails" />

       </operation>

</interface>

</description>

В этом примере в элементе определены две схемы с идентификаторами items и details. Во второй схеме определен также элемент xs:import, импортирующий в эту схему первую схему. Ссылка на элемент reservationDetails задана в атрибуте element элемента operation в интерфейсе с именем retrieveDetailsInterface.

6.2.3.4. Вставка внешних фрагментов в документ WSDL

В WSDL 2.0 определено два способа вставки внешних фрагментов в  документ WSDL:

  •  включение документа с помощью элемента include;
  •  импортирование документа с помощью элемента import.

Оба элемента являются дочерними элементами элемента description.

6.2.3.4.1. Элемент include

Элемент include позволяет вставить в документ WSDL фрагмент другого документа WSDL, принадлежащего к тому же пространству имен, что и в документе, в котором выполняется включение. По своему действию этот элемент аналогичен элементу include для схемы XML.  Включаемый документ, в свою очередь также может иметь элементы include.

Элемент include имеет следующий синтаксис:

<include

 location="xs:anyURI"

>

    <documentation />*

</include>

Обязательный атрибут  location элемента include задает местоположение информации о пространстве имен, определенном в атрибуте  родительского элемента description.

Если элемент или элементы include есть в документе WSDL, они должны следовать сразу после элементов  documentation и import.

Пример использования элемента include:

<?xml version="1.0"?>

<description        targetNamespace="http://greath.example.com/2004/wsdl/resSvc"

xmlns:ghns="http://greath.example.com/2004/schemas/resSvc"

xmlns="http://www.w3.org/ns/wsdl"

xmlns:xs="http://www.w3.org/2001/XMLSchema">

<include location="credit-card-faults.wsdl"/>

  …

    <interface name="reservation">

       …

         <operation name="makeReservation"

         pattern="http://www.w3.org/ns/wsdl/in-out">

         <input messageLabel="In"

element="ghns:makeReservation"/>

              <output messageLabel="Out"

              element="ghns:makeReservationResponse"/>

              <outfault ref="invalidDataFault"

messageLabel="Out"/>

             <outfault ref="cancelledCreditCard"

messageLabel="Out" />

              <outfault ref="expiredCreditCard"

messageLabel="Out"/>

              <outfault ref=" invalidCreditCardNumber"

messageLabel="Out" />

        </operation>

 </interface>

</description>

В этом примере выполняется включение документа WSDL с URI credit-card-faults.wsdl, элементы которого определены в том же пространстве имен, что и приведенном документе WSDL. Ссылка на эти элементы задаются в атрибутах ref элементов outfault.

6.2.3.4.2. Элемент import

Элемент import позволяет вставить в документ WSDL фрагмент другого документа WSDL, принадлежащего к другому пространству имен, отличного от пространства имен в документе, в котором выполняется включение. По своему действию этот элемент аналогичен элементу import для схемы XML.  Включаемый документ, в свою очередь также может иметь элементы import.

Элемент import имеет следующий синтаксис:

<import

 namespace="xs:anyURI"

location="xs:anyURI"

>

    <documentation />*

</import>

Обязательный атрибут  namespace элемента include задает значение, указывающее, что  включаемый документ WSDL 2.0 может содержать ссылки на компоненты WSDL в этом пространстве имен (это значение не должно совпадать со значением атрибута targetNamespace в документе, в который выполняется включение, определенном в атрибуте  родительского элемента description.

Необязательный атрибут  location задает местоположение сериализации для пространства имен импортируемого документа.

Если элемент или элементы import есть в документе WSDL, они должны следовать сразу после элементов  documentation.

Пример использования элемента import:

<?xml version="1.0"?>

<description

   targetNamespace="http://greath.example.com/2004/wsdl/resSvc"

xmlns:ghns="http://greath.example.com/2004/schemas/resSvc"

xmlns:cc="http://finance.example.com/CreditCards/wsdl"

xmlns="http://www.w3.org/ns/wsdl"

xmlns:xs="http://www.w3.org/2001/XMLSchema">

<import  namespace="http://finance.example.com/CreditCards/wsdl"

    location="credit-card-faults.wsdl"/>

    …

    <interface name="reservation"

extends="cc:creditCardFaults">

               …

      <operation name="makeReservation"

      pattern="http://www.w3.org/ns/wsdl/in-out">

          <input messageLabel="In"

element="ghns:makeReservation"/>

              <output messageLabel="Out"

            element="ghns:makeReservationResponse"/>

              <outfault ref="invalidDataFault"

messageLabel="Out" />

<outfault ref="cc:cancelledCreditCard"

messageLabel="Out" />

             <outfault ref="cc:expiredCreditCard"

messageLabel="Out" />

              <outfault ref="cc:invalidCreditCardNumber"

messageLabel="Out" />

   </operation>

</interface>

</description>

6.2.3.5. Элемент documentation

Элемент documentation содержит информацию для чтения пользователем или для обработки компьютером. Его можно использовать как дочерний  элемент в любом элементе документа WSDL.

Элемент documentation имеет следующий синтаксис:

<documentation>

    [элементы расширения />]*

</documentation>

В элементах расширения задается текстовая информация или информация для обработки компьютером. Если в элементах расширения используются разные языки, для элемента расширения можно задать атрибут xml:lang, в котором задается язык, используемый в содержимом данного элемента.

Если элемент или элементы documentation есть в элементе документа WSDL, они должны быть первыми дочерними элементами этого элемента.

Пример использования элемента documentation:

<?xml version="1.0"?>

<description

   targetNamespace="http://greath.example.com/2004/wsdl/resSvc"

xmlns="http://www.w3.org/ns/wsdl"

xmlns:xml="http://www.w3.org/XML/1998/namespace">

<documentation xml:lang="en-us">

        Description: The definition of the reservation

Web service

    </documentation>

<documentation xml:lang="ru">

        Описание: Определение Web-службы бронирования

    </documentation>   

  …    

</description>  

6.2.3.6. Связывание WSDL 2.0 с протоколом SOAP

Связывание с протоколом SOAP позволяет Web-службам использовать этот протокол при обмене сообщениями. Расширение WSDL 2.0 для обеспечения такого связывания реализуется с помощью добавления свойств в компонент Binding и связанные с ним компоненты.

Компонент Binding может быть задан без ссылки на конкретный компонент Interface, поскольку атрибут interface в элементе не является обязательным. Однако в этом случае компоненты Binding Operation и Binding Fault не могут быть заданы в компоненте Binding.

Расширение для связывания с SOAP было разработано с целью сократить до минимума явные объявления для большинства случаев. Для этого был определен набор правил по умолчанию, который действует для всех компонент Interface Operation в компоненте Interface, для которого задается связывание SOAP.

Расширение SOAP определено в пространстве имен wsoap, для которого определен следующий URI:

"http://www.w3.org/ns/wsdl/soap".

Этот URI задается в качестве значения атрибута type элемента binding.

6.2.3.6.1. Дополнительные атрибуты в элементах документа WSDL

В элементах документа WSDL 2.0 при использовании расширения SOAP можно задать дополнительные атрибуты, определяющие следующие параметры расширения:

  •  используемая версия SOAP;
  •  используемый протокол передачи;
  •  ссылки на код и подкод ошибки SOAP;
  •  привязка к шаблонам обмена сообщениями SOAP;
  •  значение функциональной возможности Action в SOAP.

Используемая версия SOAP задается в элементе binding компонента Binding с помощью необязательного атрибута

wsoap:version="xs:string".

По умолчанию значение этого атрибута равно "1.2".

При использовании расширения SOAP для компонента Binding добавляется свойство {soap version}, в котором хранится значение атрибута wsoap:version.

Используемый протокол передачи задается в элементе binding компонента Binding с помощью обязательного атрибута

wsoap:protocol="xs:anyURI".

При использовании расширения SOAP для компонента Binding добавляется свойство {soap underlying protocol}, в котором хранится значение атрибута wsoap:protocol.

При использовании связывания SOAP для каждого компонента Interface Fault в компоненте Interface должны быть описаны ссылки на соответствующий код и подкод ошибки SOAP.

Эти ссылки задаются в элементе fault компонента Interface Fault с помощью необязательных атрибутов

wsoap:code="объединение списка xs:QName и xs:token"

и

wsoap:subcodes="объединение списка xs:QName и xs:token".

Допустимым значением в этих атрибутах является "#any", т.е. любой код или подкод. Это также значение атрибутов по умолчанию.

При использовании расширения SOAP для компонента Interface Fault добавляются свойства {soap fault code} и {soap fault subcodes}, в которых хранятся значение атрибута wsoap:code и wsoap:subcodes.

Для каждого компонента Interface Operation в компоненте Interface можно указать привязку к шаблонам обмена сообщениями SOAP, а также значение функциональной возможности Action в SOAP.

Для использования этой привязки в элементе binding компонента Binding можно задать необязательный атрибут

wsoap:mepDefault="xs:anyURI",

в котором задается URI для соответствующего шаблона обмена сообщениями SOAP.

При использовании расширения SOAP для компонента Binding добавляется свойство {soap mep default}, в котором хранится значение атрибута wsoap:mepDefault.

Привязку к шаблонам обмена сообщениями SOAP, а также значение функциональной возможности Action в SOAP можно задать в элементе operation компонента Binding Operation с помощью необязательных атрибутов

soap:mep="xs:anyURI"

и

wsoap:action="xs:anyURI".

При использовании расширения SOAP для компонента Binding Operation добавляются свойства {soap mep} и {soap action}, в которых хранятся значение атрибута wsoap:mep и wsoap:action.

6.2.3.6.2. Компонент SOAP Module

Система обмена сообщениями SOAP позволяет Web-службе позволяет использовать дополнительные функциональные возможности SOAP с помощью модулей SOAP. Расширение SOAP – компонент SOAP Module позволяет задать описания модулей  SOAP, используемых при связывании.

Компонент SOAP Module имеет следующее представление XML:

<wsoap:module

    ref="xs:anyURI"

required="xs:boolean" 

>

  <documentation />*

</wsoap:module>

Обязательный атрибут  ref элемента wsoap:module задает URI используемого модуля SOAP.

Необязательный атрибут  required определяет, является ли данный модуль SOAP обязательным  (значение  "true") или необязательным  (значение  "false"). По умолчанию значение этого атрибута равно "false".

Элемент wsoap:module может быть задан как дочерний элемент в элементе binding компонента Binding, в элементе operation компонента Binding Operation, в элементах input и output компонента Binding Message Reference, в элементе fault компонента Binding Fault и в элементах infault и outfault компонента Binding Fault Reference.

Для перечисленных компонент введено дополнительное свойство  {soap modules}, содержащее набор компонент SOAP Module (дочерних элементов wsoap:module) в элементах этих компонент.

Для компонента SOAP Module определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {ref} значение атрибута ref;
  •  свойство {required} значение атрибута required;
  •  свойство {parent} – компонент, соответствующий родительскому элементу  данного компонента.

6.2.3.6.3. Компонент SOAP Header Block

Протокол SOAP позволяет использовать блоки заголовков в заголовочной части сообщения. Связывание WDSL с SOAP позволяет объявить блоки  заголовков SOAP для сообщений или для ошибок с помощью компонента SOAP Header Block.

Компонент SOAP Header Block имеет следующее представление XML:

<wsoap:header

    element="xs:QName"

mustUnderstand="xs:boolean"

 required="xs:boolean" 

>

  <documentation />*

</wsoap:header>

Обязательный атрибут  element элемента wsoap:header задает имя блока заголовка SOAP.

Необязательный атрибут  mustUnderstand определяет, должен ли блок заголовка обрабатывать в транзитном или конечном узле SOAP  (значение  "true") или не должен  (значение  "false"). По умолчанию значение этого атрибута равно "false".

Необязательный атрибут  required определяет, является ли данный блок заголовка SOAP обязательным  (значение  "true") или необязательным  (значение  "false"). По умолчанию значение этого атрибута равно "false".

Элемент wsoap:header может быть задан как дочерний элемент в элементе fault компонента Binding Fault и в элементах input и output компонента Binding Message Reference.

Для перечисленных компонент введено дополнительное свойство  {soap headers}, содержащее набор компонент SOAP Header Block (дочерних элементов wsoap:module) в элементах этих компонент.

Для компонента SOAP Header Block определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {element declaration} значение атрибута element, соответствующее ссылке, заданной в свойстве {element declarations} компонента Description;
  •  свойство {mustUnderstand} значение атрибута mustUnderstand;
  •  свойство {required} значение атрибута required;
  •  свойство {parent} – компонент, соответствующий родительскому элементу  данного компонента.

6.2.3.7. Связывание WSDL 2.0 с протоколом HTTP

Связывание с протоколом HTTP позволяет Web-службам использовать протоколы HTTP и HTTPS при обмене сообщениями в сети. Расширение WSDL 2.0 для обеспечения такого связывания реализуется с помощью добавления свойств в модель компонент WSDL 2.0.

Расширение для связывания с HTTP было разработано с целью сократить до минимума явные объявления для большинства случаев. Для этого был определен набор правил по умолчанию, который действует для всех компонент Interface Operation в компоненте Interface, для которого задается связывание HTTP.

Расширение HTTP определено в пространстве имен whttp, для которого определен следующий URI:

"http://www.w3.org/ns/wsdl/http".

Этот URI задается в качестве значения атрибута type элемента binding.

При использовании расширения HTTP должно также использоваться расширение по безопасности операций – атрибут wsdlx:safe, описанный в разделе 6.2.3.2.4.

6.2.3.7.1. Дополнительные атрибуты в элементах документа WSDL

В элементах документа WSDL 2.0 при использовании расширения HTTP можно задать дополнительные атрибуты, определяющие следующие параметры расширения:

  •  метод HTTP, используемый по умолчанию;
  •  разделитель параметров запросов HTTP по умолчанию;
  •  местонахождение протокола HTTP;
  •  метод HTTP;
  •  допустимые правила сериализации для сообщения запроса HTTP и ответа HTTP;
  •  допустимые правила сериализации для ответа HTTP с сообщением об ошибке;
  •  разделитель параметров запросов HTTP;
  •  задание кода ошибки HTTP;
  •  кодирование содержимого передаваемых данных по умолчанию;
  •  кодирование содержимого передаваемых данных;
  •  возможность использования cookies;
  •  задание схемы и параметра аутентификации.

Метод HTTP, используемый по умолчанию задается в элементе binding компонента Binding с помощью необязательного атрибута

whttp:methodDefault="xs:string".

Значением этого атрибута может быть одно из значений "GET",  "POST", "PUT" или "DELETE".

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http method default}, в котором хранится значение атрибута whttp:methodDefault.

Разделитель параметров запросов HTTP по умолчанию задается в элементе binding компонента Binding с помощью необязательного атрибута

whttp:queryParameterSeparatorDefault="xs:string".

Значением этого атрибута является символ (по умолчанию символ "&").

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http query parameter separator default}, в котором хранится значение атрибута whttp:queryParameterSeparatorDefault.

Местонахождение описания  протокола HTTP задается в элементе operation компонента Binding Operation с помощью необязательного атрибута

whttp:location="xs:anyURI".

При использовании этого расширения HTTP для компонента Binding Operation добавляется свойство {http location}, в котором хранится значение атрибута whttp:location.

Метод HTTP задается в элементе operation компонента Binding Operation с помощью необязательного атрибута

whttp:method="xs:string".

Значением этого атрибута может быть одно из значений "GET",  "POST", "PUT" или "DELETE".

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http method}, в котором хранится значение атрибута whttp:method.

Допустимые правила сериализации для сообщения запроса HTTP и ответа HTTP задаются в элементе operation компонента Binding Operation с помощью необязательных атрибутов

whttp:inputSerialization="xs:string"

и

whttp:outputSerialization="xs:string".

Значениями этих атрибутов являются правила, определяемые в поле заголовка  HTTP Accept, например, 'qdtext = <any CHAR except<">>'.

При использовании этого расширения HTTP для компонента Binding добавляются свойства {http input serialization} и {http output serialization}, в которых хранятся значения атрибутов whttp:inputSerialization и whttp:outputSerialization.

Допустимые правила сериализации для ответа HTTP с сообщением об ошибке задаются в элементе operation компонента Binding Operation с помощью необязательного атрибута

whttp:faultSerialization="xs:string".

Значением этого атрибута являются правила, определяемые в поле заголовка  HTTP Accept.

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http fault serialization}, в котором хранится значение атрибута whttp:faultSerialization.

Разделитель параметров запросов HTTP задается в элементе в элементе operation компонента Binding Operation с помощью необязательного атрибута

whttp:queryParameterSeparator="xs:string".

Значением этого атрибута является символ (по умолчанию символ "&").

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http query parameter separator}, в котором хранится значение атрибута whttp:queryParameterSeparator.

Код ошибки HTTP задается в элементе fault компонента Binding Fault с помощью необязательного атрибута

whttp:code="объединение xs:int и xs:token".

Допустимым значением в этом атрибуте является "#any", т.е. любой код. Это также значение атрибута по умолчанию.

При использовании этого расширения HTTP для компонента Binding Fault добавляется свойство {http error status code}, в котором хранится значение атрибута whttp:code. задается либо

Кодирование содержимого передаваемых данных по умолчанию задается либо   в элементе binding компонента Binding, либо   в элементе operation компонента Binding Operation с помощью необязательного атрибута

whttp:contentEncodingDefault="xs:string".

При использовании этого расширения HTTP для компонентов Binding и Binding Operation добавляется свойство {http content encoding default}, в котором хранится значение атрибута whttp:contentEncodingDefault.

Кодирование содержимого передаваемых данных задается либо   в элементе fault компонента Binding Fault, либо   в элементах input и output компонента Binding Message Reference с помощью необязательного атрибута

whttp:contentEncoding="xs:string".

При использовании этого расширения HTTP для компонентов Binding Fault и Binding Message Reference добавляется свойство {http content encoding}, в котором хранится значение атрибута whttp:contentEncoding.

Возможность использования cookies задается либо   в элементе binding компонента Binding с помощью необязательного атрибута

whttp:cookies="xs:boolean".

Этот атрибут  определяет, будет ли компонент определять использование cookies  в операциях (значение  "true") или нет  (значение  "false"). По умолчанию значение этого атрибута равно "false".

При использовании этого расширения HTTP для компонента Binding добавляется свойство {http cookies}, в котором хранится значение атрибута whttp:cookies.

Задание схемы и параметра аутентификации выполняется в элементе endpoint компонента Endpoint.

Схема аутентификации задается с помощью необязательного атрибута

whttp:authenticationScheme="xs:token".

Значением этого атрибута является либо "basic" при использовании схемы Basic Access Authentication, либо "digest" при использовании схемы Digest Access Authentication.

Параметр realm схемы аутентификации задается с помощью необязательного атрибута

whttp:authenticationRealm="xs:string".

Если задан атрибут whttp:authenticationScheme, то обязательно должен быть задан и атрибут whttp:authenticationRealm.

При использовании этого расширения HTTP для компонента Endpoint добавляются свойства {http authentication scheme} и {http authentication realm}, в которых хранятся значения атрибутов whttp:authenticationScheme whttp:authenticationScheme и whttp:authenticationRealm.

6.2.3.7.2 Компонент HTTP Header

Компонент HTTP Header описывает поле заголовка HTTP. Этот компонент имеет следующее представление XML:

<whttp:header

    name="xs:string"

type="xs:QName"

 required="xs:boolean" 

>

  <documentation />*

</whttp:header>

Обязательный атрибут  name элемента whttp:header задает имя поля заголовка HTTP.

Обязательный атрибут  type определяет компонент Type Definition, в свойстве  {type definitions} компонента Description, задающее значение  поля заголовка HTTP (это поле должно быть описано как простой тип схемы XML).

Необязательный атрибут  required определяет, является ли данный заголовок HTTP обязательным  (значение  "true") или необязательным  (значение  "false"). По умолчанию значение этого атрибута равно "false".

Элемент whttp:header может быть задан как дочерний элемент в элементе fault компонента Binding Fault и в элементах input и output компонента Binding Message Reference.

Для перечисленных компонент введено дополнительное свойство  {http headers}, содержащее набор компонент HTTP Header (дочерних элементов whttp:header) в элементах этих компонент.

Для компонента HTTP Header определено следующее соответствие его свойств компонентам документа WSDL 2.0:

  •  свойство {name} значение атрибута name;
  •  свойство {type} значение атрибута type;
  •  свойство {required} значение атрибута required;
  •  свойство {parent} – компонент, соответствующий родительскому элементу  данного компонента.

6.2.4. Служба UDDI

6.2.4.1. Базовая архитектура UDDI

Универсальная система описания, обнаружения и интеграции – UDDI (Universal Description, Discovery and Integration) была разработана консорциумом OASIS (Organization for the Advancement of Structured Information Standards – организация развития структурированных информационных стандартов). Первая версия спецификации UUDI (UDDI Version 1.0) появилась в 2000 году, последняя версия – UDDI Version 3.0.2  принята в качестве стандарта в феврале 2005 г.

Система UDDI предназначена для публикации и поиска Web-служб. Поставщики (провайдеры) Web-служб публикуют свои службы в UDDI, а клиенты могут найти эти службы и установить с ними связь для их получения или изменения.

В свою очередь, реализация системы UDDI сама является набором Web-служб. Узел телекоммуникационной системы, на котором реализованы одна или несколько служб UDDI, называется узлом UDDI.

Один или более узлов UDDI могут объединяться для формирования реестра UDDI (UDDI Registry). Узлы реестра UDDI коллективно управляют некоторым набором данных UDDI, в том числе и дублированием данных между узлами. Несколько реестров UDDI могут образовать группу, называемую объединением UDDI для управления копированием данных между узлами группы.

Схема взаимодействия клиента Web-службы с ее поставщиком через реестр показана на рис 6.2.1.

Информационная модель UDDI состоит из экземпляров постоянных структур данных, называемых сущностями. Сущности записываются в формате XML и хранятся в узлах UDDI.

Информационная модель UDDI содержит следующие четыре основные  типа сущностей:

  •  businessEntity (бизнес-сущность) – описание организации провайдера Web-служб;
  •  businessService (бизнес-служба) – описание коллекции Web-служб, предлагаемых провайдером, описанным в businessEntity;
  •  bindingTemplate (шаблон связывания) – описание технической информации, необходимой для использования  Web-службы, заданной в businessService;
  •  tModel (модель службы) – описание технической модели представления Web-службы: типа службы, используемых протоколов и т.д. (на эту модель ссылается bindingTemplate).

Основные сущности UDDI и отношения между ними приведены на рис. 6.2.6.

Рис. 6.2.6. Основные сущности UDDI и отношения между ними

Кроме этих сущностей, в спецификации UDDI определены две дополнительные сущности:

  •  publisherAssertion (условия публикации) – описание отношения сущностей  businessEntity друг к другу;
  •  subscription (подписка) – список клиентов и сведений, которые надо послать этим клиентам при каких-либо изменениях в деятельности провайдера.

В реестре UDDI каждая реализация сущностей идентифицируется ключом  UDDI, реализуемом с помощью  уникального универсального идентификатора – UUID (Unique Universal Identifier). В объединениях UDDI реестры образуют общее пространство имен для ключей сущностей.

Сущности представляются в формате XML как структуры данных, определенные в пространстве имен:

http://www.uddi.org/schema/uddi_v3.xsd.  .

6.2.4.2. Структуры данных реестра UDDI

В реестре UDDI каждая реализация структуры данных идентифицируется ключом  UDDI, реализуемом с помощью  уникального универсального идентификатора – UUID (Unique Universal Identifier). В объединениях UDDI реестры образуют общее пространство имен для ключей сущностей.

Схемы XML, задающие описание элементов и атрибутов сущностей UDDI, определены в пространстве имен:

http://www.uddi.org/schema/uddi_v3.xsd.  

6.2.4.2.1. Структура  businessEntity

Структура businessEntity, реализуемая элементом  businessEntity используется в UDDI для представления бизнес-данных или провайдеров Web-служб и, с помощью вложенных элементов businessService, сведений о предоставляемых Web-службах.

Структура элемента businessEntity приведена на рис. 6.2.7.

Рис. 6.2.7. Структура элемента businessEntity 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Атрибут businessKey элемента  businessEntity однозначно идентифицирует бизнес-данные или провайдеров Web-служб.

Элемент discoveryURLs содержит список элементов discoveryURL, указывающих на URL документов поиска.

Для элемента discoveryURL можно задать атрибут useType, который определяет имя соглашения, которому следует документ, на который приведена ссылка. Одним из зарезервированных значений для этого атрибута является  "businessEntity". Для этого значения предполагается, что документ, на который приведена ссылка, является документом XML типа businessEntity. Другим зарезервированным значением является "homepage", т.е.  что документ, на который приведена ссылка, является домашней страницей организации – владельца ресурса.

Элемент discoveryURLs содержит также один или несколько элементов name с наименованием организации, а также может содержать один или несколько элементов  description с описаниями организации. Для этих элементов может быть задан атрибут  xml:lang, что позволяет определять содержимое элементов на разных языках.

Элемент  contacts, если он задан, содержит набор из одного или более элементов contact. Атрибут useType в элементе contact задает тип контакта, например, "technical contact" (технический контакт), или "sales contact" (контакт по продаже).

Элементы description, personName,  phone, email и address задают соответственно  описание контакта, имя и/или должность сотрудника для контакта, телефон, адрес электронной почты и почтовый адрес. Описание, имя и/или должность, а также почтовый адрес могут быть заданы (при использовании атрибута xml:lang) на разных языках.

Атрибут useType в элементе address задает тип адреса, например, "headquarters" (головной офис) или "sales office" (офис по продаже). Атрибут tModelKey является ссылкой на элемент tModel, который определяет пару атрибутов keyName (имя ключа) и keyValue (значение ключа) в элементах  addressLine, которые могут содержаться в элементе address. Элемент addressLine содержит фрагмент адреса в текстовой форме.

Элемент businessServices содержит список элементов businessService, которые содержат имена служб, обеспечиваемых элементом businessEntity.

В дополнение к атрибуту  businessKey в элементе businessEntity, элемент identifierBag содержит список других идентификаторов, каждый из которых определен в своей системе идентификаторов. Дочерние элементы keyedReference элемента identifierBag содержат три атрибута.  Атрибут tModelKey содержит ссылку на элемент tModel, представляющий систему идентификации, а атрибут keyValue содержит значение идентификатора в этой системе. Необязательный атрибут keyName содержит описательное имя  идентификатора.

Элемент categoryBag содержит список категорий, каждая из которых описывает свой аспект, например, категория продукта или географическая область. Дочерними элементами являются либо один или несколько элементов keyedReference и несколько необязательных элементов keyedReferenceGroups, либо один или несколько элементов keyedReferenceGroups.

Дочерние элементы keyedReference элемента categoryBag определяют ссылки на другие элементы и содержат три атрибута.  Атрибут tModelKey содержит ссылку на элемент tModel, представляющий систему категоризации, а атрибут keyValue содержит значение категории в этой системе. Необязательный атрибут keyName содержит описательное имя  категоризации.

Элемент keyedReferenceGroups с обязательным атрибутом tModelKey содержит один или  несколько логически связанных между собой элементов keyedReference. Атрибут tModelKey определяет структуру и значение элементов keyedReference в элементе keyedReferenceGroups.

Структура businessEntity может использовать цифровые подписи XML. Каждая цифровая подпись задается в своем элементе dsig:Signature.

Пример задания структуры businessEntity:

<businessEntity

      businessKey="uddi:tempuri.org:uddinodebusinessKey"

      <businessEntity

businessKey="uddi:tempuri.org:uddinodebusinessKey">

<discoveryURLs>

<discoveryURL useType="businessEntity">

      http://www.example.com?businessKey=sales:53

</discoveryURL>

</discoveryURLs>

<name xml:lang="en">Progress firm</name>

<name xml:lang="ru">Фирма "Прогресс"</name>

<description xml:lang="ru">

Продажа товаров

</description>

<contacts>

<contact useType="Sales Contact">

<description xml:lang="ru">

Отдел оптовых продаж

</description>

<personName>

товаровед Иванов И.И.

</personName>

<phone>484-41-18</phone>

<phone>484-41-24</phone>

<email>iiivanov@some.com</email>

<address useType="Sales office" xml:lang="ru"

tModelKey="uddi:uddi.org:ubr:postaladdress">

  <addressLine keyName="Street"

  keyValue="60">Окружная</addressLine>

   <addressLine keyName="House number"

keyValue="70">15</addressLine>

<addressLine keyName="City"

keyValue="60">Киев</addressLine>

   <addressLine keyName="Country"

keyValue="50">Украина</addressLine>

</address>

</contact>

</contacts>

<businessServices>

<!-- Элементы businessService>

</businessServices>

<identifierBag>

<keyedReference

tModelKey=

"uddi:ubr.uddi.org:identifier:dnb.com:D-U-N-S"

keyName="HP" keyValue="31-626-8655"/>

</identifierBag>

<categoryBag>

<keyedReferenceGroup tModelKey=

"uddi:uddi.org:ubr:categorizationGroup:wgs84" >

     <keyedReference

        tModelKey=

"uddi:uddi.org:ubr:categorization:prices"

        keyName="Goods Price"

        keyValue="114.50"/>

     <keyedReference

        tModelKey=

"uddi:uddi.org:ubr:categorization:goods"

         keyName="Goods Name"

         keyValue="Furniture"/>

</keyedReferenceGroup>

</categoryBag>

</businessEntity>

6.2.4.2.2. Структура  businessService

Структура  businessService, реализуемая элементом  businessService используется в UDDI для представления логической службы и содержит ее описание. Элемент businessService является дочерним элементом элемента businessEntity. В свою очередь, техническая информация о службе задается в дочернем элементе businessService – элементе bindingTemplate.

Структура элемента businessService приведена на рис. 6.2.8.

Рис. 6.2.8. Структура элемента businessService 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Атрибут serviceKey в элементе businessService однозначно идентифицирует службу, а атрибут businessKey однозначно идентифицирует владельца этой службы. В том случае,  если значение атрибута businessKey отличается от значения этого же атрибута в родительском элементе businessEntity, предполагается, что эта служба обеспечивается другой организацией (это называется проекцией службы).

Текстовая информация о наименовании службы в элементе name и описании службы в элементе description задается так же, как и в одноименных дочерних элементах элемента businessEntity.

Элемент bindingTemplates содержит дочерние элементы bindingTemplate, каждый из которых содержит техническое описание службы.

Элемент categoryBag содержит список категорий для службы. Правила задания этого элемента и его дочерних элементов такие же, как и для одноименного элемента в структуре businessEntity.

Структура businessService, так же как и структура businessEntity, может задавать в элементах dsig:Signature цифровые подписи XML.

Пример задания структуры businessService:

Для организации, заданной в предыдущем примере, дочерний элемент businessService в элементе businessServices может иметь следующий вид:

<businessService

serviceKey="uddi:tempuri.org:uddiservicebusinessKey"

businessKey="uddi:tempuri.org:nodebusinesskey">

   <name xml:lang="ru">Служба поиска</name>

   <description xml:lang="ru">

      Поиск товаров различных категорий

   </description>

   <bindingTemplates>

 <!-- Элементы bindingTemplate>

   </bindingTemplates>

</businessService>

6.2.4.2.3. Структура  bindingTemplate

Структура bindingTemplate, реализуемая элементом  bindingTemplate используется в UDDI для технического описания Web-служб. Этот элемент описывает также тип  Web-службы с использованием ссылок на элемент tModel, параметры, зависящие от приложения и установки.  Элементы bindingTemplate являются дочерними элементами элемента  businessService. Структура элемента bindingTemplate приведена на рис. 6.2.9.

 

Рис. 6.2.9. Структура элемента bindingTemplate 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Элемент bindingTemplate однозначно идентифицируется значением своего атрибута bindingKey, а служба, которую он описывает, задается в атрибуте serviceKey.

Текстовая информация об описании службы задается в элементе description. Использование атрибута xml:lang позволяет задать несколько описаний службы на разных языках.

В элементе accessPoint задается адрес описываемой Web-службы (обычно это URL, но может быть адрес электронной почты или телефон). В атрибуте useType задается тип адреса, например, "endPoint" (конечный адрес) или "bindingTemplate" (шаблон связи – указатель на другой элемент bindingTemplate).

Элемент tModelInstanceDetails (если он есть) содержит один или более дочерних элементов tModelInstanceInfo. Атрибут tModelKey в этом элементе содержит ссылку на элемент tModel, описывающий техническую модель представления Web-службы. Дочерний элемент description элемента описывает ту роль, которую играет заданный в атрибуте tModelKey элемент tModel в общем описании службы (в нем также можно использовать атрибут xml:lang).

Элемент используется для описания специфичных компонент tModel или для поддержки служб, требующих дополнительных данных. Структура дочерних элементов instanceDetails приведена на рис. 6.2.10.

 

Рис. 6.2.10. Структура элемента InstanceDetails 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Цель и/или использование деталей реализации для элемента InstanceDetails описывается в его дочернем элементе description.

Элемент overviewDoc используется для ссылок на удаленное описание реализации или инструкций, относящихся к использованию заданной tModel и ее параметров.

Элементы description в элементе overviewDoc (возможно с атрибутом xml:lang) содержат краткое описание функционирования заданной tModel.

Элемент overviewURL в элементе overviewDoc  содержат URL, по которому хранится более полное описание функционирования заданной tModel. Атрибут useType этого элемента задает тип содержимого элемента, например, "text" (текст).

Элемент instanceParms в элементе InstanceDetails  строку описания установок или параметров для данного tModelInstanceInfo, а элемент overviewURL в элементе InstanceDetails используется для той же цели, что и одноименный элемент в overviewDoc.

Элемент categoryBag и dsig:Signature используются для те же целей, что и в структуре businessEntity.

Пример задания структуры bindingTemplate:

Для организации, заданной в предыдущем примере, дочерний элемент bindingTemplate в элементе bindingTemplates может иметь следующий вид:

<bindingTemplate

bindingKey="uddi:tempuri.org:authbinding"

serviceKey="uddi:tempuri.org:uddiservicebusinessKey">

<description xml:lang="ru">

   Описание службы поиска

</description>

    <accessPoint useType="endPoint">

     https://sopping.org/uddi/authenticate.asm

    </accessPoint>

   <tModelInstanceDetails>

     <tModelInstanceInfo

tModelKey="uddi:uddi.org:v3_inquiry">

          <description xml:lang="ru">

Поддержка запроса

              </description>

        </tModelInstanceInfo>

        <tModelInstanceInfo

tModelKey="uddi:uddi.org:protocol authenticate3">

            <description xml:lang="ru">

                    Требование аутентификации пользователя

              </description>

        </tModelInstanceInfo>

  </tModelInstanceDetails>

</bindingTemplate>

6.2.4.2.4. Структура  tModel

Структура tModel, реализуемая элементом  tModel, используется в UDDI для описания технической модели представления Web-службы. Элемент  tModel используется в двух случаях: как источник для определения совместимости Web-служб и как ссылка на пространство имен, определяемое заданным ключом. На этот элемент могут ссылаться элементы businessEntity, businessService и bindingTemplate.

Структура tModel может использоваться для определения различных спецификаций, например, задающих используемые протоколы и форматы передачи. Кроме того, tModel используется в элементах the identifierBag, categoryBag, address и структуре publisherAssertion для определения различных наборов значений и категорий. Структуры tModel используются также в так называемых квалификаторах поиска.

Структура элемента tModel приведена на рис. 6.2.11.

Рис. 6.2.11. Структура элемента tModel 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Структура tModel идентифицируется с помощью уникального ключа, задаваемого атрибутом tModelKey. В получаемых данных tModel атрибут указывает удаляется ли логически (значение "true") или нет (значение "false").

Элементы name, description, identifierBag, contentBag и dsig:Signature аналогичны одноименным дочерним элементам элемента businessEntity.

Элемент overviewDoc аналогичен  одноименному элементу в элементе bindingTemplate.

Пример задания структуры tModel:

Для атрибута tModelKey="uddi:uddi.org:v3_inquiry" в предыдущем примере элемент tModel может иметь следующий вид:

<tModel tModelKey="uddi:uddi.org:v3_inquiry">

  <name>uddi-org:inquiry_v3</name>

  <description>UDDI Inquiry API V3.0</description>

  <overviewDoc>

     <overviewURL useType="wsdlInterface">

        http://uddi.org/wsdl/binding.wsdl#SoapBinding

     </overviewURL>

  </overviewDoc>

  <overviewDoc>

     <overviewURL useType="text">

          http://uddi.org/pubs/uddi_v3.htm#InqV3

     </overviewURL>

  </overviewDoc>

  <categoryBag>

     <keyedReference keyName="uddi-org:types:wsdl"

      keyValue="wsdlSpec"

      tModelKey="uddi:uddi.org:categorization:types"/>

     <keyedReference keyName="uddi-org:types:soap"

      keyValue="soapSpec"

      tModelKey="uddi:uddi.org:categorization:types"/>

     <keyedReference keyName="uddi-org:types:xml"

      keyValue="xmlSpec"

      tModelKey="uddi:uddi.org:categorization:types"/>

     <keyedReference keyValue="specification"

keyName="uddi-org:types:specification"

         tModelKey="uddi:uddi.org:categorization:types"/>

   </categoryBag>

</tModel>

6.2.4.2.5. Структура  publisherAssertion

Некоторые организации имеют сложную структуру и несколько направлений деятельности, которые сложно описать в одном элементе businessEntity. Очевидное решение в этом случае – создать несколько элементов businessEntity. Чтобы отношения между этими элементами видимыми для внешних пользователей, используется сущность publisherAssertion. Эта сущность реализуется элементом  publisherAssertion.

Структура элемента publisherAssertion приведена на рис. 6.2.12.

Рис. 6.2.12. Структура элемента publisherAssertion 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Два экземпляра businessEntity, между которыми есть отношения однозначно идентифицируются с помощью обязательных элементов fromKey и toKey.

Элемент keyedReference описывается аналогично одноименному дочернему элементу элемента categoryBag в businessEntity.

Элемент dsig:Signature аналогичен одноименному элементу в businessEntity.

Пример задания структуры publisherAssertion:  

<publisherAssertion>

<fromKey>uddi:tempuri.org:nodebusinesskey</fromKey>

<toKey>uddi:tempuri.org:nodeservicekey</toKey>

tModelKey=

"uddi:uddi.org:ubr:categorization:goods"

keyName="Goods Name"

keyValue="Furniture"/>

</publisherAssertion>

6.2.4.2.6. Структура  operationalInfo

Сведения о выполнении операции публикации той или иной структуры задаются в структуре operationalInfo, которая реализуется элементом  operationalInfo.

Структура элемента operationalInfo приведена на рис. 6.2.13.

Рис. 6.2.13. Структура элемента operationalInfo 

(0… , 0…1 и 1… – диапазон количества повторений элемента,

? – необязательный атрибут)

Структура UDDI, с которой связан элемент operationalInfo однозначно идентифицируется ключом, задаваемым в атрибуте entityKey.

Элементы created и modified задают соответственно время первого появления структуры в реестре и время ее последнего изменения и сохранения.

Некоторые корневые структуры данных UDDI являются контейнерами, содержащими другие корневые структуры данных UDDI. Так, например, элементы businessService содержатся в элементах businessEntity, а элементы bindingTemplate – в элементах businessService. Независимые изменения, сделанные в содержимом контейнеров (например, с помощью вызова рассматриваемых ниже служб), не влияют модифицированного элемента самого контейнера. Вместо этого, элемент modifiedIncludingChildren в контейнере содержит максимум своего собственного модифицированного элемента и элементы modifiedIncludingChildren каждой из структур, вложенных в контейнер. Если структура, содержащаяся в контейнере, перемещается или удаляется, меняется также содержимое элемента modifiedIncludingChildren.

Узел UDDI, хранящий структуру, с которой связан элемент operationalInfo, идентифицируется элементом nodeID.

Узел может содержать также указание на владельца на владельца данных в атрибуте entityKey элемента authorizedName.

6.2.4.3. Интерфейс прикладного программирования для UDDI

Интерфейс прикладного программирования – API (Application Program Interface) для UDDI включает большое количество функций, которые можно разбить на следующие основные группы:

  •  функции запроса;
  •  функции публикации;
  •  функции безопасности;
  •  функции подписки.

Вызов функции задается в сообщении, сформированном по протоколу SOAP, в виде элемента XML, имя которого совпадает с именем функции, а элементы, вложенные в этот элемент, задают параметры вызова.

Значение или значения, возвращаемые функцией, также задаются в  ответном сообщении в виде элемента XML, который также может содержать вложенные элементы с результатами вызова функции. В случае ошибок в задании параметров или ошибок при выполнении вызова пользователю возвращается сообщение об ошибке.

6.2.4.3.1. Функции запроса данных

В UDDI определены следующие функции запроса: find_binding, find_business, find_relatedBusinesses, find_service,  find_tModel,   get_bindingDetail, get_businessDetail, get_operationalInfo,  get_serviceDetail и get_tModelDetail.

Функция find_binding используется для поиска элементов bindingTemplate. В необязательных атрибутах maxRows, serviceKey и listHead элемента find_binding задается соответственно ограничение на количество выводимых в результате элементов, ключ, задающий конкретный экземпляр структуры businessService, в которой ищется элемент bindingTemplate и номер пункта, с которого надо начать возвращаемые данные.

В дочерних элементах элемента find_binding можно задать следующие    аргументы вызова (все аргументы являются необязательными):

  •  authInfoсодержит метку аутентификации;
  •  categoryBag – содержит список ссылок на категории в форме определенных (аналогичен одноименному элементу в элементе businessEntity);
  •  tModelBag – содержит набор элементов tModelKey, задающих ключи поиска элементов bindingTemplate;
  •  find_tModel – содержит альтернативные или дополнительные ключи поиска элементов bindingTemplate;
  •  findQualifiers – содержит набор элементов findQualifier, в содержимом каждого из которых задается критерий выборки данных или сортировки данных для полученного в результате вызова функции набора данных (например, поиск в сроках без учета регистра букв или сортировка полученных данных по возрастанию).

Возвращаемое значение функции find_binding помещается в элемент bindingDetail. Дочерними элементами этого элемента является набор элементов bindingTemplate – результатов запроса, а также элемент listDescription,  содержащий следующие элементы: includeCount – количество элементов в наборе, actualCount – общее количество найденных элементов bindingTemplate, отвечающих критериям запроса и listHead – индекс первого элемента среди возвращаемого набора результатов после выполнения сортировки.

Функция find_business используется для поиска элементов businessEntity. Необязательные атрибуты maxRows и listHead, а также дочерние элементы authInfo, categoryBag, tModelBag, find_tModel и findQualifiers в этой функции имеют тот же смысл, что и для элемента find_binding.

Кроме того, в дочерних элементах элемента find_business можно задать следующие    аргументы вызова (все аргументы являются необязательными):

  •  name – содержит имя или имена организаций (для разных значений атрибута xml:lang);
  •  identifierBag – содержит список ссылок на категории в форме определенных (аналогичен одноименному элементу в элементе businessEntity);
  •  discoveryURLs – содержит набор элементов discoveryURL, аналогичных одноименному элементу в   элементе businessEntity);
  •  find_relatedBusiness – включает в результат запроса только те элементы businessEntity, которые находятся в заданном отношении с заданным бизнесом.  

Возвращаемое значение функции find_business помещается в элемент businessList. Дочерними элементами этого элемента является элемент  listDescription,  аналогичный одноименному элементу возвращаемого значения функции find_binding, а также элемент businessInfos, содержащий имена, описания и другие данные о найденных элементах businessEntity, отвечающих критериям запроса.

Функция find_relatedBusinesses используется для поиска элементов businessEntity, которые находятся в заданном отношении к указанному элементу businessEntity. Необязательные атрибуты maxRows и listHead, а также дочерние элементы authInfo и findQualifiers в этой функции имеют тот же смысл, что и для элемента find_binding. Атрибут keyedReference, так же, как в  элементе businessEntity, определяет ссылку тип ссылки на организацию, связанную с данной организацией.

Кроме этого, в качестве аргумента при вызове функции должен быть указан один из трех аргументов: businessKey, fromKey или toKey. Аргумент businessKey аналогичен одноименному атрибуту элемента businessEntity, а аргументы fromKey и toKey   аналогичны одноименным дочерним элементам элемента publisherAssertion.

Возвращаемое значение функции find_relatedBusinesses помещается в элемент relatedBusinessList. Дочерними элементами этого элемента является элемент  listDescription,  аналогичный одноименному элементу возвращаемого значения функции find_binding, а также элемент businessKey и элемент relatedBusinessInfos, содержащий ключи, имена, описания и другие данные о найденных элементах businessEntity, отвечающих критериям запроса.

Функция find_service используется для поиска элементов businessService. Необязательные атрибуты maxRows, businessKey и listHead, а также дочерние элементы authInfo, categoryBag, tModelBag, find_tModel и findQualifiers в этой функции имеют тот же смысл, что и для элемента find_binding.

Кроме того, для функции find_service можно задать дочерний элемент name, содержит имя или имена организаций (для разных значений атрибута xml:lang).  

Возвращаемое значение функции find_service помещается в элемент serviceList. Дочерними элементами этого элемента является элемент  listDescription,  аналогичный одноименному элементу возвращаемого значения функции find_binding, а также элемент serviceInfos, содержащий имена служб, а также значения businessKey и serviceKey для элементов businessService, отвечающих критериям запроса.

Функция find_tModel используется для поиска элементов tModel. Необязательные атрибуты maxRows и listHead, а также дочерние элементы authInfo, categoryBag и findQualifiers в этой функции имеют тот же смысл, что и для элемента find_binding, а элементы name и identifierBag – тот же  смысл, что и для элемента find_business.

Возвращаемое значение функции find_tModel помещается в элемент tModelList. Дочерними элементами этого элемента является элемент  listDescription,  аналогичный одноименному элементу возвращаемого значения функции find_binding, а также элемент tModelInfos, содержащий имена и описания моделей, а также значение tModelKey для элементов tModel, отвечающих критериям запроса.

Функция get_bindingDetail используется для поиска элементов bindingTemplate, соответствующих заданным в наборе дочерних элементов bindingKey элемента get_bindingDetail ключам элементов bindingTemplate.

В элементе get_bindingDetail может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_bindingDetail возвращает то же значение, что и функция find_binding.

Функция get_businessDetail используется для поиска элементов businessEntity, соответствующих заданным в наборе дочерних элементов businessKey элемента get_businessDetail ключам элементов businessEntity.

В элементе get_businessDetail может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_businessDetail возвращает элемент businessDetail, содержащий набор элементов businessEntity, с заданными при вызове значениями businessKey.

Функция get_operationalInfo используется для поиска элементов operationalInfo, соответствующих заданным в наборе дочерних элементов entityKey элемента get_businessDetail ключам. Ключи в элементах entityKey соответствуют одному из ключей элементов businessEntity, businessService, bindingTemplate или tModelKeys.

В элементе get_operationalInfo может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_operationalInfo возвращает элемент operationalInfos, содержащий набор элементов operationalInfo с заданными при вызове значениями entityKey.

Функция get_serviceDetail используется для поиска элементов businessService, соответствующих заданным в наборе дочерних элементов serviceKey элемента get_serviceDetail ключам элементов businessService.

В элементе get_serviceDetail может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_serviceDetail возвращает элемент serviceDetail, содержащий набор элементов businessService, с заданными при вызове значениями serviceKey.

Функция get_tModelDetail используется для поиска элементов tModel, соответствующих заданным в наборе дочерних элементов tModelKey элемента get_tModelDetail ключам элементов tModel.

В элементе get_tModelDetail может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_tModelDetail возвращает элемент tModelDetail, содержащий набор элементов tModel, с заданными при вызове значениями tModelKey.

Примеры задания функций запроса данных:

1. Поиск организации с именем "Прогресс":

<find_business xmlns="urn:uddi-org:api_v3">

  <findQualifiers>

     <findQualifier>

        uddi:uddi.org:findqualifier:exactmatch

     </findQualifier>

  </findQualifiers>

  <name xml:lang>Прогресс</name>

</find_business>

2. Поиск элементов tModel, которые имеют категорию AAA в системе категорий example:Rating. Поиск ведется по критериям независимости от регистра и приблизительного соответствия:

<find_tModel xmlns="urn:uddi-org:api_v3">

 <findQualifiers>

    <findQualifier>

      uddi:uddi.org:findqualifier:caseinsensitivematch

    </findQualifier>

    <findQualifier>

      uddi:uddi.org:findqualifier:approximatematch

    </findQualifier>

 </findQualifiers>

 <categoryBag>

   <keyedReference

      tModelKey=

 "uddi:uddi.org:categorization:general_keywords"

      keyName="example:Rating" keyValue="AAA" />

 </categoryBag>

</find_tModel>

3. Поиск служб с заданными ключами:

<get_serviceDetail>

serviceKey="uddi:tempuri.org:uddiserviceKey1"

serviceKey="uddi:tempuri.org:uddiserviceKey2"

</get_serviceDetail>

6.2.4.3.2. Функции публикации

Функции публикации выполняют операции с реестром UDDI: регистрируют, добавляют, изменяют и удаляют информацию в реестре UDDI, а также выдают информацию о зарегистрированных Web-службах. Эти функции можно разбить на следующие категории:

  •  функции добавления и изменения (add_publisherAssertions, save_binding, save_business, save_service и save_tModel);
  •  функции просмотра (get_assertionStatusReport, get_publisherAssertions и get_registeredInfo);
  •  функции удаления (delete_binding, delete_business, delete_publisherAssertions, delete_service и delete_tModel);
  •  функция установки set_publisherAssertions.

Функция add_publisherAssertions добавляет элементы publisherAssertion, заданные в качестве дочерних элементов элемента  add_publisherAssertions.  

В элементе add_publisherAssertions может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция add_publisherAssertions при успешном завершении возвращает пустое сообщение.

Функция save_binding добавляет или изменяет элементы bindingTemplate, заданные в качестве дочерних элементов элемента  save_binding.  

В элементе save_binding может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция save_binding при успешном завершении возвращает элемент bindingDetails, содержащий в качестве дочерних элементов добавленные или измененные элементы bindingTemplate.

Функция save_business добавляет или изменяет элементы businessEntity, заданные в качестве дочерних элементов элемента  save_business.  

В элементе save_business может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция save_business при успешном завершении возвращает элемент businessDetails, содержащий в качестве дочерних элементов добавленные или измененные элементы businessEntity.

Функция save_service добавляет или изменяет элементы businessService, заданные в качестве дочерних элементов элемента  save_service.  

В элементе save_service может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция save_service при успешном завершении возвращает элемент serviceDetails, содержащий в качестве дочерних элементов добавленные или измененные элементы businessService.

Функция save_tModel добавляет или изменяет элементы tModel, заданные в качестве дочерних элементов элемента  save_tModel.  

В элементе save_tModel может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция save_tModel при успешном завершении возвращает элемент tModelDetails, содержащий в качестве дочерних элементов добавленные или измененные элементы tModel.

Функция get_assertionStatusReport обеспечивает административную поддержку для определения текущих и ожидающих выполнения отношений публикации.  Используя эту функцию, можно просмотреть статус отношения для организации, а также статусы отношений к данной организации, заданные другими организациями.

В качестве дочернего элемента get_assertionStatusReport может быть задан элемент completionStatus, ограничивающий набор результатов запроса. Этот элемент может иметь одно из следующих значений:

  •  status:complete – те отношения, которые отражены в элементах publisherAssertion для обеих организаций, между которыми имеется отношение;
  •  status:toKey_incomplete – те отношения, который данная организация задала для другой организации, но для этой другой организации не задана обратная связь;
  •  status:fromKey_incomplete – те отношения, который другая организация задала для данной организации, но для данной организации не задана обратная связь;
  •  status:both_incomplete – используется в UDDI только при подписке.

В элементе get_assertionStatusReport может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_assertionStatusReport при успешном завершении возвращает элемент assertionStatusReport, содержащий в качестве дочерних элементов набор элементов assertionStatusItem. Обязательный атрибут completionStatus элемента assertionStatusItem задает значение статуса завершенности для отношения. В этом элементе  содержатся также обязательные дочерние элементы fromKey, toKey, referenceKey и keyOwned. Первые три элемента содержат значения соответствующих ключей отношения, а элемент keyOwned в своих дочерних элементах fromKey и toKey содержит значения ключей для тех отношений, в которых данная организация является главной.

Функция get_publisherAssertions используется для получения полного набора отношений данной организации.  В элементе get_publisherAssertions может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_publisherAssertions при успешном завершении возвращает элемент publisherAssertions, содержащий в качестве дочерних элементов набор элементов publisherAssertion со сведениями об отношениях данной организации.

Функция get_registeredInfo используется для получения сокращенного списка элементов businessEntity и tModel данной организации. В обязательном атрибуте infoSelection задается вид элементов tModel, возвращаемых запросом. Этот элемент может иметь одно из следующих значений: "all" (все элементы), "visible" (только видимые элементы) или "hidden" (только спрятанные элементы). В элементе get_registeredInfo может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция get_registeredInfo при успешном завершении возвращает элемент registeredInfo, содержащий в качестве дочерних элементов элементы businessInfos и tModelInfos. Эти элементы содержат, в свою очередь, наборы элементов businessInfo и tModelInfo. Первый из этих элементов содержит информацию об элементах  businessEntity и businessService, второй – об элементе tModel.

Функция delete_binding удаляет элементы bindingTemplate с ключами, заданными в дочерних элементах  bindingKey элемента  delete_binding.  

В элементе delete_binding может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция delete_binding при успешном завершении возвращает пустой элемент.

Функция delete_business удаляет элементы businessEntity с ключами, заданными в дочерних элементах businessKey элемента  delete_business.  

В элементе delete_business может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция delete_business при успешном завершении возвращает пустой элемент.

Функция delete_publisherAssertions удаляет элементы publisherAssertion, заданные в качестве дочерних элементов элемента  delete_publisherAssertions.  

В элементе delete_publisherAssertions может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция delete_publisherAssertions при успешном завершении возвращает пустое сообщение.

Функция delete_service удаляет элементы businessService с ключами, заданными в дочерних элементах serviceKey элемента  delete_service.  

В элементе delete_service может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция delete_service при успешном завершении возвращает пустой элемент.

Функция delete_tModel удаляет элементы tModel с ключами, заданными в дочерних элементах tModelKey элемента  delete_tModel.  

В элементе delete_tModel может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция delete_tModel при успешном завершении возвращает пустой элемент.

Функция set_publisherAssertions используется для управления отслеживаемыми отношениями, связанными с организацией, публикующей службу. В качестве  дочерних элементов элемента  add_publisherAssertions задаются элементы publisherAssertion.  

В элементе set_publisherAssertions может быть задан также дочерний элемент authInfo, имеющий тот же смысл, что и для элемента find_binding.

Функция set_publisherAssertions при успешном завершении возвращает такой же элемент publisherAssertions, что и функция get_publisherAssertions.

Пример использования функции add_publisherAssertions:

<add_publisherAssertions  xmlns="urn:uddi-org:api_v3">

  <authInfo>businessA_AuthToken</authInfo>

    <publisherAssertion>

     <fromKey>"businessKeyA"</fromKey>

<toKey>"businessKeyB"</toKey>

   <keyedReference keyValue="parent-child"

   keyName="Subsidiary"

   tModelKey=

"uuid:c1acf26d-9672-4404-9d70-39b756e62ab4"/>

  </publisherAssertion>

</add_publisherAssertions>

6.2.4.3.3. Функции безопасности

Две функции безопасности: get_authToken и discard_authToken позволят получить или отменить метку аутентификации.

В функции get_authToken в обязательных атрибутах userID и cred задается имя пользователя и его пароль (или имя учетной записи).  

Функция get_authToken при успешном завершении возвращает элемент authToken, в единственном дочернем элементе которого – authInfo содержится значение метки аутентификации.

Функция discard_authToken в обязательном дочернем элементе  authInfo задается значение  метки аутентификации (при этом сеанс данного пользователя, если он есть, прерывается).  

Функция discard_authToken при успешном завершении возвращает пустой элемент.

6.2.4.3.4. Функции подписки

Основными функциями подписки являются функции   save_subscription,  get_subscriptions и delete_subscription.

Функция save_subscription добавляет новую подписку или обновляет существующую подписку.

Структура элемента save_subscription приведена на рис. 6.2.14. Элементы структуры с префиксом uddi_sub определены в пространстве имен

"http://uddi.org/schema/uddi_v3subscription".

Рис. 6.2.14. Структура элемента save_subscription 

(1… , 0…1 и 1 – диапазон количества повторений элемента,

? – необязательный атрибут)

Атрибут brief задает уровень детализации ответа на запрос о подписке и может иметь либо значение "false" (подробный ответ – это значение по умолчанию),  либо значение "true" (краткий ответ).

Элемент authInfo имеет тот же смысл, что и для элемента find_binding.

В дочерних элементах элемента subscription задаются следующие сведения о подписке:

  •  идентификатор подписки типа xs:anyURI (элемент subscriptionKey);
  •  критерии, ограничивающие область действия подписки набором записей реестра (элемент subscriptionFilter);
  •  промежуток времени типа xs:duration между уведомлениями    подписчику (элемент notificationInterval);
  •  идентификатор элемента bindingTemplate типа xs:anyURI, который будет использоваться при доставке уведомлений подписчику (элемент bindingKey);
  •  максимальное число сообщений типа xs:integer, посылаемых подписчику в одном уведомлении (элемент maxEntities);
  •  дата окончания подписки типа xs:dateTime (элемент expiresAfter).

В качестве дочернего элемента subscriptionFilter задается либо один из элементов запроса (find_binding, find_business, find_relatedBusinesses, find_service,  find_tModel,   get_bindingDetail, get_businessDetail, get_serviceDetail или get_tModelDetail), либо элемент публикации get_assertionStatusReport.

Функция save_subscription при успешном завершении возвращает структуру subscriptions, содержащую элементы subscription, в которых обязательно должен быть ключ подписки (элемент subscriptionKey). Этот ключ используется в дальнейшем при управлении подпиской.

Функция get_subscriptions возвращает полный список подписок данного пользователя. Единственный дочерний элемент  authInfo элемента get_subscriptions имеет тот же смысл, что и для элемента find_binding.

Функция get_subscriptions при успешном завершении возвращает структуру subscriptions, содержащую элементы subscription со сведениями о подписках.

Функция delete_subscription удаляет подписку с заданным в ее дочернем элементе subscriptionKey ключом. Другой дочерний элемент  authInfo элемента delete_subscription имеет тот же смысл, что и для элемента find_binding.

Функция delete_subscription при успешном завершении возвращает пустое сообщение.

6.2.5. Технология AJAX

6.2.5.1. Средства технологии AJAX

В традиционной Web-технологии запрос на обработку данных создается в Web-браузере с помощью управляющих элементов формы Web-страницы, а затем, после нажатия кнопки типа submit или вызова метода submit() в сценарии JavaScript, созданный запрос с помощью метода GET или POST передается на Web-сервер.

Web-сервер либо ищет и запускает программу обработки, либо ищет и обрабатывает Web-страницу с серверными вставками. В процессе выполнения программы или обработки Web-страницы могут выполняться обращения к данным (поиск и модификация). Результирующая Web-страница посылается  Web-браузере и либо замещает старую Web-страницу, либо открывается в новом окне.

Традиционная технология реализации запроса к Web-серверу приведена на рис. 6.2.15.

Рис. 6.2.15. Традиционная технология реализации запроса к Web-серверу

Технология AJAX (Asynchronous JavaScript and XML – асинхронный JavaScript и XML) позволяет получать ответы Web-сервера непосредственно в пославшую запрос Web-страницу, динамические ее изменяя.

Впервые название AJAX было предложено Джессом Джеймсом Гарретом (Jesse James Garrett) в феврале 2005 г. в статье «Новый подход к Web-приложениям».

На самом деле AJAX не является совершенно новой технологией, а объединением следующих существующих средств:

  •  языка XHTML и таблиц стилей CSS;
  •  объектной модели документа DOM;
  •  обмена и управление данными с использованием XML и XSLT;
  •  языка JavaScript.

Однако, при использовании AJAX, вместо того, чтобы передавать запросы непосредственно на Web-сервер, они передаются промежуточному слою, названному автором движком AJAX (AJAX engine). Этот движок отвечает за формирование интерфейса пользователя, а также взаимодействует с Web-сервером. Это взаимодействие происходит следующим образом:

  •  движок принимает запрос пользователя и передает его Web-серверу без приостановки вывода Web-страницы;
  •  после получения ответа от Web-сервера движок, используя средства DOM, динамически изменяет Web-страницу в соответствие с ответом.

Таким образом, работа пользователя с Web-страницей выполняется асинхронно по отношению к обращениям Web-страницы к Web-серверу, т.е. пользователю не нужно ждать передачи и загрузки новой Web-страницы.

Реализации запроса к Web-серверу с использованием AJAX приведена на рис. 6.2.16.

Рис. 6.2.16. Реализации запроса к Web-серверу с использованием AJAX

6.2.5.2. Объект XMLHTTPRequest

Движок AJAX реализован в Web-браузерах в виде объекта XMLHTTPRequest. Набор его свойств и объектов отличается в разных Web-браузерах. Этот объект определен также спецификацией  W3 (пока на стадии рабочего проекта).

Объект XMLHTTPRequest создается в Web-браузере Internet Explorer как объект ActiveX следующим образом:

var HTTPReq = new ActiveXObject("Msxml2.XMLHTTP");

В остальных Web-браузерах (Firefox, Opera, Netscape и Safari) создание объекта XMLHTTPRequest задается с помощью следующего предложения:

var HTTPReq = new XMLHttpRequest();

Объект XMLHTTPRequest имеет следующие свойства, общие для всех Web-браузеров:

  •  onreadystatechange – задает обработчик события, которое происходит при каждой смене состояния объекта;
  •  readyState – содержит текущее состояние объекта;
  •  responseText – содержит текст ответа на запрос;
  •  responseXML – содержит текст ответа на запрос в формате XML;
  •  status – содержит код в сообщении ответа HTTP (например, 200 или 404);
  •  statusText – содержит текст в сообщении ответа HTTP (например, "OK" или "Not Found").

Свойство readyState может иметь одно из следующих значений:

  •  0 – объект не инициализирован;
  •  1 – объект открыт;
  •  2 – отправка данных;
  •  3 – получение данных;
  •  4 – данные загружены.

Для объекта XMLHTTPRequest определены также следующие методы, общие для всех Web-браузеров: open(), send(), setRequestHeader(), getResponseHeader(), getAllResponseHeaders() и abort().

Метод open() определяет параметры запроса и имеет следующие формы:

open(метод, URL)

open(метод, URL, async)

open(метод, URL, async, имя)

open(метод, URL, async, имя, пароль)

В параметре метод задается метод, используемый в запросе, например, "GET" или "POST".

Параметр URL задает адрес программы или Web-страницы на Web-сервере.

Параметр async определяет асинхронность выполнения запроса: значение "true" означает, что выполнение сценария будет продолжено после вызова метода send(), не дожидаясь ответа от Web-сервера, а значение "false" означает, что выполнение сценария будет приостановлено до получения ответа от Web-сервера. По умолчанию, значение параметра async равно "true".

Параметры имя и пароль задаются, если для доступа на Web-сервер требуется аутентификация пользователей.

Метод send() посылает строку, заданную в параметре данные, на Web-сервер и имеет следующую форму:

send(данные).

Метод setRequestHeader() добавляет поле заголовка к посылаемому на Web-сервер запросу и имеет следующую форму:

setRequestHeader(имя, значение).

где параметр имя задает имя поля заголовка, а параметр значение – содержимое поля заголовка.

Метод getAllResponseHeaders() (без параметров) позволяет получить все поля заголовков ответа от Web-сервера.

Метод getResponseHeader()позволяет получить содержимое поля заголовка ответа от Web-сервера с именем, заданным в параметре имя и имеет следующую форму:

getResponseHeader(имя).

Метод abort() (без параметров) отменяет текущий запрос.

Файл: file:///web/1/5fan/public_html/www/files/13/5fan_ru_69050_331740602faab0e70e3e3ed629b9a5eb.doc   Создан: 2008-04-28T17:27:00Z Модифицирован: 2008-04-28T17:27:00Z     Автор:


1…

0…1

uddi:businessService

uddi:email

uddi:phone

uddi:personName

 xml:lang?

uddi:description

xml:lang?

uddi:description

xml:lang?

0…1

uddi:discoveryURLs

businessEntity

businessKey?

tModel

bindingTemplate

businessService

usinessEntity

Сообщения

Операция

Интерфейс

Абстрактное описание

Конечная точка

Служба

Связывание

Конкретное описание

Компоненты WSDL 2.0

Description

Interface

Binding

Service

Binding Fault

Binding Operation

Endpoint

Binding Message Reference

0…

Binding Fault Reference

Interface Fault Reference

Interface Message Reference

Interface Fault

Interface Operation

0…

0…

0…

0…

0…

0…

0…

0…

0…

0…

1…

description

targetNamespace

import

namespace

location?

operation

name

pattern

style?

input

messageLabel?

element?

output

messageLabel?

element?

types

outfault

ref

messageLabel?

infault

ref

messageLabel?

outfault

ref

messageLabel?

infault

ref

messageLabel?

output

messageLabel?

input

messageLabel?

service

name

interface?

fault

ref

operation

ref

include

location

interface

name

extends

styleDefault?

binding

name

interface?

type

endpoint

name

binding?

address?

fault

name

element?

0…

0…

0…1

0…

0…

0…

0…

0…

0…

0…

0…

0…

0…

0…

0…

0…

1

uddi:businessServices

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

1…

1…

uddi:name

xml:lang?

uddi:contacts

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:contact

useType?

dsig:Signature

0…1

1…

0…

0…1

uddi:categoryBag

1…

0…

1…

0…

0…

uddi:adressLine

keyName?

keyValue?

0…

0…

uddi:adress

useType?

tModelKeys?

xml:lang?

uddi:keyedReferenceGroup

 tModelKey

uddi:keyedReferenceGroup

 tModelKey

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:discoveryURL

  useType?

1…

1…

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:identifierBag

0…1

0…

0…

0…

businessService

serviceKey?

businessKey?

uddi:description

xml:lang?

uddi:description

xml:lang?

0…1

uddi:instanceDetails

uddi:name

xml:lang?

operationalInfo

 entityKey

1

modifiedIncludedChildren

0…

0…

modified

uddi:instanceParms

0…1

0…

uddi:description

xml:lang?

uddi:tModelInstanceInfo

tModelKey?

created

0…

0…

1

0…

bindingTemplate      

 serviceKey?

 businessKey?

0…1

0…1

uddi:bindingTemplates

uddi:bindingTemplate

0…1

1…

uddi:overviewURL

useType?

1…

0…1

uddi_sub:subscriptionKey

uddi:categoryBag

0…1

dsig:Signature

uddi:keyedReferenceGroup

 tModelKey

uddi:keyedReferenceGroup

 tModelKey

1…

1…

0…

0…

0…

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

1

uddi:description

xml:lang?

0…

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

0…

0…

0…

1…

1…

uddi:keyedReferenceGroup

 tModelKey

uddi:keyedReferenceGroup

 tModelKey

dsig:Signature

0…1

uddi:categoryBag

0…1

0…

uddi:tModelInstanceDetails

1…

0…1

1

0…

uddi:accessPoint

useType?

uddi:description

xml:lang?

0…

uddi:overviewDoc

0…

1

uddi:overviewURL

useType?

uddi:instanceParms

1

1…

uddi:overviewURL

useType?

uddi:description

xml:lang?

uddi:instanceDetails

1…

0…1

uddi:overviewURL

useType?

uddi:name

xml:lang?

1

nodeID

uddi:description

xml:lang?

0…1

tModel

tModelKey? deleted?

uddi:toKey

1…

1

0…1

publisherAssertion

uddi:overviewDoc

uddi:identifierBag

uddi:keyedReference

 tModelKey

 keyName

 keyValue

1…

0…1

uddi:categoryBag

0…1

dsig:Signature

uddi:keyedReferenceGroup

 tModelKey

uddi:keyedReferenceGroup

 tModelKey

1…

1…

0…

0…

0…

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

0…

dsig:Signature

1

0…1

0…1

uddi_sub:notificationInterval

uddi:authInfo

1

save_subscription

 brief?

uddi:fromKey

0…1

authorizedName

  entityKey

uddi:find_relatedBusiness

uddi:keyedReference

 tModelKey

 keyName?

 keyValue

0…1

0…1

1

1

1

1

uddi_sub:expiresAfter

uddi_sub:maxEntities

uddi:find_binding

uddi:find_service

uddi:get_assertionStatusReport

uddi:get_tModelDetail

uddi_sub:subscription

uddi:bindingKey

0…1

Программа или

Web-страница с фрагментами, обрабаты-ваемыми на сервере

Web-браузер

Поиск программы или Web-страницы

Web-сервер

Web-сервер

Web-сервер

Операции с данными

Web-браузер

1

Поиск программы или Web-страницы

1

1

1

uddi:get_bindingDetail

uddi:get_serviceDetail

Движок AJAX

uddi:get_businessDetail

uddi:find_tModel

0…1

uddi:find_business

uddi_sub:subscriptionFilter

uddi_sub:subscriptionFilter

Операции с данными

Web-сервер

Web-сервер

Web-сервер

Программа или

Web-страница с фрагментами, обрабаты-ваемыми на сервере


 

А также другие работы, которые могут Вас заинтересовать

75404. Общая характеристика категории падежа. Количество падежей и принципы их выделения. Типы информации, передаваемой падежами. Особые падежные конструкции в русском языке 47.5 KB
  Общая характеристика категории падежа. Количество падежей и принципы их выделения. Типы информации передаваемой падежами. Особые падежные конструкции в русском языке.
75405. Типы склонения существительных 15.83 KB
  Изменение слова по падежам называется склонением. Склонение – 1) класс слов, объединенных общностью словоизменения, 2) отвлеченный образец, по которому изменяются слова этого класса. В современном русском языке существует три таких класса (три склонения) – первое, второе и третье
75406. Степени сравнения прилагательных. Проблема их включения в состав форм прилагательных. Вопрос о существовании простой превосходной степени 14.71 KB
  Степени сравнения прилагательных. Вопрос о существовании простой превосходной степени. Категория степени сравнения у прилагательных – это словоизменительная морфологическая категория образуемая двумя рядами противопоставленных друг другу форм с морфологическими значениями положительной и сравнительной степени. В формах положительной степени заключено морфологическое значение представляющее названный прилагательным признак вне сравнения по степени его проявления.
75407. Прилагательное как часть речи. Разряды прилагательных по значению и их влияние на изменение слов. Противопоставление кратких и полных форм и его функции 389.5 KB
  Ряд отличительных черт: имеют два ряда форм полные атрибутивные и краткиепредикативные образуют формы сравнит. У них всегда производная основа они склоняются но не образуют степеней сравнения и краткой формы у них отсутствуют все признаки свойственные качественным прилагательным. Полные склоняемые формы называются атрибутивными краткие несклоняемые предикативными. Соотносительные полные и краткие формы имеют только качественные прилаг.
75409. Вводные слова и основания для их выделения в особую часть речи 29 KB
  Вводные слова и основания для их выделения в особую часть речи. Как особая часть речи нередко рассматриваются вводные или модальные слова. Это неизменяемые слова производные от слов иных частей речи при помощи которых выражается субъективное отношение говорящего к высказыванию или его части с точки зрения достоверности недостоверности т. Как правило эти слова выступают в синтаксической функции вводного слова: вопервых итак разумеется вернее дескать всего подобных слов около трёхсот.
75410. Проблема местоимений как особой части речи. Особенности местоименной семантики и функции местоименных слов. Основания для их разведения по разным частям речи 12.67 KB
  Термин местоимение в грамматической науке употребляется также применительно к более широкому кругу слов, чем местоимения-существительные: местоимениями называются слова – существительные, прилагательные, числительные
75411. Проблема слов «категории состояния». Их признаки и основания для выделения в особую часть речи. Понятие «предикатив» и его соотношение с «категорией состояния» 13.23 KB
  Проблема слов категории состояния. Понятие предикатив и его соотношение с категорией состояния. Категория состояния это класс слов которые обозначают независимый признак состояние душевное физическое или эмоциональное состояние человека окружающей среды и природы и не имеют форм словоизменения склонения и спряжения но могут с помощью глаголасвязки выражать значение времени. При характеристике категории состояния как части речи основная трудность связана с необходимостью отграничивать эти слова от омонимичных им форм...