* [CODE(XMLe)@en[atom:id]] 要素 (Atom 1.0)

[16] [DFN[[CODE(XMLe)@en[[[atom:id]]]] [[要素]]]]は、
[[エントリー]]や[[フィード]]の[[永続的]]・[[普遍的]]に[[固有]]な[[識別子]]を表します
[SRC[[[RFC 4287]] 4.2.6.]]。

[9] 
:状態:[[IETF]] [[提案標準]]
:[[要素名]]:[CODE(XMLe)@en[[[id]]]] (「[RUBYB[[[識別子]]]@en[identifier]]」より)
:文脈:[CODE(XMLe)@en[[[atom:feed]]]] の[[子要素]]として、
[CODE(XMLe)@en[[[atom:entry]]]] の[[子要素]]として
:[[内容モデル]]:[[URL]]
:[[属性]]:

** 仕様書

[REFS[
-[10] [CITE@en[RFC 4287 - The Atom Syndication Format]]
-- <http://tools.ietf.org/html/rfc4287#section-4.1.1>
-- <http://tools.ietf.org/html/rfc4287#section-4.1.2>
-- '''<http://tools.ietf.org/html/rfc4287#section-4.2.6>'''
-- <http://tools.ietf.org/html/rfc4287#section-8.4>
]REFS]

** 文脈

[11] この[[要素]]は [CODE(XMLe)@en[[[atom:feed]]]] の[[子要素]]として1つだけ必ず使用しなければ'''なりません'''
[SRC@en[[[Atom 1.0]] 4.1.1.]]。

[13] この[[要素]]は [CODE(XMLe)@en[[[atom:entry]]]] の[[子要素]]として1つだけ必ず使用しなければ'''なりません'''
[SRC@en[[[Atom 1.0]] 4.1.2.]]。

** 内容

[17] この[[要素]]の[[内容]]は [[RFC 3987]] [[IRI]] ([[IRI参照]]ではなく。)
で[['''なければなりません''']] [SRC[[[RFC 4287]] 4.2.6.]]。

[18] [[RELAX NG]] [[スキーマ]] ([[参考]]) 上の[[データ型]]は
[CODE(XML)@en[[[atomUri]]]] です [SRC[[[RFC 4287]] 4.2.6.]]。

** 処理モデル

[19] [[Atom処理器]]は[[内容]]である [[URL]] が[[解参照]]可能であると仮定しては[['''なりません''']]
[SRC[[[RFC 4287]] 4.2.6.]]。

[20] [[Atom文書]]が移動、輸出入、再出版その他の扱いを受ける時に [CODE(XMLe)@en[[[atom:id]]]]
を変更しては[['''なりません''']] [SRC[[[RFC 4287]] 4.2.6.]]。

*** 生成

[21] [CODE(XMLe)@en[[[atom:id]]]] の[[内容]]はその[[固有性]]が保障される方法で生成しなければ[['''なりません''']]
[SRC[[[RFC 4287]] 4.2.6.]]。

[22] 生成時には、[[解参照]]による混乱を防ぐため、次の[[正規化]]を行っておく[['''べきです''']]
[SRC[[[RFC 4287]] 4.2.6.]]。

- [[scheme]] を[[小文字]]にする
- [[host]] があれば[[小文字]]にする
- [[百分率符号化]]は必要な場合に留める
- [[百分率符号化]]には[[大文字]]を使う
- [[dot-segment]] が [[path]] に現れないようにする
- [[authority]] の[[既定値]]がある [[scheme]] では[[既定値]]の時は [[authority]]
を[[空]]にする
- [[空]]の [[path]] が [CODE(URI)[[[/]]]] と等しい [[scheme]]
では [CODE(URI)[[[/]]]] を使う
- [[port]] を定義する [[scheme]] では[[既定値]]の時は [[port]] を[[空]]にする
- [[空]]の[[素片識別子]]と [[query]] はそのままにする
- [[IRI]] の全[[構成部品]]を [[NFC]] や [[NFKC]] のようなもので適当に[[正規化]]する

[23] >>22 は[[空]]の [[port]] といっていますが、意図は [[port]] 部分を省略する、
ということではないのでしょうか。

*** 比較

[8] 値の比較の方法については、[[URLの比較]]の項を参照してください。

[12] [[Atomフィード文書]]内に同じ [CODE(XMLe)@en[[[atom:id]]]]
の [CODE(XMLe)@en[[[atom:entry]]]] [[要素]]が複数存在する場合、
それらは同じ[[エントリー]]を表します [SRC@en[[[Atom 1.0]] 4.1.1.]]
詳しくは [CODE(XMLe)@en[[[atom:entry]]]] の項を参照してください。

** 保安性に関して

[24] [[RFC 4287]] 8.4. 節では ID の詐称による[[なりすまし]]への注意が喚起されています。

** 関連

[15] [[RSS 2.0]] の [CODE(XMLe)@en[[[guid]]]] [[要素]]と似ています。
[CODE(XMLe)@en[[[guid]]]] では [[URL]] でない値を用いることもできますが、
[CODE(XMLe)@en[[[atom:id]]]] は [[URL]] でなければなりません。

[14] [[SGML]]/[[XML]] の [[ID]] や [[HTML]] の [CODE(HTMLa)@en[[[id]]]]
とは名前こそ似ていますが、意味が大きく異なります。それらは[[文書]]''内''で[[一意]]な識別子であるのに対し、 [CODE(XMLe)@en[[[atom:id]]]]
は同じものが [[Atomフィード文書]]内で複数使われていても構いません
[WEAK[(もちろん、同じ値なら同じ [[Atomエントリー]]を表すとみなされます)]]。
構文的にも、 [[HTML]] では任意の文字列が認められているのに対して、
[CODE(XMLe)@en[[[atom:id]]]] は [[URL]] でなければなりません。

