Latest web development tutorials

XML Schema contoh

Bagian ini akan menunjukkan cara untuk menulis Skema XML. Anda juga akan mempelajari cara-cara yang berbeda untuk menulis skema.


dokumen XML

Mari kita lihat ini, disebut "shiporder.xml" dokumen 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>

Di atas dokumen XML akar elemen "shiporder", yang berisi atribut harus diberi nama "orderid" dari. "Shiporder" elemen mengandung tiga unsur anak yang berbeda: "orderperson", "shipto" dan "item". "Item" elemen muncul dua kali, dan itu berisi "title", opsional "catatan" elemen, sebuah "kuantitas" dan "harga" elemen.

Xmlns baris di atas: xsi = "http://www.w3.org/2001/XMLSchema-instance", kata skema berdasarkan parser XML untuk memvalidasi dokumen ini. Garis: XSI: noNamespaceSchemaLocation = "shiporder.xsd" Skema menentukan posisi (dalam kasus ini, "shiporder.xml" di folder yang sama).


Buat Skema XML

Sekarang, kita perlu membuat skema untuk dokumen XML di atas.

Kita bisa mulai dengan membuka file baru dan file ini bernama "shiporder.xsd". Untuk membuat skema, kita hanya perlu untuk hanya mengikuti struktur dokumen XML, setiap elemen dari definisi apa yang kami temukan. Pertama, kita mulai mendefinisikan deklarasi XML standar:

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

Dalam skema di atas, kita menggunakan namespace standar (xs), ruang URI terkait dengan nama ini definisi bahasa Skema dari (Skema definisi bahasa), nilai standar adalah http://www.w3.org/ 2001 / XMLSchema.

Selanjutnya, kita perlu mendefinisikan "shiporder" elemen. Elemen ini memiliki properti yang mengandung unsur lainnya, oleh karena itu kita diidentifikasi sebagai tipe kompleks. Sub-elemen "shiporder" elemen xs: urutan elemen dikelilingi mendefinisikan urutan sub-elemen:

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

Maka kita perlu "orderperson" elemen didefinisikan sebagai tipe sederhana (karena tidak mengandung atribut atau elemen lainnya). Jenis (xs: string) diawali dengan ketentuan namespace prefix dari namespace ini dan petunjuk yang telah ditetapkan skema tipe data XML skema terkait dengan:

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

Berikutnya, saya perlu dua elemen didefinisikan sebagai tipe kompleks: "shipto" dan "item". Kita mulai dengan mendefinisikan "shipto" elemen dimulai:

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

Dengan skema, kita dapat menentukan berapa kali sebuah elemen dapat terjadi menggunakan maxOccurs dan atribut minOccurs. maxOccurs menentukan jumlah maksimum elemen muncul, dan minOccurs mendefinisikan jumlah minimum kejadian dari suatu elemen. Default maxOccurs dan minOccurs adalah 1!

Sekarang, kita dapat mendefinisikan "item" elemen. Elemen ini dapat muncul beberapa kali dalam "shiporder" elemen. Hal ini dilakukan oleh "item" maxOccurs elemen nilai atribut diatur ke "tak terbatas" untuk mencapai, sehingga "item" elemen dapat pencipta muncul sebagai sebanyak yang diinginkan. Harap dicatat, "perhatikan" elemen opsional. atribut Kami memiliki minOccurs elemen ini diatur ke 0 pada:

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

Kita sekarang dapat mendeklarasikan "shiporder" atribut elemen. Karena ini adalah atribut wajib, kita tentukan penggunaan = "diperlukan".

Catatan: Properti ini harus dinyatakan pada yang terakhir:

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

Ini adalah daftar dokumen, yang disebut "shiporder.xsd" skema berkas:

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


Berpisah Skema

Di depan metode desain sangat mudah, tetapi sulit untuk membaca dan memelihara dokumen yang Shique kompleks.

Selanjutnya, berdasarkan metode desain yang dijelaskan dalam definisi pertama dari semua elemen dan atribut, dan kemudian menggunakan ref atribut untuk merujuk kepada mereka.

Pendekatan baru ini dirancang berkas skema ( "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>


Menggunakan jenis tertentu (Bernama Jenis)

Metode desain ketiga mendefinisikan kelas atau jenis, sehingga kita memiliki kemampuan untuk menentukan unsur-unsur yang dapat digunakan kembali. pendekatan khusus adalah: elemen pertama dari yang sederhana dan kompleks nama elemen, dan kemudian ketik atribut elemen untuk menunjuk ke mereka

Metode ketiga ini adalah penggunaan file desain skema ( "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>

Unsur pembatasan menunjukkan jenis data yang berasal dari W3C XML Schema namespace datatype. Oleh karena itu, fragmen berikut berarti bahwa nilai dari elemen atau atribut nilai harus menjadi tipe string:

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

Unsur pembatasan sering digunakan untuk memberlakukan pembatasan pada elemen. Pertimbangkan fragmen berikut dari skema di atas:

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

Kode ini menunjukkan bahwa nilai dari elemen atau atribut harus string, dan harus berturut-turut enam karakter, dan karakter ini harus 0-9.