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