Exchange 2000徹底解剖
>
開発環境としてのExchange 2000 Server
|
では,WebDAVでどのようにしてファイルのプロパティを操作するのかについて説明する。とはいえ,WebDAVは範囲が広い規格であり,その全機能を紹介することは到底できない。そこで本稿では,Exchange 2000 Serverを利用するのに必要になるであろうプロパティの取得と設定ならびに検索についてのみを扱う。その他の操作方法については,RFC2518やExchange 2000 Platform SDK(
まずは,プロパティの取得から説明する。WebDAVではプロパティの操作にXMLを用いる。
たとえば,“
サーバーからの応答は,XML形式のテキストとして返される。List 3に示したコマンドをサーバーに送信したとき,その応答はList 4のようになる。
WebDAVでは,操作したいプロパティ名をXMLネームスペースを使って指定する。List 3の6〜9行目が,取得したいプロパティ名を指定する部分である。
7行目にある,“<a:propfind xmlns:a="DAV:">”という箇所が,プロパティの取得(つまりPROPFINDメソッドでどのプロパティを操作するのかを指定)するWebDAVにおける命令である。
7行目で指定している“a:”というのは,XMLネームスペースのことであり,実際には任意の名前でかまわない。たとえば,7行目を“<dav:propfind xmlns:dav="DAV:">”としても問題ない。そうした場合,8行目以降の“a:”の部分をすべて“dav:”に置き換える必要がある。詳細は,XMLネームスペースに関するドキュメント(たとえば
プロパティを取得したいときには,7〜9行目にあるように,全体をpropfindエレメントで括り,そのあいだにpropエレメントを記述し,そのなかに取得したいプロパティ名をエレメントとして記述する。List 3ではpropエレメントを1つしか指定していないが,必要なだけpropエレメントを列挙し,複数のプロパティを一括して取得することもできる。
<propfind> <prop> <プロパティ名/> </prop> <prop> <プロパティ名/> </prop> …任意の数だけpropエレメントが続く… </propfind>
当然ながら,プロパティを参照したいときにはプロパティの名前がどのようなエレメントで表現されるのかを知らなければならない。List 3ではcreationdateエレメントを取得しようとしているわけだが,creationdateエレメントが作成日時を示すプロパティであるということを知っていなければ,このような表現はできないことになる。
WebDAVの規約では,DAVネームスペースに対してTable 3に示すエレメントを規定している。Table 3に示すエレメントは,WebDAVに対応したすべてのWebサーバーでサポートされる。
それに対し,Microsoft社が拡張したプロパティを使うこともできる。IIS 5.0やExchange 2000 Serverでサポートされる独自のプロパティを取得するには,拡張されたプロパティを使うことになる。拡張されたプロパティは相当数に上り,ここですべてを紹介することはできない。そのため,ここではネームスペース名と用途のみを示すにとどめる(Table 4)。ネームスペース内で定義されているプロパティについては,Exchange 2000 Platform SDK(
Table 3 DAVネームスペースで定義されている主なプロパティ
プロパティ | 解説 |
---|---|
creationdate | 作成日 |
displayname | 表示名 |
getcontentlanguage | ファイルの言語 |
getcontentlength | ファイルのバイト数 |
getcontenttype | コンテンツタイプ |
getetag | ETagヘッダ(HTTPの規格書であるRFC2068を参照)の情報 |
getlastmodified | 最終更新日 |
href | ファイルのURL |
lockdiscovery | ファイルをロックしているユーザーの情報 |
resourcetype | リソースタイプ |
source | リンクが指定されたときの実態名 |
supportedlock | どのようなロック機構をサポートするかという情報 |
Table 4 IISやExchange 2000で拡張されているネームスペース
ネームスペース | 用途 |
---|---|
Exchange 2000 Serverに固有のプロパティ | |
Exchange 2000 ServerのEvent Sinkに関するプロパティ | |
Exchange 2000のセキュリティに関するプロパティ | |
Exchange 2000のMAPI経由のアクセスで使われるプロパティ | |
予定帳で使われるプロパティ | |
連絡先で使われるプロパティ | |
HTTPメールで使われるプロパティ | |
メールのヘッダ情報を示すのに使われるプロパティ | |
日付の表記を示すのに用いられるプロパティ | |
Exchange 2000 Serverに特有の型情報を示すのに用いられるプロパティ | |
フルテキストサーチに使われるプロパティ | |
HTMLフォームに関するプロパティ | |
Microsoft Officeドキュメントのドキュメント情報に関するプロパティ | |
XMLのデータ形式を定義するプロパティ |
さて,List 3を実行した結果,List 4に示した応答が得られる。List 4を参照してもらうとわかるように,List 3で指定したプロパティがpropstatエレメントで囲まれて表現される。porpstatエレメントの内部にはstatusエレメントがあり,そこにはHTTPのステータスが入る。そして,その後ろにpropエレメントが続き,そのなかにクライアントからの要求部分(List 3)で指定されたプロパティ(エレメント)が続き,値が含まれることになる。
<propstat> <status> HTTPのステータス</status> <prop> <プロパティ名> プロパティの値 </プロパティ名> </prop> </propstat>
常にpropstatエレメントのすぐ後ろにstatusエレメントが続き,propエレメントが指定されるとは限らない。IIS 5.0の場合にはこの順番になるが,ほかのWebサーバーでは順序が異なったり,あいだに別のエレメントが挟まったりすることもあり得る。
List 4は,1つのプロパティを参照したときの単純な結果である。しかし実際には,PROPFINDメソッドの応答形式はもう少し複雑になり得る。たとえば,複数のプロパティの参照を指定したとき,一部のプロパティだけ存在しなかったり,参照権限がなかったりすると,また違った応答が返される(具体的には,要求に指定したプロパティの数だけ複数のpropstatエレメントが返され,その内部に含まれる個々のstatusエレメントにHTTPエラーコードが返される)。また,ディレクトリのプロパティを参照する場合には,Depthヘッダを使って,そのディレクトリに対するプロパティを取得するのか,ディレクトリのなかにある全ファイルに対するプロパティを取得するのかを指定できるようになっている。さらには,propnameエレメントを使って,たとえばList 5のようにすると,特定のURLに設定されている全プロパティの一覧を取得することもできる。
細部まで説明しているとキリがないため,詳細についてはRFC2518を参照してほしい。
13/27 |