‘XML Inclusions (XInclude) Version 1.0’
en français

Statut du document traduit

Ceci est une traduction de la recommandation XInclude version 1.0 du W3C, édition du 20 décembre 2004, décrivant le modèle de traitement et la syntaxe des inclusions XML.

Cependant, il ne s'agit pas de la version officielle en français. Seul le document original en anglais a valeur de référence. On peut l'obtenir à : http://www.w3.org/TR/2004/REC-xinclude-20041220/.

Avertissement

Des erreurs ont pu survenir malgré le soin apporté à ce travail.

Notes sur la traduction

Certains concepts sont difficiles à rendre en français, ou peuvent bénéficier d'une explication. Par endroit, les expressions originales en anglais viennent en renfort dans le texte sous cette forme :
ex. traduction [ndt. translation]

D'autres expressions intègrent également les versions originales en anglais, qui apparaissent d'une manière ou d'une autre (selon le navigateur), lorsque l'on laisse le pointeur de la souris au-dessus d'elles. Elles se présentent sous cette forme :
ex. codage

Cette version française intègre toutes les corrections survenues depuis la parution de la recommandation. On peut trouver la liste des dernières modifications à l'adresse http://www.w3.org/2004/12/xinclude-errata. Le cas échéant, les liens vers l'errata traduit, à jour en date du 30 décembre 2004, sont signalés comme ceci :
errata-E01.

Finalement, les liens menant à d'autres documents du W3C déjà traduits sont discrètement doublés vers leur traduction, de cette manière :
ex. un lien vers un document du W3C vf .

Archives comprimées et autres formats

Cette traduction est disponible au format HTML sous forme d'archive comprimée et, le cas échéant, dans d'autres formats à l'adresse http://www.yoyodesign.org/doc/w3c/w3c.html.

Autres documents traduits

On peut consulter les traductions en français d'autres documents du W3C à
http://www.w3.org/2003/03/Translations/byLanguage?language=fr

Avis légal

Copyright © 1994-2004 World Wide Web Consortium,
(Massachusetts Institute of Technology,
European Research Consortium for Informatics and Mathematics,
Keio University).
Tous droits réservés. Consulter la notice de copyright pour les productions du W3C.


W3C

Les inclusions XML (XInclude) version 1.0

Recommandation du W3C du 20 décembre 2004

Cette version :
http://www.w3.org/TR/2004/REC-xinclude-20041220/
Dernière version :
http://www.w3.org/TR/xinclude/
Version précédente :
http://www.w3.org/TR/2004/PR-xinclude-20040930/
Rédacteurs :
Jonathan Marsh, Microsoft <jmarsh@microsoft.com>
David Orchard, BEA Systems <dorchard@bea.com>

Veuillez consulter l'errata de ce document, lequel peut contenir des corrections normatives.

Voir également d'éventuelles traductions.

Ce document est aussi disponible dans ces formats non normatifs : XML.


Résumé analytique

Ce document définit un modèle de traitement et une syntaxe d'inclusion universelle. L'inclusion se réalise en fusionnant un certain nombre d'ensembles d'information XML en un seul ensemble d'information composite. La définition des documents XML (les ensembles d'information) à fusionner et le contrôle du processus de fusion s'expriment dans une syntaxe proche de XML (éléments, attributs, références URI, etc.).

Statut de ce document

Cette section décrit le statut de ce document au moment de sa parution. D'autres documents peuvent venir le remplacer. On trouvera une liste des publications actuelles du W3C et la dernière révision de ce rapport technique dans l'index des rapports techniques du W3C à http://www.w3.org/TR/.

Ce document est une recommandation vf du W3C. Après passage en revue par les membres du W3C et d'autres tiers intéressés, il a été approuvé par le Directeur comme recommandation du W3C. C'est un document stable qui peut servir de matériel de référence ou être cité comme référence normative par un autre document. Le rôle du W3C en produisant la recommandation consiste à attirer l'attention sur la spécification et à en promouvoir le large déploiement. Elle participe à améliorer le fonctionnement et l'interopérabilité du Web.

Ce document est un produit du groupe de travail Noyau XML du W3C une émanation de l'activité XML. Seule la version en anglais de cette spécification est normative. Cependant, cf. http://www.w3.org/2003/03/Translations/byTechnology?technology=xinclude10 pour des traductions de ce document.

