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/.
Des erreurs ont pu survenir malgré le soin apporté à ce travail.
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 .
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.
On peut consulter les traductions en français d'autres documents du W3C à
http://www.w3.org/2003/03/Translations/byLanguage?language=fr
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.
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.
Copyright © 2004 W3C® (MIT, ERCIM, Keio), tous droits réservés. Les règles de responsabilité, de marque commerciale et d'utilisation des documents du W3C s'appliquent.
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.).
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.
parse="xml"
parse="text"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).
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.
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.
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.
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.
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.
[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.
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>
xi:includeL'élément xi:include admet les attributs suivants :
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.
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.
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.
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".
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
, comme décrit dans le chapitre 14.1 du document
[IETF RFC 2616]. Les valeurs contenant des caractères en dehors de l'intervalle Accept#x20
à #x7E
sont interdits dans les en-têtes HTTP et doivent donc être étiquetées comme
erreurs fatales.
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
, comme décrit dans le chapitre 14.4 du document [IETF RFC 2616].
Les valeurs contenant des caractères en dehors de l'intervalle Accept-Language#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
>
xi:fallbackL'é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"
>
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.
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.
hrefLa 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 :
Chaque caractère supplémentaire est converti dans le codage UTF-8 [Unicode] en un ou plusieurs octets ;
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) ;
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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].
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".
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>
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.
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.
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.
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.
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 :
Un nom d'espace de nommage de http://www.w3.org/XML/1998/namespace ;
Un nom local de base ;
Un préfixe de xml ;
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 ;
Un drapeau spécifié indiquant que cet attribut était effectivement défini dans la balise ouvrante de son élément ;
Un type d'attribut de
;CDATA
Une propriété références sans valeur ;
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.
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 :
Un espace de nommage de http://www.w3.org/XML/1998/namespace ;
Un nom local de lang ;
Un préfixe de xml ;
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
Un drapeau spécifié indiquant que cet attribut était effectivement défini dans la balise ouvrante de son élément ;
Un type d'attribut de
;CDATA
Une propriété références sans valeur ;
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.
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.
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.
Une application est conforme à XInclude si elle :
gère le langage [XML 1.0] et les espaces de nommage XML [Namespaces in XML]
(ou bien le langage [XML 1.1] et les espaces de nommage XML [Namespaces in XML1.1]),
l'ensemble d'information XML [XML Information Set], le langage XML de base
[XML Base], le cadre XPointer [XPointer Framework] et le système XPointer
element()
[XPointer element() scheme] ;
interrompt un traitement lorsqu'elle rencontre une erreur fatale ;
observe les conditions obligatoires (doit) définies dans cette application et, pour toutes les conditions optionnelles (devrait et peut), choisit de les observer selon les prescriptions ; et
effectue des tests de validation du balisage conformément à toutes les contraintes de conformité apparaissant dans cette spécification.
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.
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.
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>
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>
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><?xml version='1.0'?> <donnee> <article><![CDATA[Féline & Lion]]></article> </donnee></exemple> </document>
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
; il contient :ID
<?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>
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>
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>