XML-nimitilat

XML-nimitila on kokoelma URI-viitteen mukaan yksilöidyistä nimistä, jotka ovat käytössä XML-asiakirjoissa elementtilajeina ja määritteiden niminä.

XML-nimitilat on määritetty W3C:n 14.1.1999 antaman suosituksen Namespaces in XML mukaan. XML-tunnisteiden nimien tulisi olla yleisesti yksilöllisiä mutta lyhyitä tehokkuuden takia. Näiden ristiriitaisten vaatimusten takia W3C:n nimitilasuosituksissa on käytetty xmlns-määritettä, jonka voi liittää mihin tahansa XML-elementtiin. Jos elementissä on tämä määrite käytössä, se määrittää elementin nimitilan.

Xmlns-määritteen syntaksi on seuraava:

xmlns:etuliite=nimitila

Nimitila on yksilöllinen URI-osoite (esimerkiksi www.ibm.com) ja etuliite on nimitilan vastinmääritys ja osoitin.

Seuraavassa asiakaselementtimäärityksessä on kirjanpito-osaston nimitilan (acct) määritys, jotta elementin tunnisteet erottuvat muiden yrityssovellusten luomista elementtitunnisteista:

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

Ensimmäisen rivin nimitilamäärityksessä etuliitteen arvoksi on määritetty nimitila http://www.my.com/acct-REV10. Tätä etuliitettä on käytetty elementtien nimissä, kuten asiakkaan nimessä, elementtien liittämiseen nimitilaan. Toinen sovellus, kuten toimitusjärjestelmä (ful), voi liittää asiakaselementteihinsä toisen nimitilan:

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

Näitä molempia tietorakenteita käsittelevä sovellus pystyy nyt käsittelemään kirjanpito- ja toimitusosaston tietoja eri tavalla. Järjestelmässä on oletusnimitila. Se otetaan käyttöön, jos nimitilamäärityksessä ei ole paikallista nimeä:

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

Tässä esimerkissä kaikki asiakastietueen tunnisteet on tarkennettu sijaitseviksi nimitilassa http://www.my.com/acct-REV10. Erillisiä etuliitteitä ei tarvita, koska käytössä on oletusnimitila. Huomaa, että oletusnimitila voi olla käytössä minkä tahansa määritteen määrityksessä.

XML-skeemat ja nimitilat

Seuraavassa XML-skeemassa skeeman oletusnimitilaksi on määritetty XML-skeeman vakionimitila http://www.w3.org/2001/XMLSchema ja käytössä on lisäksi skeemakohtainen nimitila 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> 
 <!--elementtimääritykset ohitettu-->  
</schema>  

Jos oletetaan, että tämä XML-skeema tallennetaan nimellä C:\temp\TestSchema.xsd, sen mukaan tarkistettava XML-mallitiedosto olisi seuraava:

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

Kohdenimitila

Kohdenimitila määrittää nimitilan, johon elementin ja sen nimen välinen liitos on määritetty. Esittelyissä tämä liitos määrittää skeeman mukaisten XML-tiedostojen sisältämien elementtien nimitilan. Skeeman tuontiin käytettävässä XML-tiedostossa on oltava viite skeeman kohdenimitilaan schemaLocation-määritteen arvona. Mikäli kohdenimitila ja varsinainen nimitila eivät ole sama, siitä aiheutuu skeeman tarkistusvirhe. Esimerkissä kohdenimitila on http://www.ibm.com, joka on määritetty XML-skeematiedostoon ja johon on kaksi viitettä XML-tiedostossa. Jos näiden kolmen esiintymän välillä on ristiriitoja, siitä aiheutuu tarkistusvirhe.

Seuraavissa esimerkeissä on kuvattu, miten kohdenimitilat ja nimitilojen etuliitteet toimivat XML-skeemoissa ja niitä vastaavissa XML-ilmentymäasiakirjoissa.

Esimerkki 1: Skeema, johon on määritetty sekä oletusnimitila että kohdenimitila ja tarkentamattomia paikallisia määrityksiä

XML-skeema:

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

Tämän skeeman perusteella luotu kelvollinen XML-ilmentymäasiakirja on seuraavanlainen. Paikalliset elementit ja määritteet ovat tarkentamattomia.

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

Kun paikalliset elementit (kuten name) ja määritteet ovat tarkentamattomia XML-tiedostossa, vain juurielementti on tarkennettu. Tämän takia esimerkissä on määritetty juurielementille MyAddress nimitilan etuliite x, joka on liitetty nimitilaan http://www.ibm.com, mutta x-etuliitettä ei ole liitetty paikalliseen elementtiin name.

Esimerkki 2: Skeema, johon on määritetty sekä oletusnimitila että kohdenimitila ja tarkennettuja paikallisia määrityksiä

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

Tämän skeeman perusteella luotu kelvollinen XML-ilmentymäasiakirja on seuraavanlainen. Paikalliset elementit ja määritteet ovat tarkennettuja, koska elementFormDefault-määrite on määritetty XML-skeemaan tarkennetuksi.

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

Tässä esimerkissä nimitilan etuliite x on liitetty sekä juurielementtiin MyAddress että paikalliseen elementtiin name, joten ne on liitetty nimitilaan http://www.ibm.com.

Esimerkki 3: Skeema, johon on määritetty kohdenimitila ja erillinen xmlns:xsd-määritys

Tämä XML-skeema lisää seuraavan määritteen:

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

Sen seurauksena kaikkien XML-skeemakielen avulla määritettyjen rakenteiden tarkenteena on oltava etuliite xsd. Esimerkiksi xsd:complexType ja xsd:string.

. Huomaa, että voit käyttää esittelyssä myös muita etuliitteitä, joita ovat xs ja foobar.

Voit määrittää tämän etuliitteen XML-skeeman oletusasetussivulla. Lisätietoja on aiheeseen liittyvissä tehtävissä.

Kaikki käyttäjän määrittämät lajit kuuluvat nimitilaan http://www.ibm.com määritteen targetNamespace mukaisesti ja niiden etuliite on x määritteen xmlns:x mukaisesti.

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

Tämän skeeman perusteella luotu kelvollinen XML-ilmentymäasiakirja on seuraavanlainen. Paikalliset elementit ja määritteet ovat tarkentamattomia. Tarkennemääritykset ovat rakenteellisesti samanlaisia kuin esimerkissä 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>

Esimerkki 4: Skeema, johon on määritetty esittelemätön kohdenimitila, joka määrittää erikseen xmlns:xsd-elementin

Tässä XML-skeemassa ei ole varsinaista kohdenimitilan määritystä. Tällaisessa tapauksessa on suositeltavaa lisätä kaikkiin XML-skeemarakenteisiin tarkenteeksi erillinen etuliite, kuten xsd. Tämän skeeman määritysten ja esittelyiden (esimerkiksi AddressType) viitteissä ei ole nimitilatarkennetta, koska nimitilan etuliitettä ei ole.

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

Skeeman perusteella luotu kelvollinen XML-ilmentymäasiakirja on seuraavanlainen. Kaikki elementit ovat tarkentamattomia.

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

Esimerkki 5: Skeema, jossa kohdenimitila on oletusnimitila

Tässä XML-skeemassa kohdenimitila on oletusnimitila. Lisäksi nimitilalle ei ole määritetty etuliitettä.

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

Skeeman perusteella luotu kelvollinen XML-ilmentymäasiakirja on seuraavanlainen:

<?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>  
Aiheeseen liittyviä tehtäviä
XML-skeematiedoston oletusasetusten muokkaus