XSD - Panduan Cepat

XML Schema Definition, umumnya dikenal sebagai XSD, adalah cara untuk menggambarkan bahasa XML dengan tepat. XSD memeriksa validitas struktur dan kosakata dokumen XML terhadap aturan tata bahasa dari bahasa XML yang sesuai.

Dokumen XML dapat didefinisikan sebagai -

  • Well-formed- Jika dokumen XML mematuhi semua aturan XML umum seperti tag harus bertingkat dengan benar, tag pembuka dan penutup harus seimbang, dan tag kosong harus diakhiri dengan '/>', maka ini disebut sebagai format yang baik .

    OR

  • Valid- Dokumen XML dikatakan valid jika tidak hanya dalam format yang baik , tetapi juga sesuai dengan XSD yang tersedia yang menentukan tag mana yang digunakannya, atribut apa yang dapat dimuat oleh tag tersebut, dan tag mana yang dapat muncul di dalam tag lain, di antara properti lainnya .

Diagram berikut menunjukkan bagaimana XSD digunakan untuk menyusun dokumen XML -

Berikut adalah kode XSD sederhana. Coba lihat itu.

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.tutorialspoint.com" 
   xmlns = "http://www.tutorialspoint.com"
   elementFormDefault = "qualified">

   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
            <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
               maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
   
</xs:schema>

fitur

Berikut adalah daftar beberapa fitur populer XSD -

  • XSD dapat dikembangkan untuk penambahan di masa mendatang.
  • XSD lebih kaya dan lebih kuat dari DTD.
  • XSD ditulis dalam XML.
  • XSD mendukung tipe data.
  • XSD mendukung ruang nama.
  • XSD adalah rekomendasi W3C.

XML XSD disimpan dalam dokumen terpisah dan kemudian dokumen tersebut dapat ditautkan ke dokumen XML untuk menggunakannya.

Sintaksis

Sintaks dasar XSD adalah sebagai berikut -

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.tutorialspoint.com"
   xmlns = "http://www.tutorialspoint.com" elementFormDefault = "qualified">
   
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
            <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
               maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
   
</xs:schema>

Elemen <Schema>

Skema adalah elemen root dari XSD dan selalu diperlukan.

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">

Fragmen di atas menetapkan bahwa elemen dan tipe data yang digunakan dalam skema didefinisikan di http://www.w3.org/2001/XMLSchema namespace dan elemen / tipe data ini harus diawali dengan xs. Itu selalu dibutuhkan.

targetNamespace = "http://www.tutorialspoint.com"

Fragmen di atas menetapkan bahwa elemen yang digunakan dalam skema ini didefinisikan di http://www.tutorialspoint.comnamespace. Ini opsional.

xmlns = "http://www.tutorialspoint.com"

Fragmen di atas menetapkan bahwa namespace default adalah http://www.tutorialspoint.com.

elementFormDefault = "qualified"

Fragmen di atas menunjukkan bahwa elemen apa pun yang dideklarasikan dalam skema ini harus memenuhi syarat namespace sebelum menggunakannya dalam Dokumen XML. Ini opsional.

Skema Referensi

Lihatlah Skema Referensi berikut -

<?xml version = "1.0"?>

<class xmlns = "http://www.tutorialspoint.com"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">  
   
   <student rollno = "393">    
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
xmlns = "http://www.tutorialspoint.com"

Fragmen di atas menetapkan deklarasi namespace default. Namespace ini digunakan oleh validator skema untuk memeriksa bahwa semua elemen adalah bagian dari namespace ini. Ini opsional.

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">

Setelah menentukan XMLSchema-instance xsi, gunakan schemaLocationatribut. Atribut ini memiliki dua nilai, namespace dan lokasi Skema XML, untuk digunakan dipisahkan oleh spasi. Ini opsional.

Kami akan menggunakan validator XSD berbasis Java untuk memvalidasi students.xml melawan students.xsd.

students.xml

<?xml version = "1.0"?>

<class>  
   <student rollno = "393">
      <firstname>Dinkar</firstname>    
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>	 
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

siswa.xsd

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
             <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
                maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>			 
</xs:schema>

XSDValidator.java

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class XSDValidator {
   public static void main(String[] args) {
      if(args.length !=2){
         System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
      } else {
         boolean isValid = validateXMLSchema(args[0],args[1]);
         
         if(isValid){
            System.out.println(args[1] + " is valid against " + args[0]);
         } else {
            System.out.println(args[1] + " is not valid against " + args[0]);
         }
      }
   }
   
   public static boolean validateXMLSchema(String xsdPath, String xmlPath){
      try {
         SchemaFactory factory =
            SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdPath));
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlPath)));
      } catch (IOException e){
         System.out.println("Exception: "+e.getMessage());
         return false;
      } catch(SAXException e1){
         System.out.println("SAX Exception: "+e1.getMessage());
         return false;
      }
		
      return true;
   }
}

