Namespaces in XML 1.0 (Second Edition)

Magyar fordítás

2007. január

Jelen verzió:
http://mgl.uw.hu/XMLNS1_0_2nd/Namespaces in XML 1_0 (Second Edition).htm
Fordító:
Máté Gábor, gabor.lajos.mate@gmail.com <gabor.lajos.mate@gmail.com>

Jelen dokumentum egy W3C-dokumentum fordítása. Mind az eredeti dokumentum, mind pedig a fordítás szerzői jogi védelem alatt áll. Az eredeti dokumentum szerzői jogára vonatkozóan lásd az angol nyelvű copyright megjegyzést. A fordítás nem minősül normatív dokumentumnak. A dokumentum egyetlen normatív verziója az angol nyelvű verzió.

A fordításban talált esetleges hibákat, illetve a fordítással kapcsolatos javaslatokat a fordító fent megadott elérhetőségén lehet jelezni.


W3C

Névterek XML 1.0-ban (Második kiadás)

W3C-ajánlás 2006. augusztus 16.

Jelen verzió (angol eredeti):
http://www.w3.org/TR/2006/REC-xml-names-20060816
Legutolsó verzió (angol eredeti):
http://www.w3.org/TR/xml-names
Előző verzió (angol eredeti):
http://www.w3.org/TR/2006/PER-xml-names-20060614
Szerkesztők:
Tim Bray, Textuality mailto:tbray@textuality.com
Dave Hollander, Contivo, Inc. mailto:dmh@contivo.com
Andrew Layman, Microsoft mailto:andrewl@microsoft.com
Richard Tobin, University of Edinburgh and Markup Technology Ltd mailto:richard@cogsci.ed.ac.uk

A dokumentum hibajegyzéke tartalmazhat bizonyos normatív javításokat is, ezért azt mindig vegyük figyelembe a dokumentum olvasásakor.

Ezen a fordításon túlmenően lásd még a további fordításokat is.


Absztrakt

Az XML névterek célja, hogy egy olyan egyszerű eljárást tegyenek lehetővé, amelynek a segítségével az Extensible Markup Language dokumentumokban használt attribútumneveket csoportokba tudjuk sorolni, minősített nevekkel tudjuk helyettesíteni őket úgy, hogy olyan névtereket rendelünk hozzájuk, amelyeket URI hivatkozások azonosítanak.

A dokumentum státusza

Jelen alfejezet a dokumentum státuszát a publikálásának az időpontjában rögzíti. Más dokumentumok később hatályon kívül helyezhetik ezt a dokumentumot. Az érvényben lévő W3C publikációk listája a http://www.w3.org/TR/ W3C technikai jelentések indexe oldalán található meg. Ugyanitt megtalálható ennek a dokumentumnak a legújabb verziója is.

Ez a dokumentum a W3C XML Activity részeként működő XML Core Munkacsoport munkajaként jött létre. Jelen specifikáció angol nyelvű változata az egyetlen normatív változat, mindazonáltal ha a specifikáció valamely fordítása érdekelne bennünket, akkor látogassuk meg a http://www.w3.org/2003/03/Translations/byTechnology?technology=xml-names oldalt.

A 1.1-es verziójú névterek implementációiról készült jelentés tartalmazza a specifikáció összes általunk ismert implementációját. (Minden ismert 1.1-es implementáció támogatja az 1.0-ás verziójú névtereket is) . A XML Test Suite oldalon tesztesetek is találhatóak az implementációkhoz.

A dokumentum jelenlegi második kiadása a kiadás időpontjáig ismertté vált összes hiba javítását is magában foglalja, és az előző 1999. január 14-i W3C ajánlást hatályon kívül helyezi.

A dokumentum esetleges hibáit lásd az xml-names-editor@w3.org oldalon. Az archívum szintén hozzáférhető. A dokumentum hibajegyzéke a http://www.w3.org/XML/2006/xml-names-errata oldalon elérhető.

