Xώροι ονομάτων XML

Ένας χώρος ονομάτων XML είναι μια συλλογή από ονόματα, που προσδιορίζονται από μια παραπομπή URI. Τα ονόματα αυτά χρησιμοποιούνται σε έγγραφα XML ως είδη στοιχείων και ονόματα γνωρισμάτων.

Οι χώροι ονομάτων XML ορίζονται από μια σύσταση a W3C, με ημερομηνία 14 Ιανουαρίου 1999, η οποία ονομάζεται Namespaces in XML. Τα ονόματα προσδιοριστικών XML θα πρέπει να είναι καθολικώς μοναδικά, αλλά και να έχουν μικρό μήκος για λόγους απόδοσης. Για την ανάλυση αυτού της διένεξης, η σύσταση W3C για τους χώρους ονομάτων ορίζει ένα γνώρισμα xmlns το οποίο μπορεί να διορθώσει οποιοδήποτε στοιχείο XML. Αν υπάρχει σε ένα στοιχείο, προσδιορίζει το χώρο ονομάτων για το στοιχείο αυτό.

Το γνώρισμα xmlns έχει την εξής σύνταξη:

xmlns:πρόθημα=namespace

όπου namespace είναι ένα μοναδικό URI (όπως www.ibm.com) και πρόθημα αντιπροσωπεύει το χώρο ονομάτων και παρέχει ένα δείκτη προς αυτό.

Στην ακόλουθο ορισμό στοιχείο πελάτη, ένας λογιστικός χώρος ονομάτων ορίζεται προκειμένου να είναι δυνατή η διάκριση των προσδιοριστικών του στοιχείου από τα προσδιοριστικά που εμφανίζονται στις εγγραφές πελάτη που δημιουργήθηκαν από άλλες επιχειρηματικές εφαρμογές:

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

Το namespace definition στην πρώτη γραμμή αντιστοιχίζει το χώρο ονομάτων http://www.my.com/acct-REV10 με το πρόθημα. Αυτό το πρόθημα χρησιμοποιείται στα ονόματα στοιχείων όπως name προκειμένου να τα επισυνάψει στο χώρο ονομάτων. Μια δεύτερη εφαρμογή, για παράδειγμα, ένα σύστημα εκπλήρωσης, μπορεί να αντιστοιχίσει ένα διαφορετικό χώρο ονομάτων στα στοιχεία πελάτη της:

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

Μια εφαρμογή που επεξεργάζεται και τις δύο δομές δεδομένων μπορεί τώρα να αντιμετωπίσει με διαφορετικό τρόπο τα λογιστικά δεδομένα και τα δεδομένα εκπλήρωσης. Υπάρχει ένας προεπιλεγμένος χώρος ονομάτων. Αυτός ορίζεται αν δεν έχει συσχετιστεί τοπικό όνομα στο ορισμό χώρου ονομάτων:

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

Σε αυτό το παράδειγμα, όλα τα προσδιοριστικά στην καταχώρηση πελάτη προσδιορίζεται ότι βρίσκονται στο χώρο ονομάτων http://www.my.com/acct-REV10. Δεν απαιτείται ρητό πρόθημα επειδή χρησιμοποιείται ο προεπιλεγμένος χώρος ονομάτων. Έχετε υπόψη σας ότι ο προεπιλεγμένος χώρος ονομάτων ισχύει για οποιουσδήποτε ορισμούς γνωρισμάτων.

Σχήματα XML και χώροι ονομάτων

Στο ακόλουθο σχήμα XML, ο προεπιλεγμένος χώρος ονομάτων για το σχήμα ορίζεται ως ο τυπικός χώρος ονομάτων σχήματος XML http://www.w3.org/2001/XMLSchema. Υπάρχει επίσης ένα ειδικός χώρος ονομάτων για σχήμα 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> 
 <!--οι ορισμοί στοιχείων παραλείπονται -->  
</schema>  

Αν υποθέσουμε ότι το παραπάνω σχήμα XML αποθηκευτεί ως C:\temp\TestSchema.xsd, ένα δείγμα αρχείου XML που επικυρώνεται έναντι αυτού του σχήματος είναι:

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

Χώρος ονομάτων προορισμού

Ο χώρος ονομάτων προορισμού χρησιμοποιείται για τον προσδιορισμό του χώρου ονομάτων εντός του οποίου υπάρχει η συσχέτιση μεταξύ του στοιχείου και του ονόματός του. Στην περίπτωση των δηλώσεων, αυτή η συσχέτιση καθορίζει το χώρο ονομάτων των στοιχείων σε αρχεία XML που συμμορφώνονται με το σχήμα. Ένα αρχείο XML που εισάγει ένα σχήμα πρέπει να παραπέμπει στο δικό του χώρο ονομάτων προορισμού στο γνώρισμα schemaLocation. Τυχόν αναντιστοιχίες μεταξύ του χώρου ονομάτων προορισμού και του πραγματικού χώρου ονομάτων ενός στοιχείου αναφέρονται ως σφάλματα επικύρωσης σχήματος. Στο παράδειγμά μας, ο χώρος ονομάτων προορισμού είναι http://www.ibm.com. Ορίζεται στο αρχείο σχήματος XML και γίνεται παραπομπή σε αυτόν δύο φορές στο αρχείο XML. Τυχόν αναντιστοιχία μεταξύ αυτών των τριών εμφανίσεων του χώρου ονομάτων θα οδηγήσει σε σφάλματα επικύρωσης.

