[1] [[RFC 4287]] では、 [[Atom 1.0]] として [[Atomフィード文書]]と
[[Atomエントリー文書]]の2種類の[[文書]]を定義しています
[SRC@en[[[Atom 1.0]] 2.]]。

[2] [[Atom 0.3]] で定義されていた [[Atomフィード文書]]は [[Atomフィード文書]]に相当します。

[47] [[RFC 5005]] では[[Atomフィード文書]]の集合の分類として、[[完全フィード]]、
[[ページ付けされたフィード]]、[[アーカイブされたフィード]]を定義しています。
[[アーカイブされたフィード]]は[[購読文書]]と[[アーカイブ文書]]によって構成されています。

[3] [[AtomPub]] では[[分類文書]]と[[サービス文書]]の2種類の[[文書]]が定義されています
[SRC@en[[[AtomPub]]]]。

[REFS[
- [48] [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) <http://tools.ietf.org/html/rfc5023#section-6.1>
]REFS]

[39] [[RFC 6721]] では[[削除済みエントリー文書]]が定義されています。

* Atom 文書と XML

[17] 
[[Atomフィード文書]]と [[Atomエントリー文書]]は [[XML 1.0]] 
[[整形式]]でなければ[['''なりません''']]。
[SRC@en[[[Atom 1.0]] 2.]]

[16] 
[[AtomPub]] の [[XML文書]]は[[名前空間整形式]]でなければ[['''なりません''']]
[SRC@en[[[AtomPub]]]]。

[40] [[削除済みエントリー文書]]は [[XML 1.0]] [[整形式]]でなければ[['''なりません''']]。
[SRC[[[RFC 6721]]]]

* 処理指令と注釈

[44] [[Atom 1.0]] は[[処理指令]]と[[注釈]]について言及しておらず、[[Atom文書]]において利用して良いとも悪いとも明記されていません。

[46] [[Atom 0.3]] では[[処理指令]]は原則として利用する[['''べきではない''']]、[[注釈]]はどこでも利用してよいと明記されていました [SRC[>>45]]。

[REFS[
- [45] [CITE[I-D/Published/atom-format/draft-nottingham-atom-format-02.xml at master · mnot/I-D]] ([TIME[2014-03-16 08:09:14 +09:00]] 版) <https://github.com/mnot/I-D/blob/master/Published/atom-format/draft-nottingham-atom-format-02.xml#L183>
]REFS]

* Atom 文書と XML 保安性

[18] [[RFC 4287]] の 5. では [[XML]] の[[保安性]]に関する規格との関係が述べられています。
実際には [[XML]] の[[保安性]]のための仕様は限られた分野でしか使われておらず、
[[Atom]] と併用できる実装がどれだけあるのかも不明です。今後これらの規格が普及する見込みもなく、
[[政治的正当性]]のために記述を追加しただけかもしれません。

** 仕様書

[REFS[
- [20] [CITE@en[RFC 4287 - The Atom Syndication Format]] ([TIME[2009-08-20 17:27:51 +09:00]] 版) <http://tools.ietf.org/html/rfc4287#section-5>
- [41] [CITE@en[RFC 6721 - The Atom "deleted-entry" Element]] ([TIME[2012-12-31 01:08:20 +09:00]] 版) <http://tools.ietf.org/html/rfc6721#section-5>
]REFS]

** 利用例

[19] [[RFC 4287]] の 5. には、[[割引クーポン]]を[[デジタル署名]]するだとか、
[[銀行]]が[[暗号化]]するだとか、実際にはとてもありそうにない例がいくつか紹介されています。

** デジタル署名

[21] [[Atom文書]]の[[根要素]]や [CODE(XMLe)@en[[[atom:entry]]]]
[[要素]]や [CODE(XMLe)@en[[[at:deleted-entry]]]] [[要素]]は、 
[RUBYB[[[XML署名・構文処理]]]@en[XML-Signature and Syntax Processing]]仕様書に従い[RUBYB[[[封入署名]]]@en[[[Enveloped Signature]]]]を有して[['''構いません''']]
[SRC[[[RFC 4287]] 5.1., >>41]]。

