Để mô tả dữ liệu trong một tài liệu XML, DTD được sử dụng rất phổ biến vì tính đơn giản của nó. Tuy nhiên đối với các tài liệu XML lớn và phức tạp, DTD bắt đầu bộc lộ nhiều hạn chế như: không hỗ trợ nhiều kiểu dữ liệu, không quy định được khoảng giá trị… Để khắc phục những hạn chế đó của DTD, XML schema được tạo ra.
XML Schema
XML Schema là gì?
Cùng một mục đích với DTD là kiểm tra cấu trúc và tính đúng đắn của một tài liệu XML. Tuy nhiên được ra đời sau, XML Schema được kế thừa những thành công của DTD và mở rộng thêm một số tính năng để khắc phục những hạn chế của DTD.
XML Schema được phát triển trên nền tảng của DTD và nổi trội hơn ở một số đặc điểm:
- Schema cũng là một dạng tài liệu theo chuẩn XML, do đó để mô tả cấu trúc của dữ liệu người dùng schema không cần phải làm quen với cấu trúc mới (DTD).
- Schema có thể mở rộng, người dùng có thể định nghĩa thêm các kiểu dữ liệu riêng từ các kiểu dữ liệu chuẩn.
- Schema hỗ trợ namespace.
- Schema hỗ trợ nhiều kiểu dữ liệu, định phạm vi giá trị dữ liệu, do đó có thể dễ dàng khai báo, tìm kiếm và kiểm tra tính đúng đắn của dữ liệu.
Các kiểu dữ liệu trong schema
Trong schema dữ liệu được chia làm hai loại:
- Loại có sẵn.
- Loại do người dùng tự định nghĩa.
Các dữ liệu có sẵn (built-in) bao gồm các loại: string
, bool
, numeric
, date Time
, binary
, anyURI
, integer
, decimal
, time
.
Ngoài các kiểu dữ liệu có sẵn, trong trường hợp cần thiết, người dùng có thể tự định nghĩa kiểu dữ liệu riêng.
Các dạng khai báo element trong schema
Simple Element
Cú pháp để khai báo 1 element
đơn giản.
<xs:element name="element-name" type="element-type"/>
Các element đơn giản
Nội dung XML
<fullname>Hòa Đinh</fullname> <age>21</age> <dateborn>04-11-1993</dateborn>
Schema tương ứng
<xs:element name="fullname" type="xs:string"/> <xs:element name="age" type="xs:integer" /> <xs:element name="dateborn" type="xs:date" />
Các attribute trong element
Nội dung XML
<xs:attribute name="attribute_name" type="attribute_type"/>
Với 1 element có chứa attribute
.
<article author="Hòa Đinh">XML</article>
Schema tương ứng
<xs:attribute name="author" type="xs:string"/>
Complex Element
Cú pháp để khai báo một complex
element
:
<xs:element name="element-name"> <xs:complexType> content </xs:complexType> </xs:element>
Element rỗng
Nội dung XML
<student id="110005" />
Schema tương ứng
<xs:element name="student"> <xs:complexType> <xs:attribute name="id" type="xs:Integer"/> </xs:complexType> </xs:element>
Element chỉ chứa các element con
Nội dung XML
<article> <author>Hòa Đinh</author> <editor>Larige Thai</editor> </article>
Schema tương ứng
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="author" type="xs:string"/> <xs:element name="editor" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Element chỉ chứa text
Nội dung XML
<product size="6">lumia 1320</product>
Schema tương ứng
<xs:element name="product"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="size" type="xs:integer" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
Element chứa text và các element con
Nội dung XML
<article> Number <number>103</number> Author <name>Kevin La</name>. Title <title>So Sánh null Và Rỗng</title> </article>
Schema tương ứng
<xs:element name="article"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:element name="title" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Schema Indicator
Để nâng cao khả năng đặc tả cấu trúc tài liệu XML, schema cung cấp thêm khái niệm "indicator
". XML Schema cung cấp một số indicators
:
All
: cácelement
con xuất hiện tối thiểu 1 lần, với thứ tự bất kì.Choice
: chỉ một trong số cácelement
con được xuất hiện.Sequence
: cácelement
con phải xuất hiện đúng theo thứ tự.maxOccurs
: số lần xuất hiện tối đa của mộtelement
.minOccurs
: số lần xuất hiện tối thiểu của mộtelement
.
Một số ví dụ để minh họa indicator
:
Schema mô tả các element phải xuất hiện đúng thứ tự.
<xs:element name="email"> <xs:complexType> <xs:sequence> <xs:element name="EmailFrom" type="xs:string"/> <xs:element name="EmailTo" type="xs:string"/> <xs:element name="Subject" type="xs:string"/> <xs:element name="Body" type="xs:string"/> <xs:element name="SMTPServer" type="xs:string"/> <xs:element name="SMTPClient" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Schema mô tả số lần xuất hiện tối đa và tối thiểu của các element
.
<xs:element name="staff"> <xs:complexType> <xs:sequence> <xs:element name="department" type="xs:string"/> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="2" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element>