Эта серия статей "Знакомство со спецификациями" посвящена описанию различных компонентов первоначального проекта спецификации WS-ResourceTransfer 1.0. Данная статья содержит как цитаты, так и свободное изложение текста оригинальной спецификации. Чтобы ознакомиться с полным текстом спецификации, обратитесь к разделу Ресурсы.
Первоначальный проект спецификации WS-ResourceTransfer 1.0 (WS-RT) описывает расширения WS-Transfer - общего протокола на базе SOAP, предназначенного для доступа к XML-представлениям ресурсов на основе Web-сервисов. Эта спецификация из семейства спецификаций Web-сервисов, т.н. группы "WS", в сочетании с другими членами этого семейства предоставляет набор инструментальных средств в среде Web-сервисов. В частности, эта спецификация использует другие спецификации WS для реализации таких функций, как доставка сообщений и передача метаданных WS.
WS-RT представляет собой важнейший базовый компонент унифицированного протокола доступа к ресурсам для Web-сервисов. Расширения WS-RT предназначены в первую очередь для доступа к ресурсам на базе фрагментов с целью удовлетворения общих потребностей спецификаций WS-ResourceFramework и WS-Management. Спецификация призвана решить следующие задачи:
- Реализация стандартизованного метода доступа к ресурсам с использованием знакомой специалистам по управлению системами семантики (
get,put,createиdelete); - Определение типов портов WSDL 1.1, совместимых с WS-I BP 1.1, для методов Web-сервисов, описанных в этой спецификации;
- Определение минимальных требований к совместимости без ограничения более полнофункциональных реализаций;
- Взаимодействие с другими спецификациями Web-сервисов для обеспечения защищенной и надежной транзакционной доставки сообщений;
- Обеспечение расширяемости для более сложных не рассматриваемых в настоящее время сценариев;
- Поддержка различных форматов кодировки, включая конверты SOAP 1.1 и SOAP 1.2.
В первом выпуске колонки Знакомство со спецификациями по спецификации WS-RT коротко рассказывалось об этих четырех операциях. Во второй статье мы подробно рассмотрели механизм расширения операции get спецификации WS-RT. Теперь давайте рассмотрим, каким образом WS-RT расширяет операцию create. Но сначала давайте вспомним о фрагментах, диалекте QName и двух диалектах XPath.
Фрагменты, диалекты, QName и XPath
WS-ResourceTransfer расширяет четыре упомянутые выше операции так, чтобы они могли работать с фрагментами представления ресурса. Что такое фрагмент? Фрагмент - это участок XML-кода, составляющий часть ресурса. WS-RT предоставляет возможность доступа к фрагментам - т.е. возможность обращаться к части XML-кода ресурса.
Диалекты выражений позволяют формировать выражения, которые можно вычислять на XML-документах, представляющих ресурсы. Разыменованное значение выражения представляет собой интересующую нас часть XML-кода. Выражение может создавать логическую ссылку на нужный фрагмент XML, либо порождать запрос, который можно применить к XML-документу для получения результата вычисления. (Запомните: эти диалекты выражений просто идентифицируют соответствующий фрагмент представления ресурса; что будет сделано с фрагментом - зависит от применяемого действия.)
Имеются, в частности, следующие диалекты:
- QName: простой диалект выражений, в котором с помощью QName формируется ссылка на непосредственных потомков корневого элемента представления ресурса. QName полезен для простых ресурсов, которые не имеют функций обработки XPath. Выражение может определять ноль и более целых элементов, каждый из которых включает имя элемента, различные атрибуты и все содержимое. Диалект QName не поддерживает вычисляемые значения.
XPath представляет собой подъязык языка таблиц стилей XSL, который используется для идентификации элементов XML, подлежащих обработке. Кроме того, он используется для вычисления числовых значений и манипуляций со строковыми значениями. Выражения XPath и XSLT взаимно переплетаются. Например, хотя XPath может ссылаться на переменную, для создания этой переменной и присваивания ей значения необходимо использовать XSLT. Синтаксис XPath несколько напоминает адресацию каталогов в UNIX, ®где косая черта используется для обозначения корневого каталога, а также в качестве разделителя между иерархиями.
- XPath Level 1: диалект, который позволяет с помощью XPath задавать ссылки на определенные фрагменты ресурса; он логически применяется к XML-представлению ресурса, а результирующий набор узлов представляет собой фрагмент ресурса, являющийся субъектом сообщения, содержащегося в выражении. Этот диалект полезен для ресурсов с ограниченными функциями обработки XPath, которым не требуется поддержка возвращаемых значений, вычисленных на основе представления ресурса. Он позволяет определять ссылки на любые элементы, атрибуты или значения в представлении ресурса; выражения в этом диалекте не должны относиться более чем к одному узлу. Диалект не поддерживает вычисляемые значения, а узлы текста и атрибутов сериализуются таким же способом, как и в диалекте XPath 1.0;
- XPath 1.0: этот диалект отличается от диалекта XPath Level 1 тем, что он поддерживает расширенный набор библиотек функций XPath. Этот диалект хорошо подходит для любого ресурса с полным набором функций обработки XPath и других ресурсов, требующих поддержки возвращаемых значений, вычисляемых на основе представления ресурса. Он позволяет определять ссылки на любые элементы, атрибуты и значения в представлении ресурса; кроме того, его можно использовать для вычисления значений на основе представления ресурса. Реализации с полной поддержкой диалекта XPath 1.0 должны также поддерживать диалект XPath Level 1.
Теперь перейдем к операции create.
В WS-Transfer операция create используется для создания ресурса из первоначального представления. Фабрика ресурсов, которая получает запрос create, выделяет новый ресурс, который инициализируется из указанного представления. Новому ресурсу присваивается определенная сервисом фабрики ссылка на конечную точку, которая возвращается в ответном сообщении.
Иногда нужная для создания ресурса информация может заметно отличаться от первичного представления (значение, реализуемое последующей операцией get), и использовать первичное представление может быть не целесообразно. Спецификация WS-ResourceTransfer расширяет операцию create, позволяя создавать ресурс из фрагментов XML-представления (числом ноль или более). WS-ResourceTransfer также расширяет операцию так, что в рамках операции создания ресурса можно создавать метаданные любого ресурса.
В листинге 1 показана расширенная схема операции create:
Листинг 1. Расширенная схема операции create
[Headers]
<wsrt:ResourceTransfer s:mustUnderstand="true"/>
[Action]
http://schemas.xmlsoap.org/ws/2004/09/transfer/Create
[Body]
<wsrt:Create Dialect="xs:anyURI"?>
<wsmex:Metadata>resource metadata</wsmex:Metadata> ?
<wsrt:Fragment>
<wsrt:Expression>xs:any</wsrt:Expression> ?
<wsrt:Value ...>xs:any</wsrt:Value>
</wsrt:Fragment> *
</wsrt:Create>
|
В схеме, показанной в листинге 1, в качестве ограничений применяются следующие элементы:
- Если имеется элемент
[Header]/wsrt:ResourceTransfer, то ресурс должен обработать тело[Body]в полном объеме и действовать в соответствии с его содержимым. Если этот элемент отсутствует, то ресурс должен обрабатывать запрос, как описано в WS Transfercreate; -
[Body]/wsrt:Create- это элемент, определяющий те фрагменты в представлении ресурса, которые следует инициализировать в процессе операции создания ресурса; дополнительно он может определять метаданные ресурса, которые следует создать в процессе его создания. Этот элемент должен присутствовать, если присутствует заголовокwsrt:ResourceTransfer; - URI
[Body]/wsrt:Create/@Dialectуказывает, какой диалект выражений будет использован для идентификации фрагмента или фрагментов представления ресурса, которые следует инициализировать в процессе создания этого ресурса; атрибут должен присутствовать, если сообщение содержит элементwsrt:Expression; - Если имеется необязательный элемент
[Body]/wsrt:Create/wsmex:Metadata, он должен содержать по меньшей мере один элементwsmex:MetadataSection. Это метаданные ресурса, которые должны быть созданы и инициализированы в процессе создания ресурса.
Примечание: Фабрика ресурсов должна выдать ошибку InvalidMetadataFault, если сообщение запроса create содержит неподдерживаемый элемент wsmex:Dialect или если метаданные ресурса содержат значения, которые не поддерживаются ресурсом. Элемент [Body]/wsrt:Create/wsmex:Metadata может включать элемент wsmex:MetadataSection с wsmex:Dialect с http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer, который позволяет запрашивающей стороне указать нужные метаданные в соответствии с данной спецификацией (например, метаданные жизненного цикла).
- Элемент
[Body]/wsrt:Create/Fragmentуказывает отдельный фрагмент ресурса, который следует инициализировать в процессе создания ресурса. Если имеется несколько элементов фрагментов, то ресурс должен выглядеть таким образом, как если бы каждый фрагмент был обработан в последовательности, определенной в сообщенииcreate. Если запрос содержит больше элементов фрагментов, чем поддерживает ресурс, то ресурс должен возвратить ошибку, а именно:wsrt:MultipartLimitExceededFault; - Если имеется необязательный элемент
[Body]/wsrt:Create/Fragment/Expression, то он содержит выражение, идентифицирующее фрагмент ресурса, который следует инициализировать в процессе создания ресурса. Это выражение идентифицирует фрагмент в представлении ресурса так, как он отображается после успешной обработки текущего фрагмента. Если данный элемент отсутствует, то выражение аналогично выражению, идентифицирующему представление всего ресурса; - Элемент
[Body]/wsrt:Create/Fragment/Valueсодержит данные, которые следует записать в представление ресурса; если фабрика ресурса не может записать запрашиваемый фрагмент, то она должна выдать ошибкуCreateFault.
Если фабрика ресурсов принимает запрос create, то она должна выдать ответ, аналогичный показанному в листинге 2:
Листинг 2. Ответ фабрики ресурсов в случае принятия запроса create
Headers]
<wsrt:ResourceTransfer/>
[Action]
http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse
[Body]
<wxf:ResourceCreated>
wsa:EndpointReferenceType
</wxf:ResourceCreated>
|
В схеме, показанной в листинге 2, используются дополнительные ограничения:
- Заголовок
[Headers]/wsrt:ResourceTransferпоказывает, что ответ включает содержимое тела, определенное в спецификации WS1001 ResourceTransfer; - Элемент
[Body]/wxf:ResourceCreatedсодержит ссылку на конечную точку (EPR) для создаваемого ресурса. Все дальнейшие обращения к этому ресурсу должны осуществляться с помощью этой ссылки на конечную точку.
Если тело запроса содержит элемент wsrt:Create, то новое представление ресурса в ответе должно быть опущено; в противном случае ответ должен соответствовать требованиям WS-Transfer.
В листинге 3 показан пример сообщения create, которое использует диалект QName (показано только тело сообщения):
Листинг 3. Пример сообщения create, использующего диалект QName
<s:Body>
<wsrt:Create Dialect="http://schemas.xmlsoap.org/ws/2006/08/
resourceTransfer/Dialect/QName"
xmlns:d="http://example.org/sample">
<wsmex:Metadata>
<wsmex:MetadataSection Dialect="http://schemas.xmlsoap.org/
ws/2006/08/resourceTransfer">
<wsrt:Metadata>
<wsrt:Lifetime>
<wsrt:TerminateAt>
<wsrt:TerminationTime>
2006-04-11T12:00:00Z
</wsrt:TerminationTime>
<wsrt:CurrentTime>
2006-04-10T10:00:54Z
</wsrt:CurrentTime>
</wsrt:TerminateAt>
</wsrt:Lifetime>
</wsrt:Metadata>
</wsmex:MetadataSection>
</wsmex:Metadata>
<wsrt:Fragment>
<wsrt:Expression>
d:Volume
</wsrt:Expression>
<wsrt:Value>
<d:Volume>
<d:Drive>C:</d:Drive>
<d:Label>MyDrive-C</d:Label>
<d:TotalCapacity>10000000000</d:TotalCapacity>
</d:Volume>
<d:Volume>
<d:Drive>D:</d:Drive>
<d:Label>MyDrive-D</d:Label>
<d:TotalCapacity>30000000000</d:TotalCapacity>
</d:Volume>
</wsrt:Value>
</wsrt:Fragment>
</wsrt:Create>
</s:Body>
|
Строка:
<wsrt:TerminateAt>
показывает, что после создания ресурса планируется его ликвидация в определенный момент времени. По истечении этого времени сообщения, переданные EPR и возвращаемые CreateResponse, не будут доставлены. Следующая строка:
d:Volume
показывает, что ресурс создан с определенным значением или набором значений свойства <d:Volume>. Следующая часть кода:
<wsrt:Value>
<d:Volume>
<d:Drive>C:</d:Drive>
<d:Label>MyDrive-C</d:Label>
<d:TotalCapacity>10000000000</d:TotalCapacity>
</d:Volume>
<d:Volume>
<d:Drive>D:</d:Drive>
<d:Label>MyDrive-D</d:Label>
<d:TotalCapacity>30000000000</d:TotalCapacity>
</d:Volume>
</wsrt:Value>
|
определяет набор значений свойства <d:Volume>. Ответ на данное сообщение create приводится в листинге 4:
Листинг 4. Пример CreateResponse
<s:Body>
<wxf:ResourceCreated>
<wsa:Address>http://www.example.org/diskport</wsa:Address>
<wsa:ReferenceParameters>
<xyz:ManagedResource>44355</xyz:ManagedResource>
</wsa:ReferenceParameters>
</wxf:ResourceCreated>
</s:Body>
|
Строки со второй по седьмую в листинге 4 определяют EPR на дисковый ресурс, которая возвращается в ответном сообщении .
Cледите за новостями! Эта статья не последняя!
В следующих выпусках колонки Знакомство со спецификациями, посвященных WS-RT 1.0, будет подробно рассмотрено расширение спецификацией WS-ResourceTransfer 1.0 операции put. В них также будут подробно рассмотрены следующие вопросы:
- Операция
delete; - Правила обработки ошибок WS-Addressing;
- Терминология и нотация;
- Безопасность (взаимодействие этой спецификации WS с WS-Security).
Научиться
-
Оригинал статьи: Операции WS-RT 1.0, часть 2;
-
Информация о технологиях, рассматриваемых в данной статье: рабочее определение диалектов QName и XML Path Language (XPath) 1.0;
-
Страница стандартов автономных вычислений: Дополнительная информация по семейству спецификаций WS;
-
Раздел автономных вычислений: В этом разделе сайта developerWorks вы всегда найдете информацию о новейших средствах и технологиях автономных вычислений;
-
Советуем также посетить другие разделы сайта developerWorks, которые были упомянуты в статье: раздел SOA и Web-сервисов содержит ресурсы, которые необходимы для понимания SOA и начала работы с этой технологией; раздел XML посвящен языку XML - его применению, работе и идеологии; в разделе Open source находятся ресурсы по разработке и внедрению программного обеспечения с открытым исходным кодом;
-
Технические мероприятия и Web-трансляции developerWorks: Получайте информацию о новейших технологиях.
Получить продукты и технологии
-
Загрузите для себя PDF или ZIP-версию проекта спецификации WS-RT 1.0;
-
Ознакомительное программное обеспечение: Используйте в своем следующем проекте по разработке ознакомительные версии ПО, которые можно загрузить непосредственно с сайта developerWorks.
Обсудить
- Примите участие в обсуждении материала на форуме.
- Примите участие в форуме по SOA и Web-сервисам;
-
Блоги developerWorks: Присоединяйтесь к сообществу developerWorks;