では実際に,HTTPとXMLでどうデータを操作するか見ていこう。目的のデータの位置を指定し,変更や削除を指示するのが基本だ。

 まずXCAPによってXCAPドキュメント内の特定の部分(XCAPリソース)を,「HTTP URI」によって指定する(図1)。このURIの記述は,(1)XCAPルートに,(2)ドキュメント・セレクタ,(3)パス・セパレータ,(4)ノード・セレクタが連なった形式となる。これらのパラメータを連結してエンコードした結果が,サーバーに送るHTTP URIとなる。

図1●XCAPドキュメントおよびドキュメント内の項目を指定するHTTP URIの構成
図1●XCAPドキュメントおよびドキュメント内の項目を指定するHTTP URIの構成
[画像のクリックで拡大表示]

 (1)のXCAPルートは,XCAPドキュメントが保存されているツリーのルートを示すものだ。「xcap.softfront.co.jp」のように,「xcap.ドメイン名」の形式が推奨されている。

 (2)のドキュメント・セレクタは,XCAPドキュメント(すなわちXMLファイル)を指定する個所である。AUIDから始まり,次に「global」または「users」サブツリーを持つ(図2)。「global」には全ユーザーに適用されるドキュメントが置かれ,「users」にはXUI(XCAP User Identifier)と呼ばれる各ユーザーIDのサブツリーごとにドキュメントが置かれる。アクセス制御として,globalツリーに対しては全ユーザーが閲覧権限を持ち,個々のusersサブツリーに対しては,サブツリーの所有者であるユーザーのみが読み書きの権限を持つ。

図2●XCAPドキュメントを指定する「ドキュメント・セレクタ」の構造
図2●XCAPドキュメントを指定する「ドキュメント・セレクタ」の構造

 ドキュメント・セレクタの最後の部分は,ファイル名に相当するドキュメントの名前である。通常は「index」という名前が使われる。

 (3)のパス・セパレータは,ノード・セレクタが存在するときに,ドキュメント・セレクタとノード・セレクタを区切るための,2つのチルダ記号「~~」である。

 (4)のノード・セレクタは,XMLドキュメント内の特定の要素や属性などを指定するクエリー式である。このクエリー式はXPathの概念に基づいている。XPathは,データベース操作言語のSQLのように,XMLファイルから特定のデータや集合を抽出するのに使われる。ただXCAPでは,XPathが持つ豊富な機能にすべて対応するのではなく,単一の要素を特定することのみを目的としたものになっている。

 ノード・セレクタは,XCAPドキュメントの要素のツリー構造と,[ ]で囲まれた検索条件によって構成される(図3)。XCAPドキュメントそのものに対して新規作成や削除などを指示するときは,ノード・セレクタは指定しない。

図3●ノード・セレクタの例
図3●ノード・セレクタの例
XCAPドキュメントから特定の項目(ノード)を選択する。
[画像のクリックで拡大表示]

HTTP PUTでXCAPリソースを操作

 HTTP URIによって指定したXCAPリソースは,HTTPメソッドとHTTPボディによって操作される。ここでユーザーの状態を管理するプレゼンス・リストを例に,実際にやり取りされるリクエストと応答を見てみよう。

 新たなユーザーがアプリケーションを利用するときには,XCAPサーバー上にそのユーザーのアプリケーション設定情報(この例ではリソースリスト)を記述するXCAPドキュメントを作成する必要がある。このときXCAPクライアントはHTTP PUTリクエストをXCAPサーバーに送る(図4リスト1)。URIでXCAPドキュメントを指定し,リクエストのHTTPボディ部には作成するXCAPドキュメント内容を記述する。

図4●XCAPのHTTPメソッド例
図4●XCAPのHTTPメソッド例

 XCAPサーバーは,その内容が指定されたアプリケーション用法に則っているかをチェックし,問題がなければXCAPドキュメントを作成して「200 OK」を返す。アプリケーション用法に適合しない場合は,不正な処理を表す「409」エラーを返してリクエストを拒否する。

 XCAPドキュメントの中の一部分(XCAPリソース)を作成/更新するには,そのリソースを特定する,ノード・セレクタを含んだURIのHTTP PUTリクエストを送る(リスト2)。

 読み出しについては,HTTP GETリクエスト,削除についてはHTTP DELETEリクエストを使う。XCAPドキュメント/リソースの新規作成および書き込みと同様に,ノード・セレクタの有無でXCAPドキュメントまたリソースを読み出したり,削除したりできる。対象となるドキュメント/リソースが存在しない場合は「404」エラーとなり,アプリケーション用法に合致しないリクエストに対しては409エラーを返す。

佐藤 和紀(さとう・かずのり) ソフトフロント 取締役 研究開発担当
通信機器メーカー,ソフト・メーカーを経て,2000年ソフトフロントに入社。SIP/VoIPミドルウェアのOEM提供,SIP製品の開発支援に携わる。2005年に同社取締役就任。2007年から研究開発担当として開発を取り仕切る。