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.
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.
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å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.
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".
<?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",.
Dette XML-skema tilføjer følgende attribut:
xmlns:xsd="http://www.w3.org/2001/XMLSchemaDet 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>
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>
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>