[431] [DFN[[RUBYB[コレクション]@en[collection]]]]は、[[資源]]の集合体を表します。 [[HTTP]]
自体の用語ではありませんが、 [[IETF]] の [[HTTP]] 関連各仕様でよく使われる概念です。

;; [432] [[IETF]] ではよく見かけますが、現実世界ではあまり遭遇しない用語ですwww

* コレクション (WebDAV)

[8] [DFN[[RUBYB[コレクション]@en[collection]]]]は、
[[子供]]の[[資源]]への[[参照]]の[[包含子]]としても機能する[[資源]]です [SRC[>>7]]。

** 仕様書

[REFS[
- [7] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#page-9>
- [11] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-5.2>
- [29] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-8.3>
- [30] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-14.3>
- [34] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-15.9>
]REFS]

** 意味

[9] [[コレクション]]とは、[[パスセグメント]]と[[資源]]との[[写像]]の[[集合]]を含む[[資源]]であって、
[[WebDAV]] 仕様書の要件に従うものです [SRC[>>7, >>11]]。

[12] [[HTTPメソッド]]のいくつかは[[コレクション]]にのみ適用されますが、
いくつかは[[コレクション]]に含まれている[[資源]]の一部または全部にも適用されます。
範囲が明らかでない時には、適用対象となる深さを 0 ([[コレクション]]のみ)、
1 ([[コレクション]]の[[内部メンバー]]まで)、[[無限大]] ([[コレクション]]の[[メンバー]]すべて)
と選択できます。 [SRC[>>11]]

** コレクションの URL

[23] 慣習により、[[鯖]]は、末尾に [CODE[[[/]]]] のない名前で[[コレクション]]が参照された際には、
[CODE[[[/]]]] があったものとして扱っても構いません。その場合、
[[応答]]には [CODE[[[/]]]] で終わる [[URL]] を指定した
[CODE(HTTP)@en[[[Content-Location:]]]] [[ヘッダー]]を含める[['''べきです''']]。
[[コレクション]]を参照する [[URL]] を生成するときには、
[CODE[[[/]]]] を含める[['''べきです''']]。 [SRC[>>11]]

[24] [[コレクション]]の [[URL]] は [CODE(URI)[[[/]]]] で終わる[['''べきです''']] [SRC[>>29]]。
[[クライアント]]は[[コレクション]]名としては [CODE[[[/]]]]
があるものを用いる[['''べきです''']]。そうしない場合[[リダイレクト]]に対処する必要があります。
[SRC[>>11]]

;; [25] [CODE(URI)@en[[[DAV:resourcetype]]]] [[特性]]を使うと [[URL]]
より確実に[[コレクション]]かどうかを判定できます。 [SRC[>>11]]

** 種類

[36] [[コレクション]]には次の種別があります。
[FIG(short list)[
- [[作業空間資源]]
]FIG]

** 状態

[13] [[コレクション]]は、状態として
[FIG(list)[
- [[パスセグメント]]と[[資源]]の間の[[写像]]の[[集合]]
- [[コレクション]]自体の[[特性]]の[[集合]]
]FIG]
... を含みます。その他に、[CODE(HTTP)@en[[[GET]]]] で返される
[[payload body]] などの状態も持つことができます。 [SRC[>>11]]

[15] [[特性]]は、[[コレクション]]以外の[[資源]]の[[特性]]と同様のものです [SRC[>>11]]。

[14] ある[[パスセグメント]]とある[[資源]]の[[写像]]がある[[コレクション]]に含まれている時、
その[[資源]]は[[コレクション]]に[RUBYB[含まれている]@en[contained]] [SRC[>>11]]
([[内部メンバー]]である [SRC[>>7]]) といいます。

[16] [[コレクション]]は、ある[[パスセグメント]]に関する[[写像]]を高々1つだけ含むことができます。 
複数の[[パスセグメント]]から同じ[[資源]]への[[写像]]を持つこともできます。 [SRC[>>11]]

;; [17] つまり、同じ[[パス]]の[[資源]]が複数存在することはできませんが、
[[大文字・小文字不区別]]など異なる[[パス]]が同じ[[資源]]を表すことはできます。

;; [18] [CODE(HTTP)@en[[[PROPFIND]]]] は、[[写像]]に複数の[[パスセグメント]]があっても、
そのうちのいずれか1つだけを一貫して選んで返さなければ[['''なりません''']] [SRC[>>11]]。