Langkah-langkah untuk memvalidasi XML terhadap XSD

  • Salin XSDValidator.java mengajukan ke lokasi mana pun, katakanlah E: > java

  • Salin students.xml ke lokasi yang sama E: > java

  • Salin students.xsd ke lokasi yang sama E: > java

  • Menyusun XSDValidator.javamenggunakan konsol. Pastikan Anda memiliki JDK 1.5 dan seterusnya yang diinstal pada mesin Anda dan classpath telah dikonfigurasi. Untuk detail tentang cara menggunakan JAVA, lihat Tutorial JAVA

E:\java\javac XSDValidator.java
  • Menjalankan XSDValidator dengan students.xsd dan students.xml disahkan sebagai argumen.

E:\java\java XSDValidator students.xsd students.xml

Verifikasi hasilnya

Anda akan melihat hasil berikut -

students.xml is valid against students.xsd

Dalam bab ini, kita akan melihat Jenis Sederhana yang didefinisikan XSD.

S.No. Jenis & Deskripsi Sederhana
1

Elemen

Elemen Sederhana hanya dapat berisi teks. Itu tidak boleh mengandung elemen lain.

2

Atribut

Atribut itu sendiri adalah tipe dan digunakan dalam Elemen Kompleks.

3

Larangan

Batasan menentukan nilai yang dapat diterima dari elemen XML.

Elemen Kompleks adalah elemen XML yang dapat berisi elemen dan / atau atribut lain. Kita dapat membuat elemen kompleks dengan dua cara -

  • Tentukan tipe kompleks dan kemudian buat elemen menggunakan type atribut

  • Tentukan tipe kompleks secara langsung dengan penamaan

Definisikan Tipe Kompleks dan kemudian buat elemen menggunakan atribut tipe.

<xs:complexType name = "StudentType">
   <xs:sequence>
      <xs:element name = "firstname" type = "xs:string"/>
      <xs:element name = "lastname" type = "xs:string"/>
      <xs:element name = "nickname" type = "xs:string"/>
      <xs:element name = "marks" type = "xs:positiveInteger"/>
   </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>

<xs:element name = 'student' type = 'StudentType' />

Definisikan Jenis Kompleks secara langsung dengan penamaan.

<xs:element name = "student">
   <xs:complexType>   
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
<xs:element>

Berikut adalah daftar Jenis Kompleks yang didukung XSD.

S.No. Jenis & Deskripsi Sederhana
1

Kosong

Elemen tipe kompleks Complex Empty hanya dapat memiliki atribut tetapi tidak memiliki konten.

2

Elemen Saja

Elemen tipe kompleks Hanya-Elemen hanya dapat berisi elemen

3

Teks Saja

Elemen jenis kompleks Teks-Saja hanya boleh berisi atribut dan teks.

4

Campuran

Elemen tipe kompleks campuran dapat berisi elemen, atribut, dan teks.

5

Indikator

Indikator mengontrol cara mengatur elemen dalam dokumen XML.

6

Elemen <any> digunakan untuk elemen yang tidak ditentukan oleh skema

7

Atribut <anyAttribute> digunakan untuk atribut yang tidak ditentukan oleh skema.

Tipe data string digunakan untuk merepresentasikan karakter dalam dokumen XML.

<xs: string> tipe data

Tipe data <xs: string> dapat mengambil karakter, baris feed, carriage return, dan karakter tab. Prosesor XML tidak mengganti feed baris, carriage return, dan karakter tab dalam konten dengan spasi dan menjaganya tetap utuh. Misalnya, beberapa spasi atau tab dipertahankan selama tampilan.

<xs: string> Contoh

Deklarasi elemen dalam xsd -

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

Penggunaan elemen dalam xml -

<name>Dinkar</name>
<name>Dinkar    Kad</name>

<xs: token> tipe data

Tipe data <xs: token> diturunkan dari tipe data <string> dan dapat mengambil karakter, baris feed, carriage return, dan karakter tab. Prosesor XML akan menghapus feed baris, tab, carriage return, spasi di depan dan di belakang, dan banyak spasi.

Contoh <xs: token>

Deklarasi elemen dalam xsd -

<xs:element name = "name" type = "xs:token"/>

Penggunaan elemen dalam xml -

<name>Dinkar</name>
<name>Dinkar    Kad</name>

