XML-navneområder

Et XML-navneområde er en samling af navne, som er identificeret ved en URI-reference, og som bruges i XML-dokumenter som elementtyper og attributnavne.

XML-navneområder defineres vha. en W3C-anbefaling fra 14. januar 1999, som hedderNamespaces in XML. XML-kodenavne skal være globale entydige og af performance-årsager helst også korte. For at løse denne konflikt definerer W3C-navneområdeanbefalingen attributten xmlns, som kan ændre et hvilket som helst XML-element. Hvis det findes i et element, identificerer det navneområdet for dette element.

xmlns-attributten har følgende syntaks:

xmlns:præfiks=navneområde

hvor navneområde er en entydig URI (f.eks. www.ibm.com), og hvorpræfiks repræsenterer navneområdet og angiver en pointer til det.

I følgende kundeelementdefinition defineres der et regnskabsnavneområde med henblik på at kunne skelne mellem elementkoder og de koder, der er indeholde i kundejournaler oprettet af andre forretningsapplikationer:

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

navneområdedefinition i første linje tildeler præfikset navneområdet http://www.my.com/acct-REV10. Præfikset bruges til elementnavne for at tilknytte dem til navneområdet. Et andet program kan f.eks. tildele sine kundelementer et andet navneområde:

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

Et program, som behandler begge datastrukturer, vil nu være i stand til at behandle data fra de to programmer forskelligt. Der er et standardnavneområde. Det angives, hvis der ikke er tildelt et lokalt navn i navneområdedefinitionen:

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

I dette eksempel er alle koder i kundejournalen kvalificeret til at være placeret i navneområdet http://www.my.com/acct-REV10. Der kræves intet explicit præfiks, fordi standardnavneområdet anvendes. Bemærk, at standardnavneområdet gælder for alle attributdefinitioner.

XML-skemaer og navneområder

I følgende XML-skema defineres standardnavneområdet for skemaet som XML-standardskemanavneområdethttp://www.w3.org/2001/XMLSchema, og der er også et skemaspecifikt navneområ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> 
 <!--element definitions skipped -->  
</schema>  

Hvis det foregående XML-skema gemmes somC:\temp\TestSchema.xsd, er følgende et eksempel på en XML-fil, som valideres i forhold til skemaet:

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

Målnavneområde

Målnavneområdet identificerer det navneområde, hvor tilknytningen mellem elementet og dets navn findes. I tilfælde af erklæringer afgør denne tilknytning navneområdet for de elementer i XML-filer, som passer til skemaet. En XML-fil, som importerer et skema, skal henvise til sit målnavneområdet i attributten schemaLocation. Eventuelle uoverensstemmelser mellem målet og de faktiske navneområde for et element rapporteres som skemavalideringsfejl. I vores eksempel er målnavneområdet http://www.ibm.com. Det defineres i XML-skemafilen og henvises til to gange i XML-filen. Eventuelle uoverensstemmelser mellem disse tre forekomster af navneområdet medfører valideringsfejl.

Følgende eksempler viser, hvordan målnavneområder og præfiks for navneområder fungerer i XML-skemaer og deres tilhørende XML-forekomstdokumenter.

Eksempel 1 - Et skema med både standard- og målnavneområde og ikke-kvalificerede lokale elementer

XML-skema:

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

Et gyldigt XML-forekomstdokument oprettet fra dette skema ser sådan ud. Lokale elementer og attributter er unqualified.

<?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 lokale elementer (som f.eks. elementet"name") og attributter ikke er kvalificeret i en XML-fil, er kun rodelementet kvalificeret. Det betyder i dette eksempel altså, at navneområdepræfikset "x" tildeles rodelementet"MyAddress" og dermed tilknytter det til navneområdet"http://www.ibm.com", men præfikset "x" tildeles ikke det lokale element"name".

Eksempel 2 - Et skema med både standard- og målnavneområde og kvalificerede lokale elementer

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

Et gyldigt XML-forekomstdokument oprettet fra dette skema ser sådan ud. Lokale elementer og attributter er qualified Det skyldes, at attributten elementFormDefault er angivet som kvalificeret i XML-skemaet.

<?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 dette eksempel tildeles navneområdet "x" til både rodelementet "MyAddress" og det lokale element "name" og tilknytter dem derved til navneområdet "http://www.ibm.com",.

Eksempel 3 - Skema med målnavneområde og eksplicit definition af xmlns:xsd

Dette XML-skema tilføjer følgende attribut:

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

Det betyder, at hver af de konstruktioner, som defineres vha. XML-skemasproget, skal kvalificeres med præfikset"xsd". Eksempel: xsd:complexType og xsd:string

. Bemærk, at du kan vælge andre præfiks, f.eks."xs" eller "foobar" i erklæring og anvendelse.

Du kan angive dette præfiks på siden med indstillinger for XML-skemaet. Der er flere oplysninger under de relaterede opgaver.

Alle brugerdefinerede typer hører til navneområdet http://www.ibm.com som defineret vha. attributten targetNamespace, og præfiks er"x" som defineret vha. attributten 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>

Et gyldigt XML-forekomstdokument oprettet fra dette skema ser sådan ud. Lokale elementer og attributter er unqualified. Semantikken for kvalifikationer den samme som i Eksempel 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>

Eksempel 4 - Skema med ikke-erklæret målnavneområde, som eksplicit definerer xmlns:xsd

Dette XML-skema har ikke selv noget målnavneområde. I dette tilfælde anbefales det stærkt, at alle XML-skemakonstruktioner eksplicit kvalificeres med et præfiks som f.eks. "xsd". Der henvises til definitionerne og erklæringerne fra dette skema, f.eks.AddressType, uden navneområdekvalifikation, eftersom der ikke er noget præfiks for navneområde.

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

Et gyldigt XML-forekomstdokument oprettet fra dette skema ser sådan ud. Alle elementer er unqualified.

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

Eksempel 5 - Et skema, hvor målnavneområdet er standardnavneområdet

Dette er et XML-skema, hvor målnavneområdet er standardnavneområdet. Navneområdet har heller ikke noget navneområdepræfiks.

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

Et gyldigt XML-forekomstdokument oprettet fra dette skema ser sådan ud:

<?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>  
Beslægtede opgaver
Redigér XML-skemafilindstillinger