XML-namnområden

Ett XML-namnområde är en samling namn som identifieras av en URI-referens och som används i XML-dokument som elementtyper och attributnamn.

XML-namnområden definieras av en W3C-rekommendation daterad den 14 januari 1999 och med namnet Namespaces in XML. XML-märkordsnamn bör vara globalt unika men de bör även vara korta av prestandaskäl. I ett försök att lösa den konflikten definierar W3C-namnområdesrekommendationen attributet xmlns som kan rätta till alla XML-element. Om det attributet finns i ett element identifieras namnområdet för det elementet.

Attributet xmlns har följande syntax:

xmlns:prefix=namnområde

där namnområde är en unik URI (t.ex. www.ibm.com) och där prefix representerar namnområdet och innehåller en pekare till det.

I följande kundelementdefinition definieras ett bokföringsnamnområde så att det går att skilja mellan elementmärkorden och från de märkord som förekommer i kundposter som har skapats i andra verksamhetstillämpningar:

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

namnområdesdefinitionen på första raden tilldelar namnområdethttp://www.my.com/acct-REV10 till ett prefix. Det här prefixet används tillsammans med elementnamn som name så att de bifogas till namnområdet. En annan tillämpning, t.ex ett fulfillment-system, kan ange ett annat namnområde för sina kundelement:

<ful:customer xmlns:ful="http://www.your.com/ful">
	<ful:name>Corporation</ful:name>
	<ful:order ful:ref="A98756"/>
	<ful:status>levererad</ful:status>
 </ful:kund>

En tillämpning som behandlar båda datastrukturerna kan nu behandla data i bokförings- och fullfilment-system på olika sätt. Det finns ett standardnamnområde. Det används om inget lokalt namn anges i namnområdesdefinitionen:

<acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 ">
<name>Företag</name>
<order acct:ref="5566"/>
<status>faktura</status>
</kund>

I det här exemplet är alla märkord i kundposten definierade att finnas i namnområdet http://www.my.com/acct-REV10. Det behövs inget uttalat prefix eftersom standardnamnområdet används. Lägg märke till att standardnamnområdet kan användas för alla attributdefinitioner.

XML-scheman och namnområden

I följande XML-schema definieras standardnamnområdet för schemat som standardnamnomårdet för XML-schemat http://www.w3.org/2001/XMLSchema; det finns också ett schemaspecifikt namnområde 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> 
 <!--elementdefinitioner överhoppade -->
</schema>  

Om vi förutsätter att föregående XML-schema sparas som C:\temp\TestSchema.xsd är en exempel-XML-fil som valideras mot det schemat:

<?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 fil:///C:/temp/TestSchema.xsd">
 xsi:schemaLocation="http://www.ibm.com fil:///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> 

Målnamnområde

Målnamnområdet används till att identifiera det namnområde som associationen mellan elementet och elementets namn finns. När det gäller deklarationer bestämmer den associationen namnområdet för elementen i de XML-filer som stämmer överens med schemat. En XML-fil som ett schema importeras till måste har en referens till sitt målnamnområde i attributet schemaLocation. Alla avvikelser mellan ett elements mål och verkliga målområde rapporteras som schemavalideringsfel. I vårt exempel är målnamnområdet http://www.ibm.com. Det är definierat i XML-schemafilen och har två referenser i XML-filen. Alla avvikelser mellan de tre förekomsterna i namnområdet leder till valideringsfel.

I följande exempel kan du se hur målnamnområden och namnområdesprefix fungerar i XML-scheman och i de motsvarande XML-förekomstdokumenten.

Exempel 1 - Ett schema med både standard- och målnamnområde och platser utan kvalificerare

XML-schemat:

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

Ett giltigt XML-förekomstdokument som har skapats från det här schemat ser ut på följande sätt. Lokala element och attribut har inga kvalificerare.

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

När lokala element (t.ex. "name"-elementet) och attribut inte har några kvalificerare i en XML-fil har endast rotelementet en kvalificerare. Så i det här exemplet är "x"-namnområdesprefixet tilldelat till rotelementet "MyAddress", så att det associeras med namnområdet "http://www.ibm.com", men "x"-prefixet har inte tilldelats till det lokala elementet "name".

Exempel 2 - Ett schema med både standard- och målnamnområde och platser med kvalificerare

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

Ett giltigt XML-förekomstdokument som har skapats från det här schemat ser ut på följande sätt. Lokala element och attribut har kvalificerare Det beror på att attributet elementFormDefault har angetts till kvalificerat i XML-schemat.

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

I det här exemplet är namnområdesprefixet "x" tilldelat till både rotelementet "MyAddress" och det lokala elementet "name" och associerar dem därmed med namnområdet "http://www.ibm.com",.

Exempel 3 - Schema med målnamnområdet som explicit definierar xmlns:xsd

Med det här XML-schemat läggs följande attribut till:

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

Det betyder att var och en av de konstruktioner som är definierade med XML-schemaspråket måste kvalificeras med prefixet "xsd". Exempel: xsd:complexType och xsd:string

. Lägg märke till att du kan välja vilket annat prefix som helst, t.ex. "xs" eller "foobar" i din deklaration och användning.

Du kan ange det prefixet på inställningssidan i XML-schemat. Mer information finns i närliggande ämnen.

Alla användardefinierade typer tillhör namnområdet http://www.ibm.com på det sätt som har definierats i attributet targetNamespace och prefixet är "x" på det sätt som har definierats med attributet 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>

Ett giltigt XML-förekomstdokument som har skapats från det här schemat ser ut på följande sätt. Lokala element och attribut har inga kvalificerare. Kvalifikationssemantiken är densamma som i exempel 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>

Exempel 4 - Schema med ett ej deklarerat målnamnområde som explicit definierar xmlns:xsd

Det här XML-schemat har inget eget målnamnområde. I det här fallet är det viktigt att alla XML-schemakonstruktioner är explicit kvalificerade med ett prefix, t.ex. "xsd". Definitionerna och deklarationerna från det här schemat, t.ex. AddressType har referenser utan namnområdeskvalifikation eftersom det inte finns något namnområdesprefix.

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

Ett giltigt XML-förekomstdokument som har skapats från schemat ser ut på följande sätt. Inga element har inga kvalificerare.

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

Exempel 5 - Ett schema där målnamnområdet är standardnamnområdet

Det här är ett XML-schema där målnamnområdet är standardnamnområdet. Därtill har namnområdet inget namnområdesprefix.

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

Ett giltigt XML-förekomstdokument som har skapats från schemat ser ut på följande sätt:

<?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>  
Närliggande uppgifter
Redigera filegenskaper för XML-scheman