Tipe Data String

Berikut adalah daftar tipe data yang umum digunakan yang berasal dari tipe data <string>.

S.No. Nama & Deskripsi
1

ID

Mewakili atribut ID dalam XML dan digunakan dalam atribut skema.

2

IDREF

Mewakili atribut IDREF dalam XML dan digunakan dalam atribut skema.

3

language

Merupakan id bahasa yang valid

4

Name

Merupakan nama XML yang valid

5

NMTOKEN

Merepresentasikan atribut NMTOKEN dalam XML dan digunakan dalam atribut skema.

6

normalizedString

Merepresentasikan string yang tidak berisi feed baris, carriage return, atau tab.

7

string

Merepresentasikan string yang dapat berisi feed baris, carriage return, atau tab.

8

token

Merepresentasikan string yang tidak berisi baris feed, carriage return, tab, spasi di depan atau di belakang, atau beberapa spasi

Batasan

Jenis pembatasan berikut dapat digunakan dengan tipe data String -

  • enumeration
  • length
  • maxLength
  • minLength
  • pattern
  • whiteSpace

Tipe data Tanggal dan Waktu digunakan untuk merepresentasikan tanggal dan waktu dalam dokumen XML.

tipe data <xs: date>

Tipe data <xs: date> digunakan untuk merepresentasikan tanggal dalam format YYYY-MM-DD.

  • YYYY - mewakili tahun

  • MM - mewakili bulan

  • DD - mewakili hari

<xs: date> Contoh

Deklarasi elemen di XSD -

<xs:element name = "birthdate" type = "xs:date"/>

Penggunaan elemen dalam XML -

<birthdate>1980-03-23</birthdate>

tipe data <xs: time>

Tipe data <xs: time> digunakan untuk merepresentasikan waktu dalam format jj: mm: dd.

  • hh - mewakili jam

  • mm - mewakili menit

  • ss - mewakili detik

<xs: time> Contoh

Deklarasi elemen di XSD -

<xs:element name = "startTime" type = "xs:time"/>

Penggunaan elemen dalam XML -

<startTime>10:20:15</startTime>

<xs: datetime> tipe data

Tipe data <xs: datetime> digunakan untuk merepresentasikan tanggal dan waktu dalam format YYYY-MM-DDThh: mm: ss.

  • YYYY - mewakili tahun

  • MM - mewakili bulan

  • DD - mewakili hari

  • T - mewakili bagian waktu mulai

  • hh - mewakili jam

  • mm - mewakili menit

  • ss - mewakili detik

Contoh <xs: datetime>

Deklarasi elemen di XSD -

<xs:element name = "startTime" type = "xs:datetime"/>

Penggunaan elemen dalam XML -

<startTime>1980-03-23T10:20:15</startTime>

<xs: durasi> tipe data

Tipe data <xs: length> digunakan untuk merepresentasikan interval waktu dalam format PnYnMnDTnHnMnS. Setiap komponen bersifat opsional kecuali P.

  • P - mewakili bagian tanggal mulai

  • nY - mewakili tahun

  • nM - mewakili bulan

  • nD - mewakili hari

  • T - mewakili bagian waktu mulai

  • nH - mewakili jam

  • nM - mewakili menit

  • nS - mewakili detik

<xs: durasi> Contoh

Deklarasi elemen di XSD -

<xs:element name = "period" type = "xs:duration"/>

Penggunaan unsur dalam xml mewakili jangka waktu 6 tahun, 3 bulan, 10 hari dan 15 jam.

<period>P6Y3M10DT15H</period>

Tipe Data Tanggal

Berikut adalah daftar tipe data tanggal yang umum digunakan.

S.No. Nama & Deskripsi
1.

date

Merupakan nilai tanggal

2.

dateTime

Merupakan nilai tanggal dan waktu

3.

duration

Merupakan interval waktu

4.

gDay

Merepresentasikan bagian dari tanggal sebagai hari (DD)

5.

gMonth

Merupakan bagian dari tanggal sebagai bulan (MM)

6.

gMonthDay

Merupakan bagian dari tanggal sebagai bulan dan hari (MM-DD)

7.

gYear

Merupakan bagian dari tanggal sebagai tahun (YYYY)

8.

gYearMonth

Merupakan bagian dari tanggal sebagai tahun dan bulan (YYYY-MM)

9.

time

Merupakan nilai waktu

Batasan

Tipe batasan berikut dapat digunakan dengan tipe data Tanggal -

  • enumeration
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • pattern
  • whiteSpace

Tipe data numerik digunakan untuk merepresentasikan angka dalam dokumen XML.