Ezt a dokumentumot a W3C tagjai, szoftverfejlesztők, valamint a W3C más munkacsoportja és egyéb érdekelt felek is ellenőrizték, és a Director támogatta a W3C-ajánlásként való elfogadását. Ez egy stabil, már nem változó dokumentum, amit referenciaanyagként is lehet használni, vagy más dokumentumban normatív hivatkozásként is meg lehet adni. A W3C szerepe az ajánlás létrehozásában az, hogy felhívja a figyelmet a specifikációra és elősegítse a széleskörű elfogadottságát, ezáltal növelve a Web funkcionalitását és interoperabilitását.

A W3C nyilvántartja azoknak a szabadalmi bejelentéseknek a listáját, amelyek a munkacsoport által készített dokumentumokhoz bármilyen módon kapcsolódnak. Ezek az oldalak tartalmazzák a szabadalmak bejelentésére vonatkozó tudnivalókat is. Bárkinek, akinek tudomása van olyan szabadalomról, ami feltételezhetően Alapvető szabadalmi igénynek (Essential Claim) minősül, a W3C Patent Policy 6. szakaszában foglaltaknak megfelelően erről az információról bejelentést kell tennie.

Tartalomjegyzék

1 Problémafelvetés és áttekintés
    1.1 A használt jelölésekről és ezek használatáról
2 XML névterek
    2.1 Alapvető fogalmak
    2.2 Az URI-k használata névterek neveiként
    2.3 URI hivatkozások összehasonlítása
3 Névterek deklarálása
4 Minősített nevek
5 Minősített nevek használata
6 Névterek alkalmazása elemekre és attribútumokra
    6.1 Névterek hatóköre
    6.2 Alapértelmezett névterek
    6.3 Attribútumok egyedisége
7 A szabványnak megfelelő dokumentumok
8 A szabványnak megfelelő processzorok

Függelék

A Normatív hivatkozások
B Egyéb hivatkozások (nem normatív)
C Az XML névterek belső felépítése (nem normatív)
D Változtatások az 1.0 verzióhoz képest (nem normatív)
E Köszönetnyilvánítások (nem normatív)


1 Problémafelvetés és áttekintés

Úgy gondoljuk, hogy a későbbiekben olyan Extensible Markup Language (XML) dokumentumok fognak készülni, amelyek egyetlen dokumentumban tartalmazzák több elem és attribútum felsorolását (ezekre a későbbiekben "markup-szótár"-ként hivatkozunk), és ezeket az elemeket és attribútumokat később több különböző szoftvermodul is használhatja. Ez megoldást adhatna a modularitás problémájára, hiszen ha már létezik egy ilyen markup-szótár, és ez a markup-szótár mindenki által elfogadott, illetve létezik már hozzá szoftvertámogatás, akkor könnyebb ezt a markupot újra felhasználni, mint újra kifejleszteni.

Azonban az ilyen, esetleg több markup-szótárt is tartalmazó dokumentumok felvetik a markup felismerésének, illetve lehetséges ütközésének a problémáját. A szoftvermoduloknak akkor is fel kell tudni ismerniük azokat az elemeket és attribútumokat, amelyeket fel kell dolgozniuk, ha olyan "ütközés" fordul elő, amely során egy másik szoftvercsomag valamely markupja ugyanazt a nevet használja egy elem vagy egy attribútum megadásához, mint a szóban forgó szoftvermodul saját markupjai.

Ezek a megfontolások azt eredményezik, hogy a dokumentumokban olyan neveket kell használni, amelyek úgy épülnek fel, hogy megakadályozzák a különböző markup-szótárakból származó nevek ütközését, összekeveredését. Jelen specifikáció XML névterek néven egy olyan mechanizmust specifikál, amely teljesíti ezt a követelményt azáltal, hogy az elemekhez és az attribútumokhoz kiterjesztett neveket rendel hozzá.

1.1 A használt jelölésekről és ezek használatáról

