Ce document est une traduction du document RFC 4287 de l'IETF (Internet Engineering Task Force) ;
il peut comporter des erreurs ou en introduire de nouvelles. Seul fait référence l'original disponible à
ftp://ftp.rfc-editor.org/in-notes/rfc4287.txt.
La traduction est proposée sous licence Creative Commons.
Date de publication : 5 août 2008.
Network Working Group M. Nottingham, Ed. Document RFC : 4287 (errata) R. Sayre, Ed. Catégorie : Standards Track Décembre 2005
Ce document définit un protocole du circuit des standards Internet de la communauté Internet, et il appelle le débat et des suggestions d'amélioration. Veuillez consulter l'édition courante du document Internet Official Protocol Standards (STD 1) pour l'état de standardisation et le statut de ce protocole. La distribution de ce mémoire est libre.
Copyright © The Internet Society (2005).
Ce document spécifie le format Atom d'agrégation de contenus et de métadonnées web fondé sur XML.
type
atom:name
atom:uri
atom:email
atom:feed
atom:entry
atom:content
atom:author
atom:category
atom:contributor
atom:generator
atom:icon
atom:id
atom:link
atom:logo
atom:published
atom:rights
atom:source
atom:subtitle
atom:summary
atom:title
atom:updated
Atom est un format de document fondé sur XML qui décrit des listes d'informations liées, connues sous le nom de « fils » (feeds). Les fils se composent d'un certain nombre d'articles, appelés des « entrées » (entries), chacune avec un ensemble extensible de métadonnées jointes. Par exemple, chaque entrée a un titre.
Le cas d'utilisation principal auquel Atom répond est l'agrégation (syndication) de contenus web tels que blogues et gros titres de l'actualité vers des sites web ou directement vers des agents utilisateurs.
Voici un document de fil Atom (Atom feed document) court avec une seule entrée :
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Example Feed</title> <link href="http://example.org/"/> <updated>2003-12-13T18:30:02Z</updated> <author> <name>John Doe</name> </author> <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> <entry> <title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <summary>Some text.</summary> </entry> </feed>
Un document de fil Atom plus complet avec une seule entrée :
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title type="text">dive into mark</title> <subtitle type="html"> A <em>lot</em> of effort went into making this effortless </subtitle> <updated>2005-07-31T12:29:29Z</updated> <id>tag:example.org,2003:3</id> <link rel="alternate" type="text/html" hreflang="en" href="http://example.org/"/> <link rel="self" type="application/atom+xml" href="http://example.org/feed.atom"/> <rights>Copyright (c) 2003, Mark Pilgrim</rights> <generator uri="http://www.example.com/" version="1.0"> Example Toolkit </generator> <entry> <title>Atom draft-07 snapshot</title> <link rel="alternate" type="text/html" href="http://example.org/2005/04/02/atom"/> <link rel="enclosure" type="audio/mpeg" length="1337" href="http://example.org/audio/ph34r_my_podcast.mp3"/> <id>tag:example.org,2003:3.2397</id> <updated>2005-07-31T12:29:29Z</updated> <published>2003-12-13T08:29:29-04:00</published> <author> <name>Mark Pilgrim</name> <uri>http://example.org/</uri> <email>f8dy@example.com</email> </author> <contributor> <name>Sam Ruby</name> </contributor> <contributor> <name>Joe Gregorio</name> </contributor> <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/"> <div xmlns="http://www.w3.org/1999/xhtml"> <p><i>[Update: The Atom draft is finished.]</i></p> </div> </content> </entry> </feed>
L'adresse URI d'espace de noms XML [W3C.REC-xml-names-19990114] du format de données XML décrit dans cette spécification est le suivant :
http://www.w3.org/2005/Atom
Par commodité, on peut désigner ce format de données par « Atom 1.0 ». En interne, cette spécification emploie « Atom ».
Cette spécification décrit la conformité en fonction de deux artéfacts : les documents de fil Atom et les documents d'entrée Atom (Atom entry documents). Elle définit en outre quelques contraintes sur les processeurs Atom.
Cette spécification emploie le préfixe d'espace de noms « atom: » pour l'adresse URI de l'espace de noms identifié précédemment à la section 1.2. Notez que le choix du préfixe d'espace de noms est arbitraire et sans importance sémantique.
Le format Atom est spécifié à l'aide de termes de l'ensemble d'information XML (XML Infoset) [W3C.REC-xml-infoset-20040204]. Toutefois, cette spécification abrège deux termes courants : la phrase « item d'information » est omise pour le nommage des items d'information d'élément (element information items) et des items d'information d'attribut (attribute information items). Ainsi, lorsque cette spécification emploie le terme « élément », elle se réfère à un item d'information d'élément dans la terminologie Infoset. De même, pour « attribut », qui se réfère à un item d'information d'attribut.
Certaines sections de cette spécification sont illustrées par des fragments d'un schéma RELAX NG Compact non normatif [RELAX-NG]. En revanche, le texte de cette spécification fournit la définition de conformité. Un schéma complet est disponible en annexe B.
Les mots-clés « DOIT », « NE DOIT PAS », « OBLIGATOIRE », « DEVRA », « NE DEVRA PAS », « DEVRAIT », « NE DEVRAIT PAS », « RECOMMANDÉ », « PEUT » et « OPTIONNEL » dans cette spécification doivent s'interpréter comme décrit dans le document BCP 14, [RFC2119], selon les objectifs de conformité.
Cette spécification décrit deux types de documents Atom : les documents de fil Atom et les documents d'entrée Atom.
Un document de fil Atom (Atom feed document) est une représentation d'un fil Atom,
contenant des métadonnées à propos du fil et certaines ou toutes les entrées qui lui sont associées.
Sa racine est l'élément atom:feed
.
Un document d'entrée Atom (Atom entry document) représente exactement une seule entrée Atom,
hors du contexte d'un fil Atom. Sa racine est l'élément atom:entry
.
namespace atom = "http://www.w3.org/2005/Atom" start = atomFeed | atomEntry
Les deux types de documents Atom sont spécifiés en fonction de l'ensemble d'information XML, sérialisés en
XML 1.0 [W3C.REC-xml-20040204] et identifiés par le type de média
"application/atom+xml
". Les documents Atom DOIVENT être du
XML bien formé. Cette spécification n'établit pas de définition DTD
pour les documents Atom, et n'exige donc pas qu'ils soient valides (au sens de XML).
Atom autorise l'utilisation d'adresses IRI [RFC3987]. Toute adresse URI [RFC3986] est aussi une adresse IRI, et une adresse URI peut donc être utilisée partout subordonnée à une adresse IRI nommée. Deux règles particulières sont à observer :
atom:id
,
on NE DOIT PAS l'associer ainsi, afin que la comparaison décrite
à la section 4.2.6.1 fonctionne.Tout élément défini par cette spécification PEUT avoir un attribut xml:base
[W3C.REC-xmlbase-20010627]. Lorsque l'attribut xml:base
est utilisé
dans un document Atom, sa fonction est celle décrite à la section 5.1.1 du document [RFC3986],
qui est d'établir l'adresse URI (ou IRI) de base pour la résolution des références relatives
trouvées dans la portée effective de l'attribut xml:base
.
Tout élément défini par cette spécification PEUT avoir un attribut xml:lang
,
dont le contenu indique le langage naturel de l'élément et ses descendants. Le contexte de langue n'a d'importance que pour les
éléments et attributs signalés comme « sensibles à la langue » (language sensitive) par
cette spécicification. Les exigences concernant le contenu et l'interprétation de l'attribut xml:lang
sont définies
à la section 2.12 de la spécification XML 1.0 [W3C.REC-xml-20040204].
atomCommonAttributes = attribute xml:base { atomUri }?, attribute xml:lang { atomLanguageTag }?, undefinedAttribute*
Atom est un format extensible. Cf. la section 6 de ce document pour une description complète de la façon d'étendre les documents Atom.
Les processeurs Atom PEUVENT maintenir un état alimenté par (sourced from) des documents de fil Atom et les combiner à d'autres documents de fil Atom, afin de faciliter une vue contiguë des contenus d'un fil. La façon de combiner les documents de fil Atom pour reconstruire un fil (par exemple, la mise à jour d'entrées et de métadonnées, la prise en charge d'entrées manquantes) n'est pas traitée par cette spécification.
Nombre d'éléments Atom partagent quelques structures communes. Cette section définit ces structures et leurs exigences pour une référence pratique par les définitions d'élément appropriées.
Lorsqu'un élément est identifié comme étant un type particulier de structure, il hérite des exigences correspondantes de la définition de cette structure dans cette section.
Notez qu'il NE DOIT PAS y avoir de caractères blancs (white space) dans une structure de date ou dans une adresse IRI. Certaines mises en œuvre générant du XML insèrent par erreur systématiquement (default) des caractères blancs autour des valeurs, et celles-ci produiront des documents Atom invalides.
Une structure de texte contient du texte intelligible (human-readable), habituellement en petites quantités. Le contenu des structures de texte est sensible à la langue.
atomPlainTextConstruct = atomCommonAttributes, attribute type { "text" | "html" }?, text atomXHTMLTextConstruct = atomCommonAttributes, attribute type { "xhtml" }, xhtmlDiv atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
type
Les structures de texte PEUVENT avoir un attribut type
. Si présent,
sa valeur DOIT être l'une parmi "text
", "html
"
et "xhtml
". Si l'attribut type
est absent, les processeurs Atom
DOIVENT se comporter comme s'il était présent avec une valeur de "text
".
Contrairement à l'élément atom:content
défini à la section 4.1.3,
on NE DOIT PAS utiliser de types de média MIME [MIMEREG]
comme valeurs de l'attribut type
sur les structures de texte.
text
Exemple d'élément atom:title
avec du contenu textuel :
... <title type="text"> Less: < </title> ...
Si la valeur est "text
", le contenu de la structure de texte NE DOIT PAS
contenir de sous-éléments (child elements). Un tel texte est prévu pour être présenté à
des humains de manière intelligible. Les processeurs Atom PEUVENT donc réduire (collapse)
les caractères blancs (y compris les sauts de ligne) et afficher le texte en utilisant des techniques typographiques telles
que justification et fontes proportionnelles.
html
Exemple d'élément atom:title
avec du contenu HTML :
... <title type="html"> Less: <em> < </em> </title> ...
Si la valeur de type
est "html
", la structure de texte
NE DOIT PAS contenir de sous-éléments et son contenu DEVRAIT être adapté
à un traitement en tant que HTML [HTML]. Tout balisage contenu DOIT
subir un codage d'échappement (escaped), par exemple <BR>
en <BR>
.
Le balisage HTML contenu DEVRAIT être tel qu'il pourrait apparaître directement dans
un élément HTML <DIV>
, après décodage d'échappement (unescaping).
Les processeurs Atom affichant un tel contenu PEUVENT utiliser ce balisage pour aider à son affichage.
xhtml
Exemple d'élément atom:title
avec du contenu XHTML :
... <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <xhtml:div> Less: <xhtml:em> < </xhtml:em> </xhtml:div> </title> ...
Si la valeur de type
est "xhtml
", le contenu DOIT
être un seul élément XHTML div
[XHTML] et DEVRAIT
être adapté à un traitement en tant que XHTML. L'élément XHTML div
lui-même
NE DOIT PAS être considéré comme faisant partie du contenu. Les processeurs Atom affichant le contenu
PEUVENT utiliser le balisage pour aider à son affichage. Les versions codées de
caractères tels que & et > (N.d.T. codés en & et >)
représentent ces caractères, et non du balisage.
Exemples de contenu XHTML valide :
... <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> This is <b>XHTML</b> content. </div> </summary> ... <summary type="xhtml"> <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> This is <xhtml:b>XHTML</xhtml:b> content. </xhtml:div> </summary> ...
L'exemple suivant suppose une liaison de l'espace de noms XHTML au préfixe « xh » plus tôt dans le document :
... <summary type="xhtml"> <xh:div> This is <xh:b>XHTML</xh:b> content. </xh:div> </summary> ...
Une structure de personne est un élément qui décrit une personne, une entreprise ou une entité similaire (ci-après une « personne »).
atomPersonConstruct = atomCommonAttributes, (element atom:name { text } & element atom:uri { atomUri }? & element atom:email { atomEmailAddress }? & extensionElement*)
Cette spécification n'attribue aucune signification à l'ordre d'apparition des sous-éléments dans une structure de personne. Les structures de personne autorisent l'extension des éléments de métadonnées (cf. la section 6.4).
atom:name
Le contenu de l'élément atom:name
communique un nom intelligible pour la personne.
Le contenu de atom:name
est sensible à la langue. Les structures de personne DOIVENT
contenir exactement un seul élément atom:name
.
atom:uri
Le contenu de l'élément atom:uri
communique une adresse IRI associée à la personne.
Les structures de personne PEUVENT contenir un élément atom:uri
mais NE DOIVENT PAS en contenir plus d'un. Le contenu de atom:uri
dans une structure de personne DOIT être une référence IRI (IRI reference)
[RFC3987].
atom:email
Le contenu de l'élément atom:email
communique une adresse électronique associée à la personne.
Les structures de personne PEUVENT contenir un élément atom:email
mais NE DOIVENT PAS en contenir plus d'un. Son contenu DOIT
être conforme à la production "addr-spec" dans le document [RFC2822].
Une structure de date est un élément dont le contenu DOIT être conforme à la production "date-time" dans le document [RFC3339]. En outre, on DOIT utiliser un caractère LETTRE LATINE T MAJUSCULE pour séparer la date et l'heure, et on DOIT utiliser un caractère LETTRE LATINE Z MAJUSCULE en l'absence d'un décalage de fuseau horaire numérique.
atomDateConstruct = atomCommonAttributes, xsd:dateTime
De telles valeurs de date sont compatibles avec les spécifications suivantes : [ISO.8601.1988], [W3C.NOTE-datetime-19980827] et [W3C.REC-xmlschema-2-20041028].
Exemple de structures de date :
<updated>2003-12-13T18:30:02Z</updated> <updated>2003-12-13T18:30:02.25Z</updated> <updated>2003-12-13T18:30:02+01:00</updated> <updated>2003-12-13T18:30:02.25+01:00</updated>
Les valeurs de date DEVRAIENT être aussi précises que possibles. Par exemple, il ne serait pas approprié en général pour un système de publication d'appliquer la même estampille (timestamp) à plusieurs entrées publiées le même jour.
atom:feed
L'élément atom:feed
est l'élément de document (c'est-à-dire de niveau supérieur) d'un
document de fil Atom, agissant comme un conteneur des métadonnées et données associées au fil. Ses sous-éléments
consistent en éléments de métadonnées suivis de zéro ou plus sous-éléments atom:entry
.
atomFeed = element atom:feed { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContributor* & atomGenerator? & atomIcon? & atomId & atomLink* & atomLogo? & atomRights? & atomSubtitle? & atomTitle & atomUpdated & extensionElement*), atomEntry* }
Cette spécification n'attribue aucune signification à l'ordre des éléments atom:entry
dans le fil.
Les sous-éléments suivants sont définis par cette spécification (notez que la présence de certains éléments est obligatoire) :
atom:feed
DOIVENT contenir un ou plusieurs éléments
atom:author
, à moins que tous les sous-éléments atom:entry
de
l'élément atom:feed
ne contiennent au moins un élément atom:author
;atom:feed
PEUVENT contenir un nombre quelconque
d'éléments atom:category
;atom:feed
PEUVENT contenir un nombre quelconque
d'éléments atom:contributor
;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:generator
;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:icon
;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:logo
;atom:feed
DOIVENT contenir exactement un seul
élément atom:id
;atom:feed
DEVRAIENT contenir un élément atom:link
dont la valeur de l'attribut rel
est "self
". C'est adresse URI préférée
pour récupérer les documents de fil Atom représentant ce fil Atom ;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:link
dont la valeur de l'attribut rel
est "alternate
"
avec la même combinaison de valeurs d'attribut type
et hreflang
;atom:feed
PEUVENT contenir d'autres éléments
atom:link
hormis ceux décrits ci-dessus ;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:rights
;atom:feed
NE DOIVENT PAS contenir plus d'un
élément atom:subtitle
;atom:feed
DOIVENT contenir exactement un seul
élément atom:title
;atom:feed
DOIVENT contenir exactement un seul
élément atom:updated
.Si plusieurs éléments atom:entry
avec la même valeur de atom:id
apparaissent
dans un document de fil Atom, ils représentent la même entrée. Leurs estampilles atom:updated
DEVRAIENT être différentes. Si un document de fil Atom contient plusieurs entrées avec le même
atom:id
, les processeurs Atom PEUVENT choisir de tous les afficher ou
d'en afficher un sous-ensemble. Un comportement typique serait d'afficher seulement l'entrée avec l'estampille
atom:updated
la plus récente.
L'expérience montre que les fils avec un contenu textuel sont généralement plus utiles que ceux qui n'ont en pas.
Certaines applications (un exemple serait celui des indexeurs en texte intégral (full-text indexers))
nécessitent une quantité minimale de texte ou de (X)HTML pour fonctionner de manière fiable et prévisible.
Les créateurs de fils devraient être conscients de ces questions. Il est souhaitable que chaque élément atom:entry
contienne un élément atom:title
non vide, un élément atom:content
non vide, si présent,
et un élément atom:summary
non vide lorsque l'entrée ne contient pas
d'élément atom:content
. Toutefois, l'absence de atom:summary
n'est pas une erreur
et les processeurs Atom NE DOIVENT PAS fonctionner incorrectement (fail to function correctly)
du fait de cette absence.
atom:entry
L'élement atom:entry
représente une entrée individuelle, agissant comme un conteneur des métadonnées
et données associées à l'entrée. Cet élément peut apparaître comme sous-élément de atom:feed
,
ou comme l'élément de document (c'est-à-dire de niveau supérieur) d'un document d'entrée Atom autonome (stand-alone).
atomEntry = element atom:entry { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContent? & atomContributor* & atomId & atomLink* & atomPublished? & atomRights? & atomSource? & atomSummary? & atomTitle & atomUpdated & extensionElement*) }
Cette spécification n'attribue acune signification à l'ordre d'apparition des sous-éléments de atom:entry
.
Les sous-éléments suivants sont définis par cette spécification (notez qu'elle impose la présence de certains éléments) :
atom:entry
DOIVENT contenir un ou plusieurs
éléments atom:author
, à moins que l'élément atom:entry
ne contienne un
élément atom:source
contenant un élément atom:author
, ou dans un
document de fil Atom, que l'élément atom:feed
ne contienne lui-même un
élément atom:author
;atom:entry
PEUVENT contenir un nombre quelconque
d'éléments atom:category
;atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:content
;atom:entry
PEUVENT contenir un nombre quelconque
d'éléments atom:contributor
;atom:entry
DOIVENT contenir exeactement un seul
élément atom:id
;atom:entry
n'ayant pas de sous-élément atom:content
DOIVENT contenir au moins un élément atom:link
dont la valeur de
l'attribut rel
est "alternate
" ;atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:link
dont la valeur de l'attribut rel
est "alternate
"
avec la même combinaison de valeurs d'attribut type
et hreflang
;atom:entry
PEUVENT contenir d'autres
éléments atom:link
hormis ceux décrits ci-dessus ;atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:published
;atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:rights
;atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:source
;atom:entry
DOIVENT contenir un
élément atom:summary
dans l'un des cas suivants :
atom:entry
contient un élément atom:content
avec un
attribut src
(il est donc vide) ;atom:entry
a un contenu codé en Base64, c'est-à-dire que l'attribut type
de l'élément atom:content
est un type de média MIME [MIMEREG],
mais n'est pas un type de média XML [RFC3023], ne commence pas par « text/ »
et ne finit pas par « /xml » ou « +xml ».atom:entry
NE DOIVENT PAS contenir plus d'un
élément atom:summary
;atom:entry
DOIVENT contenir exactement un seul
élément atom:title
;atom:entry
DOIVENT contenir exactement un seul
élément atom:updated
.atom:content
L'élément atom:content
contient ou bien lie au contenu de l'entrée. Le contenu de
atom:content
est sensible à la langue.
atomInlineTextContent = element atom:content { atomCommonAttributes, attribute type { "text" | "html" }?, (text)* } atomInlineXHTMLContent = element atom:content { atomCommonAttributes, attribute type { "xhtml" }, xhtmlDiv } atomInlineOtherContent = element atom:content { atomCommonAttributes, attribute type { atomMediaType }?, (text|anyElement)* } atomOutOfLineContent = element atom:content { atomCommonAttributes, attribute type { atomMediaType }?, attribute src { atomUri }, empty } atomContent = atomInlineTextContent | atomInlineXHTMLContent | atomInlineOtherContent | atomOutOfLineContent
type
Sur l'élément atom:content
, l'attribut type
PEUT
avoir l'une des valeurs "text
", "html
" ou "xhtml
".
Si ce n'est pas le cas, sa valeur DOIT être conforme à la syntaxe d'un type de média MIME,
mais elle NE DOIT PAS être d'un type composite (cf. la section 4.2.6 du document
[MIMEREG]). Si ni l'attribut type
ni l'attribut src
ne sont présents, les processeurs Atom DOIVENT agir comme si l'attribut type
l'était avec une valeur de "text
".
src
L'élément atom:content
PEUT avoir un attribut src
dont la valeur DOIT être une référence IRI [RFC3987].
Si l'attribut src
est présent, l'élément atom:content
DOIT être vide. Les processeurs Atom PEUVENT utiliser l'adresse IRI
pour récupérer le contenu et PEUVENT choisir d'ignorer le contenu distant ou de le présenter d'une
manière différente du contenu local.
Si l'attribut src
est présent, l'attribut type
DEVRAIT
être fourni et DOIT être un type de média MIME [MIMEREG],
au lieu des valeurs "text
", "html
" ou "xhtml
".
La valeur est consultative, c'est-à-dire que, lors de la résolution de l'adresse URI correspondante
(convertie depuis (mapped from) une adresse IRI au besoin), si le serveur
fournissant ce contenu fournit aussi un type de média, le type de média du serveur est autoritaire.
Les documents Atom DOIVENT être conformes aux règles suivantes. Les processeurs Atom
DOIVENT interpréter l'élément atom:content
selon la première règle applicable.
type
est "text
",
l'élément atom:content
NE DOIT PAS contenir de sous-éléments. Ce texte
doit être présenté pour lecture à des humains. Ainsi, les processeurs Atom PEUVENT réduire
(collapse) les caractères blancs (y compris les sauts de ligne) et afficher le texte
en utilisant des techniques typographiques telles que justification et fontes proportionnelles ;type
est "html
",
l'élément atom:content
NE DOIT PAS contenir de sous-éléments et
DEVRAIT convenir à un traitement HTML [HTML].
Le balisage HTML DOIT avoir un codage d'échappement, par exemple <br>
en <br>
. Le balisage HTML DEVRAIT être tel qu'il pourrait
apparaître directement au sein d'un élément HTML <DIV>. Les processeurs Atom interprétant le contenu
PEUVENT utiliser le balisage pour aider à l'afficher ;type
est "xhtml
", le contenu de
l'élément atom:content
DOIT être un seul élément XHTML
div
[XHTML] et DEVRAIT convenir à un traitement
XHTML. L'élément XHTML div
lui-même NE DOIT PAS
être considéré comme faisant partie du contenu. Les processeurs Atom interprétant le contenu PEUVENT
utiliser le balisage pour aider à l'afficher. Les versions codées des caractères, tels que « & » et « > » codés en
« & » et « > », représentent ces caractères et non du balisage ;type
est un type de média XML
[RFC3023], ou se termine par « +xml » ou « /xml » (casse non significative),
l'élément atom:content
PEUT contenir des sous-éléments et son contenu
DEVRAIT convenir à un traitement selon le type de média indiqué. Si l'attribut src
n'est pas présent, cela voudrait normalement dire que l'élément atom:content
contiendrait
un seul sous-élément qui servirait d'élément racine du document XML du type indiqué ;type
commence par « text/ » (casse non significative),
l'élément atom:content
NE DOIT PAS contenir de sous-éléments ;type
, le contenu de l'élément atom:content
DOIT être du codage Base64 valide, comme décrit à la section 3 du document
[RFC3548]. Une fois décodé, il DEVRAIT convenir à un traitement
selon le type de média indiqué. Auquel cas, les caractères codés en Base64 PEUVENT être précédés
et suivis de caractères blancs dans l'élément atom:content
, et les lignes sont séparés par un seul
caractère SAUT DE LIGNE (U+000A).Du XHTML dans la ligne :
... <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> This is <b>XHTML</b> content. </div> </content> ... <content type="xhtml"> <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> This is <xhtml:b>XHTML</xhtml:b> content. </xhtml:div> </content> ...
L'exemple suivant suppose une liaison de l'espace de noms XHTML au préfixe « xh » plus tôt dans le document :
... <content type="xhtml"> <xh:div> This is <xh:b>XHTML</xh:b> content. </xh:div> </content> ...
atom:author
L'élément atom:author
est une structure de personne qui indique l'auteur de l'entrée ou du fil.
atomAuthor = element atom:author { atomPersonConstruct }
Si un élément atom:entry
ne contient pas d'élément atom:author
, alors
les éléments atom:author
de l'élément atom:source
contenu sont censés s'appliquer.
Dans un document de fil Atom, les éléments atom:author
de l'élément atom:feed
conteneur sont censés s'appliquer à l'entrée, s'il n'y a pas d'éléments atom:author
aux endroits décrits ci-dessus.
atom:category
L'élément atom:category
communique des informations à propos d'une catégorie associée à une entrée ou
à un fil. Cette spécificaiton n'attribue aucune signification au contenu (le cas échéant) de cet élément.
atomCategory = element atom:category { atomCommonAttributes, attribute term { text }, attribute scheme { atomUri }?, attribute label { text }?, undefinedContent }
term
L'atribut term
est une chaîne qui identifie la catégorie à laquelle appartient l'entrée ou le fil.
Les éléments de catégorie DOIVENT avoir un attribut term
.
scheme
L'attribut scheme
est une adresse IRI qui identifie un schéma de catégorisation.
Les éléments de catégorie PEUVENT avoir un attribut scheme
.
label
L'attribut label
fournit un label intelligible à afficher dans les applications d'utilisateur final.
Le contenu de l'attribut label
est sensible à la langue. Les entités telles que « & » et
« < » représentent leurs caractères correspondants (« & » et « < » respectivement) et non du balisage.
Les éléments de catégorie PEUVENT avoir un attribut label
.
atom:contributor
L'élément atom:contributor
est une structure de personne qui indique une personne ou une autre entité
ayant participé à l'entrée ou au fil.
atomContributor = element atom:contributor { atomPersonConstruct }
atom:generator
Le contenu de l'élément atom:generator
identifie l'agent utilisé pour générer le fil,
pour un débogage ou d'autres buts.
atomGenerator = element atom:generator { atomCommonAttributes, attribute uri { atomUri }?, attribute version { text }?, text }
Le contenu de cet élément, si présent, DOIT être une chaîne qui est le nom intelligible de l'agent générateur. Les entités telles que « & » et « < » représentent leurs caractères correspondants (« & » et « < » respectivement) et non du balisage.
L'élément atom:generator
PEUT avoir un attribut uri
dont la valeur DOIT être une référence IRI [RFC3987].
Une fois résolue, l'adresse URI résultante (convertie depuis une adresse IRI si nécessaire)
DEVRAIT produire une représentation qui est pertinente à cet agent.
L'élément atom:generator
PEUT avoir une attribut version
qui indique la version de l'agent générateur.
atom:icon
Le contenu de l'élément atom:icon
est une référence IRI [RFC3987]
qui identifie une image fournissant une identification visuelle imagée du fil.
atomIcon = element atom:icon { atomCommonAttributes, (atomUri) }
L'image DEVRAIT avoir des proportions (aspect ratio) d'un (dans l'horizontale) par un (dans la verticale) et DEVRAIT convenir à une représentation à échelle réduite.
atom:id
L'élément atom:id
communique un identificateur permanent, unique et universel pour une entrée ou un fil.
atomId = element atom:id { atomCommonAttributes, (atomUri) }
Son contenu DOIT être une adresse IRI, comme défini par le document [RFC3987]. Notez que la définition d'une adresse IRI exclut les références relatives. Bien qu'une adresse IRI soit susceptible d'utiliser un schéma de résolution (dereferencable scheme), les processeurs Atom NE DOIVENT PAS supposer qu'elle est résolvable.
Lorsqu'un document Atom est translaté (relocated), déplacé (migrated),
agrégé (syndicated), republié, exporté ou importé, le contenu de son élément
atom:id
NE DOIT PAS changer. Dit autrement,
un élément atom:id
se rattache à toutes les instantiations.
On suggère de stocker l'élément atom:id
avec la ressource associée.
Le contenu d'un élément atom:id
DOIT être créé de manière à garantir
son unicité.
À cause du risque de confusion entre des adresses IRI qui seraient équivalentes si elles étaient mises en correspondance
à des adresses URI et résolues, la stratégie de normalisation suivante DEVRAIT être
observée lors de la génération des éléments atom:id
:
atom:id
Les instances des éléments atom:id
peuvent être comparées pour déterminer si une entrée ou un fil
sont les mêmes que l'une ou l'un vus auparavant. Les processeurs DOIVENT comparer les éléments atom:id
caractère par caractère (la casse étant significative). Les opérations de comparaison DOIVENT se fonder
uniquement sur les chaînes de caractères IRI et NE DOIVENT PAS compter sur la résolution
des adresses IRI ou des adresses URI converties depuis celles-ci.
En conséquence, deux adresses IRI qui se résolvent vers la même ressource mais ne sont pas identiques caractère pour caractère seront considérées comme étant différentes pour les besoins de la comparaison des identificateurs.
Par exemple, voici quatre identificateurs distincts, bien qu'ils ne diffèrent que par la casse :
http://www.example.org/thing http://www.example.org/Thing http://www.EXAMPLE.org/thing HTTP://www.example.org/thing
De même, voici trois identificateurs distincts, pace que le codage d'échappement en pourcentage de l'adresse IRI importe pour les besoins de la comparaison :
http://www.example.com/~bob http://www.example.com/%7ebob http://www.example.com/%7Ebob
atom:link
L'élément atom:link
définit une référence depuis une entrée ou un fil vers une ressource web.
Cette spécification n'attribue aucune signification au contenu (le cas échéant) de cet élément.
atomLink = element atom:link { atomCommonAttributes, attribute href { atomUri }, attribute rel { atomNCName | atomUri }?, attribute type { atomMediaType }?, attribute hreflang { atomLanguageTag }?, attribute title { text }?, attribute length { text }?, undefinedContent }
href
L'attribut href
contient l'adresse IRI du lien. Les éléments atom:link
DOIVENT avoir un attribut href
dont la valeur DOIT
être une référence IRI [RFC3987].
rel
Les éléments atom:link
PEUVENT avoir un attribut rel
qui indique le type de la relation de lien. Si l'attribut rel
n'est pas présent, l'élément de lien
DOIT être interprété comme si le type de la relation de lien est "alternate
".
La valeur de l'attribut rel
DOIT être une chaîne non vide, qui correspond
à la production "isegment-nz-nc" ou bien à la production "IRI" dans le document [RFC3987].
Notez que l'utilisation d'une référence relative autre qu'un nom simple n'est pas permise. Si un nom est donné,
les mises en œuvre DOIVENT considérer le type de relation de lien comme étant équivalent au même nom
enregistré dans le registre des relations de lien de l'IANA (IANA Registry of Link Relations)
(section 7), et donc à l'adresse IRI qui aurait été obtenue en ajoutant la valeur de l'attribut rel
à la fin de la chaîne "http://www.iana.org/assignments/relation/
". La valeur de rel
décrit la signification du lien mais n'impose aucune condition de comportement sur les processeurs Atom.
Ce document définit cinq valeurs initiales pour le registre des relations de lien :
alternate
" signifie que l'adresse IRI dans la valeur de
l'attribut href
identifie une autre version de la ressource décrite par l'élément conteneur ;related
" signifie que l'adresse IRI dans la valeur de
l'attribut href
identifie une ressource liée à la ressource décrite par l'élément conteneur. Par exemple,
le fil d'un site qui discute des performance du moteur de recherche à "http://search.example.com" pourrait contenir,
en sous-élément de atom:feed
:
<link rel="related" href="http://search.example.com/"/>
Un lien identique pourrait apparaître comme sous-élément de tout élément atom:entry
dont le contenu
inclurait une discussion à propos de ce même moteur de recherche.
self
" signifie que l'adresse IRI dans la valeur de
l'attribut href
identifie une ressource équivalente à l'élément conteneur ;enclosure
" signifie que l'adresse IRI dans la valeur de
l'attribut href
identifie une ressource liée, qui est potentiellement de grande dimension et pourrait
nécessiter un traitement spécial. Pour les éléments atom:link
avec rel="enclosure"
,
l'attribut length
DEVRAIT être fourni.via
" signifie que l'adresse IRI dans la valeur de
l'attribut href
identifie une ressource qui est la source de l'information fournie dans l'élément conteneur.type
Sur l'élément atom:link
, la valeur de l'attribut type
est un type de média
consultatif : c'est un indice à propos du type de la représentation qui est censée être retournée lorsque la valeur de
l'attribut href
est résolue. Notez que l'attribut type
ne surclasse pas
(override) le type de média réel retourné avec la représentation. Les éléments de lien
PEUVENT avoir un attribut type
dont la valeur DOIT
être conforme à la syntaxe d'un type de média MIME [MIMEREG].
hreflang
Le contenu de l'attribut hreflang
décrit la langue de la ressource désignée par
l'attribut href
. Utilisé avec rel="alternate"
, il implique une version traduite
de l'entrée. Les éléments de lien PEUVENT avoir un attribut hreflang
dont la valeur DOIT être une étiquette de langue (language tag)
[RFC3066].
title
L'attribut title
communique une information intelligible à propos du lien. Le contenu de
l'attribut title
est sensible à la langue. Les entités telles que « & » et
« < » représentent leurs caractères correspondants (« & » et « < » respectivement) et non du balisage.
Les éléments de lien PEUVENT avoir un attribut title
.
length
L'attribut length
indique une dimension consultative du contenu lié en octets ; c'est un indice à propos
de la longueur de contenu de la représentation retournée lorsque l'adresse IRI dans l'attribut href
est convertie en adresse URI et résolue. Notez que l'attribut length
ne surclasse pas
la longueur de contenu réelle de la représentation telle qu'elle est rapportée par le protocole sous-jacent. Les éléments de lien
PEUVENT avoir un attribut length
.
atom:logo
Le contenu de l'élément atom:logo
est une référence IRI [RFC3987]
qui identifie une image fournissant une représentation visuelle d'un fil.
atomLogo = element atom:logo { atomCommonAttributes, (atomUri) }
L'image DEVRAIT avoir des proportions de deux (dans l'horizontale) par un (dans la verticale).
atom:published
L'élément atom:published
est une structure de date indiquant un instant dans le temps associé à un
événement tôt dans le cycle de vie de l'entrée.
atomPublished = element atom:published { atomDateConstruct }
L'élément atom:published
sera typiquement associé à la création initiale ou à la première disponibilité
de la ressource.
atom:rights
L'élément atom:rights
est une structure de texte qui communique une information à propos des droits
contenus ou détenus sur une entrée ou un fil.
atomRights = element atom:rights { atomTextConstruct }
L'élément atom:rights
NE DEVRAIT PAS servir à communiquer une
information de licence (licensing information) interprétable par une machine.
Si un élément atom:entry
ne contient pas d'élément atom:rights
,
l'élément atom:rights
de l'élément atom:feed
conteneur, si présent,
est réputé s'appliquer à l'entrée.
atom:source
Si un élément atom:entry
est copié d'un fil à un autre, alors les métadonnées de
l'élément atom:feed
d'origine (c'est-à-dire tous les sous-éléments de atom:feed
hormis les éléments atom:entry
) PEUVENT être conservées au sein de
l'entrée copiée en ajoutant un sous-élément atom:source
, si celui-ci n'est pas déjà présent dans l'entrée,
et en incluant une partie ou la totalité des éléments de métadonnées du fil d'origine comme sous-éléments de
l'élément atom:source
. De telles métadonnées DEVRAIENT être conservées si
l'élément atom:feed
d'origine contient des sous-éléments atom:author
,
atom:contributor
, atom:rights
ou atom:category
,
et que ces sous-éléments ne sont pas présents dans l'élément atom:entry
d'origine.
atomSource = element atom:source { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContributor* & atomGenerator? & atomIcon? & atomId? & atomLink* & atomLogo? & atomRights? & atomSubtitle? & atomTitle? & atomUpdated? & extensionElement*) }
L'élément atom:source
est conçu afin de permettre l'agrégation d'entrées provenant de
fils différents tout en conservant les informations à propos du fil d'origine d'une entrée. Pour cette raison,
les processuers Atom réalisant une telle agrégation DEVRAIENT au moins inclure les
éléments de métadonnées de niveau fil obligatoires (atom:id
, atom:title
et atom:updated
) dans l'élément atom:source
.
atom:subtitle
L'élément atom:subtitle
est une structure de texte qui communique une description ou un sous-titre
intelligibles pour un fil.
atomSubtitle = element atom:subtitle { atomTextConstruct }
atom:summary
L'élément atom:summary
est une structure de texte qui communique un récapitulatif, un résumé ou un extrait
d'une entrée.
atomSummary = element atom:summary { atomTextConstruct }
Il est déconseillé de recopier le contenu des éléments atom:title
ou atom:content
dans l'élément atom:summary
car les processeurs Atom pourraient supposer l'existence d'un résumé utile
là où il n'y en a pas.
atom:title
L'élément atom:title
est une structure de texte qui communique un titre intelligible pour une entrée
ou un fil.
atomTitle = element atom:title { atomTextConstruct }
atom:updated
L'élément atom:updated
est une structure de données indiquant l'instant dans le temps le plus récent
où une entrée ou un fil ont été modifiés d'une façon estimée significative par l'éditeur. Toutes les modifications n'aboutissent
donc pas nécessairement à une valeur de atom:updated
changée.
atomUpdated = element atom:updated { atomDateConstruct }
Les éditeurs PEUVENT changer la valeur de cet élément dans le temps.
Puisqu'Atom est un format fondé sur XML, les mécanismes de sécurité XML existants peuvent être utilisés pour en sécuriser le contenu.
Les créateurs de fils ou d'entrées, et les intermédiaires qui agrègent les fils ou les entrées, peuvent avoir de bonnes raisons de signer ou de chiffrer un contenu non protégé par ailleurs. Par exemple, un marchand pourrait signer numériquement un message qui contient un coupon de réduction pour ses produits. Une banque qui utilise Atom pour envoyer des relevés de clients voudra certainement signer et chiffrer ces messages afin de protéger les informations financières de leurs clients et pour en assurer l'authenticité auprès d'eux. Des intermédiaires peuvent vouloir chiffrer des fils agrégés de sorte qu'un observateur passif ne puisse pas dire quels sujets intéressent le destinataire. Bien sûr, beaucoup d'autres exemples existent encore.
Les exigences algorithmiques dans cette section concernent le processeur Atom. Elles nécessitent qu'un destinataire au minimum soit capable de traiter les messages utilisant les algorithmes de chiffrement spécifiés. Ces exigences ne limitent pas les algorithmes que l'émetteur peut choisir.
La racine d'un document Atom (c'est-à-dire l'élément atom:feed
dans un document de fil Atom et
l'élément atom:entry
dans un document d'entrée Atom) ou tout élément atom:entry
PEUT avoir une signature enveloppée (envelopped signature),
comme décrit par la spécification Syntaxe et traitement XML Signature
[W3C.REC-xmldsig-core-20020212].
Les processeurs Atom NE DOIVENT PAS rejeter un document Atom contenant une telle signature au motif d'être incapable de la vérifier ; ils DOIVENT poursuivre le traitement et PEUVENT informer l'utilisateur de leur incapacité à valider la signature.
En d'autres termes, la présence d'un élément ayant l'adresse URI d'espace de noms
"http://www.w3.org/2000/09/xmldsig#
" et un nom local de "Signature
" en sous-élément de l'élément de document
NE DOIT PAS provoquer l'arrêt (fail) d'un processeur Atom
du fait de sa simple présence.
Les autres éléments dans un document Atom NE DOIVENT PAS être signés à moins que leurs définitions n'indiquent explicitement cette possibilité.
La section 6.5.1 de [W3C.REC-xmldsig-core-20020212] impose
la gestion du XML canonique [W3C.REC-xml-c14n-20010315].
Quoiqu'il en soit, beaucoup d'implémenteurs (implementers) ne l'utilisent pas car les
documents XML signés inclus dans d'autres documents XML voient leurs signatures invalidées
(broken). De ce fait, les processeurs Atom qui vérifient les documents Atom signés
DOIVENT être capables de canoniser selon la méthode de la canonisation XML exclusive
identifiée par l'adresse URI "http://www.w3.org/2001/10/xml-exc-c14n#
", comme défini dans la spécification
Canonisation XML exclusive [W3C.REC-xml-exc-c14n-20020718].
Les intermédiaires tels que les agrégateurs peuvent avoir besoin d'ajouter un élément atom:source
à une entrée qui ne contient pas d'élément atom:source
propre. Si une telle entrée est signée,
l'ajout invalidera la signature. C'est pourquoi, un éditeur d'entrées signées individuellement devrait fortement envisager d'ajouter
un élément atom:source
à ces entrées avant de les signer. Les implémenteurs devraient également avoir
conscience des problèmes concernant l'utilisation d'un balisage dans l'espace de noms « xml: » car il interagit avec la canonisation.
La section 4.4.2 de [W3C.REC-xmldsig-core-20020212] impose la gestion des signatures DSA et recommande la gestion des signatures RSA. Néanmoins, en raison de la plus grande popularité sur le marché de RSA par rapport à DSA, les processeurs Atom qui vérifient les documents Atom signés DOIVENT être capables de vérifier les signatures RSA mais ne sont pas tenus de l'être pour les signatures DSA. À cause des problèmes de sécurité qui peuvent survenir en cas de manipulation incorrecte du matériel de chiffrement (keying material) pour l'authentification MAC (Message Authentication Code), les documents Atom NE DEVRAIENT PAS utiliser de codes MAC pour les signatures.
La racine d'un document Atom (c'est-à-dire l'élément atom:feed
dans un document de fil Atom
et l'élément atom:entry
dans un document d'entrée Atom) PEUT
être chiffrée en utilisant les mécanismes décrits dans la spécification Syntaxe et traitement XML Encryption
[W3C.REC-xmlenc-core-20021210].
La section 5.1 de [W3C.REC-xmlenc-core-20021210] impose la gestion des algorithmes TripleDES, AES-128 et AES-256. Les processeurs Atom qui déchiffrent les documents Atom DOIVENT être capables de déchiffrer avec AES-128 en mode CBC (Cipher Block Chaining).
Le chiffrement fondé sur [W3C.REC-xmlenc-core-20021210] ne garantit pas l'intégrité du document original. Il existe des attaques cryptographiques où quelqu'un qui ne peut pas déchiffrer un message peut encore en changer des bits de telle façon qu'une partie ou la totalité du message déchiffrédoes ait un sens mais une signification différente. Par conséquent, les processeurs Atom qui déchiffrent les documents Atom DEVRAIENT contrôler l'intégrité du document déchiffré en vérifiant le condensé (hash) dans la signature (s'il y en a un) ou en vérifiant un condensé du document au sein du document (s'il y en a un).
Lorsque l'on doit à la fois signer et chiffer un document Atom, il est en général préférable de d'abord signer le document puis de chiffrer le document signé. Cela donne une intégrité au document de base tout en chiffrant la totalité de l'information, y compris l'identité de l'entité ayant signé le document. Notez que, si on avait utilisé des codes MAC pour l'authentification, la séquence DOIT être telle que le document soit signé puis chiffré, et pas l'inverse.
Cette spécification décrit le vocabulaire de balisage XML d'Atom. On peut utiliser le balisage d'autres vocabulaires
(du « balisage étranger ») dans un document Atom. Notez que l'élément atom:content
est conçu pour accueillir
du balisage étranger arbitraire.
L'espace de noms Atom est réservé pour des révisions futures d'Atom avec compatibilité ascendante. Les futures versions de cette spécification pourraient ajouter de nouveaux éléments et attributs au vocabulaire de balisage Atom. Les logiciels écrits en conformité avec cette version de la spécification seront incapables de traiter correctement ce balisage et, en fait, ne seront pas capables de le distingueur d'une erreur de balisage. Pour les besoins de cette discussion, le balisage non reconnu du vocabulaire Atom sera considéré comme du « balisage étranger ».
Les processeurs Atom qui rencontrent du balisage étranger à un endroit légal conformément à cette spécification NE DOIVENT PAS interrompre le traitement ou signaler une erreur. Il se peut que le processeur Atom puisse traiter correctement le balisage étranger et le fasse. Sinon, un tel balisage est dit « balisage étranger inconnu ».
Lorsqu'ils rencontrent un balisage étranger inconnu en sous-élément de atom:entry
,
atom:feed
ou d'une structure de personne, les processeurs Atom PEUVENT
passer outre (bypass) le balisage et tout contenu textuel et
NE DOIVENT PAS changer leur comportement du fait de la présence du balisage.
Lorsqu'un balisage étranger inconnu est rencontré dans une structure de texte ou dans un élément atom:content
,
le logiciel DEVRAIT ignorer le balisage et traiter le contenu textuel des éléments étrangers
comme si le balisage environnant n'existait pas.
Atom admet du balisage étranger partout dans un document Atom, sauf interdiction explicite. Les sous-éléments de
atom:entry
, atom:feed
, atom:source
et des
structures de personne sont considérés comme étant des éléments de métadonnées et sont décrits ci-dessous. Les sous-éléments des
structures de personne sont considérés s'appliquer à la structure. Le rôle d'un autre balisage étranger n'est pas défini par
cette spécification.
Un élément d'extension simple NE DOIT PAS avoir d'attributs ou de sous-éléments. L'élément PEUT contenir des données textuelles (character data) ou être vide. Les éléments d'extension simples ne sont pas sensibles à la langue.
simpleExtensionElement = element * - atom:* { text }
L'élément peut être interprété comme étant une propriété simple (ou un couple nom-valeur) de l'élément parent qui le contient. Le couple constitué de l'adresse URI d'espace de noms de l'élément et du nom local de l'élément peut être interprété comme étant le nom de la propriété. Le contenu de données textuelles de l'élément peut être interprété comme étant la valeur de la propriété. Si l'élément est vide, la valeur de propriété peut alors être interprétée comme étant une chaîne vide.
L'élément racine d'un élément d'extension structuré DOIT avoir au moins un attribut ou sous-élément. Il PEUT avoir des attributs, il PEUT avoir un contenu XML bien formé (y compris des données textuelles), ou il PEUT être vide. Les éléments d'extension structurés sont sensibles à la langue.
structuredExtensionElement = element * - atom:* { (attribute * { text }+, (text|anyElement)*) | (attribute * { text }*, (text?, anyElement+, (text|anyElement)*)) }
La structure d'un élément d'extension structuré, y compris l'ordre de ses sous-éléments, pourrait être significatif.
Cette spécification ne fournit aucune interprétation d'un élément d'extension structuré. La syntaxe du contenu XML de l'élément (et l'interprétation des relations de l'élément à son élément conteneur) est définie par la spécification de l'extension Atom.
Un document Atom, sérialisé comme XML 1.0, peut être identifié par le type de média suivant :
Ce registre est tenu par l'IANA et il contient cinq valeurs initiales : "alternate
",
"related
", "self
", "enclosure
"
et "via
". Les nouvelles attributions sont soumises à l'approbation de l'IANA,
comme prévu dans [RFC2434]. La demande devrait être envoyée par courrier électronique
à l'IANA qui la transmettra ensuite à l'IESG pour y être approuvée.
La demande devrait utiliser le gabarit suivant :
rel
conforme à la règle syntaxique donnée à la
section 4.2.7.2)Les structures de texte et l'élément atom:content
permettent l'emploi de HTML et XHTML.
Beaucoup d'éléments dans ces langages sont considérés comme étant « dangereux » (unsafe)
en cela qu'ils ouvrent les clients à un ou plusieurs types d'attaque. Les implémenteurs de logiciels compatibles Atom devraient
examiner avec attention leur prise en charge de chaque type d'élément lors du traitement du (X)HTML entrant
(incoming) dans les documents Atom. Cf. les sections concernant la sécurité de
[RFC2854] et [HTML] pour des conseils.
Les processeurs Atom devraiet prêter une attention particulière à la sécurité des éléments IMG
, SCRIPT
,
EMBED
, OBJECT
, FRAME
, FRAMESET
, IFRAME
, META
et
LINK
, mais d'autres éléments sont également susceptibles d'avoir des propriétés négatives pour la sécurité.
(X)HTML peut contenir directement ou appeler indirectement un contenu exécutable.
Les processeurs Atom traitent les adresses URI. Cf. la section 7 du document [RFC3986].
Les processeurs Atom traitent les adresses IRI. Cf. la section 8 du document [RFC3987].
Les processeurs Atom devraient avoir connaissance du potentiel d'attaques par usurpation (spoofing attacks)
où l'attaquant publie un atom:entry
avec la valeur atom:id
d'une entrée d'un
autre fil, qui a peut-être un élément atom:source
copiant la valeur atom:id
de l'autre fil. Par exemple, un processeur Atom pourrait supprimer l'affichage des entrées en double en n'affichant qu'une seule entrée
dans un ensemble d'entrées avec des valeurs atom:id
identiques. Dans cette situation, le processeur Atom
pourrait également entreprendre de déterminer si les entrées proviennent du même éditeur avant de considérer qu'elles sont des
copies.
Les documents Atom peuvent être chiffrés et signés, en utilisant respectivement les spécifications [W3C.REC-xmlenc-core-20021210] et [W3C.REC-xmldsig-core-20020212], et sont soumis aux considérations de sécurité impliquées par leur utilisation.
Les signatures numériques apportent l'authentification, l'intégrité du message et la non-répudiation avec preuve d'origine. Le chiffrement apporte la confidentialité des données.
Les personnes suivantes ont contribué aux versions préliminaires de ce document : Tim Bray, Mark Pilgrim et Sam Ruby. Norman Walsh a fourni le schéma Relax NG. Le contenu et les concepts qui s'y trouvent sont le produit de la communauté Atom et du groupe de travail Atompub.
Le groupe de travail Atompub se compose de dizaines de contributeurs très actifs qui ont proposé les idées et la formulation de ce document. Ce sont :
Danny Ayers, James Aylett, Roger Benningfield, Arve Bersvendsen, Tim Bray, Dan Brickley, Thomas Broyer, Robin Cover, Bill de hOra, Martin Duerst, Roy Fielding, Joe Gregorio, Bjoern Hoehrmann, Paul Hoffman, Anne van Kesteren, Brett Lindsley, Dare Obasanjo, David Orchard, Aristotle Pagaltzis, John Panzer, Graham Parks, Dave Pawson, Mark Pilgrim, David Powell, Julian Reschke, Phil Ringnalda, Antone Roundy, Sam Ruby, Eric Scheid, Brent Simmons, Henri Sivonen, Ray Slakinski, James Snell, Henry Story, Asbjorn Ulsberg, Walter Underwood, Norman Walsh, Dave Winer et Bob Wyman.
Cette annexe est informative.
Le schéma Relax NG exclut explicitement les éléments dans l'espace de noms Atom qui n'ont pas été définis dans cette révision de la spécification. Les exigences pour les processeurs Atom rencontrant un tel balisage sont indiquées à la section 6.2 et à la section 6.3.
# -*- rnc -*- # RELAX NG Compact Syntax Grammar for the # Atom Format Specification Version 11 namespace atom = "http://www.w3.org/2005/Atom" namespace xhtml = "http://www.w3.org/1999/xhtml" namespace s = "http://www.ascc.net/xml/schematron" namespace local = "" start = atomFeed | atomEntry # Common attributes atomCommonAttributes = attribute xml:base { atomUri }?, attribute xml:lang { atomLanguageTag }?, undefinedAttribute* # Text Constructs atomPlainTextConstruct = atomCommonAttributes, attribute type { "text" | "html" }?, text atomXHTMLTextConstruct = atomCommonAttributes, attribute type { "xhtml" }, xhtmlDiv atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct # Person Construct atomPersonConstruct = atomCommonAttributes, (element atom:name { text } & element atom:uri { atomUri }? & element atom:email { atomEmailAddress }? & extensionElement*) # Date Construct atomDateConstruct = atomCommonAttributes, xsd:dateTime # atom:feed atomFeed = [ s:rule [ context = "atom:feed" s:assert [ test = "atom:author or not(atom:entry[not(atom:author)])" "An atom:feed must have an atom:author unless all " ~ "of its atom:entry children have an atom:author." ] ] ] element atom:feed { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContributor* & atomGenerator? & atomIcon? & atomId & atomLink* & atomLogo? & atomRights? & atomSubtitle? & atomTitle & atomUpdated & extensionElement*), atomEntry* } # atom:entry atomEntry = [ s:rule [ context = "atom:entry" s:assert [ test = "atom:link[@rel='alternate'] " ~ "or atom:link[not(@rel)] " ~ "or atom:content" "An atom:entry must have at least one atom:link element " ~ "with a rel attribute of 'alternate' " ~ "or an atom:content." ] ] s:rule [ context = "atom:entry" s:assert [ test = "atom:author or " ~ "../atom:author or atom:source/atom:author" "An atom:entry must have an atom:author " ~ "if its feed does not." ] ] ] element atom:entry { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContent? & atomContributor* & atomId & atomLink* & atomPublished? & atomRights? & atomSource? & atomSummary? & atomTitle & atomUpdated & extensionElement*) } # atom:content atomInlineTextContent = element atom:content { atomCommonAttributes, attribute type { "text" | "html" }?, (text)* } atomInlineXHTMLContent = element atom:content { atomCommonAttributes, attribute type { "xhtml" }, xhtmlDiv } atomInlineOtherContent = element atom:content { atomCommonAttributes, attribute type { atomMediaType }?, (text|anyElement)* } atomOutOfLineContent = element atom:content { atomCommonAttributes, attribute type { atomMediaType }?, attribute src { atomUri }, empty } atomContent = atomInlineTextContent | atomInlineXHTMLContent | atomInlineOtherContent | atomOutOfLineContent # atom:author atomAuthor = element atom:author { atomPersonConstruct } # atom:category atomCategory = element atom:category { atomCommonAttributes, attribute term { text }, attribute scheme { atomUri }?, attribute label { text }?, undefinedContent } # atom:contributor atomContributor = element atom:contributor { atomPersonConstruct } # atom:generator atomGenerator = element atom:generator { atomCommonAttributes, attribute uri { atomUri }?, attribute version { text }?, text } # atom:icon atomIcon = element atom:icon { atomCommonAttributes, (atomUri) } # atom:id atomId = element atom:id { atomCommonAttributes, (atomUri) } # atom:logo atomLogo = element atom:logo { atomCommonAttributes, (atomUri) } # atom:link atomLink = element atom:link { atomCommonAttributes, attribute href { atomUri }, attribute rel { atomNCName | atomUri }?, attribute type { atomMediaType }?, attribute hreflang { atomLanguageTag }?, attribute title { text }?, attribute length { text }?, undefinedContent } # atom:published atomPublished = element atom:published { atomDateConstruct } # atom:rights atomRights = element atom:rights { atomTextConstruct } # atom:source atomSource = element atom:source { atomCommonAttributes, (atomAuthor* & atomCategory* & atomContributor* & atomGenerator? & atomIcon? & atomId? & atomLink* & atomLogo? & atomRights? & atomSubtitle? & atomTitle? & atomUpdated? & extensionElement*) } # atom:subtitle atomSubtitle = element atom:subtitle { atomTextConstruct } # atom:summary atomSummary = element atom:summary { atomTextConstruct } # atom:title atomTitle = element atom:title { atomTextConstruct } # atom:updated atomUpdated = element atom:updated { atomDateConstruct } # Low-level simple types atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" } # Whatever a media type is, it contains at least one slash atomMediaType = xsd:string { pattern = ".+/.+" } # As defined in RFC 3066 atomLanguageTag = xsd:string { pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" } # Unconstrained; it's not entirely clear how IRI fit into # xsd:anyURI so let's not try to constrain it here atomUri = text # Whatever an email address is, it contains at least one @ atomEmailAddress = xsd:string { pattern = ".+@.+" } # Simple Extension simpleExtensionElement = element * - atom:* { text } # Structured Extension structuredExtensionElement = element * - atom:* { (attribute * { text }+, (text|anyElement)*) | (attribute * { text }*, (text?, anyElement+, (text|anyElement)*)) } # Other Extensibility extensionElement = simpleExtensionElement | structuredExtensionElement undefinedAttribute = attribute * - (xml:base | xml:lang | local:*) { text } undefinedContent = (text|anyForeignElement)* anyElement = element * { (attribute * { text } | text | anyElement)* } anyForeignElement = element * - atom:* { (attribute * { text } | text | anyElement)* } # XHTML anyXHTML = element xhtml:* { (attribute * { text } | text | anyXHTML)* } xhtmlDiv = element xhtml:div { (attribute * { text } | text | anyXHTML)* } # EOF
Copyright (C) The Internet Society (2005).
This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.
This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.
Le fonctionnement du RFC Editor est financé actuellement par l'Internet Society.