Nota di Traduzione

XML Includes 1.0 Version 1.0

Nel tradurre questo documento, pur avendo solo l'originale valore normativo, si è cercato di attenersi il più possibile fedeli al testo inglese. A volte, per ragioni di esattezza scientifica, si è ritenuto di:

Segnalazioni di errori e refusi o richieste di informazioni possono essere indirizzate a: w3c@dkg.it.

Traduttore: Daniele Gabriele. Data di pubblicazione: 10 gennaio 2005. Data di ultima revisione: 10 gennaio 2005.

W3C

Inclusioni XML (XInclude) Versione 1.0

Raccomandazione W3C 20 dicembre 2004

Questa versione:
http://www.w3.org/TR/2004/REC-xinclude-20041220/
Ultima versione :
http://www.w3.org/TR/xinclude/
Versione precedente:
http://www.w3.org/TR/2004/PR-xinclude-20040930/
Curatori:
Jonathan Marsh, Microsoft <jmarsh@microsoft.com>
David Orchard, BEA Systems <dorchard@bea.com>

Si prega di far riferimento agli errata di questo documento, i quali potrebbero includere alcune correzioni normative.

Si vedano anche le traduzioni.

Questo documento è anche disponibile nei seguenti formati non normativi: XML.

Sintesi

Questo documento specifica un modello di elaborazione e una sintassi per l'inclusione a scopo generico. L'inclusione viene ottenuta mescolando un certo numero di insiemi d'informazioni XML con un solo infoset composito. La specifica dei documenti XML (gli infoset) che deve essere mescolata e il controllo sul processo di fusione viene espressa in sintassi vicina a XML (elementi, attributi, riferimenti URI).

Status di questo Documento

Questa sezione descrive lo status di questo documento al momento della sua pubblicazione. Altri documenti potrebbero far decadere questo documento. Un elenco delle pubblicazioni attuali del W3C e l'ultima revisione di questa relazione tecnica possono trovarsi nell'Indice delle relazioni tecniche delW3C presso http://www.w3.org/TR/.

Questo documento è una Raccomandazione del W3C. Essa è stata revisionata dai Membri del W3C e da altri parti interessate ed è stato approvato dal Direttore come una Raccomandazione del W3C. È un documento definitivo e potrebbe essere utilizzato come materiale di riferimento o citato come riferimento normativo da un altro documento. Il ruolo del W3C nel produrre la Raccomandazione è attirare l'attenzione sulla specifica e promuoverne l'impiego diffuso. Tutto ciò rafforza la funzionalità e l'interoperabilità del Web.

Questo documento è stato prodotto dal Gruppo di Lavoro Centrale per XML del W3C come parte dell'Attività XML. La versione in inglese di questa specifica è l'unica versione normativa. In ogni caso, per le traduzioni di questo documento, si veda http://www.w3.org/2003/03/Translations/byTechnology?technology=xinclude10.

Il Gruppo di Lavoro Centrale per XML ritiene che questa specifica abbia raggiunto tutte le questioni dell'Ultima Chiamata e della Raccomandazione Candidata (non esistono questioni che siano sorte durante la revisione della Raccomandazione Proposta). Implementazioni conosciute sono documentate nel Rapporto di Implementazione di XInclude. Viene tenuta operativa una Suite di Test per aiutare ad assicurare conformità alla presente specifica.

Questo documento è stato prodotto sotto la CPP del 24 gennaio 2002 CPP come emendata dalla Procedura di Transizione per la Politica di Brevetto del W3C. Un individuo che sia attualmente a conoscenza che egli ritenga contenere Diritto(i) Fondamentale(i) rispetto a questa specifica dovrebbe rivelare l'informazione in accordo con la sezione 6 della Politica di Brevetto del W3C. La documentazione della proprietà intellettuale possibilmente relativa a questa specifica potrebbe trovarsi presso la pagina delle rivelazioni pubbliche IPR del Gruppo di Lavoro.

Si prega di riportare gli errori nel presente documento a www-xml-xinclude-comments@w3.org; sono disponibili gli archivi pubblici. L'elenco degli errata per questa edizione è disponibile presso http://www.w3.org/2004/12/xinclude-errata.

Sommario

1 Introduzione
    1.1 Relazione con XLink
    1.2 Relazione con Entità Esterne di XML
    1.3 Relazione con le DTD
    1.4 Relazione con gli Schemi di XML
    1.5 Relazione con le Inclusioni Specifiche-alla-Grammatica
2 Terminologia
3 Sintassi
    3.1 Elemento xi:include
    3.2 Elemento xi:fallback
4 Modello di Elaborazione
    4.1 La Posizione dell'Inclusione
        4.1.1 Convertire in caratteri escape i valori dell'attributo href
        4.1.2 Utilizzare XInclude con la Negoziazione del Contenuto
    4.2 Componenti Inclusi quando parse="xml"
        4.2.1 Componenti dell'Informazione del Documento
        4.2.2 Nodi Multipli
        4.2.3 Posizioni di Ambito
        4.2.4 Posizioni di Puntamento
        4.2.5 Elemento, Commento e Componenti dell'Elaborare l'Informazione dell'Istruzione
        4.2.6 Componenti dell'Informazione dell'Attributo e della Dichiarazione di Namespace
        4.2.7 Cicli di Inclusione
    4.3 Componenti Inclusi quando parse="text"
    4.4 Comportamento della Ricaduta
    4.5 Creare l'Infoset di Risultato
        4.5.1 Entità non parsed
        4.5.2 Notazioni
        4.5.3 Fissaggio/Sistemazione della Proprietà references
        4.5.4 Fissaggio del Namespace
        4.5.5 Fissaggio dell'URI di Base
        4.5.6 Fissaggio della Lingua
        4.5.7 Proprietà Preservate dall'Infoset
5 Conformità
    5.1 Conformità della Marcatura
    5.2 Conformità dell'Applicazione
    5.3 Conformità dell'Insieme di Informazione XML

Appendici

A Riferimenti
B Riferimenti (non normativa)
C Esempi (non normativa)
    C.1 Esempio di Inclusione di Base
    C.2 Esempio di Inclusione Testuale
    C.3 Esempio di Inclusione Testuale di XML
    C.4 Esempio di Inclusione di Frammento
    C.5 Esempio di Inclusione di Ambito
    C.6 Esempio di Ricaduta