Ahol a KELL, NEM SZABAD, NEM LEHET, SZÜKSÉGES, AJÁNLOTT, NEM AJÁNLOTT, LEHET kifejezések, illetve kulcsszavak KI VANNAK EMELVE a dokumentumban, azokon a helyeken úgy kell értelmezni őket, ahogy a [kulcsszavak] normatív hivatkozás által megjelölt dokumentumban specifikálva vannak.

Megjegyezzük, hogy a jelen specifikáció által használt nemterminálisok és produkciós szabályok nagy része nem ebben a dokumentumban van definiálva, hanem az [XML] XML specifikációban. Ha egy itt definiált nemterminálisnak ugyanaz a neve, mint az XML specifikációban definiált nemterminálisnak, akkor az itt megadott produkciós szabályok minden esetben az eredeti produkciós szabály által megadott sztringek egy részhalmazára illeszkednek.

Ennek a dokumentumnak a produkciós szabályaiban az NSC rövidítés a "Névtér-feltétel" (angol eredetiben "Namespace Constraint") rövidítése. A jelen specifikációnak megfelelő dokumentumoknak ki KELL elégíteniük az ezen névtér-feltételekben megfogalmazott szabályokat.

2 XML névterek

2.1 Alapvető fogalmak

[Definíció: Az XML névtereket az [RFC3986] által specifikált URI hivatkozások azonosítják, az így létrehozott XML névterekbe pedig a jelen specifikáció által meghatározott mechanizmus segítségével bele lehet helyezni az elemek és az attribútumok neveit. ]

[Definíció: Kiterjesztett neveknek nevezzük az olyan párokat, amelyek egy névtér nevéből és egy lokális névből képeztünk. ] [Definíció: Az I URI által azonosított névtérben lévő N esetén, az I-t a névtér nevének nevezzük. Azon N nevek esetén, amelyek nincsenek egyetlen névtérben sem benne, a névtér nevének nincs értéke. ] [Definíció: Az N-t mindkét előző esetben a lokális névnek hívjuk. ] Az univerzálisan nyilvántartott URI névtereknek és a markup-szótárakban megadott lokális neveknek az itt leírt kombinációja hatékony módszer a névütközések megakadályozására.

Az URI hivatkozások olyan karaktereket is tartalmazhatnak, amelyek nem megengedettek a nevekben, illetve gyakran kényelmetlenül hosszúak, ezért a kiterjesztett neveket nem használhatjuk közvetlenül az XML dokumentumokban előforduló elemek és attribútumok neveiként. Helyettük minősített neveket használunk. [Definíció: Minősített neveknek nevezzük azokat a neveket, amelyek értelmezéséhez névtereket használunk.] A jelen specifikációnak megfelelő dokumentumokban az elemek és az attribútumok nevei minősített nevek. Szintaktikailag ezek vagy prefixszel ellátott nevek vagy pedig prefix nélküli nevek. Lehetőség van arra, hogy egy, az attribútumokra épülő deklarációs szintaxis használatával a prefixeket a névtér-nevekhez kapcsoljuk, és hogy alapértelmezett névteret határozzunk meg a prefix nélküli névvel rendelkező elemek számára. Ezen deklarációk hatálya azon elemekre terjed ki, amelyekhez megadtuk őket és így lehetővé teszik, hogy a dokumentum különböző részeire különböző megkötéseket tegyünk. A jelen specifikációnak megfelelő processzoroknak fel KELL ismerniük és alkalmazniuk KELL ezeket a deklarációkat és prefixeket.

2.3 URI hivatkozások összehasonlítása

A névtereket azonosító URI hivatkozásokat akkor kell összehasonlítani, amikor azt akarjuk meghatározni, hogy egy adott név egy adott névtérhez tartozik-e, és hogy két név ugyanahhoz a névtérhez tartozik-e. [Definíció: A két URI-t ekkor sztringként kezeljük, és akkor és csak akkor tartjuk azonosnak, ha mint sztringek azonosak, azaz ha ugyanabból a karaktersorozatból állnak. ] Az összehasonlítás során a kisbetűket és a nagybetűket különbözőeknek tekintjük, és az URI-ban már meglevő %-es behelyettesítéseket nem oldjuk fel, illetve további ilyen behelyettesíteket nem teszünk bele az URI-ba.

