generate xsd from xml, xml, xml schema, xsd tutorials XSD - XML Schema Example
XML Schema dùng để mô tả cấu trúc của một tài liệu XML - XML Schema Definition (XSD). Nó giống như DTD nhưng có nhiều ưu điểm hơn vì thế một ngày không xa nó sẽ thay thế hẳn DTD.
Bài viết này s chỉ sẽ trình bày một ví dụ về XSD, qua đó chúng ta sẽ cùng hiểu nhiều hơn về nó.


Đây là ví dụ của chúng ta books_adv.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<code id="123-AH"/>

<infoShop id="123-AH">
<address>324 Phan Van Tri</address>
<dateOpen>2010-05-23</dateOpen>
</infoShop>

<book category="COOKING" lang="en">
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN" lang="en">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<price>29.99</price>
<year>2005</year>
</book>

<book lang="en">
<title copyright="yes">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<price>49.99</price>
</book>

<book category="MANGA" lang="vi">
<title>Thần đồng đất Việt</title>
<author>Lê Linh</author>
<price>20.50</price>
</book>
</bookstore>
S sẽ giải thích một xí về yêu cầu của ví dụ để chúng ta tiện theo dõi file *.xsd bên dưới.
  • codeinfoShop là hai thẻ chỉ xuất hiện duy nhất 1 lần theo thứ tự.
  • book là thẻ xuất hiện nhiều lần và có các thẻ con không theo thứ tự.
  • thẻ con year có thể có hoặc không, author có thể có nhiều, title có thể có thuộc tính hoặc không.
  • infoShopid tuân theo patent: 000-AA
  • thẻ book có thuộc tính catelogy là kí tự IN HOA và không bắt buộc có mặt.
  • thuộc tính copyright chỉ có giá trị yes hoặc no, lang là bắt buộc trong thẻ book.


Và đây là XML schema của nó books_adv.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<!-- Thẻ: code -->
<xs:element name="code">
<xs:complexType>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-[A-Z]{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<!-- Thẻ: infoShop -->
<xs:element name="infoShop">
<xs:complexType>
<xs:sequence>
<xs:element name="address" type="xs:string" />
<xs:element name="dateOpen" type="xs:date"/>
</xs:sequence>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-[A-Z]{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<!-- Thẻ: book -->
<xs:element name="book" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<!-- Thẻ con của book -->
<xs:element name="title">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="copyright" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="yes|no"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="author" type="xs:string" maxOccurs="unbounded"/>
<xs:element name="year" type="xs:integer" minOccurs="0" />
<xs:element name="price" type="xs:decimal" />
</xs:choice>
</xs:sequence>
<!-- Thuộc tính của book -->
<xs:attribute name="category" use="optional" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([A-Z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="lang" type="xs:string" use="required" />
</xs:complexType>
</xs:element>

</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

XSD trên không phải là cách viết hay nó chỉ là cơ bản để chúng ta dễ tham khảo. Nếu có thời gian s sẽ viết lại nó theo hướng đối tượng, tối ưu hơn để cùng chia sẽ với các bạn.

Tài liệu tham khảo: http://www.w3schools.com/schema/default.asp
Kiểm tra XML và XSD online: http://www.xmlvalidation.com/index.php

Chúc các bạn sớm thành "chánh quả" pirate!!