[1] [[RFC 4287]] では、 [[Atom 1.0]] として [[Atomフィード文書]]と [[Atomエントリー文書]]の2種類の[[文書]]を定義しています [SRC@en[[[Atom 1.0]] 2.]]。 [2] [[Atom 0.3]] で定義されていた [[Atomフィード文書]]は [[Atomフィード文書]]に相当します。 [3] [[AtomPub]] では[[分類文書]]と[[サービス文書]]の2種類の[[文書]]が定義されています [SRC@en[[[AtomPub]]]]。 ;; [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) [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]]]] * 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]] 版) - [41] [CITE@en[RFC 6721 - The Atom "deleted-entry" Element]] ([TIME[2012-12-31 01:08:20 +09:00]] 版) ]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(MIME)@en[[[charset]]]]、[CODE(MIME)@en[[[type]]]] :[[拡張子]]:[CODE(file)[[[.atom]]]] :[[Macinroshファイル型]]:[CODE@en[[[TEXT]]]] :[[素片識別子]]:[CODE(MIME)@en[[[application/xml]]]] と同じ ** 仕様書 -[35] [CITE@en[RFC 4287 - The Atom Syndication Format]] -- '''''' -[5] [CITE@en[RFC 5023 - The Atom Publishing Protocol]] -- -- ** [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]] 版) *** 引数値 [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]