[25] [CODE(XMLe)@en[[[thr:in-reply-to]]]] [[要素]]と [CODE(XMLe)@en[[[at:deleted-entry]]]]
[[要素]]には [CODE(XMLa)@en[[[ref]]]] [[属性]]があり、 [CODE(XML)@en[[[atom:id]]]] [[要素]]の値と同様に[[エントリー]]の識別子が指定されることが想定されています。
前者については [CODE(XMLe)@en[[[atom:id]]]] と同じような要件が課されています。後者は
[[URL]] であること以上は明記されていませんが、削除前の [CODE(XMLe)@en[[[atom:id]]]]
と同じであることが要求されており、間接的ながら同じ条件が課されているとも解し得ます。

* [CODE(XMLe)@en[atom:id]] 要素 (Atom 0.3)

[1] 
[[Atom 0.3]] の [DFN[[CODE(XMLe)@en[atom:id]] [[要素]]]]は、
[[フィード]]や[[エントリー]]の[[永続的]]で[[大域的]]に固有な識別子を表します
[SRC@en[[[Atom 0.3]]]]。

:状態:[[廃止]] → [[Atom 1.0]] [CODE(XMLe)@en[atom:[[id]]]]
:[[局所名]]:[CODE(XMLe)@en[atom:[[id]]]]
:文脈:[CODE(XMLe)@en[atom:[[feed]]]] や
[CODE(XMLe)@en[atom:[[entry]]]] の[[子要素]]として
:[[内容モデル]]:[[URI]]
:[[属性]]:

仕様書:
-[CITE[The Atom Syndication Format 0.3 (PRE-DRAFT)]] ([TIME[2006-12-22 17:03:44 +09:00]] 版)
-- <http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.4.8>
-- <http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.4.13.5>

** 内容

[2] この[[要素]]の[[内容]]は[[フィード]]を永続的、大域的に固有な識別子です。
この識別子は時を経ても、たとえ[[フィード]]の[[所在]]や[[エントリー]]の他の[[表現]]の[[所在]]が変化したとしても、
変わっては[['''なりません''']]。[SRC@en[[[Atom 0.3]]]]

[3]
[CODE(XMLe)@en[atom:[[feed]]]] の[[子要素]]の場合は、
[[内容]]は [[URI]] でなければ[['''なりません''']] [SRC@en[[[Atom 0.3]]]]。
[[URI]] の定義は明記されていませんが、仕様書中で「[[URI]]」が初めて登場する箇所で
[[RFC 2396]]  が引用されており、ここでも [[RFC 2396]] を指すと思われます。
[[URI]] が文字通り [[RFC 2396]] [[URI]] を表すのか、
あるいは [[URI参照]]を表すのかは不明です
([[相対URI]]が使えるのか、[[素片識別子]]が使えるのかが異なります)。[[Atom 0.3]] 2章の規定により
[CODE(XMLe)@en[[[xml]]:[[base]]]] [[属性]]はこの[[要素]]には適用されません。

[5] [CODE(XMLe)@en[atom:[[entry]]]] の[[子要素]]の場合は[[内容]]が [[URI]]
とは規定されていませんが、ミスでしょうか。

[6] [CODE(XMLe)@en[atom:[[entry]]]] の[[子要素]]の場合、
同じ[[エントリー]]が同じ[[実体]]によって出版される別の[[フィード]]に含まれる場合、
両者の [CODE(XMLe)@en[atom:[[id]]]] は同じでなければ[['''なりません''']]
[SRC@en[[[Atom 0.3]]]]。

**文脈

[4]
この[[要素]]は [CODE(XMLe)@en[atom:[[feed]]]] [[要素]]の[[子要素]]として高々1つ使うことができます
[SRC@en[[[Atom 0.3]]]]。

[7] 
[CODE(XMLe)@en[atom:[[entry]]]] [[要素]]の[[子要素]]として何個使えるのかは
[[Atom 0.3]] では規定されていません。

[26] [CITE@en[Citation Style Language 1.0.1]]
( ([TIME[2014-10-01 11:57:04 +09:00]] 版))
<http://citationstyles.org/downloads/specification.html#info>

[FIG(quote)[
[FIGCAPTION[
[27] ([TIME[2016-03-19 20:28:31 +09:00]] 版)
<https://www.youtube.com/feeds/videos.xml?channel_id=UCpGY2vcoKXf7K6tFzsbSv7w>
]FIGCAPTION]

> 
>  <entry>
>   <id>yt:video:ZKzcuWWU1Yk</id>
>   <yt:videoId>ZKzcuWWU1Yk</yt:videoId>
>   <yt:channelId>UCpGY2vcoKXf7K6tFzsbSv7w</yt:channelId>

]FIG]


[FIG(quote)[
[FIGCAPTION[
[28] [CITE@ja[Movable Type 3.x デフォルト・テンプレートのAtomフィードの不具合について | Movable Type ニュース]]
([TIME[2017-02-11 18:00:39 +09:00]])
<https://www.sixapart.jp/movabletype/news/2006/12/04-1000.html>
]FIGCAPTION]

> この記述は、ブログのホスト名、再構築時の年、ブログの相対URL、ブログのIDに依存しており、これらのいずれかが変更されると値が変わってしまい、ユニークなIDとしての役目を果たしません。特に、年をまたぐと、ブログの管理者自身は何も変更していないにもかかわらず、IDが変わってしまうことになります。
> 

]FIG]
