Az XML névtér URI hivatkozás alapján azonosított nevek gyűjteménye, amelyek XML dokumentumokban használatosak elemtípusokként és attribútumnevekként.
Az xmlns attribútum az alábbi szintaxissal rendelkezik:
xmlns:előtag=névtér
ahol a névtér egy egyedi URI (például www.ibm.com), az előtag pedig a névteret képviseli és egy mutatót biztosít hozzá.
Az alábbi vásárlói elemmeghatározásban egy számlázási névtér van meghatározva a vásárlói rekordokban megjelenő elemcímkék megkülönböztetése érdekében az egyéb üzleti alkalmazások által létrehozottaktól:
<acct:customer xmlns:acct="http://www.my.com/acct-REV10"> <acct:name>Corporation</acct:name> <acct:order acct:ref="5566"/> <acct:status>invoice</acct:status> </acct:customer>
A névtér meghatározás az első sorban hozzárendeli a http://www.my.com/acct-REV10 névteret az előtaghoz. Ez az előtag használatos az elemneveken - mint például a name - a névtérbe csatolásukhoz. Egy második alkalmazás, például egy elégedettségi rendszer más névtartományt rendelhet a vásárlói elemekhez:
<ful:customer xmlns:ful="http://www.your.com/ful"> <ful:name>Corporation</ful:name> <ful:order ful:ref="A98756"/> <ful:status>shipped</ful:status> </ful:customer>
A mindkét adatszerkezetet feldolgozó alkalmazások most már képesek a számlázási és az elégedettségi adatok különböző kezelésére. Létezik egy alapértelmezett névtér. Ezt akkor állítja be a rendszer, ha nincs helyi név hozzárendelve a névtér meghatározásban:
<acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 "> <name>Corporation</name> <order acct:ref="5566"/> <status>invoice</status> </customer>
Ebben a példában a vásárlói rekordban található összes címke úgy van minősítve, hogy a http://www.my.com/acct-REV10 névtérben legyen. Nincs szükség explicit előtagra, mivel az alapértelmezett névtér használatos. Fontos, hogy az alapértelmezett névtér vonatkozik bármely attribútum meghatározásra.
Az alábbi XML sémában a séma alapértelmezett http://www.w3.org/2001/XMLSchema névtere van meghatározva az általános XML séma névtérnek; és van egy sémára jellemző névtér is, a http://www.ibm.com.
<?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:TestSchema="http://www.ibm.com"> <simpleType name="ZipCodeType"> <restriction base="integer"> <minInclusive value="10000"/> <maxInclusive value="99999"/> </restriction> </simpleType> <!-- kihagyott elemdefiníciók --> </schema>
Feltételezve, hogy az előző XML séma C:\temp\TestSchema.xsd néven van elmentve, a séma szerint érvényesítő minta XML fájl a következő:
<?xml version="1.0"?>
<x:addressList xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
<x:address>
<x:street>x:Vangerowstrasse</x:street>
<x:zipCode>69115</x:zipCode>
<x:city>x:Heidelberg</x:city>
</x:address>
<x:address>
<x:street>x:Bernal Road</x:street>
<x:zipCode>90375</x:zipCode>
<x:city>x:San Jose</x:city>
</x:address>
</x:addressList>
A cél névtér a névtér azonosítására szolgál, amelyen belül az elem és a neve közötti társítás létezik. A deklarációk esetében ez a társítás határozza meg a sémának megfelelő XML fájlokban található elemek névterét. A sémát importáló XML fájlnak hivatkoznia kell a cél névterére a schemaLocation attribútumában. Az elem cél és aktuális névtere közötti bármilyen eltérést séma érvényesítési hibaként jelent a rendszer. Ebben a példában a cél névtér a http://www.ibm.com; ez az XML sémafájlban van meghatározva, és két hivatkozás található rá az XML fájlban. A névtér ezen három előfordulása közötti bármilyen eltérés érvényesítési hibákhoz vezet.
Az alábbi példák bemutatják a cél névterek és névtér előtagok működését az XML sémákban és a megfelelő XML példánydokumentumokban.
Az XML séma:
<?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com"> <complexType name="AddressType"> <sequence> <element name="name" type="string"></element> </sequence> </complexType> <element name="MyAddress" type="x:AddressType"></element> </schema>
A sémából létrehozott érvényes XML példánydokumentum így néz ki. A helyi elemek és attribútumok minősítetlenek.
<?xml version="1.0"?> <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd "> <name>Peter Smith</name> </x:MyAddress>
Amikor a helyi elemek (például a "name" elem) és attribútumok minősítetlenek egy XML fájlban, akkor csak a gyökérelem minősített. Ezért ebben a példában az "x" névtér előtagot rendeli a rendszer a "MyAddress" gyökérelemhez, társítva azt a "http://www.ibm.com", névtérhez, de az "x" nem kerül hozzárendelésre a "name" helyi elemhez.
<?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com" elementFormDefault="qualified"> <complexType name="AddressType"> <sequence> <element name="name" type="string"></element> </sequence> </complexType> <element name="MyAddress" type="x:AddressType"></element> </schema>
A sémából létrehozott érvényes XML példánydokumentum így néz ki. A helyi elemek és attribútumok minősítettek. Ez azért van így, mert az elementFormDefault attribútum beállítása minősített az XML sémában.
<?xml version="1.0"?> <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd "> <x:name>Peter Smith</x:name> </x:MyAddress>
Ebben a példában az "x" névtér előtag van hozzárendelve a "MyAddress" gyökérelemhez és a helyi "name" elemhez is, társítva őket a "http://www.ibm.com", névtérhez.
Ez az XML séma ezt az attribútumot adja hozzá:
xmlns:xsd="http://www.w3.org/2001/XMLSchemaEz azt jelenti, hogy az XML sémanyelv által meghatározott minden egyes szerkezetet az "xsd" előtaggal kell minősíteni. Például: xsd:complexType és xsd:string
. Fontos, hogy a deklarációban és a használatban bármilyen más előtagot is választhat, például "xs" vagy "foobar".
Ezt az előtagot az XML séma beállítások oldalán adhatja meg. További információkért nézze meg a kapcsolódó feladatokat.
At összes felhasználó által meghatározott típus a targetNamespace attribútum által meghatározott http://www.ibm.com meghatározásbe tartozik, és az előtag az "x", az xmlns:x attribútumban meghatározottak szerint.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com"> <xsd:complexType name="AddressType"> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="MyAddress" type="x:AddressType"></xsd:element> </xsd:schema>
A sémából létrehozott érvényes XML példánydokumentum így néz ki. A helyi elemek és attribútumok minősítetlenek.A minősítés szemantikája ugyanaz, mint az 1. mintában.
<?xml version="1.0"?> <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.ibm.com x.xsd "> <name>Peter Smith</name> </x:MyAddress>
Ez az XML séma nem rendelkezik cél névtérrel saját maga számára. Ebben az esetben erősen ajánlott az összes XML séma szerkezet kifejezett minősítése egy előtaggal, mint például "xsd". A meghatározásokra és a deklarációkra ebből a sémából - például az AddressType - a névtér minősítés nélkül hivatkozik a rendszer, mivel nincs névtér előtag.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="AddressType"> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> <xsd:element name="name" type="xsd:string"></xsd:element> <xsd:element name="name" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="MyAddress" type="AddressType"></xsd:element> </xsd:schema>
A sémából létrehozott érvényes XML példánydokumentum így néz ki. Az összes elem minősítetlen.
<?xml version="1.0"?> <MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd"> <name>name</name> </MyAddress>
Ez egy olyan séma, ahol a cél névtér az alapértelmezett névtér. Továbbá a névtér nem rendelkezik névtér előtaggal.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns="http://www.ibm.com"> <xsd:complexType name="AddressType"> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="MyAddress" type="AddressType"></xsd:element> </xsd:schema>
A sémából létrehozott érvényes XML példánydokumentum így néz ki:
<?xml version="1.0" encoding="UTF-8"?> <MyAddress xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com NewXMLSchema.xsd"> <name>name</name> </MyAddress>