[19] [[WebDAV]] に適合する[[資源]]に[[パスセグメント]]を足すと別の [[WebDAV]]
に適合する[[資源]]となるなら、前者の[[資源]]は後者の[[資源]]を含んだ[[コレクション]]でなければ[['''なりません''']] [SRC[>>11]]。

[EG[
[20] 例えば [CODE[http://example.com/foo/]] と [CODE[http://example.com/foo/bar]]
が共に [[WebDAV]] [[資源]]なら、 [CODE[http://example.com/foo/]] は[[コレクション]]で、
[CODE[bar]] から [CODE[http://example.com/foo/bar]] への[[写像]]を含んでいなければなりません。
]EG]

[21] [[WebDAV]] に適合する[[資源]]に[[パスセグメント]]を足した [[URL]]
で表される[[資源]]は、必ずしも [[WebDAV]] に適合する[[資源]]でなくても構いません。
その場合、前者の[[資源]]は[[コレクション]]として後者の[[資源]]を含んでも構いませんが、含まなくても構いません [SRC[>>11]]。

[EG[
[26] 例えば [CODE[http://example.com/foo/index.html]] が自動生成されるなら、
これは [CODE[http://example.com/foo/]] に含まれないかもしれません。
]EG]

[22] [[WebDAV]] に適合する[[資源]]を[[内部メンバー]]として含まない [[WebDAV]]
に適合する[[資源]]は、[[コレクション]]である必要はありません。 [SRC[>>11]]

[27] [[WebDAV]] に適合する[[資源]]を含む上位の階層が [[WebDAV]]
に適合する[[資源]]であるとは限りません。[[クライアント]]はそのような場合にも対応できなければ[['''なりません''']] [SRC[>>11]]。

[EG[
[28] [CODE[http://example.com/foo/bar]] が [[WebDAV]] に適合する[[資源]]であっても、
[CODE[http://example.com/foo/]] はそうでないかもしれません。
]EG]

[10] 次の各項も参照してください。
[FIG(short list)[
- [[内部メンバー]]
- [[内部メンバーURL]]
- [[メンバー]]
- [[メンバーURL]]
- [[ロック]]
- [[書き込みロック]]
]FIG]

** [CODE(XMLe)@en[collection]] 要素 (WebDAV)

[31] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の
[DFN[[CODE(XMLe)@en[[[collection]]]]]] [[要素]]は、
当該[[資源]]が[[コレクション]]であることを表します [SRC[>>30]]。

[32] [[コレクション]]の [CODE(URI)@en[[[DAV:resourcetype]]]] [[特性]]は、
この[[要素]]を含まなければ[['''なりません''']] [SRC[>>30, >>34]]。

[33] この[[要素]]は通常は[[空要素]]ですが、
拡張により定義された[[子要素]]を使うこともできます [SRC[>>30]]。

[35] [CODE(URI)@en[[[DAV:resourcetype]]]] [[特性]]が 
[CODE(XMLe)@en[[[collection]]]] [[要素]]を含むなら[[コレクション]]、
含まないなら[[コレクション]]ではない[[資源]]として
(他の[[要素]]に関わらず) 扱う[RUBYB[べき]@en[should]]です [SRC[>>34]]。

** 歴史

[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]])]]

* コレクション (Atom)

[2]
>
: [DFN[[RUBYB[[[集成]]]@en[collection]]]]:
[[成員資源]]の[[集合]]を含む[[資源]]。
[[集成]]は [[Atomフィード]]として表現されます。

;; [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) <http://tools.ietf.org/html/rfc5023#section-3>

** [CODE(HTTP)@en[GET]]

[424] [[集成資源]]は、[[エントリー]]が[[集成]]中の[[成員]]の [[IRI]]
を含むような[[Atomフィード文書]]の形の[[表現]]を提供しなければ[['''なりません''']]。

;; [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) <http://tools.ietf.org/html/rfc5023#section-10>

[425] 詳しくは[[集成フィード]]の項を参照してください。

** [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]] 
-- <http://tools.ietf.org/html/rfc5023#section-4.2>
--<http://tools.ietf.org/html/rfc5023#section-5.3>
--<http://tools.ietf.org/html/rfc5023#section-9.2>
--<http://tools.ietf.org/html/rfc5023#section-9.6>

** 要求

[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

       <?xml version="1.0"?>
       <entry xmlns="http://www.w3.org/2005/Atom">
         <title>Atom-Powered Robots Run Amok</title>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2003-12-13T18:30:02Z</updated>
         <author><name>John Doe</name></author>
         <content>Some text.</content>
       </entry>
]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"

       <?xml version="1.0"?>
       <entry xmlns="http://www.w3.org/2005/Atom">
         <title>Atom-Powered Robots Run Amok</title>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2003-12-13T18:30:02Z</updated>
         <author><name>John Doe</name></author>
         <content>Some text.</content>
         <link rel="edit"
             href="http://example.org/edit/first-post.atom"/>
       </entry>
]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

       <?xml version="1.0"?>
       <entry xmlns="http://www.w3.org/2005/Atom">
         <title>The Beach</title>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2005-10-07T17:17:08Z</updated>
         <author><name>Daffy</name></author>
         <summary type="text" />
         <content type="image/png"
            src="http://media.example.org/the_beach.png"/>
         <link rel="edit-media"
            href="http://media.example.org/edit/the_beach.png" />
         <link rel="edit"
            href="http://example.org/media/edit/the_beach.atom" />
       </entry>
]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"

       <?xml version="1.0"?>
       <entry xmlns="http://www.w3.org/2005/Atom">
         <title>The Beach</title>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2005-10-07T17:17:08Z</updated>
         <author><name>Daffy</name></author>
         <summary type="text" />
         <content type="image/png"
            src="http://media.example.org/the_beach.png"/>
         <link rel="edit-media"
            href="http://media.example.org/edit/the_beach.png" />
         <link rel="edit"
            href="http://example.org/media/edit/the_beach.atom" />
       </entry>
]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"

       <?xml version="1.0"?>
       <entry xmlns="http://www.w3.org/2005/Atom">
         <title>The Beach</title>
         <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
         <updated>2005-10-07T17:17:08Z</updated>
         <author><name>Daffy</name></author>
         <summary type="text">
             A nice sunset picture over the water.
         </summary>
         <content type="image/png"
            src="http://media.example.org/the_beach.png"/>
         <link rel="edit-media"
            href="http://media.example.org/edit/the_beach.png" />
         <link rel="edit"
            href="http://example.org/media/edit/the_beach.atom" />
       </entry>
]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]]
--<http://tools.ietf.org/html/rfc5023#section-8.3.3>
--<http://tools.ietf.org/html/rfc5023#section-8.3.5>

** 内容

[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]]]]

