Tab Menu

XSD - ví dụ về XML Schema

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

Hiện có 2 comments

Trưởng Bản Lạng Sơn

Blog của bạn rất đẹp. Hãy xem trang của tôi và góp ý cho tôi nhé.http://nhatro139nhithanh.blogspot.com/

Post a Comment

Bạn có thể tự do cho ý kiến, thảo luận về bài viết này nhưng phải theo những điều khoản sau:
- Phải nghiêm túc, không dung tục, không spam.
- Nội dung phải liên quan đến bài viết.
- Không mang tính chất chính trị...
- Hạn chế sử dụng Ẩn danh, hãy dùng Tên/URL để thay thế.
Lưu ý : Có thể sử dụng tag HTML cơ bản trong comment: br, b, i, u, a href= ...

:)
:(
;)
:D
=))
:-/
:x
I-)
@-)
=D:
:-q
:-w
[-X
B-)
:((
:-B
:-h
:x(
:-*
~O)
@};-

About

RSS
Coming soon... :))