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
待續...
沒有留言:
張貼留言