Ennek következtében előfordulhat, hogy két vagy több olyan URI hivatkozás, amelyet a fenti értelemben nem tekintettünk azonosnak, ugyanarra az erőforrásra mutat. Például ilyen lehet két olyan URI hivatkozás, amely csak a kisbetűk/nagybetűk használatában tér el, illetve amely csak az % jeles behelyettesítések használatában különbözik egymástól, illetve amelyek eltérő bázis URI-val rendelkező külső entitásokban vannak (azonban ne felejtsük el, hogy a relatív URI-k használata a névtér-nevekben már nem megengedett).

A névtér-deklarációkban az URI hivatkozás az attribútum normalizált értéke, tehát az XML karakterhivatkozásait és entitáshivatkozásait már behelyettesítettük még mielőtt az összehasonlításra sor került volna.

Példák:

Az alábbi URI hivatkozások mind különbözőeknek számítanak, ha névterek azonosítására használjuk őket, mivel kisbetű/nagybetű használatában eltérnek egymástól:

  • http://www.example.org/wine

  • http://www.Example.org/wine

  • http://www.example.org/Wine

Az alábbi URI hivatkozások szintén különbözőek, ha névterek azonosítására használjuk őket:

  • http://www.example.org/~wilbur

  • http://www.example.org/%7ewilbur

  • http://www.example.org/%7Ewilbur

Tekintettel arra, hogy félreértést okozhat több olyan URI használata, amelyek ekvivalensek lennének, ha feloldanánk a hivatkozásokat, ezért a % jeles behelyettesítések használata a névterek neveiben nem ajánlott.

3 Névterek deklarálása

[Definíció: A névtereket (vagy pontosabban a névterek megadását) bizonyos fenntartott attribútumok használatával deklaráljuk . Ezen attribútumok neve vagy xmlns kell legyen, vagy pedig xmlns:-tal kell kezdődjön. Ezeket az attribútumokat, hasonlóan bármely más XML attribútumhoz, megadhatjuk közvetlenül vagy alapértelmezett értékként is. ]

Attribútumnevek a névtér-deklarációkhoz
[1]    NSAttName    ::=    PrefixedAttName
| DefaultAttName
[2]    PrefixedAttName    ::=    'xmlns:' NCName [NSC: Fenntartott prefixek és névtér-nevek]
[3]    DefaultAttName    ::=    'xmlns'
[4]    NCName    ::=    NCNameStartChar NCNameChar* /* Kettőspontot ":" nem tartalmazó XML-név, */
[5]    NCNameChar    ::=    NameChar - ':'
[6]    NCNameStartChar    ::=    Letter | '_'

Az attribútumok normalizált értékének vagy URI hivatkozásnak — azaz a névteret azonosító névtér-névnekKELL lennie, vagy pedig üres stringnek. Ahhoz, hogy a névtér-név teljesítse az eredetileg vele szemben támasztott követelményeket, AJÁNLOTT, hogy egyedi legyen és perzisztens legyen. Nem célunk, hogy a névtér-nevet közvetlenül felhasználhassuk egy séma eléréséhez (ha létezik ilyen). A Uniform Resource Name [RFC2141] specifikációnak megfelelő nevek például ezen megfontolások figyelembe vételével lettek kialakítva. Azonban vegyük észre, hogy a megszokott URL-eket is lehet úgy használni, mert azok is teljesítik ezeket követelményeket.

[Definíció: Ha egy attribútumnév PrefixedAttName szabályra illeszkedik, akkor az NCName határozza meg a névtér prefixét, amit arra használhatunk, hogy az elemek és attribútumok neveihoz hozzárendeljük a névtér-neveket azoknak az elemeknek a hatókörében lévő attribútumértékeknél, amelyekhez az adott deklarációt hozzáadtuk. Az ilyen deklarációkban a névtér-név nem lehet üres. ]

