 | Уровень сложности: простой Кэйн Скарлетт, редактор developerWorks, IBM
04.06.2007 Познакомьтесь с первоначальным проектом спецификации WS-ResourceTransfer 1.0 - предлагаемого открытого стандарта, который расширяет возможности некоторых операций, позволяя обращаться к фрагментам XML-кода отдельных ресурсов, не затрагивая веcь ресурс в целом. В статье рассказывается о том, как спецификация WS-ResourceTransfer 1.0 дополняет операцию Create.
Эта серия статей "Знакомство со спецификациями" посвящена описанию различных компонентов первоначального проекта спецификации 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-Transfer
WS-Transfer описывает механизм получения XML-представлений сущностей (entity) через инфраструктуру Web-сервисов. Она определяет два типа сущностей -- ресурсы и фабрики ресурсов. Ресурсы - это Web-сервисы, адресуемые посредством ссылки на конечную точку (определенную в WS-Addressing) и предоставляющие XML-представления. Фабрики ресурсов - это Web-сервисы, которые создают из XML-представления новый ресурс. Конкретно, WS-T определяет две операции для отправки и получения представления данного ресурса и две операции для создания и удаления ресурса и соответствующего ему представления.
WS-Transfer определяет операции для действий get, put, create и delete по отношению к представлениям ресурсов. Спецификация WS-ResourceTransfer расширяет эти операции, добавляя возможность работы с фрагментами представлений ресурсов. |
|
В первом выпуске колонки Знакомство со спецификациями по спецификации 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, ®где косая черта используется для обозначения корневого каталога, а также в качестве разделителя между иерархиями.
 |
Разработчики спецификации
Первоначальный проект WS-ResourceTransfer (WS-RT), описывающий расширение спецификации WS-Transfer, разработан совместно HP, IBM®, Intel и Microsoft®. WS-Transfer определяет стандартные сообщения для управления ресурсами с помощью знакомых парадигм get, put, create и delete. Расширения касаются, главным образом, доступа к фрагментам ресурсов для удовлетворения общих потребностей WS-ResourceFramework и WS-Management.
|
|
- XPath Level 1: диалект, который позволяет с помощью XPath задавать ссылки на определенные фрагменты ресурса; он логически применяется к XML-представлению ресурса, а результирующий набор узлов представляет собой фрагмент ресурса, являющийся субъектом сообщения, содержащегося в выражении. Этот диалект полезен для ресурсов с ограниченными функциями обработки XPath, которым не требуется поддержка возвращаемых значений, вычисленных на основе представления ресурса. Он позволяет определять ссылки на любые элементы, атрибуты или значения в представлении ресурса; выражения в этом диалекте не должны относиться более чем к одному узлу. Диалект не поддерживает вычисляемые значения, а узлы текста и атрибутов сериализуются таким же способом, как и в диалекте XPath 1.0;
- XPath 1.0: этот диалект отличается от диалекта XPath Level 1 тем, что он поддерживает расширенный набор библиотек функций XPath. Этот диалект хорошо подходит для любого ресурса с полным набором функций обработки XPath и других ресурсов, требующих поддержки возвращаемых значений, вычисляемых на основе представления ресурса. Он позволяет определять ссылки на любые элементы, атрибуты и значения в представлении ресурса; кроме того, его можно использовать для вычисления значений на основе представления ресурса. Реализации с полной поддержкой диалекта XPath 1.0 должны также поддерживать диалект XPath Level 1.
Теперь перейдем к операции create.
Расширение операции 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 Transfer create;
-
[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).
Ресурсы Научиться
Получить продукты и технологии
-
Загрузите для себя PDF или ZIP-версию проекта спецификации WS-RT 1.0;
-
Ознакомительное программное обеспечение: Используйте в своем следующем проекте по разработке ознакомительные версии ПО, которые можно загрузить непосредственно с сайта developerWorks.
Обсудить
Об авторе  | |  | Кэйн Скарлетт (Kane Scarlett) является редактором зоны Autonomic computing для developerWorks. Он публиковал свои работы в таких изданиях, как Unix Review, Advanced Systems, -World (Java-, Sun-, NC-, Linux-), а также в таких немного своеобразных журналах, как National Geographic Magazine
|
Выскажите мнение об этой странице
|  |