Τα ακόλουθα παραδείγματα εμφανίζουν τον τρόπο με τον οποίο χώροι ονομάτων προορισμού και προθήματα χώρων ονομάτων λειτουργούν σε σχήματα XML και τα αντίστοιχα έγγραφα χρήσης XML.

Δείγμα 1 - Ένα σχήμα που έχει τόσο έναν προεπιλεγμένο χώρο ονομάτων όσο και χώρο ονομάτων προορισμού και μη προσδιορισμένα τοπικά στοιχεία

Το σχήμα XML:

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

Ένα έγκυρο έγγραφο χρήσης XML που δημιουργείται από αυτό το σχήμα έχει την εξής μορφή. Τα τοπικά στοιχεία και τα γνωρίσματα είναι μη προσδιορισμένα.

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

Όταν τοπικά στοιχεία (όπως το στοιχείο "name") και γνωρίσματα δεν έχουν προσδιοριστεί σε ένα αρχείο XML, τότε έχει προσδιοριστεί μόνο το κεντρικό στοιχείο. Έτσι, στο συγκεκριμένο παράδειγμα, το πρόθημα χώρου ονομάτων "x" αντιστοιχίζεται στο κεντρικό στοιχείο "MyAddress", και το συσχετίζει με το χώρο ονομάτων "http://www.ibm.com", αλλά το πρόθημα "x" δεν έχει αντιστοιχιστεί στο τοπικό στοιχείο "name".

Δείγμα 2 - Ένα σχήμα που έχει τόσο έναν προεπιλεγμένο χώρο ονομάτων όσο και χώρο ονομάτων προορισμού και προσδιορισμένα τοπικά στοιχεία

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

Ένα έγκυρο έγγραφο χρήσης XML που δημιουργείται από αυτό το σχήμα έχει την εξής μορφή. Τα τοπικά στοιχεία και γνωρίσματα είναι προσδιορισμένα. Αυτό συμβαίνει επειδή το γνώρισμα elementFormDefault έχει οριστεί ως προσδιορισμένο στο σχήμα XML.

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

Σε αυτό το παράδειγμα, το πρόθημα χώρου ονομάτων "x" έχει αντιστοιχιστεί τόσο στο κεντρικό στοιχείο "MyAddress" όσο και στο τοπικό στοιχείο "name", και τα συσχετίζει με το χώρο ονομάτων "http://www.ibm.com".

Δείγμα 3 - Σχήμα με χώρο ονομάτων προορισμού, και ορίζει ρητά το xmlns:xsd

Αυτό το σχήμα XML προσθέτει το εξής γνώρισμα:

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

Αυτό σημαίνει ότι κάθε μία από τις δομές που ορίζονται από το σχήμα γλώσσας XML θα πρέπει να προσδιοριστούν με το πρόθημα "xsd". Για παράδειγμα, xsd:complexType και xsd:string

. Έχετε υπόψη σας ότι μπορείτε να επιλέξετε οποιαδήποτε άλλα προθήματα όπως "xs" ή "foobar" στη δήλωσή σας και στην πράξη.

Μπορείτε να ορίσετε αυτό το πρόθημα στη σελίδα προτιμήσεων για το σχήμα XML. Για περισσότερες πληροφορίες, ανατρέξτε στις σχετικές εργασίες.

Όλα τα καθορισμένα από το χρήστη είδη ανήκουν στο χώρο ονομάτων http://www.ibm.com όπως ορίζεται από το γνώρισμα targetNamespace, και το πρόθημα είναι "x" όπως ορίζεται από το γνώρισμα 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>

Ένα έγκυρο έγγραφο χρήσης XML που δημιουργείται από αυτό το σχήμα έχει την εξής μορφή. Τα τοπικά στοιχεία και τα γνωρίσματα είναι μη προσδιορισμένα. Η σημειολογία προσδιορισμού είναι ίδια με αυτή στο Δείγμα 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>

Δείγμα 4 - Σχήμα με μη δηλωμένο χώρο ονομάτων προορισμού που ορίζει ρητά το xmlns:xsd

Αυτό το σχήμα XML δεν διαθέτει δικό του χώρο ονομάτων προορισμού. Σε αυτή την περίπτωση, συνιστάται όλες οι δομές σχήματος XML να προσδιορίζονται ρητά με ένα πρόθημα όπως το "xsd". Σε ορισμούς και δηλώσεις από αυτό το σχήμα όπως το AddressType γίνεται παραπομπή χωρίς προσδιορισμό χώρου ονομάτων καθώς δεν υπάρχει πρόθημα χώρου ονομάτων.

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

Ένα έγκυρο έγγραφο χρήσης XML που δημιουργείται από αυτό το σχήμα έχει την εξής μορφή. Όλα τα στοιχεία μη προσδιορισμένα.

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

Δείγμα 5 - Ένα σχήμα όπου ο χώρος ονομάτων προορισμού είναι ο προεπιλεγμένος χώρος ονομάτων

Πρόκειται για ένα σχήμα XML όπου ο χώρος ονομάτων προορισμού είναι ο προεπιλεγμένος χώρος ονομάτων. Ο χώρος ονομάτων δεν έχει πρόθημα χώρου ονομάτων.

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

Ένα έγκυρο έγγραφο χρήσης XML που δημιουργείται από αυτό το σχήμα έχει την εξής μορφή:

<?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>  
Συναφείς εργασίες
Τροποποίηση προτιμήσεων για αρχεία σχημάτων XML