[Definíció: Ha az attribútumnév a DefaultAttName szabályra illeszkedik, akkor az attribútumértékben szereplő névtér-név az alapértelmezett névtér neve annak az elemnek a hatókörében, amihez a deklarációt hozzáadtuk.] Az alapértelmezett névtereket és az egymást felüldefiniáló deklarációkat a 6 Névterek alkalmazása az elemeken és attribútumokon részben tárgyaljuk.

Tekintsünk például egy olyan névtér-deklarációt, amely az edi prefixet hozzárendeli a http://ecommerce.example.org/schema névtér-névhez:

<x xmlns:edi='http://ecommerce.example.org/schema'>
  <!-- the "edi" prefix is bound to http://ecommerce.example.org/schema
       for the "x" element and contents -->
</x>

Jóllehet ezek a nevek nem fenntartottak, mégsem tanácsos olyan prefixszel ellátott neveket alkalmazni, amelyek lokális része az x, m, l betűk valamilyen kombinációjával kezdődik függetlenül a kisbetűk/nagybetűk használatától, mivel ezek a nevek fenntartott nevek lennének, ha prefix nélkül használnánk őket.

4 Minősített nevek

A jelen specifikációnak megfelelő XML dokumentumokban bizonyos neveket (azaz a Name nemterminálisnak megfelelő bizonyos konstrukciókat) minősített nevekkel KELL megadni a következő definíció szerint:

Minősített név
[7]    QName    ::=    PrefixedName
| UnprefixedName
[8]    PrefixedName    ::=    Prefix ':' LocalPart
[9]    UnprefixedName    ::=    LocalPart
[10]    Prefix    ::=    NCName
[11]    LocalPart    ::=    NCName

A Prefix nemterminális adja meg a minősített név névterének a prefixét, és ezt a prefixet KELL a névtérdeklarációban szereplő URI hivatkozáshoz hozzárendelni. [Definíció: A LocalPart nemterminális adja meg a minősített név lokális részét.]

Vegyük észre, hogy a prefix csak a névtér nevének a tárolására szolgál. Azokban az esetekben, amikor a több komponensből álló nevek esetén az név hatóköre az őt tartalmazó dokumentum túl is érvényes lesz, az alkalmazásoknak a névtér nevét AJÁNLOTT használni a prefix helyett.

5 Minősített nevek használata

A jelen specifikációnak megfelelő XML dokumentumokban az elemek nevét minősített nevekkel adjuk meg a következő definíció szerint:

Elem-nevek
[12]    STag    ::=    '<' QName (S Attribute)* S? '>' [NSC: Deklarált prefix]
[13]    ETag    ::=    '</' QName S? '>' [NSC: Deklarált prefix]
[14]    EmptyElemTag    ::=    '<' QName (S Attribute)* S? '/>' [NSC: Deklarált prefix]

A következő példában a minősített név egy elem neve:

  <!-- the 'price' element's namespace is http://ecommerce.example.org/schema -->
  <edi:price xmlns:edi='http://ecommerce.example.org/schema' units='Euro'>32.18</edi:price>

Az attribútumokat vagy névtér-deklarációkban adjuk meg, vagy pedig az attribútumok nevét adjuk meg minősített nevekként:

Attribútum
[15]    Attribute    ::=    NSAttName Eq AttValue
| QName Eq AttValue [NSC: Deklarált prefix]

A következő példában a minősített név egy attribútum neve:

<x xmlns:edi='http://ecommerce.example.org/schema'>
  <!-- the 'taxClass' attribute's namespace is http://ecommerce.example.org/schema -->
  <lineItem edi:taxClass="exempt">Baby food</lineItem>
</x>

Névtér-feltétel: Deklarált prefix

