XML névterek

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 XML névtereket az 1999. január 14-én kelt XML névterek című W3C ajánlás határozza meg. Az XML címkeneveknek teljesítménybeli okok miatt globálisan egyedieknek, ugyanakkor rövideknek kell lenniük. Az ütközés feloldása érdekében a W3C névtér ajánlás meghatároz egy xmlns attribútumot, ami bármilyen XML elemhez kapcsolódhat. Ha ez jelen van egy elemben, akkor ez azonosítja a névteret az elemhez.

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.

XML sémák és névterek

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> 

Cél névtér

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.

1. minta - Egy séma alapértelmezett és cél névtérrel és minősítés nélküli helyi nevekkel

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.

2. minta - Egy séma alapértelmezett és cél névtérrel és minősített helyi nevekkel

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

3. minta - Séma cél névtérrel és kifejezetten meghatározott xmlns:xsd beállítással

Ez az XML séma ezt az attribútumot adja hozzá:

xmlns:xsd="http://www.w3.org/2001/XMLSchema

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

4. minta - Séma deklarálatlan cél névtérrel, ami kifejezetten meghatározza az xmlns:xsd beállítást

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>

5. minta - Olyan séma, ahol a cél névtér az alapértelmezett névtér

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>  
Kapcsolódó feladatok
XML sémafájl beállításainak szerkesztése