[22] [[Atom処理器]]は、[[署名]]を含む [[Atom文書]]や [CODE(XMLe)@en[[[at:deleted-entry]]]] [[要素]]を、
[[署名]]の検証ができなくても拒絶しては[['''なりません''']]。
処理を継続しなければ[['''なりません''']]し、
[[署名]]の検証に失敗したと[[利用者]]に通知しても[['''構いません''']]
[SRC[[[RFC 4287]] 5.1., >>41]]。

[23] 言い換えると、[[名前空間]] [CODE(URI)@en[[[http://www.w3.org/2000/09/xmldsig#]]]]、
[[局所名]] [CODE(XMLe)@en[[[Signature]]]] の[[要素]]が[[文書要素]]の[[子要素]]として存在しても、
それだけを理由に処理を止めては[['''なりません''']] [SRC[[[RFC 4287]] 5.1., >>41]]。

[24] [[Atom文書]]のそれ以外の[[要素]]は、特に規定がない限り、[[署名]]しては[['''なりません''']]
[SRC[[[RFC 4287]] 5.1.]]。

[25] [[XML署名・構文処理]]仕様書の6.5.1節で[[正準XML]]への対応が義務付けられていますが、
[[XML文書]]が[[署名]]された上で他の [[XML文書]]に含まれていると、
[[署名]]された[[文書]]の[[署名]]が壊れてしまうため、多くの実装はこれを使っていません。
ですから、[[Atom文書]]の[[署名]]を検証する [[Atom処理器]]は、
[[排他的XML正準化法]] [SRC[[[排他的XML正準化]]]] ([[URI]]
[CODE(URI)@en[[[http://www.w3.org/2001/10/xml-exc-c14n#]]]])
によって[[正準化]]することができなければ[['''なりません''']]
[SRC[[[RFC 4287]] 5.1., >>41]]。

[26] [[集約器]]などが途中で[[エントリー]]に [CODE(XMLe)@en[[[atom:source]]]]
[[要素]]を追加すると、[[エントリー]]や [CODE(XMLe)@en[[[at:deleted-entry]]]]
[[要素]]の[[署名]]は壊れてしまいます。
ですから、各[[エントリー]]の[[出版者]]が[[署名]]する時は予め
[CODE(XMLe)@en[[[atom:source]]]] [[要素]]を追加しておくことを十分検討するべきです
[SRC[[[RFC 4287]] 5.1., >>41]]。

[27] 実装者は [CODE(XML)@en[[[xml]]]] [[名前空間]]の[[マーク付け]]の利用と[[正準化]]の関係にまつわる問題にも気をつけるべきです
[SRC[[[RFC 4287]] 5.1., >>41]]。

[28] [[XML署名・構文処理]]仕様書の4.4.2節では [[DSA署名]]への対応が要求されると共に
[[RSA署名]]への対応が推奨されていますが、 [[RSA]] の方が [[DSA]]
よりよく普及していることを鑑みて、 [[Atom文書]]の[[署名]]を[[検証]]する
[[Atom処理器]]は [[RSA署名]]を[[検証]]できなければ[['''ならず''']]、
[[DSA署名]]は[[検証]]できなくても構いません。

[29] [[MAC認証]]の keying material が正しく扱われなかった場合の[[保安性]]上の問題を避けるため、
[[Atom文書]]では[[署名]]に [[MAC]] を使う[['''べきではありません''']]
[SRC[[[RFC 4287]] 5.1., >>41]]。

** 暗号化

[30] [[Atom文書]]や[[削除済みエントリー文書]]の[[根要素]]は、 
[RUBYB[[[XML暗号化構文・処理]]]@en[XML Encryption Syntax and Processing]]仕様書に従い[[暗号化]]を行って[['''構いません''']]
[SRC[[[RFC 4287]] 5.2., >>41]]。

[31] [[XML暗号化構文・処理]]仕様書の5.1節は [[TripleDES]]、[[AES-128]]、
[[AES-256]] への対応を義務付けています。 [[Atom文書]]を[[解読]]する 
[[Atom処理器]]は [[Cipher Block Chaining]] ([[CBC]]) モードの [[AES-128]]
を[[解読]]できなければ[['''なりません''']]。 [SRC[[[RFC 4287]] 5.2., >>41]]

[32] [[XML暗号化構文・処理]]に基づく[[暗号化]]では元の[[文書]]の[[一貫性]]は保障されません。
[[メッセージ]]を[[解読]]できなくても、[[解読]]された[[メッセージ]]の一部または全部が異なる意味を成すような変更を行う[[暗号学的攻撃]]が知られています。
ですから、[[Atom文書]]を[[解読]]する [[Atom処理器]]は、
[[文書]]の[[署名]]に含まれる[[ハッシュ値]]があればそれを[[検証]]したり、
[[文書]]に含まれる[[文書]]の[[ハッシュ値]]があればそれを[[検証]]したりすることで、
[[解読]]した[[文書]]の[[一貫性]]を検査する[['''べきです''']]。
[SRC[[[RFC 4287]] 5.2., >>41]]

** 署名と暗号化

[33] [[Atom文書]]に[[署名]]と[[暗号化]]の両方が施されるときは、
普通は[[文書]]に[[署名]]を加えた上で[[暗号化]]するのがいいです。
そうすると[[暗号化]]を行いつつもとの[[文書]]の[[一貫性]]の保証が署名者の識別も含めて行えます。
なお、認証に [[MAC]] を用いる場合には、[[署名]]の後に[[暗号化]]を行い、その逆の順序では行わないようにしなければ[['''なりません''']]。
[SRC[[[RFC 4287]] 5.2., >>41]]

* [CODE(MIME)@en[application/atom+xml]] 媒体型

[34] [[Atom文書]]を [[XML 1.0]] で[[直列化]]したものは
[DFN[[CODE(MIME)@en[[[application/atom+xml]]]]]] [[媒体型]]で識別できます
[SRC[[[RFC 4287]] 7.]]。

[4] [CODE(MIME)@en[[[application/atom+xml]]]] は [[RFC 4287]] 
では [[Atomフィード文書]]と [[Atomエントリー文書]]の共通の[[媒体型]]として規定されていましたが、
[[実装経験]]から両者を区別できた方がいいことがあるとわかったため、
[CODE(MIME)@en[[[type]]]] [[引数]]が [[RFC 5023]] で規定されています。
[SRC@en[[[AtomPub]]]]

[36] 
:状態:[[IETF]] [[提案標準]]
:[[媒体型]]:[CODE(MIME)@en[[[application/atom+xml]]]]
:[[拡張子]]:[CODE(file)[[[.atom]]]]
:[[Macinroshファイル型]]:[CODE@en[[[TEXT]]]]
:[[素片識別子]]:[CODE(MIME)@en[[[application/xml]]]] と同じ

** 仕様書

-[35]  [CITE@en[RFC 4287 - The Atom Syndication Format]]
-- '''<http://tools.ietf.org/html/rfc4287#section-7>'''
-[5] [CITE@en[RFC 5023 - The Atom Publishing Protocol]] 
-- <http://tools.ietf.org/html/rfc5023#section-12>
-- <http://tools.ietf.org/html/rfc5023#section-16.6>

** 引数

[51] 次の[[引数]]があります。
[FIG(short list)[
- [CODE(MIME)@en[[[charset]]]]
- [CODE(MIME)@en[[[kind]]]]
- [CODE(MIME)@en[[[profile]]]]
- [CODE(MIME)@en[[[type]]]]
]FIG]

*** [CODE(MIME)@en[charset]] 引数

[37] [CODE(MIME)@en[[[charset]]]] [[引数]]は [CODE(MIME)@en[[[application/xml]]]]
と同じと定義されています [SRC[[[RFC 4287]] 7.]]。

*** [CODE(MIME)@en[type]] 引数

[6] [DFN[[CODE(MIME)@en[type]] [[引数]]]]は、 [[Atom文書]]の種類を指定します。

[7] 仕様書:
[CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) <http://tools.ietf.org/html/rfc5023#section-12.1>

*** 引数値

[8] 次の値が定義されています。
[SRC@en[[[AtomPub]]]]

:[CODE(MIME)@en[[[entry]]]]:[[Atomエントリー文書]]を表します。
:[CODE(MIME)@en[[[feed]]]]:[[Atomフィード文書]]を表します。

[9] 値は[[大文字]]・[[小文字]]を区別しま''せん''。
[SRC@en[[[AtomPub]]]]

*** 既定値

[10] この[[引数]]が指定されていない場合、型は未指定であり、
実際に[[根要素]]を調べる必要があります。
[SRC@en[[[AtomPub]]]]

[12] [[Atomエントリー文書]]の[[生産者]]は、この[[引数]]を使う[['''べきです''']]。
[SRC@en[[[AtomPub]]]]

*** 処理モデル

[13] [CODE(MIME)@en[[[type]]]] [[引数]]を認識しない [[Atom処理器]]は、
[[根要素]]によって[[文書型]]を決定しなければ[['''なりません''']]。
[SRC@en[[[AtomPub]]]]

[14] [CODE(MIME)@en[[[type]]]] [[引数]]を認識する [[Atom処理器]]は、
[[根要素]]と [CODE(MIME)@en[[[type]]]] の不整合を検出し報告する[['''べきです''']]。
[SRC@en[[[AtomPub]]]]

*** 関連

[11] 新しい仕様書は [CODE(MIME)@en[[[type]]]] の使用を要求しても[['''構いません''']]。
[SRC@en[[[AtomPub]]]]

[42] [[削除済みエントリー文書]]には [CODE(MIME)@en[[[application/atomdeleted+xml]]]]
が別途用意されています。

** 素片識別子

[38] [CODE(MIME)@en[[[charset]]]] [[引数]]は [CODE(MIME)@en[[[application/xml]]]]
と同じと定義されています [SRC[[[RFC 4287]] 7.]]。

* Atom 文書でよく用いられる名前空間

** Atom 1.0 フィード文書でよく用いられる名前空間

[FIG[
- [[既定名前空間]] or [CODE(XML)@en[[[atom]]]] [CODE(URI)@en[[[http://www.w3.org/2005/Atom]]]]
- [CODE(XML)@en[[[batch]]]] [CODE(URI)@en[[[http://schemas.google.com/gdata/batch]]]]
- [CODE(XML)@en[[[gCal]]]] [CODE(URI)@en[[[http://schemas.google.com/gCal/2005]]]]
- [CODE(XML)@en[[[gd]]]] [CODE(URI)@en[[[http://schemas.google.com/g/2005]]]]
- [CODE(XML)@en[[[openSearch]]]] [CODE(URI)@en[[[http://a9.com/-/spec/opensearchrss/1.0/]]]]
-[CODE(XML)@en[[[pheedo]]]] [CODE(URI)@en[[[http://www.pheedo.com/namespace/pheedo]]]]
- [CODE(XML)@en[[[xhtml]]]] [CODE(URI)@en[[[http://www.w3.org/1999/xhtml]]]]
- [CODE(XML)@en[[[xml]]]] [CODE(URI)@en[[[http://www.w3.org/XML/1998/namespace]]]]
- [CODE(XML)@en[[[xmlns]]]] [CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]]
]FIG]

** Atom 1.0 フィード文書で使える名前空間

[15] 複数用例があれば前節に移動する。
[FIG[
- [CODE(XML)@en[[[at]]]] [CODE(URI)@en[[[http://purl.org/atompub/tombstones/1.0]]]]
- [CODE(XML)@en[[[sx]]]] [CODE(URI)@en[[[http://www.microsoft.com/schemas/sse]]]]
]FIG]

** Atom 0.3 文書でよく用いられる名前空間

[FIG[
- [[既定名前空間]] [CODE(URI)@en[[[http://purl.org/atom/ns#]]]
- [CODE(XML)@en[[[dc]]]] [CODE(URI)@en[[[http://purl.org/dc/elements/1.1/]]]]
-- [CODE(XMLe)@en[dc:[[subject]]]] を見かけました。
]FIG]

[43] [CITE@en[draft-wilde-atom-profile-02 - Profile Support for the Atom Syndication Format]]
( ([TIME[2013-08-14 16:15:26 +09:00]] 版))
<http://tools.ietf.org/html/draft-wilde-atom-profile-02>

[49] [CITE@en[2.2.5.1 Accept]]
( ([TIME[2014-03-24 09:58:51 +09:00]] 版))
<http://msdn.microsoft.com/en-us/library/dd541269.aspx>

[FIG(quote)[
[FIGCAPTION[
[50] [CITE@en-US[OPDS Catalog 1.1]]
([TIME[2015-11-18 17:57:32 +09:00]] 版)
<http://opds-spec.org/specs/opds-catalog-1-1-20110627/>
]FIGCAPTION]

> Links to Acquisition Feeds SHOULD use the "type" attribute "application/atom+xml;profile=opds-catalog;kind=acquisition".

]FIG]


[FIG(quote)[
[FIGCAPTION[
[52] [CITE@en-US[OPDS Catalog 1.1]]
([TIME[2015-11-19 00:32:46 +09:00]] 版)
<http://opds-spec.org/specs/opds-catalog-1-1-20110627/#Acquisition_Feeds>
]FIGCAPTION]

> Links to Acquisition Feeds SHOULD use the "type" attribute "application/atom+xml;profile=opds-catalog;kind=acquisition".

]FIG]


[FIG(quote)[
[FIGCAPTION[
[53] [CITE@en-US[OPDS Catalog 1.1]]
([TIME[2015-11-19 00:49:59 +09:00]] 版)
<http://opds-spec.org/specs/opds-catalog-1-1-20110627/#Search>
]FIGCAPTION]

> <Url type="application/atom+xml;profile=opds-catalog"
>     template="http://example.com/search?q={searchTerms}" />

]FIG]


[FIG(quote)[
[FIGCAPTION[
[54] [CITE@en-US[OPDS Catalog 1.1]]
([TIME[2015-11-19 00:57:47 +09:00]] 版)
<http://opds-spec.org/specs/opds-catalog-1-1-20110627/#The_OPDS_Catalog_Profile_Parameter>
]FIGCAPTION]

> Relations to OPDS Catalog Feed Document and OPDS Catalog Entry Document Resources SHOULD use a "profile" parameter following Section 4.3 of '''['''RFC4288''']''' with the value "opds-catalog". This profile parameter provides clients with an advisory hint that the Resource should be a component of an OPDS Catalog.
> The complete media type for a relation to an OPDS Catalog Entry Document Resource SHOULD be:
> application/atom+xml;type=entry;profile=opds-catalog
> The complete media type for a relation to an OPDS Catalog Feed Document Resource SHOULD be:
> application/atom+xml;profile=opds-catalog

]FIG]


[FIG(quote)[
[FIGCAPTION[
[55] [CITE@en-US[OPDS Catalog 1.1]]
([TIME[2015-11-19 00:58:04 +09:00]] 版)
<http://opds-spec.org/specs/opds-catalog-1-1-20110627/#The_OPDS_Kind_Parameter>
]FIGCAPTION]

> In addition to the new "profile" parameter, this specification also introduces a new "kind" parameter following Section 4.3 of '''['''RFC4288''']''' with the value "acquisition" or "navigation". This "kind" parameter provides clients with an advisory hint whether the Resource should be an Acquisition Feed or a Navigation Feed.
> The complete media type for a relation to an Acquisition Feed SHOULD be:
> application/atom+xml;profile=opds-catalog;kind=acquisition
> The complete media type for a relation to a Navigation Feed SHOULD be:
> application/atom+xml;profile=opds-catalog;kind=navigation

]FIG]


[FIG(quote)[
[FIGCAPTION[
[56] [CITE[Protocol Summary - Salmon Protocol]]
([TIME[2017-03-30 17:22:57 +09:00]])
<http://www.salmon-protocol.org/salmon-protocol-summary>
]FIGCAPTION]

> Content-Type: application/atom+xml
> <?xml version='1.0' encoding='UTF-8'?>
> <me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">
>     <me:data type='application/atom+xml'>

]FIG]


[FIG(quote)[
[FIGCAPTION[
[57] [CITE@en[EPUB Previews 1.0]]
([TIME[2015-09-11 07:19:22 +09:00]])
<http://www.idpf.org/epub/previews/epub-previews-20150826.html#sec-4>
]FIGCAPTION]

> While this relationship value may be used with any potential media type, this specification recommends using either "text/html" for publications that can be acquired in a browser, or "application/atom+xml;type=entry;profile=opds-catalog" for an '''['''OPDS''']''' entry.

]FIG]
