Tutorial XML

RUMAH XML Pengantar XML XML Cara menggunakan Pohon XML Sintaks XML Elemen XML Atribut XML Ruang Nama XML Tampilan XML XML HttpRequest Pengurai XML XML DOM XML XPath XML XSLT XML XQuery XML XLink Validator XML XML DTD Skema XML Server XML Contoh XML Kuis XML Sertifikat XML

XML AJAX

Pengenalan AJAX AJAX XMLHttp Permintaan AJAX Tanggapan AJAX File XML AJAX AJAX PHP AJAX ASP Basis Data AJAX Aplikasi AJAX Contoh AJAX

XML DOM

Pengenalan DOM Node DOM Mengakses DOM Info Simpul DOM Daftar Simpul DOM Melintasi DOM Navigasi DOM DOM Dapatkan Nilai DOM Ubah Node DOM Hapus Node DOM Ganti Node DOM Buat Node DOM Tambahkan Node Node Klon DOM Contoh DOM

Tutorial XPath

Pengenalan XPath Node XPath Sintaks XPath Sumbu XPath Operator XPath Contoh XPath

Tutorial XSLT

Pengenalan XSLT Bahasa XSL Transformasi XSLT XSLT <templat> XSLT <nilai-dari> XSLT <untuk-setiap> XSLT <sort> XSLT <jika> XSLT <pilih> Terapkan XSLT XSLT di Klien XSLT di Server XSLT Sunting XML Contoh XSLT

Tutorial XQuery

Pengenalan XQuery Contoh XQuery XQuery FLWOR HTML XQuery Persyaratan XQuery Sintaks XQuery Tambahkan XQuery XQuery Pilih Fungsi XQuery

XML DTD

Pengenalan DTD Blok Bangunan DTD Elemen DTD Atribut DTD Elemen DTD vs Attr Entitas DTD Contoh DTD

Skema XSD

Pengenalan XSD XSD Bagaimana caranya? XSD <skema> Elemen XSD Atribut XSD Pembatasan XSD

Kompleks XSD

Elemen XSD XSD Kosong Elemen XSD Saja Hanya Teks XSD Campuran XSD Indikator XSD XSD <apa saja> XSD <anyAttribute> Pergantian XSD Contoh XSD

Data XSD

String XSD Tanggal XSD XSD Numerik XSD Lain-lain Referensi XSD

Layanan Web

Layanan XML XML WSDL XML SOAP XML RDF XML RSS

Referensi

Jenis Node DOM Simpul DOM Daftar Simpul DOM DOM BernamaNodeMap Dokumen DOM Elemen DOM Atribut DOM Teks DOM DOM CDATA Komentar DOM DOM XMLHttpRequest Pengurai DOM Elemen XSLT Fungsi XSLT/XPath

Contoh XSD


Bab ini akan mendemonstrasikan cara menulis Skema XML. Anda juga akan belajar bahwa skema dapat ditulis dengan cara yang berbeda.


Dokumen XML

Mari kita lihat dokumen XML ini yang disebut "shiporder.xml":

<?xml version="1.0" encoding="UTF-8"?>

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

Dokumen XML di atas terdiri dari elemen root, "shiporder", yang berisi atribut wajib yang disebut "orderid". Elemen "shiporder" berisi tiga elemen anak yang berbeda: "orderperson", "shipto" dan "item". Elemen "item" muncul dua kali, dan berisi "title", elemen "catatan" opsional, "kuantitas", dan elemen "harga".

Baris di atas: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" memberi tahu parser XML bahwa dokumen ini harus divalidasi terhadap skema. Baris: xsi:noNamespaceSchemaLocation="shiporder.xsd" menentukan DI MANA skema berada (ini dia di folder yang sama dengan "shiporder.xml").



Buat Skema XML

Sekarang kita ingin membuat skema untuk dokumen XML di atas.

