2012年4月22日 星期日

XML技術之二

XML Schema 主要是來驗證XML文件定義的正確性,在早期的XML驗證技術是透過DTD(Datatype Definition)來做驗證,但是DTD的語句有不容易解讀而且也不支援Primitive資料類型的缺點,相對來說,XML Schema有遵循XML的結構的優點,可讀性以及延展性高,並且支援自訂資料型態,透過Schema定義一個節點標籤十分容易,僅需要指定名字以及資料型態,如這個例子:

<element name=“element name" type=" data types "/>

XML schema也支援常見的資料型態:
  1. string
  2. decimal
  3. integer
  4. boolean
  5. date
  6. time
值得注意的是根據W3C對XML Schema的設計,這些Data Type必須在以下命名空間(NameSpace)才得以使用:

W3C網站Recommendation原文

The ·built-in· datatypes defined by this specification are designed to be used with the XML Schema definition language as well as other XML specifications. To facilitate usage within the XML Schema definition language, the ·built-in· datatypes in this specification have the namespace name:
  • http://www.w3.org/2001/XMLSchema

設計一套XMLScheme並不困難,但是設計者必須要清楚了解語句的結構,以下例子,

1:  <?xml version="1.0" encoding="utf-8"?>  
2:  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">  
3:   <xs:element name="bookstore">  
4:    <xs:complexType>  
5:     <xs:sequence>  
6:      <xs:element name="book" type="booktype" minOccurs="0" maxOccurs="unbounded"/>  
7:     </xs:sequence>  
8:    </xs:complexType>  
9:    </xs:element>  
10:   <xs:complexType name = "booktype">  
11:    <xs:sequence>  
12:     <xs:element name="title" type="titletype"/>  
13:     <xs:element name="author" type="xs:string" minOccurs="1" maxOccurs="5"/>  
14:     <xs:element name="year"  type="xs:string"/>  
15:     <xs:element name="price" type="pricetype"/>  
16:    </xs:sequence>  
17:    <xs:attribute name="category" use="optional"/>  
18:   </xs:complexType>  
19:   <xs:simpleType name="pricetype">  
20:    <xs:restriction base="xs:double">  
21:     <xs:minExclusive value="0"/>  
22:     <xs:maxExclusive value="5000"/>  
23:    </xs:restriction>  
24:   </xs:simpleType>  
25:   <xs:complexType name="titletype">  
26:    <xs:simpleContent>  
27:     <xs:extension base="xs:string">  
28:      <xs:attribute name="lang" type="xs:string" use="required"/>  
29:     </xs:extension>  
30:    </xs:simpleContent>  
31:   </xs:complexType>  
32:  </xs:schema>  

這是一套Schema,在開頭第二行使用W3C所建議的NameSpace,因此可以引用預設的build-in Data Type,在之前加了xs的prefix,意思是一個Schema文件可以擁有兩套以上Schema定義,而在XML文件當中了解彼此的差別就透過prifix來作區分,在這個文件裡面定義了兩個節點,bookstore,和book,bookstore是根(root)節點裡面包含了至少零到多本book節點,透過使用minOccurs和maxOccurs來設定,而複雜的資料型態(例如有子結點,屬性等設定)必須要包含在complexType標籤當中,另外也自訂了資料型態稱作booktype,而booktype當中又設定了不同的子節點sequence,因此設計Schema必須要很了解XML各個節點的內涵並給予定義。

除了自己用手一筆一筆的鍵入Schema語句之外,另外也有另一套圖形化工具可以選擇-XMLSpy,用元件設計圖的方式來產生Schema定義也是個方便設計方式。

Reference:

1. W3C School

沒有留言:

張貼留言