[1] 【[[WebDAV]]】 > Collection - A resource that contains a set of URIs, termed member URIs, which identify member resources and meets the requirements in section 5 of this specification. Member 資源を識別する [DFN[member URI]] という [[URI]] の集合を含み、 この仕様書 [INS[(RFC 2518)]] の5章の用件に合致する[[資源]]。 [INS[([[RFC2518]])]] [2] > : [DFN[[RUBYB[[[集成]]]@en[collection]]]]: [[成員資源]]の[[集合]]を含む[[資源]]。 [[集成]]は [[Atomフィード]]として表現されます。 ;; [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) [424] [[集成資源]]は、[[エントリー]]が[[集成]]中の[[成員]]の [[IRI]] を含むような[[Atomkフィード文書]]の形の[[表現]]を提供しなければ[['''なりません''']]。 ;; [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) * Atom 集成への [CODE(HTTP)@en[POST]] [5] [[資源]]を作成するには、[[集成]]の [[URI]] に[[成員]]の[[表現]]を [CODE(HTTP)@en[[[POST]]]] します。 [SRC@en[[[AtomPub]]]] [420] [[AtomPub]] では1つの[[資源]]の複数の[[表現]]を作成する方法を規定していません。 [SRC@en[[[AtomPub]]]] [4] 仕様書: -[CITE@en[RFC 5023 - The Atom Publishing Protocol]] -- -- -- -- ** 要求 [211] [[要求本体]]は、 [[Atomエントリー]]であっても、なくても構いません。 ([[エントリー資源]]も[[媒体資源]]も [CODE(HTTP)@en[[[POST]]]] できます。) [SRC@en[[[AtomPub]]]] [419] [[クライアント]]は[[実体]]が [[Atomエントリー]]であることを表すために[[媒体型]] [CODE(MIME)@en[[[application/atom+xml]]]] または [CODE(MIME)@en[[[application/atom+xml;type=entry]]]] を用いることができます。 [SRC@en[[[AtomPub]]]] ** 応答 [208] [CODE(HTTP)@en[[[201]]]] [[応答符号]]は、[[成員]]の作成に成功したことを示します。 その場合、[[応答本体]]を返す[['''べき''']]であり、返す場合は作成された[[資源]]を表す [[Atomエントリー文書]]でなければ[['''なりません''']]。 [[鯖]]は [CODE(HTTP)@en[[[POST]]]] された[[エントリー]]を自由に変更して構いませんから、 [[クライアント]]と[[鯖]]が新たに作られた[[エントリー]]を共有する意味で有用です。 [SRC@en[[[AtomPub]]]] [209] [[成員資源]]が作成された場合、その[[成員エントリーURI]] を[[集成]]の[[応答]]の [CODE(HTTP)@en[[[Location]]:]] [[頭欄]]に含まなければ[['''なりません''']]。 [SRC@en[[[AtomPub]]]] *** 要求実体がエントリー資源の場合 [210] [[要求]]が [[Atomエントリー文書]]を含んでいる場合で、 それに対する[[応答]]が [CODE(HTTP)@en[[[Content-Location]]:]] [[頭欄]]を含み、 それが [CODE(HTTP)@en[[[Location]]:]] [[頭欄]]と[[文字]]レベルで[[一致]]する場合は、 [[クライアント]]は[[応答実体]]が新しく作られた[[エントリー]]の完全な[[表現]]であると解釈してかまいません。 そうでない場合、[[クライアント]]は[[応答実体]]が作成された[[資源]]の完全な[[表現]]であると解釈しては[['''なりません''']]。 [SRC@en[[[AtomPub]]]] **** 例 [416] [PRE(HTTP example code)[ POST /edit/ HTTP/1.1 Host: example.org User-Agent: Thingio/1.0 Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Type: application/atom+xml;type=entry Content-Length: nnn Slug: First Post Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2003-12-13T18:30:02Z John Doe Some text. ]PRE] この[[要求]]に対する[[応答]]の例 [PRE(HTTP example code)[ HTTP/1.1 201 Created Date: Fri, 7 Oct 2005 17:17:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" Location: http://example.org/edit/first-post.atom ETag: "c180de84f991g8" Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2003-12-13T18:30:02Z John Doe Some text. ]PRE] ;; [[AtomPub]] より この例では[[提出]]された[[エントリー]]に[[鯖]]によって編集用の [[URL]] を表す [CODE(XMLe)@en[atom:[[link]]]] [[要素]]が加えられています。 [CODE(HTTP)@en[[[Content-Location]]:]] 欄は含まれていませんから、 この[[応答実体]]が実際に作成された[[資源]]の[[表現]]そのものと完全に同一かどうかは不明です。 *** 要求実体が媒体資源の場合 [3] [[Atom]] [[集成]]に非 [[Atomエントリー]][[表現]]が [CODE(HTTP)@en[[[POST]]]] により[[提出]]されると、[[鯖]]は、 [[要求実体]]に対応する[[媒体資源]]と、 [[媒体資源]]についての[[メタデータ]]と[[媒体資源]]の [[IRI]] を含む[[媒体リンク・エントリー]]の2つの[[資源]]を作らなければ[['''なりません''']]。 [[媒体リンク・エントリー]]は [[Atomエントリー]]として表現され、 [[集成]]中に現れることになります。 [SRC@en[[[AtomPub]]]] [212] [[集成]]は、 [CODE(HTTP)@en[[[POST]]]] された[[実体]]が認められない、 あるいは未対応の[[媒体型]]である場合、 [CODE(HTTP)@en[[[415]]]] [[状態符号]]の[[応答]]を返して[['''構いません''']]。 [[鯖]]は[[サービス文書]]の [CODE(XMLe)@en[app:[[accept]]]] [[要素]]を使って受け入れる[[媒体型]]を示すことができます。 [SRC@en[[[AtomPub]]]] [417] 作成に成功した場合、[[応答]]は [CODE(HTTP)@en[[[Location]]:]] [[頭欄]]に[[媒体リンク・エントリー]]の [[URI]] を含めなければ[['''なりません''']]。 [SRC@en[[[AtomPub]]]] [6] [[媒体リンク・エントリー]]は、[[媒体資源IRI]] を含んだ、[[リンク関係]]が [CODE(XML)@en[[[edit-media]]]] である [CODE(XMLe)@en[atom:[[link]]]] [[要素]]を含む[['''べきです''']]。 [[媒体リンク・エントリー]]は、 [CODE(XMLa)@en[[[src]]]] [[属性]]を持った [CODE(XMLe)@en[atom:[[content]]]] [[要素]]を含まなければ[['''なりません''']]。 その [CODE(XMLa)@en[[[src]]]] [[属性]]の値が新たに作られた[[媒体資源]]の [[IRI]] です。その [[IRI]] は[[媒体資源IRI]] と同じであっても構いませんし、 異なっていても構いません。 [WEAK[(例えば、[CODE(XMLa)@en[[[src]]]] の[[資源]]は静的なもの、[[媒体資源IRI]] の[[資源]]は動的なものとしても構いません。)]] [SRC@en[[[AtomPub]]]] [418] [[鯖]]は[[媒体リンク・エントリー]]の作成時に [CODE(XMLe)@en[atom:[[summary]]]]、[CODE(XMLe)@en[atom:[[id]]]]、 [CODE(XMLe)@en[atom:[[author]]]]、[CODE(XMLe)@en[atom:[[title]]]] のような必須の[[要素]]を適当な情報源から得られた情報によって補っても[['''構いません''']]。 [[鯖]]はこれら[[鯖]]が選んだ値を[[クライアント]]が変更することを認めないかもしれません。 [SRC@en[[[AtomPub]]]] **** 例 [422] [[AtomPub]] より [[PNG]] [[画像]]を新しい[[資源]]として [CODE(HTTP)@en[[[POST]]]] します。 [PRE(HTTP example code)[ POST /edit/ HTTP/1.1 Host: media.example.org Content-Type: image/png Slug: The Beach Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Length: nnn ...binary data... ]PRE] [[鯖]]は[[要求実体]]を新たに作成した[[媒体資源]]の[[表現]]とし、 新たに[[媒体リンク・エントリー]]を作成します。 成功した場合、 [CODE(HTTP)[[[201]]]] [[応答]]を返します。 [PRE(HTTP example code)[ HTTP/1.1 201 Created Date: Fri, 7 Oct 2005 17:17:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" Location: http://example.org/media/edit/the_beach.atom The Beach urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2005-10-07T17:17:08Z Daffy ]PRE] [CODE(HTTP)@en[[[Location]]:]] で示されているのが作成された[[媒体リンク・エントリー]]の [[URL]] です。 [CODE(XML)@en[[[edit-media]]]] としてリンクされているのが作成された[[媒体資源]]の [[URL]] です。 新しい [[PNG]] [[画像]]に更新する場合は後者に [CODE(HTTP)@en[[[POST]]]] します。 [PRE(HTTP example code)[ PUT /edit/the_beach.png HTTP/1.1 Host: media.example.org Content-Type: image/png Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Length: nnn ...binary data... ]PRE] 成功した場合、[[鯖]]は [CODE(HTTP)[[[200]]]] を返します。 [PRE(HTTP example code)[ HTTP/1.1 200 Ok Date: Fri, 8 Oct 2006 17:17:11 GMT ]PRE] また、先程の前者の [[URL]] を使って、[[クライアント]]は[[媒体リンク・エントリー]]を得ることができます。 [PRE(HTTP example code)[ GET /media/edit/the_beach.atom HTTP/1.1 Host: example.org Authorization: Basic ZGFmZnk6c2VjZXJldA== ]PRE] [[応答]]は [PRE(HTTP example code)[ HTTP/1.1 200 Ok Date: Fri, 7 Oct 2005 17:18:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" ETag: "c181bb840673b5" The Beach urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2005-10-07T17:17:08Z Daffy ]PRE] [[メタデータ]]を更新するには、この [[URL]] に [CODE(HTTP)@en[[[PUT]]]] します。 [PRE(HTTP example code)[ PUT /media/edit/the_beach.atom HTTP/1.1 Host: example.org Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Type: application/atom+xml;type=entry Content-Length: nnn If-Match: "c181bb840673b5" The Beach urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2005-10-07T17:17:08Z Daffy A nice sunset picture over the water. ]PRE] この例では [CODE(XMLe)@en[atom:[[summary]]]] が変更されています。 成功した場合は [CODE(HTTP)[[[200]]]] [[応答]]が返されます。 [PRE(HTTP example code)[ HTTP/1.1 200 Ok Date: Fri, 7 Oct 2005 17:19:11 GMT Content-Length: 0 ]PRE] *** 要求実体がエントリーでない Atom 文書の場合 [421] [[Atomエントリー]]以外の [[Atom文書]] ([[Atomフィード]]など) が [CODE(HTTP)@en[[[POST]]]] された場合の結果は未定義です。 [SRC@en[[[AtomPub]]]] ** メモ [423] 多分、[[鯖]]は [CODE(HTTP)@en[[[PUT]]]] された[[エントリー]]がおかしなことを言っていないかチェックする必要がありますね。 [[媒体資源]]が他の[[鯖]]にあることになっているとか、 [[媒体リンク・エントリー]]が元の[[媒体資源]]とは別のものを指すことになっているとか。 * [CODE(XMLe)@en[app:collection]] 要素 (AtomPub) [202] [[AtomPub]] の [DFN[[CODE(XMLe)@en[app:[[collection]]]] [[要素]]]]は、 [[集成]]を説明します [SRC@en[[[AtomPub]]]]。 :[[局所名]]:[CODE(XMLe)@en[[[collection]]]] :文脈:[CODE(XMLe)@en[app:[[workspace]]]] の[[子要素]]として、 [CODE(XMLe)@en[atom:[[feed]]]] の[[子要素]]として、 [CODE(XMLe)@en[atom:[[source]]]] の[[子要素]]として :[[内容モデル]]: [CODE(XMLe)@en[atom:[[title]]]] & [CODE(XMLe)@en[app:[[accept]]]]* & [CODE(XMLe)@en[app:[[categories]]]]* :[[属性]]:[CODE(XMLa)@en[[[href]]]] 仕様書: -[CITE@en[RFC 5023 - The Atom Publishing Protocol]] -- -- ** 内容 [203] この[[要素]]は丁度1つの [CODE(XMLe)@en[atom:[[title]]]] [[要素]]を含まなければ[['''なりません''']] [SRC@en[[[AtomPub]]]]。 [204] [CODE(XMLe)@en[app:[[accept]]]] [[子要素]]の順序は意味を持ちません。 [SRC@en[[[AtomPub]]]] ;; 他の[[子要素]]についてはどうなのでしょう。。。 ** 属性 [205] [CODE(XMLa)@en[[[href]]]] [[属性]]は必須です。 [SRC@en[[[AtomPub]]]] ** 文脈 [206] この[[要素]]は [CODE(XMLe)@en[atom:[[workspace]]]] [[要素]]の[[子要素]]として、 [[作業空間]]に含まれる[[集成]]の説明のために使うことができます。 [207] この[[要素]]は [[Atomフィード文書]]の [CODE(XMLe)@en[atom:[[feed]]]] [[要素]]や [CODE(XMLe)@en[atom:[[source]]]] [[要素]]の[[子要素]]として使うことができます。新しい[[エントリー]]を追加するとその[[フィード]]に現れるような[[集成]]を表します。 [SRC@en[[[AtomPub]]]]