A névtér prefixét minden esetben előzőleg deklarálni KELL egy névtér-deklarációs attribútummal, kivéve ha az xml vagy xmlns prefixekről van szó. A névtér-deklarációs attribútumnak vagy annak az elemnek a start-tagjében kell szerepelnie, ahol a prefixet használjuk, vagy pedig ennek az elemnek az egyik ősében (azaz egy olyan elemben, ami tartalmazza a prefixszel ellátott markupot).

Ez a feltétel nehézségeket okozhat olyan esetekben, amikor a névtér-deklarációs attribútumot nem közvetlenül az XML dokumentumentitásában adjuk meg, hanem egy külső entitásban deklarált alapértelmezett attribútumként határozzuk meg. Az ilyen deklarációkat ugyanis az érvényességet nem ellenőrző feldolgozók nem minden esetben olvassák ezt be. Sok olyan XML alkalmazás van, amelyek nem követelik meg az érvényességet is ellenőrző feldolgozást, és ezek között feltehetőleg vannak olyanok is, amelyek kihasználják a névterek nyújtotta lehetőségeket. Ha biztosítanunk kell ezen alkalmazások helyes működését is, akkor a névtér-deklarációknak vagy közvetlenül a dokumentumentitásban KELL lenniük, vagy pedig a DTD belső részében deklarált alapértelmezett attribútummal KELL őket megadni.

Azoknak az elemeknek és attribútumoknak a nevei, amelyek a DTD deklarációiban is megjelennek, ott szintén minősített nevekként szerepelnek:

