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.
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.
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å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.
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".
<?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",.
Med det här XML-schemat läggs följande attribut till:
xmlns:xsd="http://www.w3.org/2001/XMLSchemaDet 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>
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>
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>