Obor názvů XML

Obor názvů XML je kolekce názvů, označená odkazem na URI, které se používají v dokumentech XML jako typy prvků a názvy atributů.

Obory názvů XML jsou definovány dle doporučení W3C ze 14.ledna 1999 pod názvem Obory názvů v XML. Názvy značek XML by měly být globálně jedinečné a krátké z důvodu udržení výkonnosti. Pro odstranění tohoto konfliktu doporučení oboru názvů W3C definuje atribut xmlns, který umožňuje opravu jakéhokoliv prvku XML. Je přítomen v prvku a označuje obor názvů pro tento prvek.

Atribut xmlns má následující syntaxi:

xmlns:prefix=namespace

kde obor_názvů je jedinečné URI (např. www.ibm.com) a prefix představuje obor názvů a poskytuje pro tento obor názvů ukazatel.

V následující definici prvku zákazníka je definován obor názvů účtování, který umožňuje odlišení značek prvků od značek, které se zobrazují v záznamech zákazníka vytvořených jinými podnikovými aplikacemi:

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

Definice oboru názvů na prvním řádku přiřazuje oboru názvů http://www.my.com/acct-REV10 předponu. Tato předpona se používá v názvech prvků, jako například názvu pro jejich připojení k oboru názvů. Druhá aplikace, například systém plnění, může svým zákaznickým prvkům přiřazovat jiný obor názvů:

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

Aplikace, která zpracovává obě datové struktury, nyní může zpracovávat data účtování a zpracování odlišným způsobem. Existuje výchozí obor názvů. Tento obor názvů je nastaven, pokud není přiřazen žádný lokální název v definici oboru názvů:

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

V tomto příkladu jsou všechny značky v záznamu zákazníka stanoveny tak, aby se nacházely v oboru názvů http://www.my.com/acct-REV10. Není nutná žádná explicitní předpona, protože se používá výchozí obor názvů. Pamatujte, že výchozí obor názvů se používá u všech definic atributů.

Schémata XML a obory názvů

V následujícím schématu XML je definován výchozí obor názvů pro schéma jako standardní obor názvů schématu XML http://www.w3.org/2001/XMLSchema; existuje zde také obor názvů, který odpovídá schématu 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> 
 <!--definice prvků byly vynechány -->
</schema> 

Předpokládá se, že předchozí schéma XML je uloženo jako C:\temp\TestSchema.xsd, ukázkový soubor XML, který se ověřuje dle tohoto schématu je:

<?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ílový obor názvů

Cílový obor názvů slouží k označení oboru názvů, ve kterém existuje vzájemné přiřazení mezi prvkem a jeho názvem. V případě deklarací toto přiřazení určuje obor názvů těch prvků v souborech XML, které odpovídají tomuto schématu. Soubor XML, který importuje schéma, musí uvádět jeho cílový obor názvů v atributu schemaLocation. Jakékoliv neshody mezi cílovým a aktuálním oborem názvů prvku jsou hlášeny jako chyby ověření schématu. V našem příkladu je cílový obor názvů http://www.ibm.com definován v souboru schématu XML a odkazuje se na něj dvakrát v souboru XML. Jakákoliv neshoda mezi těmito třemi výskyty oboru názvů způsobí chybu ověření.

Následující příklady ukazují, jak fungují cílové obory názvů a předpony oborů názvů ve schématech XML a jejich příslušných dokumentech instancí XML.

Ukázka 1 - Schéma s výchozím a cílovým oborem názvů a nestanovenými lokálními hodnotami

Schéma XML:

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

Takto vypadá platný dokument instance XML vytvořený z tohoto schématu. Lokální prvky a atributy nejsou stanoveny.

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

Pokud nejsou lokální prvky (např. prvek "name") a atributy stanoveny v souboru XML, je stanoven pouze kořenový prvek. Proto je v tomto příkladu předpona "x" oboru názvů přiřazena ke kořenovému prvku "MyAddress" a přiřazuje jej k oboru názvů "http://www.ibm.com", ale předpona "x" není přiřazena k lokálnímu prvku "name".

Ukázka 2 - Schéma s výchozím a cílovým oborem názvů a stanovenými lokálními hodnotami

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

Takto vypadá platný dokument instance XML vytvořený z tohoto schématu. Lokální prvky a atributy jsou stanoveny Důvodem je to, že atribut elementFormDefault je stanoven ve schématu XML.

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

V tomto příkladu je předpona "x" oboru názvů přiřazena ke kořenovému prvku "MyAddress" a k lokálnímu prvku "name" a přidružuje je k oboru názvů "http://www.ibm.com",.

Ukázka 3 - Schéma má cílový obor názvů a explicitně definuje xmlns:xsd

Toto schéma XML přidává tento atribut:

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

To znamená, že každá konstrukce definovaná jazykem schématu XML bude muset být stanovena s použitím předpony "xsd". Například xsd:complexType a xsd:string

. Pamatujte, že můžete ve vaší deklaraci a použití zvolit jakoukoliv jinou předponu, jako například "xs" nebo "foobar".

Tuto předponu lze určit na stránce předvoleb schématu XML. Další informace viz související úlohy.

Všechny typy definované uživatelem patří do oboru názvů http://www.ibm.com, jak je definováno v atributu targetNamespace, a předpona je "x", jak je definováno v atributu xmlns:x.

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

Takto vypadá platný dokument instance XML vytvořený z tohoto schématu. Lokální prvky a atributy nejsou stanoveny. Sémantika stanovení je stejná jako v ukázce 1.

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

Ukázka 4 - Schéma s nedeklarovaným cílovým oborem názvů, který explicitně definuje xmlns:xsd

Toto schéma XML samo pro sebe nemá žádný cílový obor názvů. V tomto případě se velmi doporučuje, aby byly všechny konstrukce schémat XML explicitně stanovovány s použitím předpony, např. "xsd". Na definice a deklarace z tohoto schématu, jako například AddressType, se odkazuje bez stanovení oboru názvů, protože nemají žádnou předponu oboru názvů.

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

Takto vypadá platný dokument instance XML vytvořený z tohoto schématu. Žádné prvky nejsou stanoveny.

<?xml version="1.0"?>
<MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd">
<name>name</name>
</MyAddress>

Ukázka 5 - Schéma, kde cílovým oborem názvů je výchozí obor názvů

Jedná se o schéma XML, ve kterém je cílový obor názvů výchozím oborem názvů. A stejně tak obor názvů nemá žádnou předponu oboru názvů.

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

Takto vypadá platný dokument instance XML vytvořený z tohoto schématu:

  <?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>  
Související úlohy
Úprava předvoleb souboru schématu XML