Questa è la traduzione in italiano della versione del documento redatto in inglese (l'unica versione che abbia valore ufficiale) "Namespaces in XML 1.1 (Second Edition)" presso http://www.w3.org/TR/2006/REC-xml-names11-20060816/. Gli errori eventualmente presenti in questa traduzione, sono di esclusiva responsabilità del traduttore, Ivan Bazzi, e non sono in alcun modo imputabili al consorzio W3C. Questa traduzione è stata realizzata nel novembre 2011. Per qualsiasi commento su questa traduzione rivolgersi a Ivan Bazzi.
Si prega di fare riferimento all'errata corrige di questo documento per eventuali correzioni normative.
Si vedano anche le traduzioni.
Copyright © 2006 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
I namespace di XML forniscono un metodo semplice per qualificare nomi dielementi e attribuiti utilizzati in documenti Extensible Markup Language associandoli a a riferimenti IRI.
Questa sezione descrive lo stato di questo documento al momento della sua pubblicazione. Altri documenti potrebbero sostituire questo documento. Una lista delle pubblicazioni W3C attuali e l'ultima revisione di questo rapporto tecnico può essere trovata nell'indice dei rapporti tecnici di W3C presso http://www.w3.org/TR/.
Questo documento è un prodotto dello XML Core Working Group parte della W3C XML Activity. La versione inglese di questo documento è la sola versione normativa. Comunque, per le traduzioni di questo documento si veda http://www.w3.org/2003/03/Translations/byTechnology?technology=xml-names-11.
Implementazioni note sono documentate nel rapporto sulle implementazioni dei namespace 1.1 (tutte le implementazioni dei Namespace versione 1.1 includono i Namespace versione 1.0) . È anche disponibile un insieme di strumenti di test alla pagina XML Test Suite.
Questa seconda edizione incorpora tutte le correzioni note sino alla data di pubblicazione. Soppianta la precedente Raccomandazione W3C del 4 febbraio 2004 . Per la convenienza del lettore, è anche disponibile una versione in XHTML con indicatori di revisione colorati.
Si prega di indicare errori presenti in questo documento a xml-names-editor@w3.org; i cui archivi sono disponibili pubblicamente. La lista delle correzioni per questo documento è disponibile presso http://www.w3.org/XML/2006/xml-names11-errata.
Questo documento è stato revisionato da membri della W3C, da sviluppatori software, e da gruppi della W3C e dalle parti interessate ed è sottoscritto dal Direttore come raccomandazione della W3C. È un documento stabile e può essere utilizzato come materiale di riferimento o citato da un altro documento [n.d.t. effettivamente la versione inglese]. Il ruolo della W3C nel fare la Raccomandazione è quella di attrarre l'attenzione sulla specifica e di promuoverne una larga diffusione. Questo accresce le funzionalità e l'interoperabilità del Web.
Questo documento è regolamentato dal CPP del 24 gennaio 2002 come emendato dalla Procedura di transizione delle politica di brevetti di W3C. W3C cura una lista pubblica di ogni descrizione brevettuale fatta in connessione con i documenti prodotti dal gruppo; la pagina contiene anche istruzioni su come divulgare il brevetto. Un individuo che abbia effettiva conoscenza di un brevetto che creda contenere Rivendicazioni deve divulgare le informazioni relative al brevetto in accordo con la sezione 6 della Politica di brevetto della W3C.
1 Motivazioni
e sommario
1.1 Nota sulla notazione e
l'uso
2 Namespace
XML
2.1 Concetti di
base
2.2 Uso di IRI come nomi
di un namespace
2.3 Confronto fra
riferimenti IRI
3 Dichiarazione di Namespace
4
Nomi
qualificati
5 Uso dei
nomi qualificati
6 Applicazione di namespace
a elementi e ad attributi
6.1 Ambito
dei namespace
6.2 Default per i namespace
6.3 Unicità degli
attibuti
7 Conformità dei
documenti
8 Conformità dei
processori
A Riferimenti
normativi
B Altri
riferimenti (Non Normativi)
C La struttura interna dei
namespace di XML (Non normativa)
D Cambiamenti dalla versione 1.0
(Non Normativa)
D.1 Cambiamenti dalla versione
1.1
E Riconoscimenti
(Non Normativa)
Immaginiamo applicazioni di Extensible Markup Language (XML) dove un singolo documento XML contenga elementi e attributi (qui riferiti come "vocabolario di marcatura") definiti e utilizzati da molteplici moduli software. Una motivazione per questo caso è la modularità: se un vocabolario cosÌ fatto esistesse e fosse compreso adeguatamente e per il quale fosse a disposizione del software, sarabbe meglio riutilizzare questo vocabolario piuttosto che reinventarlo.
Tali documenti, contenenti vocabolari di marcatura multipli, pongono problemi di riconoscimento e conflitto. I moduli software devono essere in grado di riconoscere gli elementi e gli attributi per la cui elaborazione sono stati progettati, anche nel caso di "conflitti" che avvenissero quando una marcatura intesa per altri pacchetti software utilizzi lo stesso nome per un elemento o per un attributo.
Queste considerazioni richiedono che le strutture dei documenti dovrebbero avere nomi costruiti in modo da evitare conflitti tra nomi provenienti da diversi vocabolari di marcatura. Questa specifica descrive un meccanismo, i namespace in l'XML, che raggiunge questo scopo assegnando nomi estesi a elementi e attributi.
Dove ENFATIZZATE, le parole chiave [n.d.t. e loro coniugazioni in italiano] DEVE (MUST), NON DEVE (MUST NOT), È RICHIESTO (REQUIRED), DOVREBBE (SHOULD), NON DOVREBBE (SHOULD NOT), PUÒ (MAY) in questo documento sono da considerarsi usate come descritto in [Parole chiave].
Si noti che molti dei simboli non terminali coinvolti nella produzione di questa specifica non sono definiti qui bensí nella specifica dell'XML [XML]. Quando i simboli non terminali definiti qui hanno nomi uguali ai simboli definiti nella specifica dell'XML, le regole di produzione presenti qui in tutti i casi correlano un sottoinsieme di stringhe che vengono correlate dalle corrispondenti regole la.
Nelle regole di produzione in questo documento, NSC [n.d.t. dall'inglese Namespace Contraints]
è un "vincolo al namespace ", una delle regole che i documenti conformi a questa specifica
DEVONO seguire.
[Definizione: Un namespace XML è identificato da un riferimento IRI [RFC3987]; nomi di elementi e nomi di attributi possono essere posti in un namespace XML utilizzando il meccanismo descritto in questa specifica. ]
[Definizione: Un nome esteso è una coppia cosistente di un nome di namespace e di un nome locale. ] [Definizione: Per un nome N in un name space identificato da un IRI I, il nome del namespace è I. Per un nome N che non è in un namespace, il nome del namespace non ha valore. ] [Definizione: in entrambi i casi il nome locale è N. ] È questa combinazione di gestione universale dei namespace tramite IRI con i nomi locali del vocabolario che è efficace nell'evitare conflitti di nomi.
I riferimenti IRI possono contenere caratteri non consentiti nei nomi, e sono spesso sconvenientemente lunghi, così i nomi estesi non vengono usati direttamente per denominare elementi e attributi in documenti XML. Vengono invece usati nomi qualificati. [Definizione: Un nome qualificato è un nome soggetto ad interpretazione del namespace. ] Nei documenti che siano conformi a questa specifica, i nomi degli elementi e degli attributi appaiono come nomi qualificati. Sintatticamente, sono o nomi con prefissi o nomi senza prefissi. Una sintassi di dichiarazione basata sugli attributi viene fornita per legare prefissi a nomi di un namespace e per legare un namespace di default applicabile a nomi di elementi senza prefissi; l'ambito di validità di queste dichiarazioni è determinato dagli elementi in cui essi appaiono cosicché trovare combinazioni diverse in diverse parti di un documento. I processori che si conformino a questa specifica DEVONO riconoscere queste dichiarazioni e prefissi e agire sulla base di essi.
La stringa vuota, per quanto sia un riferimento IRI consentito, non può essere usata come nome di uno spazio di nomi.
È sconsigliato l'uso di riferimenti IRI relativi in dichiarazioni di namespace, inclusi i riferimenti al documento che li contiene [n.d.t., same-document reference in RFC 2396].
Nota:
A sconsigliare l'uso dei riferimenti IRI relativi si è arrivati con una votazione del gruppo plenario d'interesse per l'XML della W3C [Scoraggiamento degli URI relativi]. Essa dichiara pure che "specifiche successive come DOM, XPath, ecc. non definiranno alcuna interpretazione per essi".
Riferimenti IRI che identificano namespace vengono messi a confronto ogni volta che si cerchi di stabilire se un nome appartenga o no ad un dato namespace o se due nomi appartengano allo stesso namespace. [Definizione: due IRI sono trattati come stringhe e sono identici se e solo se tali stringhe sono identiche, cioè, se sono la stessa sequenza di caratteri. ] Nel confronto si distingue tra maiuscole e minuscole e % non viene considerato un carattere di escape.
Una conseguenza di questo è che riferimenti IRI che non siano identici in questo senso possono risultare in riferimenti alla stessa risorsa. Esempi includono riferimenti IRI che differiscono solo nell'uso di maiuscole e minuscole o per l'uso di % come carattere di escape, o che siano entità esterne che abbiano un diverso URI base (ma si noti che l'uso di IRI relativi per nomi di namespace viene scoraggiato).
Nelle dichiarazioni di un namespace, il riferimento IRI è il valore normalizzato dell'attributo, cosicché sostituzioni di caratteri XML e riferimenti ad entità sono già stati fatti prima di qulasiasi confronto.
Esempi:
I riferimenti IRI sotto riportati sono tutti differenti agli effetti della identificazione dei namespace, visto che differiscono nell'uso delle maiuscole e delle minuscole:
http://www.example.org/wine
http://www.Example.org/wine
http://www.example.org/Wine
Anche i riferimenti IRI sotto riportati sono tutti differenti agli effetti della identificazione dei namespace:
http://www.example.org/rosé
http://www.example.org/ros%c3%a9
http://www.example.org/ros%c3%A9
http://www.example.org/ros%C3%a9
http://www.example.org/ros%C3%A9
Come lo sono questi:
http://www.example.org/~wilbur
http://www.example.org/%7ewilbur
http://www.example.org/%7Ewilbur
Se l'entità eacute é definita in modo che sia é, tutti i tag iniziali
sotto indicati contengono dichiarazioni di namespace correlanti i prefissi p allo stesso
riferimento IRI, http://example.org/rosé.
<p:foo xmlns:p="http://example.org/rosé">
<p:foo xmlns:p="http://example.org/rosé">
<p:foo xmlns:p="http://example.org/rosé">
<p:foo xmlns:p="http://example.org/rosé">
<p:foo xmlns:p="http://example.org/rosé">
A causa del rischio di confusione tra IRI che sarebbero eqivalenti se dereferenziati, l'uso di caratteri di escape % nei nomi di namespace è fortemente sconsigliato.
[Definizione: Un namespace (o più precisamente, un legame ad un namespace) è dichiarato utilizzando una famiglia di attributi riservati. Tali nomi di attributi devono essere xmlns o devono cominciare con xmlns:. Questi attributi, come qualsiasi altro attributo di XML, possono essere forniti direttamente o per default. ]
| [1] | NSAttName |
::= | PrefixedAttName | |
| DefaultAttName | ||||
| [2] | PrefixedAttName |
::= | 'xmlns:' NCName |
[NSC: Prefissi riservati e nomi di namespace] |
| [3] | DefaultAttName |
::= | 'xmlns' | |
| [4] | NCName |
::= | NCNameStartChar
NCNameChar* |
/* Il valore del Name di XML, meno il ":" */ |
| [5] | NCNameChar |
::= | NameChar -
':' | |
| [6] | NCNameStartChar |
::= | NameStartChar -
':' |
Il valore normalizzato dell'attributo DEVE essere o un riferimento IRI — il nome di un namespace che identifica il namespace — o una stringa vuota. Il nome del namespace, per assolvere al suo scopo, DOVREBBE avere caratteristiche di unicità e di persistenza. Non è suo scopo essere direttamente utilizzabile per il recupero di un (eventuale) schema. Uniform Resource Names [RFC2141] è un esempio di sintassi progettata con in mente tale obiettivo. Comunque sia, dovrebbe essere chiaro che URL ordinari possano essere utilizzati in modo da ottenere questo stesso obiettivo.
[Definizione: se il nome dell'attributo corrisponde a PrefixedAttName, allora NCName fornisce il prefisso del namespace, usato per associare i nomi degli elementi e degli attributi con il nome del namespace nel valore dell'attributo nell'ambito dell'elemento a cui è associata la dichiarazione. ]
[Definizione: se il nome dell'attributo corrisponde a DefaultAttName, allora il nome del name space nel valore dell'attributo è quello del namespace di default nell'ambito dell'elemento a cui è associata la dichiarazione] I namespace di default e la sovrascrittura di dichiarazioni vengono discusse in 6 Applicazione dei namespace a elementi e attributi.
Un esempio di dichiarazione di namespace che associa il prefisso dello spazio di nomi
edi con il nome dello spazio di nomi
http://ecommerce.example.org/schema:
<x xmlns:edi='http://ecommerce.example.org/schema'>
<!-- il prefisso "edi" viene legato a http://ecommerce.example.org/schema
per l'elemento "x" e il suo contenuto -->
</x>Vincolo al namespace: prefissi riservati e nomi di namespace
Il prefisso xml è per definizione legato al nome del namespace
http://www.w3.org/XML/1998/namespace. Esso PUÒ, ma non necessita di essere dichiarato e NON DEVE essere
de-dichiarato o legato ad alcun altro nome di namespace. A questo nome di namespace
NON DEVONO essere legati altri prefissi,
ed esso NON DEVE essere dichiarato come
namespace di default.
Il prefisso xmlns è utilizzato solo per dichiarare legami a namespace e è
per definizione legato al nome di namespace
http://www.w3.org/2000/xmlns/. NON DEVE essere dichiarato o
de-dichiarato. A questo nome di namespace NON DEVONO essere legati altri prefissi
ed esso NON
PUò essere dichiarato come spazio di nomi di default. I nomi di elementi NON DEVONO avere il prefisso
xmlns.
Tutti gli altri prefissi con la sequenza delle tre lettere x, m, l, in qualsiasi combinazione di maiuscole e minuscole sono riservate. Questo significa che:
gli utenti NON DOVREBBERO usare tali lettere a eccezione di come definito da specifiche successive
i processori NON DEVONO trattarle come degli errori fatali.
Per quanto non siano esse stesse riservate, non è consigliabile l'uso di nomi con prefissi il cui LocalPart cominci con le lettere x, m, l, in qualsiasi combinazione di minuscole e maiuscole in quanto questi nomi sarebbero riservati se utilizzati senza un prefisso.
Nei documenti XML conformi a questa specifica, alcuni nomi (costrutti corrispondenti a simboli non terminali Name) DEVONO essere dati come nomi qualificati, definiti come segue:
| [7] | QName |
::= | PrefixedName |
| UnprefixedName | |||
| [8] | PrefixedName |
::= | Prefix
':' LocalPart
|
| [9] | UnprefixedName |
::= | LocalPart
|
| [10] | Prefix |
::= | NCName |
| [11] | LocalPart |
::= | NCName |
Prefix fornisce la parte del prefisso dello spazio dei nomi del nome qualificato, e DEVE essere associato ad un riferimento IRI di uno spazio dei nomi in una dichiarazione del namespace. [Definizione: LocalPart fornisce la parte locale del nome qualificato.]
Si noti che il prefisso funziona solo come segna posto per un nome di namespace. Le applicazioni DOVREBBERO usare il nome del namespace, non il prefisso, nella costruzione di nomi il cui ambito si estenda al di là del documento che li contiene.
In documenti XML conformi a questa specifica i nomi degli elementi sono dati come nomi qualificati, come segue:
| [12] | STag |
::= | '<' QName (S Attribute)* S? '>' |
[NSC: prefisso dichiarato] |
| [13] | ETag |
::= | '</' QName S? '>' |
[NSC: prefisso dichiarato] |
| [14] | EmptyElemTag |
::= | '<' QName (S Attribute)* S? '/>' |
[NSC: prefisso dichiarato] |
Un esempio di nome qualificato funzionante come nome di elemento:
<!-- Il namespace dell'elemento 'price' è http://ecommerce.example.org/schema --> <edi:price xmlns:edi='http://ecommerce.example.org/schema' units='Euro'>32.18</edi:price>
Gli attributi o sono dichiarazioni di namespace oppure il loro nome è dato come nome qualificato:
| [15] | Attribute |
::= | NSAttName Eq AttValue | |
| QName
Eq AttValue |
[NSC: prefisso dichiarato] |
Un esempio di nome qualificato funzionante come nome di attributo:
<x xmlns:edi='http://ecommerce.example.org/schema'> <!-- Il namespace dell'attributo 'taxClass' è http://ecommerce.example.org/schema --> <lineItem edi:taxClass="exempt">Baby food</lineItem> </x>
Vincolo al namespace: prefisso dichiarato
Il prefisso del namespace, a meno che non sia xml o xmlns,
DEVE essere stato dichiarato
in un attributo di dichiarazione di namespace
o all'interno di un tag iniziale dell'elemento dove il prefisso viene usato oppure
in un elemento predecessore (cioè un elemento nel contenuto del quale appaia la marcatura
prefissata). Inoltre, il valore dell'attributo nella più interna dichiarazione
di questo tipo NON DEVE
essere una stringa vuota.
Questo vincolo può portare a difficoltà operative nel caso in cui la dichiarazione del namespace non venga effettuata direttamente nell'entità del documento XML, ma attraverso un attributo di default dichiarato in una entità esterna. Dichiarazioni di questo tipo potrebbero non venir lette da software che siano basati su un processore XML che non compie la validazione. Molte applicazioni XML, presumibilmente incluse quelle che tengono conto dei namespace, non richiedono processori che operano una validazione. Perché tali applicazioni funzionino correttamente le dichiarazioni di spazio di nomi DEVONO essere fornite direttamente o attraverso attributi di default dichiarati nel sottoinsieme interno del DTD.
Anche i nomi degli elementi e i nomi degli attributi vengono dati come nomi qualificati quando appaiono in dichiarazioni nei DTD:
| [16] | doctypedecl |
::= | '<!DOCTYPE' S
QName (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)?
'>' |
| [17] | elementdecl |
::= | '<!ELEMENT' S
QName S contentspec S?
'>' |
| [18] | cp |
::= | (QName
| choice | seq) ('?' | '*' |
'+')? |
| [19] | Mixed |
::= | '(' S? '#PCDATA'
(S? '|' S? QName)* S? ')*' |
| '(' S?
'#PCDATA' S? ')'
| |||
| [20] | AttlistDecl |
::= | '<!ATTLIST' S
QName AttDef* S?
'>' |
| [21] | AttDef |
::= | S (QName | NSAttName) S AttType S DefaultDecl |
Si noti che la validazione basata su DTD non tiene conto degli spazi dei nomi nel seguente senso:
un DTD limita gli elementi e gli attributi che possono apparire in un documento attraverso
i loro nomi non interpretati, non attraverso coppie di tipo (nome di namespace, nome locale). Per
validare un documento che usi dei namespace a fronte di un DTD, lo stesso prefisso deve
essere usato sia nel DTD che nell'istanza. Un DTD può comunque limitare indirettamente
i namespace usati in un documento valido fornendo valori #FIXED
per attribbuti che dichiarino namespace.
L'ambito di visibilità di un namespace che dichiari un prefisso si estende dall'inizio del tag iniziale dove esso appare alla fine del corrispondente tag finale, ad esclusione dell'ambito di qualsiasi dichiarazione interna con la stessa parte NSAttName. Nel caso del tag vuoto, l'ambito di visibilità è lo stesso tag.
Una dichiarazione di namespace così fatta vale per tutti i nomi di elementi e attributi all'interno del suo ambito il cui prefisso corrisponde a quello specificato nella dichiarazione.
Il nome esteso corrispondente ad un nome con prefisso di attributo o elemento ha l'IRI, al quale il prefisso è legato in qualità di nome del namespace, e la parte locale in qualità del suo nome locale.
<?xml version="1.1"?> <html:html xmlns:html='http://www.w3.org/1999/xhtml'> <html:head><html:title>Frobnostication</html:title></html:head> <html:body><html:p>Moved to <html:a href='http://frob.example.com'>here.</html:a></html:p></html:body> </html:html>
Come attributi di un singolo elemento possono essere dichiarati molteplici prefissi per namespace, come viene mostrato in questo esempio:
<?xml version="1.1"?>
<!-- sono disponibili per tutto l'elemento entrambi i prefissi di namespace -->
<bk:book xmlns:bk='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<bk:title>Cheaper by the Dozen</bk:title>
<isbn:number>1568491379</isbn:number>
</bk:book>Il valore dell'attributo in una dichiarazione di namespace per un prefisso PUÒ essere nullo. Questo ha l'effetto, nell'ambito della dichiarazione, di rimuovere ogni associazione del prefisso con un nome di namespace. Ulteriori dichiarazioni POSSONO dichiarare nuovamente il prefisso:
<?xml version="1.1"?>
<x xmlns:n1="http://www.w3.org">
<n1:a/> <!-- legale; il prefisso n1 viene legato a http://www.w3.org -->
<x xmlns:n1="">
<n1:a/> <!-- illegale; il prefisso n1 non viene legato qui -->
<x xmlns:n1="http://www.w3.org">
<n1:a/> <!-- legale; il prefisso n1 viene legato nuovamente -->
</x>
</x>
</x>La visibilità per la dichiarazione di un namespace di default si estende dall'inizio del tag iniziale dove essa appare sino alla fine del corrispodente tag finale, ad esclusione dell'ambito di dichiarazioni di namespace di default più interne. Nel caso di un tag vuoto, l'ambito di visibilità è il tag stesso.
Una dichiarazione di namespace di default si applicata, nel suo ambito, a tutti i nomi di elemento non senza prefisso. Le dichiarazioni del namespace di default non si applicano direttamente ai nomi degli attributi; l'interpretazione degli attributi senza prefisso è determinata dall'elemento in cui figurano.
Se viene dichiarato un namespace di default in un cero ambito di visibilità, il nome esteso corrispondente ad un nome di elemento senza prefisso prende l'IRI del namespace di default come suo nome di namespace. Se non è dichiato un namespace di default in un certo ambito di visibilit`, il namespace non ha valore. Il nome del namespace per un nome di attributo senza prefisso non ha mai alcun valore. In ogni caso, il nome locale è la parte locale (che è naturalmente coincide col nome senza prefisso).
<?xml version="1.1"?> <!-- Gli elementi sono nello spazio di nomi dell'HTML, in questo caso di default --> <html xmlns='http://www.w3.org/1999/xhtml'> <head><title>Frobnostication</title></head> <body><p>Moved to <a href='http://frob.example.com'>here</a>.</p></body> </html>
<?xml version="1.1"?>
<!-- I tipi di elementi senza prefisso vengono da "books" -->
<book xmlns='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
</book>Un più esteso esempio dell'ambito di validità dei namespace:
<?xml version="1.1"?> <!-- Inizialmente, il namespace di default è "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- Fa dell'HTML il namespace di default per alcuni commenti --> <p xmlns='http://www.w3.org/1999/xhtml'> This is a <i>funny</i> book! </p> </notes> </book>
Il valore dell'attributo in una dichiarazione di namespace di default PUÒ essere vuota. Questo ha lo stesso effetto, nell'ambito di visibilità della dichiarazione, di quando non ci fosse alcun namespace di default.
<?xml version='1.1'?> <Beers> <!-- Il namespace di default all'interno delle tabelle è quello dell'HTML --> <table xmlns='http://www.w3.org/1999/xhtml'> <th><td>Name</td><td>Origin</td><td>Description</td></th> <tr> <!-- All'interno delle celle non c'è alcun namespace di default --> <td><brandName xmlns="">Huntsman</brandName></td> <td><origin xmlns="">Bath, UK</origin></td> <td> <details xmlns=""><class>Bitter</class><hop>Fuggles</hop> <pro>Wonderful hop, light alcohol, good summer beer</pro> <con>Fragile; excessive variance pub to pub</con> </details> </td> </tr> </table> </Beers>
Nei documenti XML conformi a questa specifica, nessun tag dovrebbe contenere due attributi che:
abbiano nomi identici, o
abbiano nomi qualificati con la stessa parte locale e con i prefissi che siano legati a nomi di namespace identici.
Questa estrizione è equivalente a richiedere che nessun elemento abbia due attributi con lo stesso nome esteso.
Per esempio, ognuno dei tag dell'elemento bad vuoto non è consentito nel seguente
frammento:
<!-- http://www.w3.org è legato ad n1 e n2 --> <x xmlns:n1="http://www.w3.org" xmlns:n2="http://www.w3.org" > <bad a="1" a="2" /> <bad n1:a="1" n2:a="2" /> </x>
Comunque, ognuno dei seguenti è consentito, il secondo perché il namespace di default non si applica ai nomi di attributi:
<!-- http://www.w3.org &egarve; legato ad n1 ed è di default --> <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" b="2" /> <good a="1" n1:a="2" /> </x>
Questa specifica si applica ai documenti XML 1.1. Per conformarsi a questa specifica, un documento DEVE essere ben formato in accordo con la specifica XML 1.1 [XML 1.1].
Nei documenti XML che conformi a questa specifica, i nomi degli elementi e degli attributi DEVONO seguire le regole di produzione per QName e DEVONO soddisfare i "vincoli dei namespace". Tutti gli altri simboli a cui nel documento viene RICHIESTO, per la buona formazione secondo XML 1.1, di soddisfare la regola di produzione di Name, DEVONO soddisfare la regola di produzione di NCName di questa specifica.
[Definizione: Un documento è ben formato per i namespace se si conforma a questa specifica. ]
Ne segue che in un documento ben formato per i namespace:
Tutti i nomi degli attributi e degli elementi contengono o uno zero o un ‘due punti’;
Nessun nome di entità, oggetto di istruzione o nome di notazione contiene alcun ‘due punti’.
Inoltre, un documento ben formato secondo i namespace può anche essere valido secondo i namespace.
[Definizione: un documento ben formato per i namespace è valido per i namespace se è valido in accordo alla specifica XML 1.1 e se tutti i simboli che non siano nomi di elemento o di attributo a cui sia RICHIESTO, per la validità secondo XML 1.1, di soddisfare la regola di produzione di Name di XML, soddisfi la regola di produzione di NCName di questa specifica. ]
Ne segue che in un documento valido per i namespace:
Nessun attributo con un tipo dichiarato ID, IDREF(S), ENTITY(IES) o NOTATION contenga alcun ‘due punti’.
Allo scopo di conformarsi a questa specifica un processore DEVE notificare violazioni alla buona formazione degli spazi dei nomi, con l'eccezione del fatto che non è RICHIESTO di controllare che i nomi degli spazi dei nomi siano IRI legali.
[Definizione: Un processore XML che si conformi a questa specifica è validante sui namespace se in più notifica violazioni alla validità secondo i namespace. ]
Questa appendice è stata cancellata.
Questa versione incorpora correzioni alla versione 1.0 a partire dal 6 dicembre 2002 [1.0 Errata]. Ci sono due ulteriori cambiamenti sostanziali:
Viene fornito un meccanismo per de-dichiarare prefissi;
I nomi di namespace sono IRI, piuttosto che URI.
Ci sono parecchi cambiamenti editoriali, inclusi un numero di cambiamenti terminologici oltre ad aggiunte intese a produrre maggiore consistenza. L'appendice non normativa "La struttura internal dei namespace per XML" è stata rimossa.
Questa versione incorpora l'errata corrige per la versione 1.1 a partire dal 1 giugno 2006 [1.1 Errata].
Visto che la versione finale dell'RFC riguardo l'IRI non è stata ancora pubblicata, la prima edizione della versione 1.1 include la propria definizione degli IRI. Questa è stata rimossa e sostituita dal riferimento all'apposita RFC.
Questo lavoro riflette contributi provenienti da un gran numero di persone, inclusi in particolare i partecipanti al World Wide Web Consortium XML Working Group e al Special Interest Group e i partecipanti al W3C Metadata Activity. I contributi di Charles Frankston di Microsoft sono stati di particolare valore.