Kita mulai dengan membuka file baru yang akan kita sebut "shiporder.xsd". Untuk membuat skema, kita cukup mengikuti struktur dalam dokumen XML dan mendefinisikan setiap elemen saat kita menemukannya. Kita akan mulai dengan deklarasi XML standar diikuti oleh elemen xs:schema yang mendefinisikan skema:

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

Dalam skema di atas kami menggunakan namespace standar (xs), dan URI yang terkait dengan namespace ini adalah definisi bahasa Skema, yang memiliki nilai standar http://www.w3.org/2001/XMLSchema.

Selanjutnya, kita harus mendefinisikan elemen "shiporder". Elemen ini memiliki atribut dan mengandung elemen lain, oleh karena itu kami menganggapnya sebagai tipe yang kompleks. Elemen turunan dari elemen "pengiriman" dikelilingi oleh elemen xs:sequence yang mendefinisikan urutan subelemen yang berurutan:

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

Kemudian kita harus mendefinisikan elemen "orderperson" sebagai tipe sederhana (karena tidak mengandung atribut atau elemen lainnya). Jenis (xs:string) diawali dengan awalan namespace yang terkait dengan Skema XML yang menunjukkan tipe data skema yang telah ditentukan sebelumnya:

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

Selanjutnya, kita harus mendefinisikan dua elemen yang bertipe kompleks: "shipto" dan "item". Kita mulai dengan mendefinisikan 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>

Dengan skema, kita dapat menentukan jumlah kemungkinan kemunculan untuk elemen dengan atribut maxOccurs dan minOccurs. maxOccurs menentukan jumlah maksimum kemunculan elemen dan minOccurs menentukan jumlah minimum kemunculan elemen. Nilai default untuk maxOccurs dan minOccurs adalah 1!

Sekarang kita dapat mendefinisikan elemen "item". Elemen ini dapat muncul beberapa kali di dalam elemen "pengiriman". Ini ditentukan dengan menyetel atribut maxOccurs dari elemen "item" ke "unbounded" yang berarti bahwa elemen "item" dapat muncul sebanyak mungkin sesuai keinginan penulis. Perhatikan bahwa elemen "catatan" adalah opsional. Kami telah menetapkan ini dengan menyetel atribut minOccurs ke nol:

<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 mendeklarasikan atribut dari elemen "shiporder". Karena ini adalah atribut yang diperlukan, kami menentukan use="required".

Catatan: Deklarasi atribut harus selalu terakhir:

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

Berikut adalah daftar lengkap file skema yang disebut "shiporder.xsd":

<?xml version="1.0" encoding="UTF-8" ?>
<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>

Bagi Skema

Metode desain sebelumnya sangat sederhana, tetapi bisa sulit untuk dibaca dan dipelihara jika dokumennya rumit.

Metode desain berikutnya didasarkan pada pendefinisian semua elemen dan atribut terlebih dahulu, dan kemudian merujuknya menggunakan atribut ref.

Berikut adalah desain baru dari file skema ("shiporder.xsd"):

<?xml version="1.0" encoding="UTF-8" ?>
<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 Bernama

Metode desain ketiga mendefinisikan kelas atau tipe, yang memungkinkan kita untuk menggunakan kembali definisi elemen. Ini dilakukan dengan menamai elemen simpleTypes dan complexTypes, lalu menunjuk ke elemen tersebut melalui atribut type dari elemen tersebut.

Berikut adalah desain ketiga dari file skema ("shiporder.xsd"):

<?xml version="1.0" encoding="UTF-8" ?>
<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 pembatasan menunjukkan bahwa tipe data berasal dari tipe data namespace Skema XML W3C. Jadi, fragmen berikut berarti nilai elemen atau atribut harus berupa nilai string:

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

Elemen restriksi lebih sering digunakan untuk menerapkan batasan pada elemen. Perhatikan baris berikut dari skema di atas:

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

Ini menunjukkan bahwa nilai elemen atau atribut harus berupa string, harus tepat enam karakter berturut-turut, dan karakter tersebut harus berupa angka dari 0 hingga 9.