15. DAV Properties (DAV プロパティ)
15. DAV Properties (DAV プロパティ)
DAV プロパティの場合, プロパティの名前はその値を含む XML 要素の名前と同じです。以下のセクションでは, 各セクションの最後の行が [REC-XML] で定義された形式を使用して要素型宣言を示します。"Value" フィールドは, 存在する場合, BNF を使用して XML 要素の許容内容に対するさらなる制限を指定します (つまり, PCDATA 要素の値をさらに制限するため)。
保護されたプロパティ (protected property) とは, PROPPATCH リクエストでは変更できないプロパティです。保護されたプロパティの変更をもたらす他のリクエストが存在する場合があります (LOCK リクエストが DAV:lockdiscovery の値に影響を与える場合など)。特定のプロパティは, あるタイプのリソースでは保護されている可能性がありますが, 別のタイプのリソースでは保護されていない可能性があることに注意してください。
計算されたプロパティ (computed property) は, 計算の観点から定義された値を持つプロパティです (そのリソースのコンテンツと他のプロパティ, または他のリソースのプロパティにも基づく)。計算されたプロパティは常に保護されたプロパティです。
COPY および MOVE の動作は, ローカルの COPY および MOVE 操作を指します。
HTTP GET 応答ヘッダー (DAV:get*) に基づいて定義されたプロパティの場合, ヘッダー値には [RFC2616] のセクション 4.2 で定義された LWS が含まれる可能性があります。サーバー実装者は, WebDAV プロパティ値として使用する前に, これらの値から LWS を削除すべきです。
15.1. creationdate Property (creationdate プロパティ)
名前 (Name): creationdate
目的 (Purpose): リソースが作成された時刻と日付を記録します。
値 (Value): date-time ([RFC3339] で定義, セクション 5.6 の ABNF を参照。)
保護 (Protected): 保護される場合があります。一部のサーバーは, ドキュメントが作成された時刻を反映するように DAV:creationdate の変更を許可します (アップロードされた時刻ではなく, ユーザーにとってより意味がある場合)。したがって, クライアントは同期ロジックでこのプロパティを使用すべきではありません (代わりに DAV:getetag を使用してください)。
COPY/MOVE の動作: このプロパティ値は MOVE 操作中に保持されるべきですが, COPY でリソースが作成されるときは通常再初期化されます。COPY では設定すべきではありません。
説明 (Description): DAV:creationdate プロパティは, すべての DAV 準拠リソースで定義されるべきです。存在する場合, リソースが作成された瞬間のタイムスタンプが含まれます。作成日を永続的に記録できないサーバーは, 代わりに未定義のままにすべきです (つまり, "Not Found" を報告します)。
<!ELEMENT creationdate (#PCDATA) >
15.2. displayname Property (displayname プロパティ)
名前 (Name): displayname
目的 (Purpose): ユーザーへの表示に適したリソースの名前を提供します。
値 (Value): 任意のテキスト。
保護 (Protected): 保護されるべきではありません。[RFC2518] を実装するサーバーは, これが新しい要件であるため, このプロパティを保護されたプロパティにしている可能性があることに注意してください。
COPY/MOVE の動作: このプロパティ値は COPY および MOVE 操作で保持されるべきです。
説明 (Description): ユーザーへの表示に適したリソースの説明を含みます。このプロパティはリソース上で定義されるため, それを取得するために使用される Request-URI とは無関係に同じ値を持つべきです (したがって, Request-URI に基づいてこのプロパティを計算することは推奨されません)。汎用クライアントはエンドユーザーにプロパティ値を表示する可能性がありますが, クライアント UI 設計者は, リソースを識別する方法が依然として URL であることを理解する必要があります。DAV:displayname への変更は, サーバーへの移動やコピーを発行するのではなく, 単に個々のリソース上のメタデータの一部を変更するだけです。同じコレクション内であっても, 2 つのリソースが同じ DAV:displayname 値を持つことができます。
<!ELEMENT displayname (#PCDATA) >
15.3. getcontentlanguage Property (getcontentlanguage プロパティ)
名前 (Name): getcontentlanguage
目的 (Purpose): accept ヘッダーなしの GET によって返されるような Content-Language ヘッダー値 ([RFC2616] のセクション 14.12 から) を含みます。
値 (Value): language-tag (language-tag は [RFC2616] のセクション 3.10 で定義されています)
保護 (Protected): クライアントが言語をリセットできるように, 保護されるべきではありません。[RFC2518] を実装するサーバーは, これが新しい要件であるため, このプロパティを保護されたプロパティにしている可能性があることに注意してください。
COPY/MOVE の動作: このプロパティ値は COPY および MOVE 操作で保持されるべきです。
説明 (Description): DAV:getcontentlanguage プロパティは, GET で Content-Language ヘッダーを返す任意の DAV 準拠リソースで定義されなければなりません。
<!ELEMENT getcontentlanguage (#PCDATA) >
15.4. getcontentlength Property (getcontentlength プロパティ)
名前 (Name): getcontentlength
目的 (Purpose): accept ヘッダーなしの GET によって返される Content-Length ヘッダーを含みます。
値 (Value): [RFC2616] のセクション 14.13 を参照してください。
保護 (Protected): このプロパティは計算されるため, 保護されます。
説明 (Description): DAV:getcontentlength プロパティは, GET への応答で Content-Length ヘッダーを返す任意の DAV 準拠リソースで定義されなければなりません。
COPY/MOVE の動作: このプロパティ値は, ソースリソースのプロパティの値ではなく, 宛先リソースのサイズに依存します。
<!ELEMENT getcontentlength (#PCDATA) >
15.5. getcontenttype Property (getcontenttype プロパティ)
名前 (Name): getcontenttype
目的 (Purpose): accept ヘッダーなしの GET によって返されるような Content-Type ヘッダー値 ([RFC2616] のセクション 14.17 から) を含みます。
値 (Value): media-type ([RFC2616] のセクション 3.7 で定義)
保護 (Protected): サーバーが独自にコンテンツタイプを割り当てることを好む場合, 保護される可能性があります (セクション 9.7.1 の議論も参照してください)。
COPY/MOVE の動作: このプロパティ値は COPY および MOVE 操作で保持されるべきです。
説明 (Description): このプロパティは, GET への応答で Content-Type ヘッダーを返す任意の DAV 準拠リソースで定義されなければなりません。
<!ELEMENT getcontenttype (#PCDATA) >
15.6. getetag Property (getetag プロパティ)
名前 (Name): getetag
目的 (Purpose): accept ヘッダーなしの GET によって返されるような ETag ヘッダー値 ([RFC2616] のセクション 14.19 から) を含みます。
値 (Value): entity-tag ([RFC2616] のセクション 3.11 で定義)
保護 (Protected): この値はサーバーによって作成および制御されるため, 保護されなければなりません。
COPY/MOVE の動作: このプロパティ値は, ソースリソースのプロパティの値ではなく, 宛先リソースの最終状態に依存します。セクション 8.8 の注意事項にも注意してください。
説明 (Description): getetag プロパティは, Etag ヘッダーを返す任意の DAV 準拠リソースで定義されなければなりません。ETag のセマンティクスの完全な定義については RFC 2616 のセクション 3.11 を参照し, WebDAV での ETag の議論についてはセクション 8.6 を参照してください。
<!ELEMENT getetag (#PCDATA) >
15.7. getlastmodified Property (getlastmodified プロパティ)
名前 (Name): getlastmodified
目的 (Purpose): accept ヘッダーなしの GET メソッドによって返されるような Last-Modified ヘッダー値 ([RFC2616] のセクション 14.29 から) を含みます。
値 (Value): rfc1123-date ([RFC2616] のセクション 3.3.1 で定義)
保護 (Protected): 一部のクライアントが適切なキャッシュ動作のために値に依存する可能性があるため, またはこのプロパティがリンクされている Last-Modified ヘッダーの値に依存する可能性があるため, 保護されるべきです。
COPY/MOVE の動作: このプロパティ値は, ソースリソースのプロパティの値ではなく, 宛先リソースの最終変更日に依存します。一部のサーバー実装は DAV:getlastmodified 値にファイルシステムの日付変更値を使用しており, HTTP Last-Modified 値が変更されるべき場合でも MOVE で保持される可能性があることに注意してください。[RFC2616] は提供されている場合にクライアントが ETag を使用することを要求しているため, ETag を実装しているサーバーは, オフライン同期またはキャッシュ制御のために変更日よりもはるかに優れたメカニズムをクライアントが使用することを期待できることに注意してください。セクション 8.8 の注意事項にも注意してください。
説明 (Description): リソースの最終変更日は, リソースのボディ (GET 応答) の変更のみを反映すべきです。プロパティのみの変更は最終変更日を変更すべきではありません。クライアントは既存のボディをいつ上書きするかを知るために最終変更日に依存する可能性があるためです。DAV:getlastmodified プロパティは, GET への応答で Last-Modified ヘッダーを返す任意の DAV 準拠リソースで定義されなければなりません。
<!ELEMENT getlastmodified (#PCDATA) >
15.8. lockdiscovery Property (lockdiscovery プロパティ)
名前 (Name): lockdiscovery
目的 (Purpose): リソース上のアクティブなロックを記述します
保護 (Protected): 保護されなければなりません。クライアントは PROPPATCH ではなく LOCK および UNLOCK を通じてロックのリストを変更します。
COPY/MOVE の動作: このプロパティの値は, ソースリソースのロックではなく, 宛先のロック状態に依存します。ロックは MOVE 操作で移動されないことを思い出してください。
説明 (Description): 誰がロックを持っているか, どのタイプのロックを持っているか, タイムアウトタイプとタイムアウトの残り時間, および関連するロックトークンのリストを返します。所有者情報は機密と見なされる場合は省略される場合があります。ロックはありませんがサーバーがロックをサポートしている場合, プロパティは存在しますが 'activelock' 要素は 0 個含まれます。1 つ以上のロックがある場合, リソース上の各ロックに対して 'activelock' 要素が表示されます。このプロパティは書き込みロックに関してロック可能ではありません (セクション 7)。
<!ELEMENT lockdiscovery (activelock)* >
15.8.1. 例 - DAV:lockdiscovery の取得
リクエスト (Request):
PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D='DAV:'>
<D:prop><D:lockdiscovery/></D:prop>
</D:propfind>
レスポンス (Response):
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D='DAV:'>
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:lockdiscovery>
<D:activelock>
<D:locktype><D:write/></D:locktype>
<D:lockscope><D:exclusive/></D:lockscope>
<D:depth>0</D:depth>
<D:owner>Jane Smith</D:owner>
<D:timeout>Infinite</D:timeout>
<D:locktoken>
<D:href
>urn:uuid:f81de2ad-7f3d-a1b2-4f3c-00a0c91a9d76</D:href>
</D:locktoken>
<D:lockroot>
<D:href>http://www.example.com/container/</D:href>
</D:lockroot>
</D:activelock>
</D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
このリソースには, 無限のタイムアウトを持つ単一の排他的書き込みロックがあります。
15.9. resourcetype Property (resourcetype プロパティ)
名前 (Name): resourcetype
目的 (Purpose): リソースの性質を指定します。
保護 (Protected): 保護されるべきです。リソースタイプは通常, リソースを作成する操作 (MKCOL vs PUT) によって決定され, PROPPATCH によっては決定されません。
COPY/MOVE の動作: 通常, リソースの COPY/MOVE は宛先で同じタイプのリソースになります。
説明 (Description): すべての DAV 準拠リソースで定義されなければなりません。各子要素は, リソースが属する特定のタイプを識別します。'collection' など, これはこの仕様で定義されている唯一のリソースタイプです (セクション 14.3 を参照)。要素に 'collection' 子要素と認識されない追加の要素が含まれている場合, 通常コレクションとして扱われるべきです。要素に認識された子要素が含まれていない場合, 非コレクションリソースとして扱われるべきです。デフォルト値は空です。この要素にはテキストまたは混合コンテンツを含めてはなりません。任意のカスタム子要素は, リソースタイプの識別子と見なされます。
例: (拡張性を示す架空の例)
<x:resourcetype xmlns:x="DAV:">
<x:collection/>
<f:search-results xmlns:f="http://www.example.com/ns"/>
</x:resourcetype>
15.10. supportedlock Property (supportedlock プロパティ)
名前 (Name): supportedlock
目的 (Purpose): リソースがサポートするロック機能のリストを提供します。
保護 (Protected): 保護されなければなりません。クライアントではなくサーバーが, どのロックメカニズムがサポートされるかを決定します。
COPY/MOVE の動作: このプロパティ値は, ソースリソースのプロパティの値ではなく, 宛先でサポートされるロックの種類に依存します。宛先への COPY を試みるサーバーは, 宛先でこのプロパティを設定しようとすべきではありません。
説明 (Description): リソースのロックリクエストで指定できるスコープとアクセスタイプの組み合わせのリストを返します。実際のコンテンツ自体はアクセス制御によって制御されるため, サーバーはクライアントが見る権限のない情報を提供する必要はないことに注意してください。このプロパティは書き込みロックに関してロック可能ではありません (セクション 7)。
<!ELEMENT supportedlock (lockentry)* >
15.10.1. 例 - DAV:supportedlock の取得
リクエスト (Request):
PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop><D:supportedlock/></D:prop>
</D:propfind>
レスポンス (Response):
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>