Many people think that just stating that atom:id should be a globally unique URI isn't enough. This pace adds some specification text that recommends URI schemes that can be used as Atom identifires.



Related paces


The current specification text about atom:id does not give enough information on how to conform to the requirements given for atom:id and the requirements aren't thoroughly enough specified. This pace seeks to define atom:id better with the goal to have tools generate more universally unique and immutable ID's. This is achieved both with better and more specification text, with recommending URI schemes, with discouraging bad practice, and with examples.


Replace section 4.2.6 and 5.5, and append a section to "3. Common Atom Constructs".

3.5 Identification Constructs

An Identification construct is an element whose content identifies the parent element of the construct. If nothing else is stated for a given Identification construct, the following rules apply:

The URI scheme of an Identification construct MAY be a dereferencable URL scheme (like HTTP), but MUST NOT be expected to be one. That means that atom:id MUST NOT be expected to be dereferencable; it is just an identifier. The recommended URI scheme for atom:id is RFC-[RFC]3085 ("NewsML ID").

If the identified resource is served dynamically, the content of an Identification construct MUST be created only once and then stored along with the resource. The content of an Identification construct MUST NOT be created dynamically.

4.2.6 "atom:id" Element

"atom:id" is an Identification construct that conveys a permanent, universally unique identifier for a feed. atom:head elements MAY contain an atom:id element, but MUST NOT contain more than one.

5.5 "atom:id" Element

"atom:id" is an Identification construct that conveys a permanent, universally unique identifier for an entry. atom:entry MUST contain exactly one atom:id element.

As defined in "3.5 Identification Construct", atom:id, MUST NOT change over time, even if other representations of the entry (such as a web representation pointed to by the entry's atom:link element) are relocated. For a given entry, the atom:id element's content MUST be stable across all Atom documents published by the same entity. This means that if the entry is represented in many different feeds simultaneously, the atom:id of these entries MUST be the same. Also, if the entry is migrated, imported or exported, the atom:id MUST NOT change.


This impacts mostly how atom:id's are generated, since they can't just be the ever-changing URI of the so-called "permalink" to the entry.