レベル: 初級 Kane Scarlett (kane@us.ibm.com), developerWorks Editor, IBM
2006年 9月 19日 WS-ResourceTransfer 1.0 の最初のドラフト仕様 (WS-RT) は、リソース全体に影響を与えることなく単一リソース内の
XML コード・フラグメントをアドレス指定できるようにすることで特定の操作を拡張する、オープン・スタンダードとして提案されています。ここでは、仕様の概要、仕様が継承している機能について説明し、フラグメントの定義については触れずに、WS-RT
で採用された 3 つの式の方言を見ていきます。
今回の「仕様を知る」シリーズでは、WS-ResourceTransfer 1.0 の最初のドラフト仕様の様々なコンポーネントに焦点を当てます。この記事には、オリジナルの仕様からの抜粋や、言い換えが含まれています。完全な仕様を見るためには、「参考文献」を参照してください。
WS-ResourceTransfer 1.0 の最初のドラフト仕様は、WS-Transfer の拡張機能を定義したものです。WS-Transfer
とは、Web サービスベースのリソースの XML 表現にアクセスするための一般的な
SOAP ベースのプロトコルです。Web サービス仕様のファミリーである「WS-」グループは、Web
サービス環境のツール群を提供するため、他のファミリー・メンバーと相互動作するように設計されています。この仕様自体は、メッセージ配信などの機能や
WS メタデータの表記のために他の WS 仕様を利用しています。
WS-RT は Web サービスに対する統一されたリソース・アクセス・プロトコルの基本となるコア・コンポーネントです。WS-RT
の拡張機能は、WS-ResourceFramework 仕様や WS-Management 仕様に共通する要件を満たすため、主にリソースへのフラグメント・ベースのアクセスを処理します。この仕様の目的は、次の要件を満たすことです。
- システム管理担当者が使い慣れているセマンティクス (get、put、create、および
delete) を使ってリソースにアクセスするための、標準化された手法を定義する。
- この仕様に記載される Web サービスのメソッドに対して WS-I BP 1.1 準拠の
WSDL 1.1 portTypes を定義する。
- 機能豊富な実装に制約を与えることなく仕様に準拠するための最小要件を定義する。
- セキュアで信頼性の高いトランザクション・メッセージ配信については、他の
Web サービス仕様を使って構成する。
- より高度なシナリオや現在は想定されていないシナリオのための拡張性を提供する。
- SOAP 1.1 エンベロープや SOAP 1.2 エンベロープなどの様々なエンコード形式をサポートする。
この仕様ではリソースの検出は行いません。
この仕様の各部を調べる前に、この仕様の元になっている WS-Transfer について見ていきましょう。
 |
仕様のコントリビューター
HP、IBM®、Intel、および Microsoft® が協力して、WS-Transfer 仕様の拡張機能を記述する最初のドラフトである
WS-ResourceTransfer (WS-RT) を公開しました。WS-Transfer は、get、put、create、および
delete という使い慣れたパラダイムを使ってリソースを制御するための標準メッセージを定義しています。拡張機能では、WS-ResourceFramework
や WS-Management に共通の要件を満たすため、主にリソースへのフラグメント・ベースのアクセスを処理します。
|
|
WS-Transfer から始めましょう
WS-Transfer は、Web サービス・インフラストラクチャーを使用して、XML ベースのエンティティー表現を取得するメカニズムを定義しています。WS-Transfer
は、リソースとリソース・ファクトリーという 2 種類のエンティティーを定義します。リソースとは、XML
表現を提供するエンドポイント参照 (WS-Addressing で定義) によってアドレス指定可能な
Web サービスです。リソース・ファクトリーとは、ある XML 表現から新しいリソースを作成できる
Web サービスです。WS-T で具体的に定義しているものは、指定したリソースの表現を送受信するための
2 つの操作、およびリソースとそのリソースに対応した表現を作成または削除するための
2 つの操作です。
WS-Transfer では、リソースの表現に対する get、put、create、および delete
の操作を定義しています。WS-ResourceTransfer は、リソース表現のフラグメントに対する操作機能を追加するために、これらの操作を拡張しています。
WS-RT で追加される機能
今説明したとおり、WS-ResourceTransfer は、get、put、create、および delete
操作を拡張し、リソース表現のフラグメントを操作できるようにします。では、フラグメントとは何でしょうか。
フラグメント
WS-Addressing で定義されている wsa:EndpointReference (EPR) は、全体がリソースへの参照です。通常、操作の対象がリソース全体であるという以外、WS-A
では操作の制約はありません。フラグメントはまさにその例外です。つまり、リソースの一部である
XML コードの断片なのです。前述の操作に対して WS-RT がもたらす機能は、リソースの
XML 表現の各部にアクセスできるようにする機能で、これがフラグメントのアクセスです。
WS-RT は、式の構文を指定するための拡張可能なメカニズムを定義しており、フラグメントは、その式の構文によってアドレス指定されます。WS-RT
はまた、標準式の構文や方言などをいくつか定義します。
式の方言
式の方言は、リソースを表す XML 文書について評価可能な式を構成しています。式の逆参照値は対象となる
XML の部分です。式を使用すると、対象となる XML のフラグメントへの論理ポインターを作成できます。また、XML
文書に適用して評価結果を生成できるクエリーを記述することもできます (これらの式の方言は、リソース表現の適切なフラグメントを単純に
ID 指定することを忘れないでください。フラグメントに対する操作を定義するのはアクションです)。
各方言では、指定の式をリソース表現に対して評価した結果をどのようにして
XML にシリアライズするかを明記する必要があります。また、リソースにアクセスする操作に対して方言固有の動作を指定する必要があります。方言には次のものがあります。
- QName.
- XPath Level 1.
- XPath 1.0.
QName の方言は、QName を使用して、リソース表現のルート要素のすぐ下にある子要素を参照する式のための単純な方言です。QName
は、XPath 処理機能を持たない単純なリソースの場合に役立ちます。QName の方言は
http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer/Dialect/QName という
URI で指定する必要があり、また式は、要素名、属性、およびそのコンテンツ全体が含まれる
0 個以上の完全な要素に対して評価をする必要があります。QName の方言では計算値はサポートされません。
 |
