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:
Traduttore: Daniele Gabriele. Data di pubblicazione: 10 gennaio 2005. Data di ultima revisione: 10 gennaio 2005.
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.
Copyright © 2004 W3C® (MIT, ERCIM, Keio), Tutti i Diritti Riservati. Si applicano le direttive del W3C su responsabilità, marchio registrato, utilizzo del documento.
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).
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.
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
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
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.
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.
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.
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.
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.
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.
[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.
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>
L'elemento xi:include
ha i seguenti attributi:
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.
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.
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.
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"
.
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.
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 >
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" >
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.
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.
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:
Ogni carattere aggiuntivo viene convertito in UTF-8 [Unicode] come uno o più byte.
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).
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.
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.
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.
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.
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.
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.
The inclusion target might be a location set that represents a point. In this case the set of included items is empty.
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.
It is a fatal error for the inclusion target to be an attribute node or a namespace node.
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.
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.
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"
.
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>
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.
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.
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.
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.
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:
A namespace name of http://www.w3.org/XML/1998/namespace
.
A local name of base
.
A prefix of xml
.
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.
A specified flag indicating that this attribute was actually specified in the start-tag of its element.
An attribute type of CDATA
.
A references property with no value.
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.
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:
A namespace name of http://www.w3.org/XML/1998/namespace
.
A local name of lang
.
A prefix of xml
.
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.
A specified flag indicating that this attribute was actually specified in the start-tag of its element.
An attribute type of CDATA
.
A references property with no value.
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.
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.
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.
An application conforms to XInclude if it:
supports [XML 1.0] and [Namespaces in XML] or [XML 1.1] and [Namespaces in XML 1.1], the [XML Information Set], [XML Base], the [XPointer Framework], and the [XPointer element() scheme];
stops processing when a fatal error is encountered;
observes the mandatory conditions (must) set forth in this specification, and for any optional conditions (should and may) it chooses to observe, observes them in the way prescribed; and
performs markup conformance testing according to all the conformance constraints appearing in this specification.
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.
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.
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>
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>
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><?xml version='1.0'?> <data> <item><![CDATA[Brooks & Shields]]></item> </data></example> </document>
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>
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>
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>