Latest web development tutorials

esempio XML Schema

In questa sezione vi mostrerà come scrivere uno schema XML. Potrai anche imparare modi diversi di scrivere lo schema.


documenti XML

Diamo un'occhiata a questo, chiamato "shiporder.xml" documento XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>

L'elemento principale del documento XML sopra "ShipOrder", che contiene l'attributo deve essere denominato "IDOrdine" di. elemento "ShipOrder" contiene tre diversi elementi figlio: "orderperson", "ShipTo" e "voce". elemento "Item" compare due volte, e contiene un "titolo", un elemento facoltativo "nota", una "quantità" e un elementi "prezzo".

I xmlns riga sopra: xsi = "http://www.w3.org/2001/XMLSchema-instance", ha detto uno schema basato sul parser XML per convalidare questo documento. La linea: xsi: noNamespaceSchemaLocation = schema "shiporder.xsd" definisce la posizione (in questo caso, "shiporder.xml" nella stessa cartella).


Creare uno schema XML

Ora, abbiamo bisogno di creare uno schema per il documento XML sopra.

Possiamo cominciare con l'apertura di un nuovo file e questo file è denominato "shiporder.xsd". Per creare uno schema, abbiamo solo bisogno di seguire semplicemente la struttura del documento XML, ogni elemento della definizione di quello che abbiamo trovato. In primo luogo, cominciamo a definire una dichiarazione XML standard:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

Nello schema di cui sopra, si usa lo spazio dei nomi standard (XS), spazio URI associato con questo nome è la definizione del linguaggio Schema di (definizione del linguaggio Schema), il suo valore standard è http://www.w3.org/ 2001 / XMLSchema.

Quindi, abbiamo bisogno di definire elemento "ShipOrder". Questo elemento ha una proprietà che contiene altri elementi, quindi abbiamo identificato come un tipo complesso. Sub-element "ShipOrder" è xs: sequenza elemento circondato definisce l'ordine di sub-elementi:

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>

Poi dobbiamo elemento "orderperson" è definito come un tipo semplice (perché non contiene attributi o altri elementi). Tipo (xs: string) è preceduto dalle disposizioni prefisso namespace di questo spazio dei nomi e le istruzioni predefinite schema schema tipi di dati XML associati:

<xs:element name="orderperson" type="xs:string"/>

Successivamente, ho bisogno dei due elementi definiti come tipo complesso: "ShipTo" e "voce". Iniziamo definendo elemento "ShipTo" inizia così:

<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Con lo schema, siamo in grado di definire il numero di volte che un elemento può avvenire utilizzando maxOccurs e attributi minOccurs. maxOccurs definiscono visualizzi un numero massimo di elementi, e minOccurs definisce il numero minimo di occorrenze di un elemento. Predefinito maxOccurs e minOccurs è 1!

Ora, siamo in grado di definire l'elemento "voce" di. Questo elemento può apparire più volte all'interno dell'elemento "ShipOrder". Questo viene fatto dai "voce" maxOccurs elemento di attributo valore è impostato su "illimitato" per raggiungere, in modo che elemento "voce" può essere il creatore appare il numero di volte desiderato. Si prega di notare, "nota" elemento è opzionale. attributo Abbiamo minOccurs di questo elemento è impostato su 0 su:

<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Ora possiamo dichiarare attributo "ShipOrder" dell'elemento. Poiché si tratta di un attributo obbligatorio, specifichiamo uso = "necessaria".

Nota: Questa proprietà deve essere dichiarata l'ultimo:

<xs:attribute name="orderid" type="xs:string" use="required"/>

Questa è una lista di documenti, denominato "shiporder.xsd" il file di schema:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


Split Schema

Davanti al metodo di progettazione è molto semplice, ma è difficile da leggere e gestire documenti sono Shique complesse.

Successivamente, basato sul metodo di progettazione descritto nella prima definizione di tutti gli elementi e attributi, e quindi utilizzare l'attributo ref per riferirsi a loro.

Questo nuovo approccio è stato progettato file di schema ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


Utilizzando il tipo specificato (nome tipi)

Il metodo terzo disegno definisce una classe o tipo, in modo che abbiamo la capacità di definire elementi riutilizzabili. Approccio specifico è: primo elemento di semplici e complessi elementi name e quindi digitare attributo dell'elemento per puntare a loro

Questo terzo metodo è l'uso di file di schema di disegno ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

elemento di restrizione che mostra il tipo di dati derivati ​​dallo spazio dei nomi tipo di dati W3C XML Schema. Pertanto, il seguente frammento significa che il valore del valore dell'elemento o attributo deve essere un tipo stringa:

<xs:restriction base="xs:string">

elemento di restrizione spesso usato per imporre restrizioni agli elementi. Si consideri il seguente frammento dallo schema di cui sopra:

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

Questo codice indica che il valore dell'elemento o dell'attributo deve essere una stringa, e deve essere consecutivi sei caratteri, e questi caratteri deve essere 0-9.