2013年4月2日 星期二

XSD 簡介, a XML Schema (一)

###  This article is reference to : w3schools.com  ###


XML schema 是用來描述XML的內容

目前有兩種方式來描述XML的內容結構:
     1. DTDs
     2. XML schema (xsd)

XML schema 比 DTD 好,因為schema的擴充性高且支援 Data type

以下是一 XML schema (以下簡稱 xsd ) 範例:

a simple XML name: "note.xml"
<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

這個是上面 note.xml 的 xsd 描述
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

1. 由上可知 xsd 本身也是一個 XML, (用一個XML來描述另一個XML的結構)
2. 可以定義XML中有那些 elements
3. 定義 有哪些 attributes
4. 定義 那些 elements 是 child elements
5. 定義 child element 之間的順序關係
6. 定義 element 的內容是否 empty 或有文字(Text)內容
7. 定義 資料型態(data type)
8. 定義 element 或 attributes 的 default value 或 fixed value


下面這個 XML 內容可以 reference "note.xsd" (加入藍色的部分)
<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>


基本 xsd 框架如下:
<?xml version="1.0"?>

<xs:schema>
...
...
</xs:schema>


<名詞解釋>  simple element / complex element

XSD simple element: 表示這個element 的內容頂多只能是文字,不能有其他element ,不能有其他attribute。

不滿足以上條件的都是 complex element

下面這個範例就是 simple element,  其element 的內容頂多是文字
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

下面這個範例,element 有 attribute, 所以他就是 complex type
<lastname lang="EN">Smith</lastname>

如何使用xsd 描述 simple type:
xsd 如下範例:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>


<xs:element name="xxx" type="yyy"/>

xxx is name of element
yyy is data type of the element


xsd 有許多內建的 data type, 下面是依些常見的
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

前面有提到 xsd 還可以定義 element 的 default value 或 fixed value
範例如下:
<xs:element name="color" type="xs:string" default="red"/>

<xs:element name="color" type="xs:string" fixed="red"/>


xsd 如何描述 attribute: 範例如下: (和描述 simple type element 很像)
<xs:attribute name="xxx" type="yyy"/>

<xs:attribute name="lang" type="xs:string" default="EN"/>

<xs:attribute name="lang" type="xs:string" fixed="EN"/>

Attribute對於element 來說,有時候是 optional,有時候是 Must
像上面的範例沒特別說明,表示 optional
若是 must
<xs:attribute name="lang" type="xs:string" use="required"/>


************************************************************

我們也可以對 element 或 attribute 的內容做規範限制 (Restrictions)

下面這個範例 我們對 "age" element 的內容作一些 restrictions
<xs:element name="age">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="120"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

age 的base = integer, 最小值 0, 最大值 120


待續...