tipe data <xs: decimal>

Tipe data <xs: decimal> digunakan untuk mewakili nilai numerik. Ini mendukung angka desimal hingga 18 digit.

<xs: decimal> Contoh

Deklarasi elemen di XSD -

<xs:element name = "score" type = "xs:decimal"/>

Penggunaan elemen dalam XML -

<score>9.12</score>

<xs: integer> tipe data

Tipe data <xs: integer> digunakan untuk merepresentasikan nilai integer.

<xs: integer> Contoh

Deklarasi elemen di XSD -

<xs:element name = "score" type = "xs:integer"/>

Penggunaan elemen dalam XML -

<score>9</score>

Tipe Data Numerik

Berikut adalah daftar tipe data numerik yang umum digunakan.

S.No. Nama & Deskripsi
1.

byte

Integer 8 bit bertanda tangan

2.

decimal

Nilai desimal

3.

int

Integer 32 bit bertanda

4.

integer

Nilai integer

5.

long

Integer 64 bit bertanda

6.

negativeInteger

Bilangan bulat yang hanya memiliki nilai negatif (.., - 2, -1)

7.

nonNegativeInteger

Bilangan bulat yang hanya memiliki nilai non-negatif (0,1,2, ..)

8.

nonPositiveInteger

Bilangan bulat yang hanya memiliki nilai non-positif (.., - 2, -1,0)

9.

positiveInteger

Bilangan bulat yang hanya memiliki nilai positif (1,2, ..)

10.

short

Integer 16 bit bertanda tangan

11.

unsignedLong

Integer 64 bit unsigned

12.

unsignedInt

Integer 32 bit unsigned

13.

unsignedShort

Sebuah integer 16 bit unsigned

14.

unsignedByte

Integer 8 bit yang tidak bertanda tangan

Batasan

Tipe batasan berikut dapat digunakan dengan tipe data Tanggal -

  • enumeration
  • fractionDigits
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • pattern
  • totalDigits
  • whiteSpace

XSD memiliki beberapa tipe data penting lainnya, seperti Boolean, binary, dan anyURI.

<xs: boolean> tipe data

Tipe data <xs: boolean> digunakan untuk merepresentasikan nilai benar, salah, 1 (untuk benar) atau 0 (untuk salah).

<xs: boolean> Contoh

Deklarasi elemen di XSD -

<xs:element name = "pass" type = "xs:boolean"/>

Penggunaan elemen dalam XML -

<pass>false</pass>

Tipe data biner

Tipe data biner digunakan untuk merepresentasikan nilai biner. Dua jenis biner umum digunakan.

  • base64Binary - mewakili data biner yang dikodekan base64

  • hexBinary - mewakili data biner yang dikodekan heksadesimal

Contoh <xs: hexbinary>

Deklarasi elemen di XSD -

<xs:element name = "blob" type = "xs:hexBinary"/>

Penggunaan elemen dalam XML -

<blob>9FEEF</blob>

<xs: anyURI> tipe data

Tipe data <xs: anyURI> digunakan untuk merepresentasikan URI.

<xs: anyURI> Contoh

Deklarasi elemen di XSD -

<xs:attribute name = "resource" type = "xs:anyURI"/>

Penggunaan elemen dalam XML -

<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />

Tipe Data Numerik

Berikut adalah daftar tipe data numerik yang umum digunakan.

S.No. Nama & Deskripsi
1.

byte

Integer 8 bit bertanda tangan

2.

decimal

Nilai desimal

3.

int

Integer 32 bit bertanda

4.

integer

Nilai integer

5.

long

Integer 64 bit bertanda

6.

negativeInteger

Bilangan bulat yang hanya memiliki nilai negatif (.., - 2, -1)

7.

nonNegativeInteger

Bilangan bulat yang hanya memiliki nilai non-negatif (0,1,2, ..)

8.

nonPositiveInteger

Bilangan bulat yang hanya memiliki nilai non-positif (.., - 2, -1,0)

9.

positiveInteger

Bilangan bulat yang hanya memiliki nilai positif (1,2, ..)

10.

short

Integer 16 bit bertanda tangan

11.

unsignedLong

Integer 64 bit unsigned

12.

unsignedInt

Integer 32 bit unsigned

13.

unsignedShort

Sebuah integer 16 bit unsigned

14.

unsignedByte

Integer 8 bit yang tidak bertanda tangan

Batasan

Jenis batasan berikut dapat digunakan dengan tipe data Miscellaneous kecuali pada tipe data boolean -

  • enumeration
  • length
  • maxLength
  • minLength
  • pattern
  • whiteSpace