XPath
XPath は、処理対象の XML 要素の特定に使われる XSL スタイルシートのサブ言語です。数値を計算したり、文字列を操作する場合にも使用します。XPath
式と XSLT 式は密接に関連しています。たとえば、XPath は変数を参照できますが、この変数は
XSLT で作成して値を設定する必要があります。XPath の構文は UNIX のディレクトリのアドレス指定と似ていて、ルート・ディレクトリや階層の区切りにスラッシュを使用します。
|
|
XPath Level 1 の方言は、XPath を使ってリソースの特定のフラグメントを参照します。またリソースの
XML 表現に論理的に適用され、その結果のノード・セットは式を含むメッセージの対象であるリソース・フラグメントです。この方言は、リソース表現から計算される戻り値をサポートする必要のない、限定された
XPath 処理機能を持つリソースの場合に役立ちます。XPath Level 1 式のコンテキストはこのパスをたどります。
- コンテキスト・ノードはリソースの XML 表現のルート要素です。
- コンテキスト位置は 1 です。
- コンテキスト・サイズは 1 です。
- 変数バインディングはありません。
- ノード・テストは NameTest と text NodeType です。
- 関数ライブラリはありません。
- すべての名前空間の宣言はXPath 式が出現するスコープ内にあります。
XPath Level 1 の方言を使用すると、リソース表現のすべての要素、属性、または値への参照を定義できます。XPath
Level 1 の方言は、http://schemas.xmlsoap.org/ws/2006/08/resourceTransfer/Dialect/XPath-Level-1
という URI で指定する必要があり、この方言の式は複数のノードに対して評価することはできません。方言では計算値を使用できず、テキスト・ノードと属性ノードは
XPath 1.0 の方言と同じシリアライゼーションを使用してシリアライズする必要があります。
XPath 1.0 の方言は、さらに広範な XPath 関数ライブラリのセットをサポートする点で、XPath
Level 1 とは異なります。この方言は、完全な XPath 処理機能を備えたすべてのリソース、またはリソース表現から計算される戻り値をサポートする必要があるすべてのリソースで適切に機能します。XPath
1.0 式のコンテキストは次のとおりです。
- コンテキスト・ノードはリソースの XML 表現のルート要素です。
- コンテキスト位置は 1 です。
- コンテキスト・サイズは 1 です。
- 変数バインディングはありません。
- コア関数ライブラリーがあります。
- すべての名前空間の宣言はXPath 式が出現するスコープ内にあります。
XPath 1.0 の方言を使用すると、リソース表現のすべての要素、属性、または値への参照を定義できます。また、リソース表現から値を計算する場合に使用できます。XPath
1.0 の方言は、http://www.w3.org/TR/1999/REC-xpath-19991116 という URI で指定する必要があります。完全な
XPath 1.0 の方言をサポートする実装では XPath Level 1 の方言もサポートする必要があります。
式は、ノード・セット、ブール値、数値、または文字列という 4 つの型の 1 つに対して評価をします
(ノード・セット以外は計算式の評価結果です)。これらの型は、次の変換を実行し、wsrt:Result
要素で結果を囲むことによってシリアライズされます。
- ブール値: xs:boolean に変換
- 文字列: xs:string に変換
- 数値: xs:double に変換
ノード・セットは 0 個以上の要素、属性、または要素のテキスト値です。各ノードを連結し、スキーマ検証が行われない
wsrt:Result ラッパー XML 要素で囲むことによって、XML にシリアライズされます。ノード・セット内の要素ノードはそのまま
XML 表現にシリアライズされます。ノード・セット内の属性ノードとテキスト・ノードの場合は、シリアライズされた結果の他のノードと区別するために、これらの値を囲むラッパー要素を使用します。
ノード・セット内のノードは任意の順序でシリアライズできます。WS-RT のグローバル要素定義である
wsrt:NodeSet も、WS-RT 結果の外側でこれらのノード・セットをシリアライズするときはラッパー要素として使用できます。最後に、XPath
1.0 式は複数のノードに対して評価をする場合があります。これは XPath 1.0
の方言を put または create 操作で使用できないことを意味するため、よく注意してください。
拡張機能を操作に適用する
今後の「仕様を知る」コラムでは、各操作に対するこれらの拡張機能の適用についてさらに掘り下げていくつもりですが、今回はさらりと見ていくことにしましょう。
get
WS-Transfer では、get 操作を使用して既存のリソース表現全体を取得します。WS-RT は、既存の表現のフラグメントを取得できるように
get を拡張しています。完全な表現を返すことができるリソースは、WS-RT 拡張機能を使わずにリソース表現全体を返すために
wxf:Get もサポートしている必要があります。
リスト 1 は WS-RT で拡張された get の概要を示しています。
リスト 1. 拡張された get の概要
[Headers]
<wsrt:ResourceTransfer s:mustUnderstand="true"? />
[Action]
http://schemas.xmlsoap.org/ws/2004/09/transfer/Get
[Body]
<wsrt:Get Dialect="xs:anyURI"?>
<wsrt:Expression ...>xs:any</wsrt:Expression> *
</wsrt:Get> |
put
WS-Transfer では、置換用 XML 表現を指定することで、put 操作を使用して既存のリソース表現を更新します。WS-RT
は、XML 表現のフラグメントを指定することで、put を拡張して既存のリソース表現を更新します。完全な表現を更新できるリソースは、WS-RT
拡張機能を使用せずにリソース表現全体を更新するために、wxf:Put もサポートしている必要があります。
リスト 2 は WS-RT で拡張された put の概要を示しています。
リスト 2. 拡張された put の概要
[Headers]
<wsrt:ResourceTransfer s:mustUnderstand="true"/>
[Action]
http://schemas.xmlsoap.org/ws/2004/09/transfer/Put
[Body]
<wsrt:Put Dialect="xs:anyURI"?>
<wsrt:Fragment Mode="Modify|Insert|Remove">
<wsrt:Expression>xs:any</wsrt:Expression> ?
<wsrt:Value ...>xs:any</wsrt:Value> ?
</wsrt:Fragment> +
</wsrt:Put> |
create
WS-Transfer では、初期表現を使用したリソースを作成するために、create 操作が使われます。create
要求を受け付けるリソース・ファクトリーは、指定された表現から初期化される新しいリソースを割り当てます。新しいリソースは、応答メッセージで返される、ファクトリー・サービス指定のエンドポイント参照を割り当てられ、このエンドポイント参照は応答メッセージの中に返されます。リソースを作成するために必要な情報が、初期表現と大幅に異なることはよくあります。場合によっては、初期表現を指定できないこともあります。
WS-RT は、create を拡張して、0 個以上の指定した XML 表現のフラグメントからリソースを生成できるようにします。さらに、リソース作成の一部として、任意のリソース・メタデータを作成できるように、create
を拡張しています。
リスト 3 は WS-RT で拡張された create の概要を示しています。
リスト 3. 拡張された 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> |
ちょっと待ってください。他にもあるのです。
今後の WS-RT 1.0 についての「仕様を知る」の記事では、操作を詳細に調べ、WS-RT
1.0 や次のことについて学んでいきます。
- 用語と表記法
- エラー (WS-Addressing で定義されているエラー処理規則による宛先エンドポイントが対象)
- セキュリティ (この WS と WS-Security との連係について)
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | 
|  | Kane ScarlettはdeveloperWorksのAutonomic computing technologyゾーンの編集者です。出版に関わる、これまでの経験としては、『Unix Review』や『Advanced Systems』、(JavaWorldやSunWorldなどの)Worldシリーズの雑誌、変わったところでは『ナショナル・ジオグラフィック・マガジン』などもあります。 |
記事の評価
|