2013年6月17日 星期一

[note] XML Schema 筆記 & 補充

最近一直常碰這個東西,實在是不容易懂的東西,來給他做個筆記。

什麼是XML Schema ? 簡單來說 就是用來定義XML文件的綱要。

維基解釋(點我)



了解並且如何看懂一份XML Schema

入門首要 ,我很推薦  XML Schema 從看不懂到慢慢懂

上述Blog 很清楚且簡單的解釋了如何去看懂一份 XML Schema 。

今天我們要講的是其他部分,

在跟DTD比較上 ,同樣都是用來定義XML的結構,

因為XML DTDs 在定義XML文件上有許多的限制(如支援型態過少、語法相容性差),

所以衍生出了XML Schema這種東西出來。

我們來看看XML Schema 的特點 :

1) 使用語法 與XML相同
2) 支援多種資料型態,並且可以自定義
3) 可以增加內容限制

<DTDs 文件>

 <!ELEMENT book (title, author, character*)>
<!ATTLIST book isbn CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT character (name, friend-of*, since, alias)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT friend-of (#PCDATA)>
<!ELEMENT since (#PCDATA)>
<!ELEMENT alias (#PCDATA)>

-------------------------------------------------------------------------------------------------------------------

<XML Schema 文件 >

雖然比較DTD上,多了許多,但是在說明一個XML文件上更清楚許多。



<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.books.org"
xmlns="http://www.books.org"
elementFormDefault="qualified">
   <xsd:element name="BookStore">
       <xsd:complexType>
           <xsd:sequence>
               <xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/>
           </xsd:sequence>
       </xsd:complexType>
    </xsd:element>
    <xsd:element name="Book">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Title" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="Author" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="Date" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="Publisher" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Title" type="xsd:string"/>
    <xsd:element name="Author" type="xsd:string"/>
    <xsd:element name="Date" type="xsd:string"/>
    <xsd:element name="ISBN" type="xsd:string"/>
    <xsd:element name="Publisher" type="xsd:string"/>
</xsd:schema>



然而在上述文件中,用的設計方式

Russian Doll => 如同寫程式巢狀迴圈一樣的寫法,由最外層的Root 元素逐漸向內
曾宣告,一層往內包一層。

Flat Catalog => 宣告簡單的元素、屬性,宣告Root 元素,並且使用ref 屬性來往下層
子元素去定義。

我們來看看XML Schema 的限制

<element ref="Title" minOccurs="1" maxOccurs="1"/>

其實等價於

<element ref="Title"/>

 [資料型態的限制、設定]

如果再設定一個Value 上,欲加上一些限制,可以舉例以下的方法來實作。

restriction
<xs:restriction base="xs:string">
pattern
<xs:pattern value="[0-9]{10}"/>
maxLength
<xs:maxLength value="32"/>
union : 由兩個以上的資料型態聯集而成
list : 用空白去分隔多個符合指定型態的Value


<Reference>
“XML Schema Tutorial”, by Roger L. Costello, September 2001
“Using W3C XML Schema”, by Eric van derVlist, October 2001,





沒有留言:

張貼留言