Et XML-navneområde er en samling med navn som identifiseres ved en URI-referanse, og som brukes i XML-dokumenter som elementtyper og attributtnavn.
xmlns-attributtet har følgende syntaks:
xmlns:prefiks=navneområde
der navneområde er en unik URI (f.eks. www.ibm.com), og der prefiks representerer navneområdet og peker på det.
I følgende kundeelementdefinisjon er det definert et regnskapsnavneområde for å gjøre det mulig å skille elementkodene fra dem som er oppført i kunderegistre opprettet av andre forretningsapplikasjoner:
<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ådedefinisjonen i den første linjen tildeler http://www.my.com/acct-REV10 til prefikset. Dette prefikser brukes på elementnavn som navn for å knytte dem til navneområdet. En annen bruk, f.eks. et oppfyllelsessystem, kan tildeles et annet navneområde til sine kundeelementer:
<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>
En applikasjon som behandler begge datastrukturene, kan nå behandle regnskap og oppfyllelsesdata forskjellig. Det er et standardnavneområde. Det brukes hvis ikke noe lokalt navn tildeles i navneområdedefinisjonen:
<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 eksempelet er alle koder i kunderegisteret kvalifisert til å være i navneområdet http://www.my.com/acct-REV10. Ikke noe eksplisitt prefiks trengs, for standard navneområde brukes. Merk at standard navneområde gjelder for alle attributtdefinisjoner.
I XML-skjemaet nedenfor er standard navneområde for skjemaet definert som standard navneområde http://www.w3.org/2001/XMLSchema for XML-skjemaet. Det er også et skjemaspesifikt 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 vi antar at forrige XML-skjema ble lagret som C:\temp\TestSchema.xsd, får vi et XML-fileksempel som validerer mot dette skjemaet:
<?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 identifiserer navneområdet som tilknytningen mellom elementet og navnet finnes innenfor. For deklarasjoner bestemmer denne tilknytningen navneområdet for elementene i XML-filer som er i samsvar med skjemaet. En XML-fil som importerer et skjema, må referere til målnavneområdet i attributtet schemaLocation. Manglende samsvar mellom målnavneområde og faktisk navneområde for et element rapporteres som skjemavalideringsfeil. I vårt eksempel er målnavneområdet http://www.ibm.com; det er definert i XML-skjemafilen og referert til to ganger i XML-filen. Manglende samsvar mellom disse tre forekomstene av navneområdet fører til valideringsfeil.
Eksemplene nedenfor viser hvordan målnavneområder og navneområdeprefikser virker i XML-skjemaer og deres tilsvarende XML-forekomstdokumenter.
XML-skjema:
<?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 gyldig XML-forekomstdokument opprettet ut fra dette skjemaet ser slik ut. Lokale elementer og attributter er ukvalifisert.
<?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 (f.eks. elementet "name") og attributter er ukvalifisert i en XML-fil, er bare rotelementet kvalifisert. Så i vårt eksempel tildeles navneområdet "x" til rotelementet "MyAddress" og knytter det til navneområdet "http://www.ibm.com", men prefikset "x" er ikke tildelt til det lokale 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>
Et gyldig XML-forekomstdokument opprettet ut fra dette skjemaet ser slik ut. Lokale elementer og attributter er kvalifisert. Det er fordi attributtet elementFormDefault er satt til kvalifisert i XML-skjemaet.
<?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 eksempelet tildeles navneområdeprefikset "x" til både rotelementet "MyAddress" og det lokale elementet "name" og knytter dem til navneområdet "http://www.ibm.com".
Dette XML-skjemaet legger til dette attributtet:
xmlns:xsd="http://www.w3.org/2001/XMLSchemaDette betyr at hver av setningene som er definert ved XML-skjemaspråket, må kvalifiseres med prefikset "xsd". For eksempel xsd:complexType og xsd:string
. Merk at du kan velge et hvilket som helst annet prefiks, for eksempel "xs" eller "foobar" i deklarasjonen og bruken.
Du kan oppgi dette prefikset på preferansesiden for XML-skjemaet. Du finner flere opplysninger i beslektede oppgaver.
Alle brukerdefinerte typer tilhører navneområdet http://www.ibm.com som definert ved attributtet targetNamespace, og prefikset er "x" som definert ved attributtet 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 gyldig XML-forekomstdokument opprettet ut fra dette skjemaet ser slik ut. Lokale elementer og attributter er ukvalifisert. Semantikken i kvalifikasjonen er 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-skjemaet har ikke noe eget målnavneområde. I dette tilfellet anbefales det på det sterkeste at alle XML-skjemasetninger eksplisitt kvalifiseres med et prefiks som for eksempel "xsd". Definisjonene og deklarasjonene fra dette skjemaet som for eksempel AddressType refereres uten navneområdekvalifikasjon, siden det ikke finnes noe navneområdeprefiks.
<?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 gyldig XML-forekomstdokument opprettet ut fra dette skjemaet ser slik ut. Alle elementer er ukvalifisert.
<?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-skjema der målnavneområdet er standard navneområde. Dessuten har navneområdet ikke noe navneområdeprefiks.
<?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 gyldig XML-forekomstdokument opprettet ut fra dette skjemaet ser slik ut:
<?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>