Le groupe de travail Noyau XML estime que cette spécification répond à toutes les questions soulevées au cours des phases de dernier appel et de recommandation candidate (aucune question n'est apparue pendant l'étape de recommandation proposée. Les implémentations connues sont documentées dans le rapport d'implémentation de XInclude. Une batterie de tests est mise à disposition afin d'aider à évaluer la conformité à cette spécification.

Ce document a été produit sous couvert de la politique de brevetabilité en vigueur au 24 janvier 2002 modifiée par la procédure de transition de la politique de brevetabilité du W3C. Quiconque aurait connaissance de l'existence d'un brevet susceptible de contenir une (ou plusieurs) revendication essentielle concernant cette spécification devrait divulguer cette information, conformément au chapitre 6 de la politique de brevetabilité du W3C vf. On peut trouver une documentation sur les droits de propriété intellectuelle susceptible de concerner cette spécification sur la page de divulgation des droits de propriété intellectuelle du groupe de travail.

Veuillez signaler les erreurs de ce document sur la liste de diffusion www-xml-xinclude-comments@w3.org ; des archives publiques sont disponibles. La liste des erreurs pour cette édition est visible à http://www.w3.org/2004/12/xinclude-errata.

Table des matières

Annexes


1 Introduction

Beaucoup de langages de programmation offrent un mécanisme d'inclusion pour faciliter la modularité. Les langages de balisage ont aussi souvent besoin d'un tel mécanisme. Cette spécification propose un mécanisme générique de fusion de documents XML (tels que représentés par leurs ensembles d'information) à l'usage des applications qui ont besoin de cette fonction. La syntaxe exploite les structures XML existantes (éléments, attributs et références URI).

1.1 Les relations avec le langage XLink

Le langage XInclude diffère des fonctionnalités de liaison décrites dans le langage de liaison XML [XML Linking Language], en particulier des liens avec la valeur d'attribut show="embed". Ces liens offrent une syntaxe, indépendante du type de média, permettant d'indiquer qu'une ressource s'incorporera visuellement dans l'affichage du document. Le langage XLink ne définit pas de modèle de traitement particulier mais facilite simplement la détection des liens et la reconnaissance des métadonnées associées par une application de niveau supérieur.

Au contraire, le langage XInclude décrit une transformation de type de média particulière (de XML dans XML). Il définit un modèle de traitement particulier pour fusionner des ensembles d'information. Le traitement XInclude intervient à un niveau inférieur ; c'est souvent le fait d'un processeur XInclude générique qui met l'ensemble d'information final à la disposition des applications de niveau supérieur.

L'inclusion d'un item d'information simple, comme cette spécification le décrit, diffère d'une transclusion, laquelle préserve les informations contextuelles tel que le style.

1.2 Les relations avec les entités externes XML

Il existe un certain nombre de différences entre XInclude et les entités externes [XML 1.0], ou [XML 1.1], ce qui en font des technologies complémentaires.

Le traitement des entités externes (comme celui du reste des DTD) se produit pendant l'analyse. Le langage XInclude opère sur des ensembles d'information et il est de ce fait orthogonal à l'analyse.

La déclaration des entités externes nécessite un DTD ou un sous-ensemble interne. Cela place un ensemble de dépendances sur l'inclusion, par exemple, la syntaxe de la déclaration de type de document DOCTYPE exige que l'on nomme l'élément document, souvent de manière orthogonale à l'inclusion. Les analyseurs validants doivent disposer d'un modèle de contenu entièrement défini. Le langage XInclude est orthogonal à la validation et au nom de l'élément document.

Les entités externes présentent un niveau d'indirection : l'entité externe doit être déclarée et nommée, et invoquée séparément. Le langage XInclude utilise des appels directs. Les applications qui génèrent une sortie XML incrémentielle peuvent tirer avantage de ne pas devoir prédéclarer les inclusions.

L'échec de la récupération d'une entité externe constitue normalement une erreur fatale. Le langage XInclude permet aux auteurs de fournir un contenu par défaut qui sera utilisé si la ressource distante ne pouvait être récupérée.

La syntaxe d'un sous-ensemble interne est encombrante pour beaucoup d'auteurs de documents XML bien formés simples. La syntaxe XInclude se fonde sur des structures XML familières.

1.3 Les relations avec les DTD

Le langage XInclude ne définit aucune relation en ce qui concerne une validation par DTD. Le langage XInclude décrit une transformation d'ensemble d'information à ensemble d'information et non un changement du comportement d'analyse XML. Il ne définit aucun mécanisme de validation par DTD pour l'ensemble d'information final.

1.4 Les relations avec les schémas XML

Le langage XInclude ne définit aucune relation en ce qui concerne les ensembles d'information augmentés par application d'un schéma XML. On peut fournir un tel ensemble d'information augmenté comme ensemble d'information d'entrée ou appliquer cette augmentation à l'ensemble d'information final produit par l'inclusion.

1.5 Les relations avec les inclusions d'une grammaire particulière

Des mécanismes d'inclusion d'usage particulier ont été introduits dans certaines grammaires XML. Le langage XInclude offre un mécanisme générique de reconnaissance et de traitement des inclusions et, comme tel, il peut offrir une expérience de création globalement plus simple, de meilleures performances et une moindre redondance du code.

2 La terminologie

[Définition : Les mots-clés doi(ven)t, ne doi(ven)t pas, obligatoire, devra (devront), ne devra (devront) pas, devrai(en)t, ne devrai(en)t pas, recommandé, peu(ven)t et optionnel employés dans cette spécification doivent s'interpréter selon le document [IETF RFC 2119].]

[Définition : Le terme ensemble d'information se rapporte à la sortie d'un processeur [XML 1.0], ou [XML 1.1], qui s'exprime sous forme d'une collection d'éléments et de propriétés d'information comme défini par la spécification [XML Information Set].] Dans ce document, le terme infoset est un synonyme pour ensemble d'information.

[Définition : Le terme erreur fatale se rapporte à la présence de facteurs empêchant la poursuite normale du traitement.] [Définition : Le terme erreur de ressource se rapporte à l'échec d'une tentative de récupération d'une ressource à partir d'une adresse URL.] Les processeurs XInclude doivent interrompre le traitement lorsqu'ils rencontrent des erreurs autres que des erreurs de ressource, lesquelles doivent être traitées comme décrit dans le chapitre 4.4 Le comportement de reprise.

3 La syntaxe

Le langage XInclude définit un espace de nommage associé à l'adresse URI http://www.w3.org/2001/XInclude. L'espace de nommage XInclude contient deux éléments dont les noms locaux sont include et fallback. Par commodité dans cette spécification, on désigne ces éléments par xi:include et xi:fallback respectivement.

Le schéma XML suivant (non normatif) [XML Schema] montre le modèle de contenu de l'espace de nommage xi :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xi="http://www.w3.org/2001/XInclude"
           targetNamespace="http://www.w3.org/2001/XInclude"
           finalDefault="extension">

  <xs:element name="include" type="xi:includeType" />

  <xs:complexType name="includeType" mixed="true">
    <xs:choice minOccurs='0' maxOccurs='unbounded' >
      <xs:element ref='xi:fallback' />
      <xs:any namespace='##other' processContents='lax' />
      <xs:any namespace='##local' processContents='lax' />
    </xs:choice>
    <xs:attribute name="href" use="optional" type="xs:anyURI"/>
    <xs:attribute name="parse" use="optional" default="xml"
                  type="xi:parseType" />
    <xs:attribute name="xpointer" use="optional" type="xs:string"/>
    <xs:attribute name="encoding" use="optional" type="xs:string"/>
    <xs:attribute name="accept" use="optional" type="xs:string"/>
    <xs:attribute name="accept-language" use="optional" type="xs:string"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>

  <xs:simpleType name="parseType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="xml"/>
      <xs:enumeration value="text"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:element name="fallback" type="xi:fallbackType" />

  <xs:complexType name="fallbackType" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="xi:include"/>
      <xs:any namespace="##other" processContents="lax"/>
      <xs:any namespace="##local" processContents="lax"/>
    </xs:choice>
    <xs:anyAttribute namespace="##other" processContents="lax" />
  </xs:complexType>

</xs:schema>

3.1 L'élément xi:include

L'élément xi:include admet les attributs suivants :

href

Une valeur qui, après échappement approprié (cf. 4.1.1 L'échappement des valeurs d'attribut href), se résoud en une référence URI, ou une référence IRI, indiquant la localisation de la ressource à inclure. L'attribut href est optionnel ; l'absence de cet attribut revient au même que de déclarer href="", à savoir que la référence porte sur le même document. Si l'attribut href est absent quand parse="xml", alors l'attribut xpointer doit être présent. On ne doit pas utiliser d'identificateurs de fragment : leur apparition constituerait une erreur fatale. Une valeur qui résulte en une syntaxe d'adresse URI, ou IRI, invalide devrait être signalée comme une erreur fatale mais certaines implémentations peuvent trouver malcommode de distinguer ce cas d'une erreur de ressource.

Remarque :

Une adresse URI qui se termine par un # est censée, selon [IETF RFC 2396], avoir un identificateur de fragment vide. Une telle adresse URI entraînerait une erreur fatale comme décrit précédemment.

Remarque :

Une fonctionnalité clé du langage XInclude est celle qui permet de forcer une ressource dans un type défini par l'utilisateur pour l'inclusion (XML ou texte). Le type de média renvoyé est donc essentiellement ignoré pour les besoins du traitement d'inclusion, et la syntaxe de l'identificateur de fragment du type de média renvoyé ne sera généralement pas applicable au type défini par l'utilisateur. Pour les inclusions de type parse="xml", les sous-ressources sont identifiées par un attribut xpointer séparé, qui s'applique après que le forçage a eu lieu. Bien que cela n'empêche pas que les sous-ressources des documents XML soient identifiées par des adresses URI (cf. L'architecture du World Wide Web [Identification]), l'usage de ces identificateurs directement dans XInclude en devient interdit.

parse

Indique s'il faut inclure la ressource en tant que code XML analysé ou en tant que texte. L'attribut parse permet à XInclude de donner priorité à l'auteur du document incluant sur le serveur du document inclus pour ce qui concerne la façon de traiter le contenu inclus. Une valeur de "xml" indique que la ressource doit être analysée comme code XML et que les ensembles d'informations doivent fusionner. Une valeur de "text" indique que la ressource doit être incluse comme tenant un rôle d'item d'information. Cet attribut est optionnel. En cas d'omission, il a une valeur implicite de "xml" (même sans déclaration de valeur par défaut). Les valeurs autres que "xml" et "text" constituent une erreur fatale.

Remarque :

Pour des raisons d'interopérabilité entre systèmes validants et non validants, aucun caractère blanc ne devrait apparaître dans la valeur de l'attribut parse.

xpointer

Au cas où parse="xml", la valeur XPointer (cf. [XPointer Framework]) contenue dans l'attribut xpointer est évaluée afin d'identifier le morceau de la ressource à inclure. Cet attribut est optionnel ; en cas d'omission, la ressource entière sera incluse. L'attribut xpointer ne doit pas apparaître dans le cas où parse="text". Si l'attribut xpointer est absent, alors l'attribut href doit être présent.

Remarque :

Dans la mesure où l'attribut xpointer n'est pas une référence URI, il ne doit pas y avoir d'échappements en % dans la valeur XPointer et le processeur n'est pas tenu non plus d'appliquer ou de rétablir un tel échappement.

encoding

Dans le cas où parse="text", il est parfois impossible de détecter correctement le codage de la ressource texte. L'attribut encoding indique comment traduire la ressource. La valeur de cet attribut est du type NomCodage comme défini dans la spécification XML, chapitre 4.3.3, production [81] vf. L'attribut encoding est sans effet pour parse="xml".

accept

Le processeur XInclude peut mettre à contribution la valeur de l'attribut accept dans une négociation de contenu. Lorsqu'il récupère une ressource via HTTP, le processeur XInclude devrait placer la valeur de l'attribut accept, le cas échéant, dans la requête HTTP en tant qu'en-tête Accept, comme décrit dans le chapitre 14.1 du document [IETF RFC 2616]. Les valeurs contenant des caractères en dehors de l'intervalle #x20 à #x7E sont interdits dans les en-têtes HTTP et doivent donc être étiquetées comme erreurs fatales.

accept-language

Le processeur XInclude peut mettre à contribution la valeur de l'attribut accept-language dans une négociation de contenu. Lorsqu'il récupère une ressource via HTTP, le processeur XInclude devrait placer la valeur de l'attribut accept-language, le cas échéant, dans la requête HTTP en tant qu'en-tête Accept-Language, comme décrit dans le chapitre 14.4 du document [IETF RFC 2616]. Les valeurs contenant des caractères en dehors de l'intervalle #x20 à #x7E sont interdits dans les en-têtes HTTP et doivent donc être étiquetées comme erreurs fatales.

On peut placer d'autres attributs que ceux listés précédemment sur l'élément xi:include. Les noms d'attribut non préfixés sont réservés pour les versions futures de cette spécification et doivent être ignorés par les processeurs XInclude 1.0.

La propriété enfants de l'élément xi:include peut contenir un seul élément xi:fallback ; la présence de plusieurs éléments xi:fallback, xi:include, ou d'un quelconque élément issu de l'espace de nommage XInclude, constitue une erreur fatale. Les autres contenus (le texte, les instructions de traitement, les commentaires, les éléments étrangers à l'espace de nommage XInclude, les descendants de sous-éléments) ne sont pas contraints par cette spécification et sont ignorés par le processeur XInclude, c'est-à-dire qu'ils n'ont aucun effet sur le traitement d'inclusion et qu'ils n'apparaissent pas dans les propriétés enfants de l'ensemble d'information final. Ces contenus pourraient être utilisés par des applications analysant un ensemble d'information avant inclusion, ou mis à la disposition d'une application après inclusion par d'autres moyens que les propriétés d'ensemble d'information normales.

Le fragment de DTD suivant (non normatif) illustre un exemple de déclaration pour l'élément xi:include :

<!ELEMENT xi:include (xi:fallback?)>
<!ATTLIST xi:include
    xmlns:xi        CDATA       #FIXED    "http://www.w3.org/2001/XInclude"
    href            CDATA       #IMPLIED
    parse           (xml|text)  "xml"
    xpointer        CDATA       #IMPLIED
    encoding        CDATA       #IMPLIED
    accept          CDATA       #IMPLIED
    accept-language CDATA       #IMPLIED
>

3.2 L'élément xi:fallback

L'élément xi:fallback apparaît comme sous-élément d'un élément xi:include. Il fournit un mécanisme de reprise en cas de ressources manquantes. Lorsqu'une erreur de ressource se produit, l'élément xi:include est remplacé par le contenu de l'élément xi:fallback. Si l'élément xi:fallback est vide, alors l'élément xi:include est supprimé du résultat. Si l'élément xi:fallback est manquant, l'erreur de ressource se mue alors en une erreur fatale.

L'élément xi:fallback peut apparaître seulement comme sous-élément d'un élément xi:include. Il y a erreur fatale si un élément xi:fallback apparaît ailleurs dans un document autrement que comme sous-élément direct de l'élément xi:include (avant le traitement d'inclusion sur le contenu de l'élément). Il y a erreur fatale si l'élément xi:fallback contient un quelconque élément de l'espace de nommage XInclude autre qu'un élément xi:include.

On peut placer des attributs sur l'élément xi:fallback. Les noms d'attribut non préfixés sont réservés pour les versions futures de cette spécification et doivent être ignorés par les processeurs XInclude 1.0.

Le fragment de DTD suivant (non normatif) illustre un exemple de déclaration pour l'élément xi:fallback :

<!ELEMENT xi:fallback ANY>
<!ATTLIST xi:fallback
    xmlns:xi   CDATA   #FIXED   "http://www.w3.org/2001/XInclude"
>

4 Le modèle de traitement

L'inclusion comme ce document la définit est un type particulier de transformation [XML Information Set].

[Définition : L'entrée de la transformation d'inclusion consiste en un ensemble d'information source.] [Définition : La sortie, appelée ensemble d'information final, est un nouvel ensemble d'information qui rassemble en les fusionnant l'ensemble d'information source et les ensembles d'information des ressources identifiées par les références URI, ou IRI, apparaissant dans les éléments xi:include.] On suppose donc l'existence d'un mécanisme qui résoud les adresses URI, ou IRI, et qui renvoie les ressources identifiées sous forme d'ensembles d'information. Les entités XML bien formées qui n'ont pas d'ensembles d'informations définis (par exemple, une entité externe avec plusieurs éléments de niveau supérieur) sont hors du cadre de cette spécification, que ce soit pour servir d'ensemble d'information source ou d'ensemble d'information final.

Les éléments xi:include dans l'ensemble d'information source servent d'instructions de transformation d'inclusion. [Définition : Les items d'information localisés par l'élément xi:include sont appelés les éléments inclus de niveau supérieur]. [Définition : Les éléments inclus de niveau supérieur, pris avec leurs attributs, leurs espaces de nom et leurs descendants, sont appelés les éléments inclus]. L'ensemble d'information final est essentiellement une copie de l'ensemble d'information source, dont chacun des éléments xi:include et leurs descendants ont été remplacés par les éléments inclus correspondants.

4.1 La localisation d'inclusion

La valeur de l'attribut href, après échappement selon 4.1.1 L'échappement des valeurs des attributs href, est interprétée soit comme une référence URI, soit comme une référence IRI. L'adresse URI de base pour les adresses URI ou IRI relatives est celle de l'élément xi:include, comme indiqué dans [XML Base]. [Définition : L'adresse URI, ou IRI, issue de la résolution de la valeur normalisée de l'attribut href (ou de la chaîne vide si l'attribut est absent) vers une forme d'adresse URI, ou IRI, absolue s'appelle la localisation d'inclusion.]

L'absence d'une valeur pour l'attribut href, soit que href="", soit que l'attribut href est absent, est source d'incompatibilité pour certaines stratégies d'implémentation. Par exemple, un processeur XInclude pourrait ne pas disposer d'une représentation textuelle de l'ensemble d'information source à inclure (parse="text"), ou il peut être dans l'impossibilité d'accéder à une autre partie du document en utilisant parse="xml" et un pointeur XPointer à cause d'un problème de transmission. Une implémentation peut choisir de traiter une ou toutes les absences de valeur de l'attribut href comme des erreurs de ressource. Les implémentations devraient documenter les conditions dans lesquelles ces erreurs de ressource se produisent.

4.1.1 L'échappement des valeurs des attributs href

La valeur de l'attribut href est convertie soit en une référence URI, soit en une référence IRI, selon ce qui convient à l'implémentation.

Des travaux sont actuellement en cours afin de produire un document RFC qui définisse les identificateurs de ressources internationnalisés (IRI). Comme ces travaux n'ont pas encore abouti, cette spécification définira les références IRI de manière syntaxique. Nous prévoyons de publier un erratum en remplacement des parties de ce chapitre avec une référence au document RFC quand celui-ci sera paru. Pour une définition et une discussion plus générales à propos des adresse IRI, cf. [IRI draft] (travaux en cours).

[Définition : Une référence IRI est une chaîne qui peut être convertie en une référence URI par échappement des caractères supplémentaires suivants :]

  • Les caractères du plan 0 de Unicode [#xA0-#xD7FF], [#xF900-#xFDCF], [#xFDF0-#xFFEF] ;

  • Les caractères des plans 1-14 de Unicode [#x10000-#x1FFFD] ... [#xE0000-#xEFFFD] ;

Pour convertir la valeur de l'attribut href en une référence IRI, on doit échapper les caractères suivants :

  • le caractère espace (#x20) ;

    Remarque :

    On conseille aux auteurs d'éviter les caractères espace non échappés, dans la mesure où la spécification XML Schema les a identifiés comme un facteur de risque pour l'interopérabilité.

  • les délimiteurs signe inférieur à < (#x3C), signe supérieur à > (#x3E) et guillemet double " (#x22) ;

  • les caractères à risques accolade gauche { (#x7B), accolade droite } (#x7D), barre verticale | (#x7C), barre oblique inversée \ (#x5C), accent circonflexe ^ (#x5E) et accent grave ` (#x60) ;

On échappe ces caractères de la façon suivante :

  1. Chaque caractère supplémentaire est converti dans le codage UTF-8 [Unicode] en un ou plusieurs octets ;

  2. Les octets résultants sont échappés selon le mécanisme d'échappement des adresses URI (c'est-à-dire, convertis dans une forme %HH, où HH représente la notation hexadécimale de la valeur d'octet) ;

  3. Le caractère original est remplacé par la séquence de caractères résultante.

Pour convertir une référence IRI en une référence URI, on doit échapper les caractères supplémentaires admis pour les adresses IRI en utilisant la même méthode.

4.1.2 L'utilisation de XInclude avec une négociation de contenu

L'utilisation d'un mécanisme comme la négociation de contenu HTTP [IETF RFC 2616] introduit un niveau de complexité potentiel supplémentaire dans l'emploi de XInclude. Les développeurs qui utilisent XInclude dans des situations où une négociation de contenu est probable ou possible devraient avoir conscience du fait qu'ils sont susceptibles d'inclure un contenu pouvant différer structurellement de celui attendu, même si c'est un contenu XML. Par exemple, une seule adresse URI, ou IRI, peut désigner, selon les cas, une représentation XML brute de la ressource, une représentation XSL-FO [XSL-FO] ou une représentation XHTML [XHTML], tout comme des versions dans des codages de caractères ou des langues différents.

Les auteurs dont le traitement XInclude dépend de la réception d'un vocabulaire XML particulier devraient utiliser les attributs accept et accept-language pour augmenter la probabilité que la ressource soit livrée dans le format voulu.

4.2 Les éléments inclus si parse="xml"

Dans le cas où parse="xml", la localisation d'inclusion est résolue, la ressource est récupérée et un ensemble d'information est créé par analyse de la ressource comme si le type de média était "application/xml" (y compris la détermination du codage de caractères).

Remarque :

On a volontairement omis de donner les caractéristiques de la création d'un ensemble d'information afin de laisser une certaine flexibilité aux implémentations et pour éviter de définir un modèle de traitement particulier pour les composants de l'architecture XML. Par exemple, les détails sur la question de savoir si on doit effectuer une validation par DTD ou bien par schéma XML ne sont pas définis par cette spécification.

Remarque :

Les codages de caractères des ressources incluantes et incluses peuvent être différents. Ils n'affectent pas l'ensemble d'information final mais ils peuvent être pris en compte au cours d'une sérialisation consécutive.

L'indisponibilité d'une ressource pour une raison quelconque (par exemple, la ressource n'existe pas, des problèmes de connexion ou des mesures de sécurité en empêchent la récupération, le système d'adresse URI ne permet pas la récupération, la ressource a un codage non reconnu ou la ressource est déterminée par les mécanismes propres d'une implémentation comme n'étant pas du XML) entraîne une erreur de ressource. Une ressource dont le contenu n'est pas du XML bien formé provoque une erreur fatale.

Remarque :

La distinction entre une erreur de ressource et une erreur fatale dépend quelque peu de l'implémentation. Supposons une localisation d'inclusion renvoyant un document HTML, comme peut-être une page d'erreur. Un processeur pourrait déterminer qu'aucun ensemble d'information ne saurait être créé à partir de la ressource (par exemple, en examinant le type de média) et donc invoquer une erreur de ressource, en validant un comportement de reprise. Un autre processeur, obéissant à une autre heuristique, pourrait tenter d'analyser la ressource non-XML comme étant du XML et rencontrer une erreur (fatale) de format erronné.

[Définition : Les éléments xi:include dans cet ensemble d'information sont traités récursivement pour créer l'ensemble d'information acquis. Pour un appel interne au document (via un attribut xpointer), on utilise l'ensemble d'information source comme ensemble d'information acquis.]

[Définition : La partie de l'ensemble d'information acquis à inclure est appelée la cible d'inclusion.] L'item d'information de document de l'ensemble d'information acquis sert de cible d'inclusion sauf si l'attribut xpointer est présent et identifie une sous-ressource. Les formes de pointeur XPointer décrites dans [XPointer Framework] et [XPointer element() scheme] doivent être gérées. Les processeurs XInclude gèrent en option d'autres formes de pointeur XPointer comme celles décrites dans [XPointer xpointer() Scheme]. Une erreur de pointeur XPointer est une erreur de ressource.

Le système [XPointer xpointer() Scheme] n'est pas défini selon la spécification [XML Information Set] mais il se base sur le modèle de données [XPath 1.0], car l'ensemble d'information XML n'a pas encore été développé. La correspondance entre les localisations de nœud XPath et les items d'information est directe. Toutefois, le système xpointer() suppose que toutes les entités ont été développées. Donc, tenter de résoudre un système xpointer() sur un document contenant des items d'information d'appel d'entité non développé entraînera une erreur fatale.

L'ensemble des éléments inclus de niveau supérieur est dérivé de l'ensemble d'information acquis comme suit.

4.2.1 Les items d'information de document

La cible d'inclusion peut être un item d'information de document (par exemple, un attribut xpointer non spécifié ou un pointeur XPointer visant spécifiquement la racine du document). Auquel cas, l'ensemble des éléments inclus de niveau supérieur correspond à la propriété enfants de l'item d'information de document de l'ensemble d'information acquis, à l'exception de l'enfant item d'information de déclaration de type de document, le cas échéant.

Remarque :

La spécification de l'ensemble d'information XML ne prévoit pas la conservation des blancs en dehors de l'élément document. Le langage XInclude ne prévoit rien non plus en ce sens.

4.2.2 Les nœuds multiples

La cible d'inclusion peut se composer de plusieurs nœuds. Auquel cas, l'ensemble des éléments inclus de niveau supérieur est l'ensemble des items d'information de l'ensemble d'information acquis correspondant aux nœuds désignés par le pointeur XPointer, dans l'ordre où ils apparaissent dans l'ensemble d'information acquis.

4.2.3 Les localisations des étendues

La cible d'inclusion peut être un ensemble de localisations qui représente une étendue ou un ensemble d'étendues.

Chaque étendue correspond à un ensemble d'items d'information dans l'ensemble d'information acquis. [Définition : Un item d'information est dit sélectionné par une étendue s'il apparaît après (dans l'ordre du document) le point de départ de l'étendue et avant son point final.] [Définition : Un item d'information est dit partiellement sélectionné par une étendue s'il contient seulement le point de départ de l'étendue, ou bien seulement son point final.] Par définition, un item d'information de caractère ne peut pas être partiellement sélectionné.

L'ensemble des éléments inclus de niveau supérieur est l'union, dans l'ordre du document et après suppression des doublons, des items d'informations soit sélectionnés, soit partiellement sélectionnés par l'étendue. La propriété enfants des items d'information sélectionnés n'est pas modifiée. La propriété enfants des items d'informations partiellement sélectionnés est l'ensemble des items d'information qui sont à leur tour soit sélectionnés, soit partiellement sélectionnés, et ainsi de suite.

4.2.4 Les localisations des points

La cible d'inclusion peut être un ensemble de localisations qui représente un point. Auquel cas, l'ensemble des éléments inclus est vide.

4.2.5 Les items d'information des éléments, des commentaires et des instructions de traitement

La cible d'inclusion peut être un nœud d'élément, un nœud de commentaire ou un nœud d'instruction de traitement, représentant respectivement un item d'information d'élément, un item d'information de commentaire ou un item d'information d'instruction de traitement. Auquel cas, l'ensemble des éléments inclus de niveau supérieur consiste en l'item d'information correspondant au nœud d'élément, de commentaire ou d'instruction de traitement dans l'ensemble d'information acquis.

4.2.6 Les items d'information des attributs et des déclarations d'espace de nommage

Une cible d'inclusion consistant en un nœud d'attribut ou un nœud de déclaration d'espace de nommage entraîne une erreur fatale.

4.2.7 Les boucles d'inclusion

Si, au cours du traitement récursif d'un élément xi:include, un autre élément xi:include est rencontré, dont la localisation d'inclusion et la valeur de l'attribut xpointer ont déjà été traitées dans la chaîne d'inclusion, alors c'est une erreur fatale.

En d'autres termes, les propositions suivantes sont toutes illégales :

  • Un élément xi:include peut appeler le document contenant l'élément d'inclusion lorsque parse="text".

  • Un élément xi:include peut identifier une autre partie de la même ressource locale (mêmes attributs href, attributs xpointer différents).

  • Deux éléments xi:include non imbriqués peuvent identifier une ressource contenant elle-même un élément xi:include.

Les propositions suivantes sont légales :

  • Un élément xi:include pointant sur lui-même, ou sur un quelconque ancêtre, si parse="xml".

  • Un élément xi:include pointant sur un quelconque élément d'inclusion, ou un ancêtre de celui-ci, qui a déjà été traité à un niveau supérieur.

4.3 Les éléments inclus si parse="text"

Lorsque parse="text", la localisation d'inclusion est résolue puis la ressource est récupérée et transformée en un ensemble d'items d'information de caractère. Cette caractéristique facilite l'inclusion d'exemples XML fonctionnels ainsi que d'autres formats basés sur du texte.

L'indisponibilité d'une ressource pour une raison quelconque (par exemple, la ressource n'existe pas, des problèmes de connexion ou des mesures de sécurité en empêchent la récupération, le système d'adresse URI ne permet pas la récupération ou la ressource a un codage non reconnu) entraîne une erreur de ressource.

Le codage d'une telle ressource est déterminé par :

  • une information de codage externe, le cas échéant, sinon ;

  • si le type de média de la ressource est "text/xml", "application/xml" ou correspond aux conventions "text/*+xml" ou "application/*+xml", comme décrit dans les types de média XML [IETF RFC 3023], alors le codage est reconnu comme défini dans XML, sinon ;

  • la valeur de l'attribut encoding, le cas échéant, sinon ;

  • UTF-8.

Les séquences d'octets en dehors de l'intervalle permis par le codage entraînent une erreur fatale. Les caractères non admis dans les documents XML provoquent aussi une erreur fatale.

Chaque caractère issu de la transformation de la ressource est représenté dans les éléments inclus de niveau supérieur comme un item d'information de caractère dont la propriété code de caractère prend la valeur du codage ISO 10646 et la propriété blancs dans le contenu de l'élément est définie à "false".

La normalisation du texte inclus se traite selon le modèle de caractère [Character Model].

4.4 Le comportement de reprise

En cas d'erreur de ressource, les processeurs XInclude doivent basculer sur un comportement de reprise comme ceci :

Si la propriété enfants de l'item d'information de l'élément xi:include dans l'ensemble d'information source contient exactement un seul élément xi:fallback, alors les éléments inclus de niveau supérieur sont les items d'information correspondant au résultat de l'application du traitement XInclude sur la propriété enfants de l'élément xi:fallback. S'il y a zéro ou plusieurs éléments xi:fallback, alors c'est une erreur fatale.

Remarque :

Le contenu de rechange ne dépend pas de la valeur de l'attribut parse. L'élément xi:fallback peut contenir du balisage même dans le cas parse="text". De la même façon, il peut contenir une simple chaîne dans le cas parse="xml".

4.5 La création de l'ensemble d'information final

L'ensemble d'information final est une copie de l'ensemble d'information source, chacun des éléments xi:include se traitant comme suit :

L'item d'information de l'élément xi:include est trouvé. [Définition : La propriété parent de cet élément se rapporte à un item d'information appelé le parent d'inclusion.] La propriété enfants du parent d'inclusion est modifiée en remplaçant l'item d'information de l'élément xi:include par les éléments inclus de niveau supérieur. La propriété parent de chaque élément inclus est fixée sur le parent d'inclusion.

Tenter de remplacer un élément xi:include apparaissant comme l'élément document (au niveau supérieur) dans l'ensemble d'information source par autre chose qu'une liste de zéro ou plus commentaires, zéro ou plus instructions de traitement et un seul élément entraîne une erreur fatale.

Certains processeurs peuvent se trouver incapables de représenter la propriété espaces de nommage dans la portée d'un élément si celui-ci n'inclut pas d'associations pour tous les préfixes associés dans la propriété espaces de nommage dans la portée de son parent. Ces processeurs peuvent donc inclure d'autres associations d'espace de nommage héritées du parent d'inclusion dans la propriété espaces de nommage dans la portée des éléments inclus.

L'historique d'inclusion de chaque élément inclus de niveau supérieur est enregistré dans la propriété d'extension inclure l'historique. La propriété inclure l'historique se compose d'une liste d'items d'information d'élément, représentant les éléments xi:include des niveaux d'inclusion récursifs. Si une propriété inclure l'historique apparaît déjà sur un élément inclus de niveau supérieur, alors l'item d'information de l'élément xi:include est rajouté en fin de liste. S'il n'y a pas de propriété inclure l'historique, alors cette propriété est ajoutée avec pour seule valeur l'item d'information de l'élément xi:include.

Les éléments inclus apparaîtront tous dans l'ensemble d'information final. Y compris les items d'information d'appel d'entité non développé, le cas échéant.

Les appels dans un même document au sein des éléments xi:include se résolvent par rapport à l'ensemble d'information source. Par conséquent, l'ordre dans lequel les éléments xi:include sont traités n'affecte pas le résultat.

Dans l'exemple suivant, la seconde inclusion pointe toujours sur le premier élément xi:include et non sur lui-même, indépendamment de l'ordre dans lequel les inclusions sont traitées. Ainsi cette inclusion aboutit à deux copies de quelquechose.xml et ne produit pas d'erreur de boucle d'inclusion.

<x xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="quelquechose.xml"/>
  <xi:include xpointer="xmlns(xi=http://www.w3.org/2001/XInclude)xpointer(x/xi:include[1])"
              parse="xml"/>
</x>

4.5.1 Les entités non analysables

Tout item d'information d'entité non analysable apparaissant dans la propriété références d'un attribut sur les éléments inclus, ou tout descendant de ceux-ci, s'ajoute aux entités non analysables de l'item d'information de document de l'ensemble d'information final, tant que ce n'est pas un doublon d'un membre existant. Les doublons n'apparaissent pas dans l'ensemble d'information final.

Les entités non analysables ayant les mêmes nom, identifiant système, identifiant publique, URI de base de déclaration, nom de notation et notation sont censées être des doublons. Une application peut également détecter que des entités non analysables constituent des doublons par d'autres moyens. Par exemple, déterminer que l'adresse URI résultant de la combinaison des propriétés identifiant système et URI de base de déclaration est la même.

Inclure des éléments d'entité non analysable ayant le même nom, sans que l'on ait déterminé s'il s'agit de doublons ou non, constitue une erreur fatale.

4.5.2 Les notations

Tout item d'information de notation apparaissant dans la propriété références d'un attribut dans les éléments inclus, ou tout descendant de ceux-ci, s'ajoute à la propriété notations de l'item d'information de document de l'ensemble d'information final, tant que ce n'est pas un doublon d'un membre existant. De la même façon, toute notation appelée par une entité non analysable s'ajoute, comme décrit dans le chapitre 4.5.1 Les entités non analysables, à moins qu'il ne s'agisse d'un doublon. Les doublons n'apparaissent pas dans l'ensemble d'information final.

Les éléments de notation ayant les mêmes nom, identifiant système, identifiant public et URI de base de déclaration sont censés être des doublons. Une application peut également détecter que des notations constituent des doublons par d'autres moyens. Par exemple, déterminer que l'adresse URI résultant de la combinaison des propriétés identifiant système et URI de base de déclaration est la même.

Inclure des éléments de notation ayant le même nom, sans que l'on ait déterminé s'il s'agit de doublons ou non, constitue une erreur fatale.

4.5.3 L'ajustement de la propriété références

Pendant l'inclusion, un item d'information d'attribut dont la propriété type d'attribut est IDREF ou IDREFS aura une propriété références avec zéro ou plus valeurs d'élément issues de l'ensemble d'information source ou des ensembles d'informations inclus. Ces valeurs doivent être ajustées pour correspondre aux valeurs d'élément qui apparaissent dans l'ensemble d'information final. Au cours de ce processus, XInclude corrige également les contradictions entre la propriété références et la propriété type d'attribut, susceptibles de se produire dans les circonstances suivantes :

  • Un fragment de document contient un attribut de type IDREF pointant vers un élément dans le document inclus, mais hors de la partie incluse. Auquel cas, aucun élément dans l'ensemble d'information final ne correspond à la valeur d'élément dans la propriété références originale.

  • Un document, ou fragment de document, n'est pas auto-contenu. C'est-à-dire qu'il contient un attribut de type IDREF qui ne se rapporte pas à un élément au sein de ce document, ou fragment de document, avec l'intention de réaliser ces références après l'inclusion. Auquel cas, la valeur de la propriété références est inconnue ou elle n'a pas de valeur.

  • L'ensemble d'information final comporte des conflits d'identificateur, c'est-à-dire, plusieurs attributs ont un identificateur de type d'attribut avec la même propriété valeur normalisée. Auquel cas, les attributs dont la propriété type d'attribut est IDREF ou IDREFS avec la même propriété valeur normalisée peuvent avoir des propriétés références avec des valeurs différentes.

Pour résoudre ces contradictions, XInclude considère la propriété type d'attribut comme définitive. Dans l'ensemble d'information final, la valeur de la propriété références d'un item d'information d'attribut dont la propriété type d'attribut est IDREF ou IDREFS s'ajuste comme suit :

Pour chaque atome dans la propriété valeur normalisée, la propriété références contient un item d'information d'élément avec les mêmes propriétés que l'item d'information d'élément dans l'ensemble d'information final avec un attribut dont la propriété type d'attribut est ID et la propriété valeur normalisée est égale à l'atome en question. L'ordre des éléments dans la propriété références est le même que celui des atomes apparaissant dans la propriété valeur normalisée. Si on ne trouve aucun élément ou plusieurs éléments pour l'une des valeurs atomiques, alors la propriété références n'a pas de valeur.

4.5.4 L'ajustement des espaces de nommage

La propriété espaces de nommage dans la portée assure que la visibilité d'un espace de nommage sera conservée au travers de l'inclusion. Toutefois, après l'inclusion, la propriété attributs d'espace de nommage peut ne pas fournir la liste complète des déclarations d'espace de nommage nécessaires pour interpréter les noms qualifiés dans le contenu des attributs ou des éléments dans l'ensemble d'information final. On ne recommande donc pas que les processeurs XInclude exposent les attributs d'espace de nommage dans l'ensemble d'information final. Si on ne peut pas l'éviter, alors l'implémentation peut ajouter des items d'information d'attribut à la propriété attributs d'espace de nommage pour une approximation des informations transmises par la propriété espaces de nommage dans la portée.

4.5.5 L'ajustement de l'adresse URI de base

La propriété addresse URI de base de l'ensemble d'information acquis ne change pas pendant la fusion de l'ensemble d'information et elles reste inchangée après la fusion. Les références URI relatives dans l'ensemble d'information inclus se résolvent donc par rapport à la même adresse URI, bien qu'elles soient incluses dans un document dont l'adresse URI de base en vigueur est potentiellement différente. On ajoute des attributs xml:base à l'ensemble d'information final pour refléter ce fait.

Chaque item d'information d'élément dans les éléments inclus de niveau supérieur qui a une propriété URI de base différente de celle de son parent d'inclusion voit s'ajouter un item d'information d'attribut à sa propriété attributs. Cet attribut a les propriétés suivantes :

  1. Un nom d'espace de nommage de http://www.w3.org/XML/1998/namespace ;

  2. Un nom local de base ;

  3. Un préfixe de xml ;

  4. Une valeur normalisée égale soit à l'URI de base de l'élément, soit une référence URI équivalente, relative à la propriété URI de base du parent d'inclusion. Les circonstances dans lesquelles une adresse URI relative est souhaitable et comment calculer une telle adresse URI relative dépendent de l'implémentation ;

  5. Un drapeau spécifié indiquant que cet attribut était effectivement défini dans la balise ouvrante de son élément ;

  6. Un type d'attribut de CDATA ;

  7. Une propriété références sans valeur ;

  8. Un élément possesseur de l'item d'information de l'élément.

Si un item d'information d'attribut xml:base est déjà présent, alors il est remplacé par le nouvel attribut.

4.5.6 L'ajustement de la langue

Alors que l'attribut xml:lang est décrit comme hérité de XML, l'ensemble d'information XML ne prévoit rien pour préserver l'héritage de cette propriété dans la composition du document au contraire de XInclude. Ce chapitre introduit une propriété langue qui enregistre la visibilité de l'information fournie par xml:lang afin de la préserver pendant l'inclusion.

Un processeur XInclude devrait augmenter l'ensemble d'information source et l'ensemble d'information acquis en ajoutant la propriété langue à chaque item d'information d'élément. La valeur de cette propriété correspond à la valeur normalisée de l'attribut xml:lang apparaissant, le cas échéant, sur l'élément en question, une déclaration xml:lang="" n'amenant aucune valeur ; sinon c'est la valeur de la propriété langue de l'élément parent de cet élément, le cas échéant ; sinon la propriété n'a pas de valeur.

Chaque item d'information d'élément dans les éléments inclus de niveau supérieur qui a une valeur de propriété langue différente de celle de son parent d'inclusion (en prenant en compte l'insensibilité à la casse d'après [IETF RFC 3066]), ou qui a une valeur si son parent d'inclusion est un item d'information de document, voit s'ajouter un item d'information d'attribut dans sa propriété attributs. Cet attribut a les propriétés suivantes :

  1. Un espace de nommage de http://www.w3.org/XML/1998/namespace ;

  2. Un nom local de lang ;

  3. Un préfixe de xml ;

  4. Une valeur normalisée égale à la propriété langue de l'élément. Si la propriété langue n'a pas de valeur, alors la valeur normalisée correspond à la chaîne vide 

  5. Un drapeau spécifié indiquant que cet attribut était effectivement défini dans la balise ouvrante de son élément ;

  6. Un type d'attribut de CDATA ;

  7. Une propriété références sans valeur ;

  8. Un élément possesseur de l'item d'information de l'élément.

Si un item d'information d'attribut xml:lang est déjà présent, alors il est remplacé par le nouvel attribut.

Remarque :

L'attribut xml:space ne reçoit pas de traitement spécial XInclude.

4.5.7 Les propriétés conservées par l'ensemble d'information

En tant que transformation d'un ensemble d'information, le langage XInclude opère sur la structure logique des documents XML, et non sur la sérialisation de leur texte. Toutes les propriétés d'un item d'information décrites dans la spécification [XML Information Set] autres que celles modifiées spécifiquement par cette spécification sont conservées au cours de l'inclusion. Les propriétés inclure l'historique et langue introduites par la présente spécification le sont aussi. Les propriétés d'extension telles que les propriétés [XML Schemas] d'ensemble d'information de validation après schéma (PSVI) sont supprimées par défaut. Toutefois, un processeur XInclude peut, au choix de l'utilisateur, conserver ces propriétés dans l'ensemble d'information final si celles-ci sont exactes selon la spécification définissant la sémantique des propriétés d'extension.

Par exemple, la propriété PSVI validité décrit les conditions des ancêtres et des descendants. Une modification des ancêtres et des descendants pendant le processus XInclude peut en rendre la valeur inexacte. Par défaut, XInclude retire cette propriété mais, au choix de l'utilisateur, elle pourrait être recalculée pour obtenir une valeur sémantiquement exacte. La manière précise d'accomplir cette opération n'est pas abordée par cette spécification.

5 La conformité

5.1 La conformité du balisage

Un item d'information d'élément est conforme à cette spécification s'il satisfait aux conditions structurelles des éléments d'inclusion qui y sont définis. Cette spécification n'impose aucune contrainte particulière sur les DTD ou les schémas XML ; la conformité ne concerne que les éléments et les attributs.

5.2 La conformité de l'application

Une application est conforme à XInclude si elle :

La gestion du système XPointer xpointer() [XPointer xpointer() Scheme] n'est pas obligatoire pour la conformité entière à XInclude. À l'attention des auteurs : le système xpointer() et les systèmes XPointer autres que element() ne seront pas forcément gérée par toutes les implémentations XInclude conformes.

5.3 La conformité à l'ensemble d'information XML

Cette spécification est conforme à l'ensemble d'information XML [XML Information Set]. Les items d'information suivants doivent être présents dans les ensembles d'information d'entrée pour un traitement correct :

  • Les items d'information de document avec les propriétés enfants et URI de base ;

  • Les items d'information d'élément avec les propriétés nom d'espace de nommage, nom local, enfants, attributs, URI de base et parent ;

  • Les items d'information d'attribut avec les propriétés nom d'espace de nommage, nom local et valeur normalisée.

En outre, le traitement XInclude est susceptible de générer les types d'item d'information suivants dans l'ensemble d'information final :

  • Les items d'information de caractère avec les propriétés code de caractère, blanc dans le contenu de l'élément et parent.

Le langage XInclude augmente l'ensemble d'information avec la propriété inclure l'historique, qui peut apparaître sur les types d'item d'information suivants dans l'ensemble d'information final :

  • Les items d'information d'élément ;

  • Les items d'information d'instruction de traitement ;

  • Les items d'information de commentaire ;

  • Les items d'information de caractère.

Le langage XInclude augmente également l'ensemble d'information avec la propriété langue, qui peut apparaître sur les items d'information d'élément dans l'ensemble d'information final.

A Références

IETF RFC 2119
RFC 2119 : Les mots-clés à utiliser dans les documents RFC pour indiquer les niveaux d'obligation. Internet Engineering Task Force, 1997. (Cf. http://www.ietf.org/rfc/rfc2119.txt.)
IETF RFC 2279
RFC 2279 : UTF-8, un format de transformation de ISO 10646. Internet Engineering Task Force, 1998. (Cf. http://www.ietf.org/rfc/rfc2279.txt.)
IETF RFC 2396
RFC 2396 : Les identificateurs de ressource uniformes. Internet Engineering Task Force, 1995. (Cf. http://www.ietf.org/rfc/rfc2396.txt.)
IETF RFC 2732
RFC 2732 : Le format des adresses IPv6 littérales dans les adresses URL. Internet Engineering Task Force, 1999. (Cf. http://www.ietf.org/rfc/rfc2732.txt.)
IETF RFC 3023
RFC 3023 : Les types de média XML. Internet Engineering Task Force, 2001. (Cf. http://www.ietf.org/rfc/rfc3023.txt.)
Unicode
The Unicode Consortium. Le standard Unicode, version 4.0. vf, Reading, Mass.: Addison-Wesley,2003, selon les mises à jour par la publication de nouvelles versions. (Cf. http://www.unicode.org/unicode/standard/versions/ pour la dernière version et d'autres informations concernant le standard et la base de données de caractères Unicode).
XML 1.0
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François Yergeau, rédacteurs. Le langage de balisage extensible (XML) 1.0 (troisième édition) vf (ancienne édition), World Wide Web Consortium, 2004. (Cf. http://www.w3.org/TR/2004/REC-xml-20040204/.)
XML 1.1
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François Yergeau, John Cowan, rédacteurs. Le langage de balisage extensible (XML) 1.1 vf, World Wide Web Consortium, 2004. (Cf. http://www.w3.org/TR/2004/REC-xml11-20040204/.)
XML Base
Jonathan Marsh, rédacteur. XML Base vf, World Wide Web Consortium, 2001. (Cf. http://www.w3.org/TR/2001/REC-xmlbase-20010627/.)
XML Information Set
John Cowan et Richard Tobin, rédacteurs. L'ensemble d'information XML (deuxième édition) vf, World Wide Web Consortium, 2004. (Cf. http://www.w3.org/TR/2004/REC-xml-infoset-20040204/.)
Namespaces in XML
Tim Bray, Dave Hollander et Andrew Layman, rédacteurs. Les espaces de nommage dans XML vf, World Wide Web Consortium, 1999. (Cf. http://www.w3.org/TR/1999/REC-xml-names-19990114/.)
Namespaces in XML 1.1
Tim Bray, Dave Hollander, Andrew Layman, Richard Tobin, rédacteurs. Les espaces de nommage dans XML 1.1 vf, World Wide Web Consortium, 2004. (Cf. http://www.w3.org/TR/2004/REC-xml-names11-20040204/.)
XPointer Framework
Paul Grosso, Eve Maler, Jonathan Marsh, Norman Walsh, rédacteurs. Le cadre XPointer vf, World Wide Web Consortium, 2003. (Cf. http://www.w3.org/TR/2003/REC-xptr-framework-20030325/.)
XPointer element() scheme
Paul Grosso, Eve Maler, Jonathan Marsh, Norman Walsh, rédacteurs. Le système element() de XPointer vf, World Wide Web Consortium, 2003. (Cf. http://www.w3.org/TR/2003/REC-xptr-element-20030325/.)

B Références (non normatif)

IETF RFC 2616
RFC 2616 : Le protocole de transfert hypertexte -- HTTP/1.1. Internet Engineering Task Force, 1999. (Cf. http://www.ietf.org/rfc/rfc2616.txt.)
IETF RFC 3066
RFC 3066 : Les étiquettes d'identification des langues. Internet Engineering Task Force, 2001. (Cf. http://www.ietf.org/rfc/rfc3066.txt.)
XML Inclusion Proposal
Jonathan Marsh, David Orchard, rédacteurs. Une proposition d'inclusion XML (XInclude). World Wide Web Consortium, 2004. (Cf. http://www.w3.org/TR/1999/NOTE-xinclude-19991123.)
XML Linking Language
Steve DeRose, Eve Maler, David Orchard et Ben Trafford, rédacteurs. Le langage de liaison XML (XLink) vf, World Wide Web Consortium, 2001. (Cf. http://www.w3.org/TR/2001/REC-xlink-20010627/.)
XPointer xpointer() Scheme
Steve DeRose, Ron Daniel, Eve Maler, rédacteurs. Le système xpointer() de XPointer. World Wide Web Consortium, 2002. (Cf. http://www.w3.org/TR/2002/WD-xptr-xpointer-20021219/.)
XPath 1.0
James Clark, Steve DeRose, rédacteurs. Le langage de chemin XML (XPath) version 1.0 vf, World Wide Web Consortium, 1999. (Cf. http://www.w3.org/TR/1999/REC-xpath-19991116.)
IRI draft
Les identificateurs de ressource internationalisés (IRI). (Cf. http://www.ietf.org/internet-drafts/draft-duerst-iri-11.txt.)
Character Model
Martin J. Dürst, François Yergeau, Misha Wolf, Asmus Freytag, Tex Texin. Un modèle de caractère pour le World Wide Web 1.0 : La normalisation. World Wide Web Consortium, 2001. (Cf. http://www.w3.org/TR/charmod-norm/.)
XML Schemas
Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, rédacteurs. Le langage XML Schema partie 1 : Les structures vf, World Wide Web Consortium, 2001. (Cf. http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/.)
XSL-FO
Sharon Adler et al. Le langage de feuille de style extensible (XSL) vf, World Wide Web Consortium, 2001. (Cf. http://www.w3.org/TR/2001/REC-xsl-20011015/.)
XHTML
Steven Pemberton et al. XHTML 1.0 : le langage de balisage hypertexte extensible (deuxième édition) vf (ancienne édition) World Wide Web Consortium, 2002. (Cf. http://www.w3.org/TR/2002/REC-xhtml1-20020801/.)

C Exemples (non normatif)

C.1 Exemple d'inclusion basique

Le document XML suivant contient un élément xi:include qui pointe vers un document externe. On suppose que l'adresse URI de base de ce document est http://www.example.org/document.xml.

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>L'utilisateur domestique moyen n'a pas besoin de plus de 120MHz.</p>
  <xi:include href="exoneration.xml"/>
</document>

Le document exoneration.xml contient :

<?xml version='1.0'?>
<exoneration>
  <p>Les opinions exprimées ici sont celles de leur auteur
  et elles ne devraient pas être interprétées comme la position officielle
  approuvée par cette organisation.</p>
</exoneration>

L'ensemble d'information final après résolution des inclusions dans ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>L'utilisateur domestique moyen n'a pas besoin de plus de 120MHz.</p>
  <exoneration xml:base="http://www.example.org/exoneration.xml">
  <p>Les opinions exprimées ici sont celles de leur auteur
  et elles ne devraient pas être interprétées comme la position officielle
  approuvée par cette organisation.</p>
</exoneration>
</document>

C.2 Exemple d'inclusion textuelle

Le document XML suivant inclut un exemple fonctionnel dans un autre document :

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Ce document a été consulté
  <xi:include href="compte.txt" parse="text"/> fois.</p>
</document>

Le document compte.txt contient :

324387

L'ensemble d'information final après résolution des inclusions sur ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Ce document a été consulté
  324387 fois.</p>
</document>

C.3 Exemple d'inclusion textuelle XML

Le document XML suivant inclut un exemple fonctionnel dans un autre document.

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Voici la source de la ressource "donnees.xml" :</p>
  <exemple><xi:include href="donnees.xml" parse="text"/></exemple>
</document>

Le document donnees.xml contient :

<?xml version='1.0'?>
<donnee>
  <article><![CDATA[Féline & Lion]]></article>
</donnee>

L'ensemble d'information final après résolution des inclusions dans ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Voici la source de la ressource "donnees.xml" :</p>
  <exemple>&lt;?xml version='1.0'?&gt;
&lt;donnee&gt;
  &lt;article&gt;&lt;![CDATA[Féline &amp; Lion]]&gt;&lt;/article&gt;
&lt;/donnee&gt;</exemple>
</document>

C.4 Exemple d'inclusion de fragment

Voici le résultat de l'inclusion de fragments d'un autre document XML. On suppose que l'adresse URI de base du document est http://www.example.com/DevisJeanBon.xml.

<?xml version='1.0'?>
<devis xmlns:xi="http://www.w3.org/2001/XInclude">
  <client>Jean Bon</client>
  <validite>20040930</validite>
  <xi:include href="bareme.xml" xpointer="w002-description"/>
  <volume>40</volume>
  <xi:include href="bareme.xml" xpointer="element(w002-tarif/2)"/>
</devis>

Le document bareme.xml appelle un DTD déclarant que les attributs id sont de type ID ; il contient :

<?xml version='1.0'?>
<!DOCTYPE bareme SYSTEM "bareme.dtd">
<bareme xml:lang="fr">
  <article id="w001">
    <description id="w001-description">
      <p>Machin normal</p>
    </description>
    <tarif id="w001-tarif">
      <prix monnaie="EUR" volume="1+">39.95</prix>
      <prix monnaie="EUR" volume="10+">34.95</prix>
      <prix monnaie="EUR" volume="100+">29.95</prix>
    </tarif>
  </article>
  <article id="w002">
    <description id="w002-description">
      <p>Super machin avec paillettes <i>et</i> poudre aux yeux.</p>
    </description>
    <tarif id="w002-tarif">
      <prix monnaie="EUR" volume="1+">59.95</prix>
      <prix monnaie="EUR" volume="10+">54.95</prix>
      <prix monnaie="EUR" volume="100+">49.95</prix>
    </tarif>
  </article>
</baremet>

L'ensemble d'information final après résolution des inclusions dans ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<devis xmlns:xi="http://www.w3.org/2001/XInclude">
  <client>Jean Bon</client>
  <validite>20040930</validite>
  <description id="w002-description" xml:lang="fr"
               xml:base="http://www.example.com/bareme.xml">
    <p>Super machin avec paillettes <i>et</i> poudre aux yeux.</p>
  </description>
  <volume>40</volume>
  <prix monnaie="EUR" volume="10+" xml:lang="fr"
         xml:base="http://www.example.com/bareme.xml">54.95</prix>
</devis>

C.5 Exemple d'inclusion d'étendue

Voici le résultat de l'inclusion d'une étendue définie par un pointeur XPointer. On suppose que l'adresse URI de base du document est http://www.example.com/document.xml.

<?xml version='1.0'?>
<document>
  <p>Le passage intéressant est :</p>
  <citation>
    <include xmlns="http://www.w3.org/2001/XInclude"
       href="source.xml" xpointer="xpointer(string-range(chapitre/p[1],'Phrase 2')/
             range-to(string-range(/chapitre/p[2]/i,'3.',1,2)))"/>
  </citation>
</document>

Le document source.xml contient :

<chapitre>
  <p>Phrase 1. Phrase 2.</p>
  <p><i>Phrase 3. Phrase 4.</i> Phrase 5.</p>
</chapitre>

L'ensemble d'information final après résolution des inclusions dans ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<document>
  <p>Le passage intéressant est :</p>
  <citation>
    <p xml:base="http://www.example.com/source.xml">Phrase 2.</p>
  <p xml:base="http://www.example.com/source.xml"><i>Phrase 3.</i></p>
  </citation>
</document>

C.6 Exemple de comportement de reprise

Le document XML suivant s'appuie sur le mécanisme de reprise pour continuer au cas où les ressources exemple.txt et exemple-reprise.txt n'étaient pas disponibles.

<?xml version='1.0'?>
<div>
  <xi:include href="exemple.txt" parse="text" xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:fallback><xi:include href="exemple-reprise.txt" parse="text">
        <xi:fallback><a href="mailto:bob@example.org">Signaler une erreur</a></xi:fallback>
      </xi:include></xi:fallback>
  </xi:include>
</div>

Si ni exemple.txt ni exemple-reprise.txt ne sont disponibles, alors l'ensemble d'information final après résolution des inclusions dans ce document est le même (sauf en ce qui concerne les propriétés inclure l'historique et langue) que celui du document suivant :

<?xml version='1.0'?>
<div>
  <a href="mailto:bob@example.org">Signaler une erreur</a>
</div>