1 Introduzione

Molti linguaggi di programmazione forniscono un meccanismo di inclusione per facilitare la modularità. Anche i linguaggi di marcatura spesso hanno la necessità di un meccanismo tale. Questa specifica introduce un meccanismo generico per fondere fra loro i documenti XML (come rappresentati dai loro insiemi d'informazione) per l'utilizzo da parte di applicazioni che necessitano di una tale impianto, La sintassi fa leva sui costrutti XML esistenti - elementi, attributi e riferimenti URI.

1.1 Relazione con XLink

XInclude differisce dalle caratteristiche del collegamento descritte nel [Linguaggio di Collegamento XML], in modo specifico si collega con il valore di attributo show="embed". Tali collegamenti forniscono una sintassi indipendente dal tipo di media per indicare che una risorsa deve essere integrata in modo grafico all'interno della visualizzazione del documento. XLink non specifica un particolare modello di elaborazione, ma facilita semplicemente la scoperta di collegamenti e il riconoscimento dei metadati associati da parte di un'applicazione di livello più elevato.

XInclude, d'altro canto, specifica una trasformazione particolare per il tipo di media (XML dentro XML). Esso definisce un modello di elaborazione specifico per mescolare gli insiemi di infoirmazioone. L'elaborazione di XInclude ricorre ad un basso livello, spesso ad opera di un elaboratore generico di XInclude il quale rende disponibile l'insieme di informazione che ne risulta per applicazioni di livello più elevato.

L'inclusione di componente semplice d'informazione come descritto in questa specifica differisce dalla transclusione, la quale preserva l'informazione contestuale come ad esempio lo stile.

1.2 Relazione con le Entità Esterne di XML

Esiste un certo numero di differenze tra XInclude e le entità esterne di [XML 1.0] o [XML 1.1] le quali le rendono tecnologie complementari.

L'elaborazione di entità esterne (come per il resto delle DTD) ricorre al momento dell'analisi formale {parsing}. XInclude opera sugli insiemi di informazione e in tal modo è ortogonale all'analisi formale.

La dichiarazione di entità esterne richiede una DTD o un sottoinsieme interno. Questo pone un insieme di dipendenze dall'inclusione, per esempio, la sintassi per la dichiarazione di DOCTYPE richiede che l'elemento del documento sia nominato - in molti casi ortogonale all'inclusione. Gli analizzatori {parsers} che convalidano devono avere definito un modello completo di contenuto. XInclude è ortogonale alla convalida e al nome dell'elemento del documento.

Le entità esterne forniscono un livello di indirezione - l'entità esterna deve essere dichiarata e nominata, e invocata separatamente. XInclude utilizza riferimenti diretti. Le applicazioni che generano output XML possono beneficiare in maniera incrementale del non dover pre-dichiarare le inclusioni.

Il fallimento nel caricare un'entità esterna normalmente è un errore fatale. XInclude permette all'autore di fornire un contenuto predefinito che sarà utilizzato se la risorsa remota non può essere caricata.

La sintassi per un sottoinsieme interno è #cumbersome# a molti autori di semplici documenti XML ben formati. La sintassi XInclude è basata sui familiari costrutti XML.

1.3 Relazione con le DTD

XInclude non definisce alcuna relazione con la convalida DTD. XInclude descrive una trasformazione d infoset a infoset e non una modifica nel comportamento di parsing dell'XML. XInclude non definisce un meccanismo di convalida DTD dell'infoset che ne risulta.

1.4 Relazione con gli Schemi XML

XInclude non definisce alcuna relazione con gli infoset incrementati prodotti dall'applicare uno schema XML. L'infoset in tal modo incrementato può essere proposto come l'infoset di input, oppure tale incremento potrebbe essere applicato all'infoset risultante dall'inclusione.

1.5 Relazione con le Inclusioni Specifiche alla Grammatica

Sono stati introdotti meccanismi di inclusione per scopi particolari in specifiche grammatiche XML. XInclude fornisce un meccanismo generico per riconoscere ed elaborare le inclusioni e come tale può offrire un'esperienza di scrittura globalmente più semplice, prestazioni migliori e meno ridondanza del codice.

2 Terminologia

[Definizione: Le parole chiave deve, non deve, richiesto, dovrà, non dovrà, dovrebbe, non dovrebbe, raccomandato, potrebbe e facoltativo nella presente specifica sono da interpretarsi come descritte in [IETF RFC 2119].]

[Definizione: Il termine insieme d'informazione si riferisce all'output di un elaboratore [XML 1.0] o [XML 1.1], espresso come una collezione di componenti e proprietà informativi come definiti dalla specifica [Insieme d'Informazione di XML].] Nel presente documento il termine infoset è utilizzato come sinonimo di insieme d'informazione.

[Definizione: Il termine errore fatale si riferisce alla presenza di fattori che prevengono dal continuare la normale elaborazione.] [Definizione: Il termine errore di risorsa si riferisce ad un fallimento di un tentativo di reperire una risorsa da un URL.] Gli elaboratori XInclude devono interrompere l'elaborazione quando si imbattono in errori diversi dagli errori di risorsa, i quali devono essere trattati come descritto in 4.4 Comportamento della Ricaduta.

3 Sintassi

XInclude definisce un namespace associato all'URI http://www.w3.org/2001/XInclude. Il namespace di XInclude contiene due elementi con i nomi locali include e fallback. Per comodità, all'interno di questa specifica ci si riferisce a questi elementi come xi:include e xi:fallback rispettivamente.

Il seguente schema (non normativo) XML [XML Schemas] illustra il modello di contenuto del namespace 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 Elemento xi:include

L'elemento xi:include ha i seguenti attributi:

href

Un valore che, dopo che sia stata effettuata un'appropriata conversione in caratteri escape (si veda 4.1.1 Convertire in caratteri escape i valori dell'attributo href), risulta essere un riferimento URI o un riferimento IRI che specifica la posizione della risorsa da includere. L'attributo href è facoltativo; l'assenza di questo attributo equivale a specificare href="", ovvero, che il riferimento è al documento medesimo. Se l'attributo href è assente quando parse="xml", l'attributo xpointer deve essere presente. Gli identificatori di frammento non devono essere utilizzati; la loro presenza è un errore fatale. Un valore che risulta essere un URI o un IRI sintatticamente non valido dovrebbe essere riportato come un errore fatale, ma alcune implementazioni potrebbero trovare non pratico distinguere questo caso da un errore di risorsa.

Nota:

Un URI che finisce con # viene considerato dalla [IETF RFC 2396] avere un identificatore di frammento vuoto. Tale URI provocherebbe un errore fatale come sopra descritto.

Nota:

Una caratteristica chiave di XInclude è che esso permette ad una risorsa di essere convertita per l'inclusione (XML o testuale) in un tipo specifico per l'utente. Il tipo di media che ne risulta viene perciò essenzialmente ignorato ai fini dell'elaborazione dell'inclusione e la sintassi dell'identificatore di frammento del tipo di media risultante in genere non sarà applicabile al tipo specifico dell'utente. Per le inclusioni parse="xml", le sub-risorse sono identificate da un attributo xpointer separato, che viene applicato dopo che ha avuto luogo la conversione. Benché ciò non precluda alle sub-risorse dei documenti XML di essere identificati dall'URI (si veda Architettura del World Wide Web [Identificazione]), preclude però l'utilizzo di questi identificatori direttamente all'interno di XInclude.

parse

Indica se occorre includere la risorsa come XML valutato dopo il parsing o come testo. L'attributo ricavato dall'analisi formale permette a XInclude di dare all'autore del documento che viene incluso la priorità rispetto al server del documento incluso nei termini di come processare il contenuto incluso. Un valore di "xml" indica che la risorsa deve essere analizzata formalmente come XML e gli infoset mischiati. Un valore di "text" indica che la risorsa deve essere inclusa come i componenti informativi del carattere. Questo attributo è facoltativo. Quando omesso, il valore di "xml" è implicito (perfino in assenza di una dichiarazione del valore predefinito). Valori diversi da "xml" e "text" sono un errore fatale.

Nota:

Per interoperabilità fra sistemi che convalidano e che non convalidano, gli spazi bianchi non dovrebbero comparire nell'attributo parse.

xpointer

Quando parse="xml", l'XPointer (si veda [Framework di XPointer]) contenuto nell'attributo xpointer viene valutato per identificare una porzione della risorsa da includere. Questo attributo è facoltativo; quando omesso, viene inclusa l'intera risorsa. L'attributo xpointer non deve essere presente quando parse="text". Se l'attributo xpointer è assente, l'attributo href deve essere presente.

Nota:

Dal momento che l'attributo xpointer non è un riferimento URI, la conversione in caratteri escape non deve comparire nell'XPointer, né esiste alcuna necessità per un elaboratore di applicare o invertire tale conversione di caratteri escape.

encoding

Quando parse="text", a volte è impossibile risalire correttamente alla codifica della risorsa testuale. L'attributo encoding specifica come deve essere tradotta la risorsa. Il valore di questo attributo è un EncName come definito nella specifica XML, sezione 4.3.3, regola [81]. L'attributo encoding non ha effetto quando parse="xml".

accept

Il valore dell'attributo accept potrebbe essere usato dall'elaboratore XInclude per coadiuvare la negoziazione di contenuto. Quando l'elaboratore XInclude reperisce una risorsa attraverso HTTP, esso dovrebbe porre il valore dell'attributo accept, se ne esiste uno, nella richiesta HTTP come un'intestazione Accept nel modo descritto nella sezione 14.1 di [IETF RFC 2616]. I valori contenenti caratteri fuori della gamma da #x20 a #x7E non sono consentiti nelle intestazioni HTTP, e devono essere contrassegnati come errori fatali.

accept-language

Il valore dell'attributo accept-language potrebbe essere utilizzato dall'elaboratore XInclude per coadiuvare la negoziazione di contenuto. Quando l'elaboratore di XInclude reperisce una risorsa attraverso HTTP, esso dovrebbe porre il valore dell'attributo accept-language, se ne esiste uno, nella richiesta HTTP come un'intestazione Accept-Language nel modo descritto nella sezione 14.4 di [IETF RFC 2616]. I valori contenenti caratteri fuori della gamma da #x20 a #x7E non sono consentiti nelle intestazioni HTTP, e devono essere contrassegnati come errori fatali.

Attributi diversi da quelli sopra elencati potrebbero essere posti nell'elemento xi:include. I nomi di attributo senza prefisso sono riservati per future versioni di questa specifica, e devono essere ignorati dagli elaboratori XInclude 1.0.

La proprietà children dell'elemento xi:include potrebbe includere un singolo elemento xi:fallback; la presenza di più di un solo elemento xi:fallback, di un elemento xi:include, o di ogni altro elemento dal namespace di XInclude è un errore fatale. Altro contenuto (testo, istruzioni di elaborazione, commenti, elementi non nel namespace di XInclude, discendenti di elementi figli) non è vincolato dalla presente specifica ed è ignorata dall'elaboratore XInclude, ovvero, non ha effetto sull'elaborazione dell'inclusione e non compare nelle proprietà children dell'infoset di risultato. Tale contenuto potrebbe essere usato dalle applicazioni che analizzano un infoset di pre-inclusione oppure essere resi disponibili per un'applicazione post-inclusione con mezzi diversi dalle proprietà del normale infoset.

Il seguente frammento di DTD (non normativo) illustra una semplice dichiarazione per l'elemento 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 Elemento xi:fallback

L'elemento xi:fallback compare come un figlio di un elemento xi:include. Esso fornisce un meccanismo di recupero per risorse mancanti. Quando ci si imbatte in un errore di risorsa, l'elemento xi:include viene sostituito con i contenuti dell'elemento  xi:fallback. Se l'elemento xi:fallback è vuoto, l'elemento xi:include viene rimosso dal risultato. Se manca l'elemento xi:fallback, un errore di risorsa si risolve in un errore fatale.

L'elemento xi:fallback può comparire solo come un figlio dell'elemento xi:include. Per un elemento xi:fallback è un errore fatale comparire in un documento in un punto qualsiasi che non sia nel figlio diretto dell'xi:include (prima dell'elaborazione dell'inclusione sui contenuti dell'elemento). Per un elemento xi:fallback è un errore fatale contenere un qualunque elemento dal namespace XInclude diverso da xi:include.

Attributi potrebbero essere posti nell'elemento xi:fallback. I nomi di attributo senza prefisso sono riservati per future versioni della presente specifica, e devono essere ignorati dagli elaboratori XInclude 1.0.

Il seguente frammento di DTD (non normativo) illustra una semplice dichiarazione per l'elemento xi:fallback:

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

4 Modello di Elaborazione

L'inclusione come definita nel presente documento è un tipo specifico della trasformazione di [Insieme di Informazione di XML].

[Definizione: L'input per la trasformazione dell'inclusione consiste in un infoset originale.] [Definizione: L'output, chiamato l'infoset di risultato, è un nuovo infoset che fonde l'infoset originale con gli infoset delle risorse identificate dai riferimenti URI o dai riferimenti IRI che compaiono negli elementi xi:include.] In tal modo viene presunto un meccanismo per risolvere gli URI o gli IRI e restituire le risorse identificate come degli infoset. Le entità di XML ben formate che non hanno definito degli infoset (cioè un'entità esterna con elementi multipli di massimo livello) sono fuori dell'ambito di questa specifica, sia per l'utilizzo come un infoset originale che come l'infoset di risultato.

Gli elementi xi:include nell'infoset originale servono come istruzioni della trasformazione dell'inclusione. [Definizione: I componenti dell'informazione localizzati dall'elemento xi:include sono chiamati i componenti inclusi di massimo livello]. [Definizione: I componenti inclusi di massimo livello insieme con i loro attributi, namespace e discendenti, sono chiamati i componenti inclusi]. L'infoset di risultato essenzialmente è una copia dell'infoset originale, con ogni elemento xi:include e i suoi discendenti sostituiti dai loro corrispondenti componenti inclusi.

4.1 La Posizione dell'Inclusione

Il valore dell'attributo href, dopo la conversione in caratteri escape, in accordo a 4.1.1 Convertire in caratteri escape i valori dell'attributo href, viene interpretato sia come un riferimento URI che come un riferimento IRI. L'URI di base per gli URI o gli IRI relativi è l'URI di base dell'elemento xi:include come specificato in [Base di XML]. [Definizione: L'URI o l'IRI che risulta dalla risoluzione del valore normalizzato dell'attributo href (o la stringa vuota se non compare alcun attributo) nella forma assoluta di URI o di IRI viene chiamata la posizione dell'inclusione.]

L'assenza di un valore per l'attributo href, sia per la presenza di href="" o per l'assenza dell'attributo href, rappresenta un caso che potrebbe incompatibile con certe strategie d'implementazione. Per esempio, un elaboratore di XInclude potrebbe non avere una rappresentazione testuale dell'infoset originale da includere come parse="text", oppure potrebbe non essere in grado di accedere ad un'altra parte del documento usando parse="xml" a un xpointer a causa di aspetti legati alla dinamica di flusso. Un'implementazione potrebbe scegliere di trattare qualcuna o tutte le assenze di un valore per l'attributo href come errori della risorsa. Le implementazioni dovrebbero documentare le condizioni per le quali ricorrono tali errori di risorsa.

4.1.1 Convertire in caratteri escape i valori dell'attributo href

Il valore dell'attributo href viene convertito sia in un riferimento URI che in un riferimento IRI, come è appropriato per l'implementazione.

Al momento sono in corso dei lavori per produrre una RFC che definisca gli Identificatori Internazionalizzati di Risorsa {Internationalized Resource Identifiers} (gli IRI). Poiché quest'opera non è ancora completa, in questa sezione definiamo i riferimenti IRI in maniera sintattica. Ci attendiamo di proporre un erratum che sostituisca porzioni di questa sezione che si riferiscono alla RFC quando essa sarà pubblicata. Per una definizione e una trattazione più generale degli IRI, si veda [bozza di IRI] (lavori in corso).

[Definizione: Un riferimento IRI è una stringa che può essere convertita in un riferimento URI tramite la conversione in caratteri escape dei seguenti caratteri aggiuntivi:]

  • i caratteri Unicode di grado 0 #xA0 - #xD7FF, #xF900-#xFDCF, #xFDF0-#xFFEF

  • i caratteri Unicode di grado 1-14 #x10000-#x1FFFD ... #xE0000-#xEFFFD

Per convertire il valore dell'attributo href in un riferimento IRI, i seguenti caratteri devono essere convertiti in caratteri escape:

  • spazio #x20

    Nota:

    Gli autori sono avvisati di evitare spazi non convertiti in caratteri escape, siccome lo Schema XML li ha identificati come un rischio di interoperabilità.

  • i delimitatori < #x3C, > #x3E e " #x22

  • i caratteri imprudenti { #x7B, } #x7D, | #x7C, \ #x5C, ^ #x5E e ` #x60

Questi caratteri sono convertiti in quelli escape come segue:

  1. Ogni carattere aggiuntivo viene convertito in UTF-8 [Unicode] come uno o più byte.

  2. I byte che vengono restituiti sono convertiti in caratteri escape con il meccanismo di conversione in caratteri escape (cioè, convertiti in %HH, dove HH è la notazione esadecimale del valore del byte).

  3. Il carattere originario viene sostituito dalla sequenza di caratteri che viene restituita.

Per convertire un riferimento IRI in un riferimento URI, i caratteri aggiuntivi consentiti negli IRI devono essere convertiti in caratteri escape utilizzando lo stesso metodo.

4.1.2 Utilizzare XInclude con la Negoziazione di Contenuto

L'utilizzo di un meccanismo come la negoziazione di contenuto di HTTP [IETF RFC 2616] introduce un livello aggiuntivo della complessità potenziale nell'uso di XInclude. Gli sviluppatori che usano XInclude in situazioni in cui la negoziazione del contenuto è probabile o possibile dovrebbero essere coscienti dell'eventualità che stiano includendo contenuto che potrebbe differire in maniera strutturale dal contenuto che essi si aspettano, perfino se quel contenuto è XML. Ad esempio, un singolo URI o IRI potrebbe in vario modo restituire una rappresentazione XML rozza della risorsa, una rappresentazione XSL-FO [XSL-FO], oppure una rappresentazione XHTML [XHTML], come anche versioni in differenti codifiche di carattere o linguaggi.

Gli autori per i quali l'elaborazione XInclude dipende dalla ricezione di un vocabolario particolare di XML dovrebbero utilizzare gli attributi accept e accept-language per accrescere la probabilità che la risorsa sia fornita nel formato atteso.

4.2 Componenti Inclusi quando parse="xml"

When parse="xml", the include location is dereferenced, the resource is fetched, and an infoset is created by parsing the resource as if the media type were application/xml (including character encoding determination).

Note:

The specifics of how an infoset is created are intentionally unspecified, to allow for flexibility by implementations and to avoid defining a particular processing model for components of the XML architecture. Particulars of whether DTD or XML schema validation are performed, for example, are not constrained by this specification.

Note:

The character encodings of the including and included resources can be different. This does not affect the resulting infoset, but might need to be taken into account during any subsequent serialization.

Resources that are unavailable for any reason (for example the resource doesn't exist, connection difficulties or security restrictions prevent it from being fetched, the URI scheme isn't a fetchable one, the resource is in an unsupported encoding, or the resource is determined through implementation-specific mechanisms not to be XML) result in a resource error. Resources that contain non-well-formed XML result in a fatal error.

Note:

The distinction between a resource error and a fatal error is somewhat implementation-dependent. Consider an include location returning an HTML document, perhaps as an error page. One processor might determine that no infoset can be created from the resource (by examining the media type, for example) and raise a resource error, enabling fallback behavior. Another processor with no such heuristics might attempt to parse the non-XML resource as XML and encounter a well-formedness (fatal) error.

[Definition: xi:include elements in this infoset are recursively processed to create the acquired infoset. For an intra-document reference (via xpointer attribute) the source infoset is used as the acquired infoset.]

[Definition: The portion of the acquired infoset to be included is called the inclusion target.] The document information item of the acquired infoset serves as the inclusion target unless the xpointer attribute is present and identifies a subresource. XPointers of the forms described in [XPointer Framework] and [XPointer element() scheme] must be supported. XInclude processors optionally support other forms of XPointer such as that described in [XPointer xpointer() Scheme]. An error in the XPointer is a resource error.

The [XPointer xpointer() Scheme] is not specified in terms of the [XML Information Set], but instead is based on the [XPath 1.0] Data Model, because the XML Information Set had not yet been developed. The mapping between XPath node locations and information items is straightforward. However, xpointer() assumes that all entities have been expanded. Thus it is a fatal error to attempt to resolve an xpointer() scheme on a document that contains unexpanded entity reference information items.

The set of top-level included items is derived from the acquired infoset as follows.

4.2.1 Document Information Items

The inclusion target might be a document information item (for instance, no specified xpointer attribute, or an XPointer specifically locating the document root.) In this case, the set of top-level included items is the children of the acquired infoset's document information item, except for the document type declaration information item child, if one exists.

Note:

The XML Information Set specification does not provide for preservation of white space outside the document element. XInclude makes no further provision to preserve this white space.

4.2.2 Multiple Nodes

The inclusion target might consist of more than a single node. In this case the set of top-level included items is the set of information items from the acquired infoset corresponding to the nodes referred to by the XPointer, in the order in which they appear in the acquired infoset.

4.2.3 Range Locations

The inclusion target might be a location set that represents a range or a set of ranges.

Each range corresponds to a set of information items in the acquired infoset. [Definition: An information item is said to be selected by a range if it occurs after (in document order) the starting point of the range and before the ending point of the range.] [Definition: An information item is said to be partially selected by a range if it contains only the starting point of the range, or only the ending point of the range.] By definition, a character information item cannot be partially selected.

The set of top-level included items is the union, in document order with duplicates removed, of the information items either selected or partially selected by the range. The children property of selected information items is not modified. The children property of partially selected information items is the set of information items that are in turn either selected or partially selected, and so on.

4.2.4 Point Locations

The inclusion target might be a location set that represents a point. In this case the set of included items is empty.

4.2.5 Element, Comment, and Processing Instruction Information Items

The inclusion target might be an element node, a comment node, or a processing instruction node, respectively representing an element information item, a comment information item, or a processing instruction information item. In this case the set of top-level included items consists of the information item corresponding to the element, comment, or processing instruction node in the acquired infoset.

4.2.6 Attribute and Namespace Declaration Information Items

It is a fatal error for the inclusion target to be an attribute node or a namespace node.

4.2.7 Inclusion Loops

When recursively processing an xi:include element, it is a fatal error to process another xi:include element with an include location and xpointer attribute value that have already been processed in the inclusion chain.

In other words, the following are all legal:

  • An xi:include element may reference the document containing the include element, when parse="text".

  • An xi:include element may identify a different part of the same local resource (same href, different xpointer).

  • Two non-nested xi:include elements may identify a resource which itself contains an xi:include element.

The following are illegal:

  • An xi:include element pointing to itself or any ancestor thereof, when parse="xml".

  • An xi:include element pointing to any include element or ancestor thereof which has already been processed at a higher level.

4.3 Included Items when parse="text"

When parse="text", the include location is dereferenced and the resource is fetched and transformed to a set of character information items. This feature facilitates the inclusion of working XML examples, as well as other text-based formats.

Resources that are unavailable for any reason (for example the resource doesn't exist, connection difficulties or security restrictions prevent it from being fetched, the URI scheme isn't a fetchable one, or the resource is in an unsupported encoding) result in a resource error.

The encoding of such a resource is determined by:

  • external encoding information, if available, otherwise

  • if the media type of the resource is text/xml, application/xml, or matches the conventions text/*+xml or application/*+xml as described in XML Media Types [IETF RFC 3023], the encoding is recognized as specified in XML, otherwise

  • the value of the encoding attribute if one exists, otherwise

  • UTF-8.

Byte sequences outside the range allowed by the encoding are a fatal error. Characters that are not permitted in XML documents also are a fatal error.

Each character obtained from the transformation of the resource is represented in the top-level included items as a character information item with the character code set to the character code in ISO 10646 encoding, and the element content whitespace set to false.

The [Character Model] discusses normalization of included text.

4.4 Fallback Behavior

XInclude processors must perform fallback behavior in the event of a resource error, as follows:

If the children of the xi:include element information item in the source infoset contain exactly one xi:fallback element, the top-level included items consist of the information items corresponding to the result of performing XInclude processing on the children of the xi:fallback element. It is a fatal error if there is zero or more than one xi:fallback element.

Note:

Fallback content is not dependent on the value of the parse attribute. The xi:fallback element can contain markup even when parse="text". Likewise, it can contain a simple string when parse="xml".

4.5 Creating the Result Infoset

The result infoset is a copy of the source infoset, with each xi:include element processed as follows:

The information item for the xi:include element is found. [Definition: The parent property of this item refers to an information item called the include parent.] The children property of the include parent is modified by replacing the xi:include element information item with the top-level included items. The parent property of each included item is set to the include parent.

It is a fatal error to attempt to replace an xi:include element appearing as the document (top-level) element in the source infoset with something other than a list of zero or more comments, zero or more processing instructions, and one element.

Some processors may not be able to represent an element's in-scope namespaces property if it does not include bindings for all the prefixes bound in its parent's in-scope namespaces. Such processors may therefore include additional namespace bindings inherited from the include parent in the in-scope namespaces of the included items.

The inclusion history of each top-level included item is recorded in the extension property include history. The include history property is a list of element information items, representing the xi:include elements for recursive levels of inclusion. If an include history property already appears on a top-level included item, the xi:include element information item is prepended to the list. If no include history property exists, then this property is added with the single value of the xi:include element information item.

The included items will all appear in the result infoset. This includes unexpanded entity reference information items if they are present.

Intra-document references within xi:include elements are resolved against the source infoset. The effect of this is that the order in which xi:include elements are processed does not affect the result.

In the following example, the second include always points to the first xi:include element and not to itself, regardless of the order in which the includes are processed. Thus the result of this inclusion is two copies of something.xml, and does not produce an inclusion loop error.

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

4.5.1 Unparsed Entities

Any unparsed entity information item appearing in the references property of an attribute on the included items or any descendant thereof is added to the unparsed entities property of the result infoset's document information item, if it is not a duplicate of an existing member. Duplicates do not appear in the result infoset.

Unparsed entity items with the same name, system identifier, public identifier, declaration base URI, notation name, and notation are considered to be duplicate. An application may also be able to detect that unparsed entities are duplicate through other means. For instance, the URI resulting from combining the system identifier and the declaration base URI is the same.

It is a fatal error to include unparsed entity items with the same name, but which are not determined to be duplicates.

4.5.2 Notations

Any notation information item appearing in the references property of an attribute in the included items or any descendant thereof is added to the notations property of the result infoset's document information item, if it is not a duplicate of an existing member. Likewise, any notation referenced by an unparsed entity added as described in 4.5.1 Unparsed Entities, is added unless it is a duplicate. Duplicates do not appear in the result infoset.

Notation items with the same name, system identifier, public identifier, and declaration base URI are considered to be duplicate. An application may also be able to detect that notations are duplicate through other means. For instance, the URI resulting from combining the system identifier and the declaration base URI is the same.

It is a fatal error to include notation items with the same name, but which are not determined to be duplicates.

4.5.3 references Property Fixup

During inclusion, an attribute information item whose attribute type property is IDREF or IDREFS has a references property with zero or more element values from the source or included infosets. These values must be adjusted to correspond to element values that occur in the result infoset. During this process, XInclude also corrects inconsistencies between the references property and the attribute type property, which might arise in the following circumstances:

  • A document fragment contains an IDREF pointing to an element in the included document but outside the part being included. In this case there is no element in the result infoset that corresponds to the element value in the original references property.

  • A document or document fragment is not self-contained. That is, it contains IDREFs which do not refer to an element within that document or document fragment, with the intention that these references will be realized after inclusion. In this case, the value of the references property is unknown or has no value.

  • The result infoset has ID clashes - that is, more than one attribute with attribute type ID with the same normalized value. In this case, attributes with attribute type IDREF or IDREFS with the same normalized value might have different values for their references properties.

In resolving these inconsistencies, XInclude takes the attribute type property as definitive. In the result infoset, the value of the references property of an attribute information item whose attribute type property is IDREF or IDREFS is adjusted as follows:

For each token in the normalized value property, the references property contains an element information item with the same properties as the element information item in the result infoset with an attribute with attribute type ID and normalized value equal to the token. The order of the elements in the references property is the same as the order of the tokens appearing in the normalize value. If for any of the token values, no element or more than one element is found, the references property has no value.

4.5.4 Namespace Fixup

The in-scope namespaces property ensures that namespace scope is preserved through inclusion. However, after inclusion, the namespace attributes property might not provide the full list of namespace declarations necessary to interpret qualified names in attribute or element content in the result. It is therefore not recommended that XInclude processors expose namespace attributes in the result. If this is unavoidable, the implementation may add attribute information items to the namespace attributes property in order to approximate the information conveyed by in-scope namespaces.

4.5.5 Base URI Fixup

The base URI property of the acquired infoset is not changed as a result of merging the infoset, and remains unchanged after merging. Thus relative URI references in the included infoset resolve to the same URI despite being included into a document with a potentially different base URI in effect. xml:base attributes are added to the result infoset to indicate this fact.

Each element information item in the top-level included items which has a different base URI than its include parent has an attribute information item added to its attributes property. This attribute has the following properties:

  1. A namespace name of http://www.w3.org/XML/1998/namespace.

  2. A local name of base.

  3. A prefix of xml.

  4. A normalized value equal to either the base URI of the element, or an equivalent URI reference relative to the base URI of the include parent. The circumstances in which a relative URI is desirable, and how to compute such a relative URI, are implementation-dependent.

  5. A specified flag indicating that this attribute was actually specified in the start-tag of its element.

  6. An attribute type of CDATA.

  7. A references property with no value.

  8. An owner element of the information item of the element.

If an xml:base attribute information item is already present, it is replaced by the new attribute.

4.5.6 Language Fixup

While the xml:lang attribute is described as inherited by XML, the XML Information Set makes no provision for preserving the inheritance of this property through document composition such as XInclude provides. This section introduces a language property which records the scope of xml:lang information in order to preserve it during inclusion.

An XInclude processor should augment the source infoset and the acquired infoset by adding the language property to each element information item. The value of this property is the normalized value of the xml:lang attribute appearing on that element if one exists, with xml:lang="" resulting in no value, otherwise it is the value of the language property of the element's parent element if one exists, otherwise the property has no value.

Each element information item in the top-level included items which has a different value of language than its include parent (taking case-insensitivity into account per [IETF RFC 3066]), or that has a value if its include parent is a document information item, has an attribute information item added to its attributes property. This attribute has the following properties:

  1. A namespace name of http://www.w3.org/XML/1998/namespace.

  2. A local name of lang.

  3. A prefix of xml.

  4. A normalized value equal to the language property of the element. If the language property has no value, the normalized value is the empty string.

  5. A specified flag indicating that this attribute was actually specified in the start-tag of its element.

  6. An attribute type of CDATA.

  7. A references property with no value.

  8. An owner element of the information item of the element.

If an xml:lang attribute information item is already present, it is replaced by the new attribute.

Note:

The xml:space attribute is not treated specially by XInclude.

4.5.7 Properties Preserved by the Infoset

As an infoset transformation, XInclude operates on the logical structure of XML documents, not on their text serialization. All properties of an information item described in [XML Information Set] other than those specifically modified by this specification are preserved during inclusion. The include history and language properties introduced in this specification is also preserved. Extension properties such as [XML Schemas] Post Schema Validation Infoset (PSVI) properties are discarded by default. However, an XInclude processor may, at user option, preserve these properties in the resulting infoset if they are correct according to the specification describing the semantics of the extension properties.

For instance, the PSVI validity property describes the conditions of ancestors and descendants. Modification of ancestors and descendants during the XInclude process can render the value of this property inaccurate. By default, XInclude strips this property, but by user option the property could be recalculated to obtain a semantically accurate value. Precisely how this is accomplished is outside the scope of this specification.

5 Conformance

5.1 Markup Conformance

An element information item conforms to this specification if it meets the structural requirements for include elements defined in this specification. This specification imposes no particular constraints on DTDs or XML schemas; conformance applies only to elements and attributes.

5.2 Application Conformance

An application conforms to XInclude if it:

Support for the [XPointer xpointer() Scheme] is not mandatory for full XInclude conformance. Authors are advised that use of xpointer() and other XPointer schemes than element() might not be supported by all conformant XInclude implementations.

5.3 XML Information Set Conformance

This specification conforms to the [XML Information Set]. The following information items must be present in the input infosets to enable correct processing:

  • Document information items with children and base URI properties.

  • Element information items with namespace name, local name, children, attributes, base URI and parent properties.

  • Attribute information items with namespace name, local name and normalized value properties.

Additionally, XInclude processing might generate the following kinds of information items in the result:

  • Character information items with character code, element content whitespace and parent properties.

XInclude extends the infoset with the property include history, which may appear on the following types of information items in the result:

  • Element information items.

  • Processing instruction information items.

  • Comment information items.

  • Character information items.

XInclude also extends the infoset with the property language, which may appear on element information items in the result.

A References

IETF RFC 2119
RFC 2119: Key words for use in RFCs to Indicate Requirement Levels. Internet Engineering Task Force, 1997. (See http://www.ietf.org/rfc/rfc2119.txt.)
IETF RFC 2279
RFC 2279: UTF-8, a transformation format of ISO 10646. Internet Engineering Task Force, 1998. (See http://www.ietf.org/rfc/rfc2279.txt.)
IETF RFC 2396
RFC 2396: Uniform Resource Identifiers. Internet Engineering Task Force, 1995. (See http://www.ietf.org/rfc/rfc2396.txt.)
IETF RFC 2732
RFC 2732: Format for Literal IPv6 Addresses in URL's. Internet Engineering Task Force, 1999. (See http://www.ietf.org/rfc/rfc2732.txt.)
IETF RFC 3023
RFC 3023: XML Media Types. Internet Engineering Task Force, 2001. (See http://www.ietf.org/rfc/rfc3023.txt.)
Unicode
The Unicode Consortium. The Unicode Standard, Version 4.0. Reading, Mass.: Addison-Wesley, 2003, as updated from time to time by the publication of new versions. (See http://www.unicode.org/unicode/standard/versions/ for the latest version and additional information on versions of the standard and of the Unicode Character Database).
XML 1.0
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François Yergeau, editors. Extensible Markup Language (XML) 1.0 (Third Edition), World Wide Web Consortium, 2004. (See 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, editors. Extensible Markup Language (XML) 1.1, World Wide Web Consortium, 2004. (See http://www.w3.org/TR/2004/REC-xml11-20040204/.)
XML Base
Jonathan Marsh, editor. XML Base. World Wide Web Consortium, 2001. (See http://www.w3.org/TR/2001/REC-xmlbase-20010627/.)
XML Information Set
John Cowan and Richard Tobin, editors. XML Information Set (Second Edition). World Wide Web Consortium, 2004. (See http://www.w3.org/TR/2004/REC-xml-infoset-20040204/.)
Namespaces in XML
Tim Bray, Dave Hollander, and Andrew Layman, editors. Namespaces in XML. World Wide Web Consortium, 1999. (See http://www.w3.org/TR/1999/REC-xml-names-19990114/.)
Namespaces in XML 1.1
Tim Bray, Dave Hollander, Andrew Layman, Richard Tobin, editors. Namespaces in XML 1.1. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/2004/REC-xml-names11-20040204/.)
XPointer Framework
Paul Grosso, Eve Maler, Jonathan Marsh, Norman Walsh, editors. XPointer Framework. World Wide Web Consortium, 2003. (See http://www.w3.org/TR/2003/REC-xptr-framework-20030325/.)
XPointer element() scheme
Paul Grosso, Eve Maler, Jonathan Marsh, Norman Walsh, editors. XPointer element() Scheme. World Wide Web Consortium, 2003. (See http://www.w3.org/TR/2003/REC-xptr-element-20030325/.)

B References (Non-Normative)

IETF RFC 2616
RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1. Internet Engineering Task Force, 1999. (See http://www.ietf.org/rfc/rfc2616.txt.)
IETF RFC 3066
RFC 3066: Tags for the Identification of Languages. Internet Engineering Task Force, 2001. (See http://www.ietf.org/rfc/rfc3066.txt.)
XML Inclusion Proposal
Jonathan Marsh, David Orchard, editors. XML Inclusion Proposal (XInclude). World Wide Web Consortium, 2004. (See http://www.w3.org/TR/1999/NOTE-xinclude-19991123.)
XML Linking Language
Steve DeRose, Eve Maler, David Orchard, and Ben Trafford, editors. XML Linking Language (XLink). World Wide Web Consortium, 2001. (See http://www.w3.org/TR/2001/REC-xlink-20010627/.)
XPointer xpointer() Scheme
Steve DeRose, Ron Daniel, Eve Maler, editors. XPointer xpointer() Scheme. World Wide Web Consortium, 2002. (See http://www.w3.org/TR/2002/WD-xptr-xpointer-20021219/.)
XPath 1.0
James Clark, Steve DeRose, editors. XML Path Language (XPath) Version 1.0. World Wide Web Consortium, 1999. (See http://www.w3.org/TR/1999/REC-xpath-19991116.)
IRI draft
Internationalized Resource Identifiers (IRIs). (See 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. Character Model for the World Wide Web 1.0: Normalization. World Wide Web Consortium, 2001. (See http://www.w3.org/TR/charmod-norm/.)
XML Schemas
Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, editors. XML Schema Part 1: Structures. World Wide Web Consortium, 2001. (See http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/.)
XSL-FO
Sharon Adler et al. Extensible Stylesheet Language (XSL). World Wide Web Consortium, 2001. (See http://www.w3.org/TR/2001/REC-xsl-20011015/.)
XHTML
Steven Pemberton et al. XHTML 1.0 The Extensible HyperText Markup Language (Second Edition). World Wide Web Consortium, 2002. (See http://www.w3.org/TR/2002/REC-xhtml1-20020801/.)

C Examples (Non-Normative)

C.1 Basic Inclusion Example

The following XML document contains an xi:include element which points to an external document. Assume the base URI of this document is http://www.example.org/document.xml.

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>120 Mz is adequate for an average home user.</p>
  <xi:include href="disclaimer.xml"/>
</document>

disclaimer.xml contains:

<?xml version='1.0'?>
<disclaimer>
  <p>The opinions represented herein represent those of the individual
  and should not be interpreted as official policy endorsed by this
  organization.</p>
</disclaimer>

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>120 Mz is adequate for an average home user.</p>
  <disclaimer xml:base="http://www.example.org/disclaimer.xml">
  <p>The opinions represented herein represent those of the individual
  and should not be interpreted as official policy endorsed by this
  organization.</p>
</disclaimer>
</document>

C.2 Textual Inclusion Example

The following XML document includes a "working example" into a document.

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>This document has been accessed
  <xi:include href="count.txt" parse="text"/> times.</p>
</document>

where count.txt contains:

324387

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>This document has been accessed
  324387 times.</p>
</document>

C.3 Textual Inclusion of XML Example

The following XML document includes a "working example" into a document.

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source of the "data.xml" resource:</p>
  <example><xi:include href="data.xml" parse="text"/></example>
</document>

data.xml contains:

<?xml version='1.0'?>
<data>
  <item><![CDATA[Brooks & Shields]]></item>
</data>

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source of the "data.xml" resource:</p>
  <example>&lt;?xml version='1.0'?&gt;
&lt;data&gt;
  &lt;item&gt;&lt;![CDATA[Brooks &amp; Shields]]&gt;&lt;/item&gt;
&lt;/data&gt;</example>
</document>

C.4 Fragment Inclusion Example

The following illustrates the results of including fragments of another XML document. Assume the base URI of the document is http://www.example.com/JoeSmithQuote.xml.

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
  <prepared-for>Joe Smith</prepared-for>
  <good-through>20040930</good-through>
  <xi:include href="price-list.xml" xpointer="w002-description"/>
  <volume>40</volume>
  <xi:include href="price-list.xml" xpointer="element(w002-prices/2)"/>
</price-quote>

price-list.xml references a DTD which declares the id attributes as type ID, and contains:

<?xml version='1.0'?>
<!DOCTYPE price-list SYSTEM "price-list.dtd">
<price-list xml:lang="en-us">
  <item id="w001">
    <description id="w001-description">
      <p>Normal Widget</p>
    </description>
    <prices id="w001-prices">
      <price currency="USD" volume="1+">39.95</price>
      <price currency="USD" volume="10+">34.95</price>
      <price currency="USD" volume="100+">29.95</price>
    </prices>
  </item>
  <item id="w002">
    <description id="w002-description">
      <p>Super-sized widget with bells <i>and</i> whistles.</p>
    </description>
    <prices id="w002-prices">
      <price currency="USD" volume="1+">59.95</price>
      <price currency="USD" volume="10+">54.95</price>
      <price currency="USD" volume="100+">49.95</price>
    </prices>
  </item>
</price-list>

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<price-quote xmlns:xi="http://www.w3.org/2001/XInclude">
  <prepared-for>Joe Smith</prepared-for>
  <good-through>20040930</good-through>
  <description id="w002-description" xml:lang="en-us"
               xml:base="http://www.example.com/price-list.xml">
    <p>Super-sized widget with bells <i>and</i> whistles.</p>
  </description>
  <volume>40</volume>
  <price currency="USD" volume="10+" xml:lang="en-us"
         xml:base="http://www.example.com/price-list.xml">54.95</price>
</price-quote>

C.5 Range Inclusion Example

The following illustrates the results of including a range specified by an XPointer. Assume the base URI of the document is http://www.example.com/document.xml.

<?xml version='1.0'?>
<document>
  <p>The relevant excerpt is:</p>
  <quotation>
    <include xmlns="http://www.w3.org/2001/XInclude"
       href="source.xml" xpointer="xpointer(string-range(chapter/p[1],'Sentence 2')/
             range-to(string-range(/chapter/p[2]/i,'3.',1,2)))"/>
  </quotation>
</document>

source.xml contains:

<chapter>
  <p>Sentence 1.  Sentence 2.</p>
  <p><i>Sentence 3.  Sentence 4.</i>  Sentence 5.</p>
</chapter>

The infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

<?xml version='1.0'?>
<document>
  <p>The relevant excerpt is:</p>
  <quotation>
    <p xml:base="http://www.example.com/source.xml">Sentence 2.</p>
  <p xml:base="http://www.example.com/source.xml"><i>Sentence 3.</i></p>
  </quotation>
</document>

C.6 Fallback Example

The following XML document relies on the fallback mechanism to succeed in the event that the resources example.txt and fallback-example.txt are not available..

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

If neither example.txt nor fallback-example.txt are available, the infoset resulting from resolving inclusions on this document is the same (except for the include history and language properties) as that of the following document:

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