Minősített nevek deklarációkban
[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

Vegyük észre, hogy a DTD-re alapuló érvényesség-ellenőrzés nem veszi figyelembe a névtereket a következő értelemben: a DTD az elemekre és az attribútumokra olyan megszorításokat tesz, hogy ezek megjelenhetnek-e a dokumentumban, de ezt nem ellenőrzi a névtér-név és lokális név párokra, hanem csak a teljes névre, anélkül, hogy a nevet értelmezné. Ha DTD-vel ellenőrizni akarunk egy olyan dokumentumot, ami névtereket is használ, akkor ugyanúgy kell használnunk a prefixeket a DTD-ben, mint ahogy a dokumentum többi részében is előfordulnak. Érvényes dokumentumokban a DTD azonban közvetett módon meghatározhat megszorításokat a használt névterekre vonatkozólag is úgy, hogy a megadja azoknak az attribútumnak a #FIXED értékét, amelyek névtereket deklarálnak.

6 Névterek alkalmazása elemekre és attribútumokra

6.1 Névterek hatóköre

A prefixet megadó névtérdeklaráció hatóköre az őt tartalmazó start-tag kezdetétől a megfelelő end-tagig tart, kivéve ebből azoknak a belső deklarációknak a hatókörét, amelyek ugyanerre az NSAttName részre vonatkoznak. Üreselem-tag esetén a hatókör magára az üres elemre terjed ki.

Ezek a névtér-deklarációk a hatókörükben található összes olyan elem és attribútum nevére alkalmazandók, amelyek prefixe illeszkedik a deklarációban megadott prefixre.

Az elemek vagy attribútumok prefixszel ellátott nevének megfelelő kiterjesztett névnek az az URI-ja, amely URI-hoz a prefixet kapcsoltuk, amikor a névtér-nevét megadtuk, a lokális része pedig a lokális névnek felel meg.

<?xml version="1.0"?>

<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>

Több névtér prefixét is deklarálhatjuk egyetlen elem attribútumaiként is, mint azt a következő példa is mutatja:

<?xml version="1.0"?>
<!-- both namespace prefixes are available throughout -->
<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>

6.2 Alapértelmezett névterek

Az alapértelmezett névtér deklarációjának a hatóköre az őt tartalmazó start-tag kezdetétől az adott elemet lezáró end-tagig terjed, kivéve az ezen az elemen belül előforduló alapértelmezett névterek deklarációinak a hatókörét. Üreselem-tag esetén az alapértelmezett névtér deklarációjának a hatóköre magára az üres elemre terjed ki.

Az alapértelmezett névtér deklarációját minden olyan prefix nélküli elemnévre alkalmazni kell, ami az adott deklaráció hatókörén belül van. Az alapértelmezett névtér deklarációját közvetlenül az attribútumnevekre nem alkalmazzuk. A prefix nélküli attribútumnevek értelmezése attól az elemtől függ, amelyhez az adott attribútum tartozik.

Ha egy alapértelmezett névtér hatókörén belül vagyunk, akkor a prefix nélküli elemneveknek megfelelő kiterjesztett nevek névtér-neve az alapértelmezett névtér URI-ja. Ha minden alapértelmezett névtér hatókörén kívül vagyunk, akkor a névtér-névnek nincs értéke. A prefix nélküli attribútumnevek névtér-nevének soha nincs értéke. A lokális név minden esetben a lokális rész, (ami természetesen megegyezik magával a prefix nélküli névvel).

<?xml version="1.0"?>
<!-- elements are in the HTML namespace, in this case by 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.0"?>
<!-- unprefixed element types are from "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>

Egy hosszabb példa a névterek hatókörére a következő:

<?xml version="1.0"?>
<!-- initially, the default namespace is "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>
      <!-- make HTML the default namespace for some commentary -->
      <p xmlns='http://www.w3.org/1999/xhtml'>
          This is a <i>funny</i> book!
      </p>
    </notes>
</book>

Az alapértelmezett névtér deklarációjában található attribútumérték LEHET üres is. Ennek a hatása a deklaráció hatókörén belül ugyanaz, mintha nem is deklaráltunk volna alapértelmezett névteret.

<?xml version='1.0'?>
<Beers>
  <!-- the default namespace inside tables is that of HTML -->
  <table xmlns='http://www.w3.org/1999/xhtml'>
   <th><td>Name</td><td>Origin</td><td>Description</td></th>
   <tr> 
     <!-- no default namespace inside table cells -->
     <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>

6.3 Attribútumok egyedisége

A jelen specifikációnak megfelelő XML dokumentumokban egyetlen tag sem tartalmazhat két olyan attribútomat, amelyekre a következő két feltétel valamelyike teljesül:

  1. a két attribútumnak azonos a neve, vagy

  2. olyan minősített neveik vannak, amelyeknek a lokális része azonos és a prefixeik pedig olyan névtér-névekhez vannak kapcsolva, amelyek azonosak.

Ez a megszorítás ekvivalens azzal a követelménnyel, hogy egyetlen elemnek sem lehet két olyan attribútuma, amelyenek megegyezik a kiterjesztett neve.

Például a következő kódrészletben a bad üreselem-tag egyik használata sem megengedett:

<!-- http://www.w3.org is bound to n1 and 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>

Azonban mindkét alábbi példa megengedett. A második azért, mert az alapértelmezett névterek deklarációját nem alkalmazzuk az attribútumok neveire:

<!-- http://www.w3.org is bound to n1 and is the 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>

7 A szabványnak megfelelő dokumentumok

Jelen specifikáció az XML 1.0 dokumentumokra vonatkozik. Ahhoz, hogy egy XML 1.0 dokumentum megfeleljen a jelen specifikációnak, az [XML10] XML 1.0 specifikáció értelmében jólformáltnak KELL lennie.

A jelen specifikációnak megfelelő XML dokumentumokban az elemek neveinek és az attribútumok neveinek illeszkedniük KELL a QName produkciós szabályra, és ki KELL elégíteniük a "Névtér-feltételeket". A dokumentum minden más olyan tokenének, amelynek az XML 1.0 által meghatározott jólformáltsághoz illeszkednie KELL a Name produkciós szabályra, illeszkednie KELL a jelen specifikáció által meghatározott NCName produkciós szabályra.

[Definíció: Azt mondjuk, hogy egy dokumentum névtér-jólformált, ha megfelel a jelen specifikáció által támasztott követelményeknek. ]

Ebből következik, hogy névtér-jólformált dokumentumokban:

A névtér-jólformált dokumentumok lehetnek egy névtér-érvényesek is.

[Definíció: A névtér-jólformált dokumentumot névtér-érvényesnek nevezzük, ha az XML 1.0 specifikáció értelmében érvényes, és minden olyan tokene, amelynek az XML 1.0 által meghatározott érvényességhez illeszkednie KELL a Name produkciós szabályra, illeszkedik a jelen specifikáció által meghatározott NCName produkciós szabályra. ]

Ebből következik, hogy a névtér-érvényes dokumentumokban:

8 A szabványnak megfelelő processzorok

Ahhoz, hogy egy processzor megfeleljen a jelen specifikációnak, a processzornak jelezniük KELL a névtér-jólformáltság minden megsértését, kivéve azt az esetet, hogy a processzoroknak NEM SZÜKSÉGES ellenőrizni azt, hogy a névtér-nevek érvényes URI-k legyenek.

[Definíció: A jelen specifikáció megfelelő, érvényességet ellenőrző XML processzorokat névtér-érvényesítő processzoroknak nevezzük, ha ezenfelül jelzik a névtér-érvényesség minden megsértését is. ]

A Normatív hivatkozások

kulcsszavak
RFC 2119: Key words for use in RFCs to Indicate Requirement Levels, S. Bradner, ed. IETF (Internet Engineering Task Force), 1997. március. Elérhető a http://www.rfc-editor.org/rfc/rfc2119.txt címen
RFC2141
RFC 2141: URN Syntax, R. Moats, ed. IETF (Internet Engineering Task Force), 1997. május. Elérhető a http://www.rfc-editor.org/rfc/rfc2141.txt címen.
RFC3986
RFC 3986: Uniform Resource Identifier (URI): Generic Syntax, T. Berners-Lee, R. Fielding, and L. Masinter, eds. IETF (Internet Engineering Task Force), 2005. január Elérhető a http://www.rfc-editor.org/rfc/rfc3986.txt címen
RFC3629
RFC 3629: UTF-8, a transformation format of ISO 10646, F. Yergeau, ed. IETF (Internet Engineering Task Force), 2003. november. Elérhető a http://www.rfc-editor.org/rfc/rfc3629.txt címen
XML
Extensible Markup Language (XML) 1.0 (Fourth Edition), Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, and François Yergeau eds. W3C (World Wide Web Consortium), 2006. augusztus 16. Elérhető a http://www.w3.org/TR/2006/REC-xml-20060816/ címen.

B Egyéb hivatkozások (nem normatív)

1.0 Errata
Namespaces in XML Errata. W3C (World Wide Web Consortium). Elérhető a http://www.w3.org/XML/xml-names-19990114-errata címen.
Relative URI deprecation
Results of W3C XML Plenary Ballot on relative URI References In namespace declarations 3-17 July 2000, Dave Hollander and C. M. Sperberg-McQueen, 6 September 2000. Elérhető a http://www.w3.org/2000/09/xppa címen.

C Az XML névterek belső felépítése (nem normatív)

Ez a függelék törlésre került.

D Változtatások az 1.0 verzióhoz képest (nem normatív)

Jelen verzió az 1.0 verzióhoz képest a [1.0 Errata] hibajegyzék 2006 június 1-én aktuális állapotában felsorolt hibák javítását tartalmazza.

Ezenfelül néhány szerkesztői változtatást tartalmaz a szöveg, beleértve a terminológiát érintő néhány változtatást és kiegészítést is, amelyek konzisztensebbé igyekeztek tenni a szöveget. Az "Az XML névterek belső felépítése" című nem normatív függelék törlésre került.

E Köszönetnyilvánítások (nem normatív)

A dokumentum elkészítéséhez igen sokan nyújtottak a szerzőknek segítséget, különösen a World Wide Web Consortium XML Working Groupja és Special Interest Groupja részéről, valamint a W3C Metadata Activity részéről. A szerzők különösen nagyra értékelik Charles Frankston (Microsoft) hozzájárását ehhez a munkához.