* リンク関係型 [CODE(HTTP)@en[collection]] (Web Linking)

[427] [[Web Linking]] の[[リンク関係型]] [DFN[[CODE(HTTP)@en[[[collection]]]]]] は、
[[対象資源]]が[[文脈資源]]を[[メンバー]]として含む[[コレクション]]であることを表します [SRC[>>426]]。

** 仕様書

[REFS[
- [426] [CITE@en[RFC 6573 - The Item and Collection Link Relations]] ([TIME[2013-09-15 11:14:12 +09:00]] 版) <http://tools.ietf.org/html/rfc6573#section-2.2>
]REFS]

** 例

[EG[
[428] 例えば [SRC[>>426]]:

[PRE(HTTP example code)[
Link: <...>; rel="collection"; title="Return to Product Group X"
]PRE]

[429] [[Web Linking]] は [[HTTP]] などで用いられるものですが、 [[RFC 6573]]
にはなぜか関係がないはずの [[HTML]] で使った例 [SRC[>>426]] が載っています:

[PRE(HTML bad example code)[
   <a href="..." rel="collection">View other widgets</a>
   <a href="..." rel="collection">View all discontinued items</a>
]PRE]

[430] 自身が[[コレクション]]でもあり、また他の[[コレクション]]にも含まれる場合、
[CODE(HTTP)@en[[[item]]]] と併用することができます [SRC[>>426]]。

[PRE(HTTP example code)[
Link: <...>; rel="collection item";
      title="A Review of Issac Asimov's Collected Works - Vol. I"
]PRE]
]EG]

** 関連

[433] [CODE(HTTP)@en[[[item]]]] は逆方向の[[リンク関係型]]です。