Sebuah contoh XSD
- Halaman Sebelumnya Penggantian Element XSD
- Halaman Berikutnya String XSD
Bagian ini akan menunjukkan bagaimana menulis Schema XML. Anda juga akan belajar berbagai metode menulis schema.
Dokumen XML
Berikut ini adalah dokumen XML yang dinamai "shiporder.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>George Bush</orderperson> <shipto> <name>John Adams</name> <address>Oxford Street</address> <city>London</city> <country>UK</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>
Dokumen XML di atas termasuk elemen root "shiporder", yang mengandung atribut yang harus dinamai "orderid". Elemen "shiporder" mengandung tiga elemen anak yang berbeda: "orderperson", "shipto" dan "item". Elemen "item" muncul dua kali, ia mengandung elemen "title", elemen pilihan "note", elemen "quantity" dan elemen "price".
Baris ini xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance", memberitahu pemecah XML untuk memverifikasi dokumen ini berdasarkan schema tertentu. Baris ini: xsi:noNamespaceSchemaLocation="shiporder.xsd" menentukan lokasi schema (di sini, ia berada di dalam folder yang sama dengan "shiporder.xml").
Buat satu XML Schema
Sekarang, kami perlu membuat schema untuk dokumen XML di atas.
Kami boleh memulai dengan membuka suatu file baru dan menamakannya "shiporder.xsd". Untuk membuat schema, kami hanya perlu mengikuti struktur dokumen XML, mendefinikan setiap elemen yang ditemukan. Mulai dengan mendefinikan deklarasi XML standar:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... ... </xs:schema>
Dalam schema di atas, kami menggunakan ruang nama standar (xs), ruang nama ini berhubungan dengan definisi bahasa Schema (Schema language definition), nilai standarnya adalah http://www.w3.org/2001/XMLSchema.
Kemudian, kami perlu mendefinikan elemen "shiporder" yang memiliki satu atribut yang mengandung elemen lain, sehingga kami menganggapnya sebagai tipe gabungan. Anak elemen elemen "shiporder" dikepalkan oleh elemen xs:sequence, yang mendefinikan urutan anak elemen:
<xs:element name="shiporder"> <xs:complexType> <xs:sequence> ... ... </xs:sequence> ... </xs:complexType> </xs:element>
Kemudian, kami perlu mendefinikan elemen "orderperson" sebagai tipe ringkas (ini karena ia tidak mengandung atribut atau elemen lain). Prefiks tipe (xs:string) ditentukan oleh prefix ruang nama, ruang nama ini berhubungan dengan XML schema yang menunjukkan jenis data schema yang diatur:
<xs:element name="orderperson" type="xs:string"/>
Sekarang, saya perlu mendefinikan tipe gabungan untuk dua elemen: "shipto" dan "item". Mulai dengan mendefinikan elemen "shipto":
<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>
Melalui schema, kami boleh menggunakan atribut maxOccurs dan minOccurs untuk menentukan jumlah kemungkinan penampilan suatu elemen. maxOccurs menentukan nilai maksimum penampilan suatu elemen, sementara minOccurs menentukan nilai minimum penampilan suatu elemen. Nilai default maxOccurs dan minOccurs adalah 1!
Sekarang, kami boleh memdefinikan elemen "item" ini. Elemen ini boleh muncul beberapa kali di dalam elemen "shiporder". Ini dicapai dengan menetapkan nilai maxOccurs atribut elemen "item" kepada "unbounded", jadi elemen "item" boleh muncul sebanyak yang diinginkan pencipta. Silakan perhatikan, elemen "note" adalah elemen pilihan. Kami telah menetapkan nilai minOccurs atribut elemen ini kepada 0:
<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>
Sekarang, kita dapat menyatakan atribut elemen "shiporder" ini. Sebagai atribut wajib, kami menetapkan use="required".
Keterangan:Pengumuman atribut ini harus ditempatkan di akhir:
<xs:attribute name="orderid" type="xs:string" use="required"/>
Ini adalah daftar dokumen untuk file skema yang dinamakan "shiporder.xsd":
<?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>
Pemecahan Schema
Metode desain sebelumnya sangat mudah, tetapi sulit untuk dibaca dan dipekerjaan saat dokumen sangat kompleks.
Metode desain yang akan dijelaskan berdasarkan definisi semua elemen dan atribut pertama, kemudian menggunakan atribut ref untuk merujuk ke mereka.
Ini adalah dokumen skema yang dirancang dengan metode baru:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 简易元素的定义 --> <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"/> <!-- Definisi atribut --> <xs:attribute name="orderid" type="xs:string"/> <!-- Definisi elemen gabungan --> <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>
Gunakan jenis yang ditentukan (Jenis Dinyatakan)
Kaedah rancangan ketiga ini menentukan kelas atau jenis, supaya kita dapat mengulangi penggunaan definisi elemen. Cara khususnya adalah: pertama-tama, pilih nama bagi elemen ringkas dan gabungan, lalu arahkan kepada mereka melalui atribut type elemen.
Ini adalah schema fail yang dirancang menggunakan kaedah ketiga ("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>
Elemen restriction menunjukkan jenis data asal dari jenis data namespace W3C XML Schema. Oleh itu, fragmen di bawah ini juga bermakna nilai elemen atau atribut harus berupa nilai jenis string:
<xs:restriction base="xs:string">
Elemen batasan biasa digunakan untuk menekan batasan kepada elemen. Lihat fragmen di bawah ini yang berasal dari schema di atas:
<xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType>
Kod ini menunjukkan bahawa nilai elemen atau properti mesti menjadi string, dan mesti berkelanjutan enam huruf, dan huruf-huruf itu mesti angka 0-9.
- Halaman Sebelumnya Penggantian Element XSD
- Halaman Berikutnya String XSD