Download presentation
Presentation is loading. Please wait.
1
第 5 章 XML Schema文件
2
簡介XML Schema - 什麼是XML Schema
與DTD相同的,XML Schema也是用於驗證XML文件。 XML Schema是由微軟於2000/02/09向W3C提出,希望能夠取代DTD成為文件驗證的標準,且於2001/05/02成為建議標準(Recommendations)。 與DTD不同的,XML Schema本身就是一份Well-Formed XML文件,DTD並不是,從第4章的介紹,可以看出這點。
3
簡介XML Schema - DTD與XML Schema的比較
DTD所支援的資料型態過少,甚至可以說,DTD並沒有資料型態的差別,因為DTD只有#PCDATA一種資料型態。 整份XML文件僅能套用一份DTD,且XML文件內出現的元素,必須於DTD完成定義。 對於文件結構的表達,DTD的彈性太低,舉例來說,定義文件內A元素擁有1個或0個B元素,DTD可以很容易地表達,但是若要表達A元素擁有0個或5個以下B元素,DTD就無法表達。
4
簡介XML Schema - DTD與XML Schema的比較
XML Schema是一份Well-Formed XML,使用者只需學習XML Schema使用的元素名稱以及屬性,並不需要重新學習新的語法。 XML Schema支援更多的資料型態,如:布林值、整數、日期、字串、浮點數…等。 XML Schema使用開放架構,運用XML Schema的XML文件內,可以使用XML Schema並未定義的元素。運用DTD文件者,所使用的元素或屬性,則必須於DTD完成定義。
5
簡介XML Schema - DTD與XML Schema的比較
對於XML文件結構的定義,XML Schema具有更佳的彈性,可以定義類似A元素擁有0個或5個以下B元素的文件結構。 XML Schema支援名稱空間,有較佳的擴充性。 針對不同的元素,XML Schema可以指定不同的XML Schema文件。 由於XML Schema就是XML文件,因此,可以透過存取XML文件的程式介面,修改或存取XML Schema。
6
簡介XML Schema - XML Schema文件的基本架構
以下敘述將定義型態為字串的title元素。
7
簡介XML Schema - XML Schema文件的基本架構
以下的XML Schema敘述則定義型態為複雜型態的book元素,該元素將依序包含title元素、subtitle元素、author元素、publisher元素與price元素。
8
簡介XML Schema - XML Schema文件的基本架構
XML Schema文件內定義元素的方式有三種類型,一是直接在element標籤內,以complexType標籤定義元素的型態,進一步說明請參考5-2-1節,如下述:
9
簡介XML Schema - XML Schema文件的基本架構
另一種則是完成元素的定義,再以ref屬性參考至元素,進一步說明請參考5-2-2節。
10
簡介XML Schema - XML Schema文件的基本架構
另一種則是完成型態的定義,在宣告元素時,使用該型態,進一步說明請參考5-2-3節。
11
XML Schema的基礎 - 元素的宣告語法
<element name=元素名稱 minOccurs=最少發生次數 maxOccurs=最多發生次數 type=元素內容型態 default=預設值 fix=固定值 ref=參考元素> 元素內容 </element>
12
XML Schema的基礎 - 元素的宣告語法
文字元素的宣告: 對於未包含其他子元素的元素,僅需以空元素的方式宣告。 以下敘述將宣告title元素的內容為字串型態。
13
XML Schema的基礎 - 元素的宣告語法
包含子元素的元素: 對於包含其他子元素的元素,宣告時,除了element標籤外,還必須運用complexType標籤與sequence標籤(有關此兩標籤的說明,請參考5-2-3節與5-3-6節)。 以下敘述將定義book元素,包含title、subtitle、author、publisher、price子元素,且不限制出現次數:
14
XML Schema的基礎 - 元素的宣告語法
元素個數的設定: 對於元素個數的設定,將運用minOccurs與maxOccurs屬性控制,由於兩屬性的預設值均為1。若均不設定時,則代表該元素僅出現1次。下表將列出幾種常見的設定範例。
15
XML Schema的基礎 - 元素的宣告語法
以下敘述宣告title元素時,未設定minOccurs與maxOccurs屬性,均採預設值,表元素僅出現1次。 以下敘述,將設定book元素出現至少1次(minOccurs屬性使用預設值),至多不限制次數。
16
XML Schema的基礎 - 元素的宣告語法
預設值: 設定文字元素的預設值時,可將元素的預設值設定為default屬性。當元素未設定值,剖析器將自動以此值設定元素。 以下敘述將設定author元素為string型態,且預設值為『郭尚君』。
17
XML Schema的基礎 - 元素的宣告語法
固定值: 設定文字元素的值為某固定值時,可將該固定值設定給fixed屬性。若元素有設定值時,必須設定為此值。 以下敘述將設定publisher元素為string型態,固定值為『文魁資訊』。
18
XML Schema的基礎 - 元素的參考 5-2-1節介紹了XML Schema宣告元素的語法,但相信您也發現,若依照這個方式撰寫XML Schema文件,對於檢查結構再稍微複雜一些的XML文件,XML Schema文件的層級將非常深。 這個小節將介紹如何在宣告元素時,運用ref屬性,降低XML Schema文件的層級。 以下敘述將參考至已完成宣告的book元素。
19
XML Schema的基礎 - 型態的宣告 XML Schema文件宣告元素時,element標籤內包含的complexType標籤,可以獨立出來成為XML Schema文件定義元素型態的第三種宣告方式。 將complexType標籤獨立後,便可運用name屬性,定義complexType標籤所定義型態的名稱。定義元素時,將type屬性設定為型態的名稱,便可將元素定義為該資料型態。
20
XML Schema的基礎 - 型態的宣告 以下是在bookch5_xs.xsd內,定義book元素的敘述。
21
XML Schema的基礎 - 型態的宣告 若將complexType標籤從element標籤獨立出來,完成bookType型態的定義。宣告book元素時,便可將type屬性設定為bookType型態。
22
資料型態的宣告 - 內建資料型別 下表為基本資料型別(Primitive datatypes)的說明。
23
資料型態的宣告 - 內建資料型別
24
資料型態的宣告 - 內建資料型別
25
資料型態的宣告 - 內建資料型別 下表將說明衍生資料型態(Derived datatypes),以及各資料的衍生來源資料型態。
26
資料型態的宣告 - 內建資料型別
27
資料型態的宣告 - 內建資料型別
28
資料型態的宣告 - 內建資料型別
29
資料型態的宣告 - 自訂簡單資料型別–simpleType
<simpleType name=型態名稱> 元素內容 </simpleType>
30
資料型態的宣告 - restriction標籤的使用
simpleType標籤內可運用restriction標籤,定義資料型態的限制條件。語法如下: <restriction base=基本型態> 細節描述元素 </restriction>
31
資料型態的宣告 - restriction標籤的使用
minExclusive、maxExclusive minExclusive標籤用於設定元素內容的最小值,但不包含設定值,設定效果相當於大於(>)。maxExclusive標籤用於設定元素內容的最大值,但不包含設定值,設定效果相當於小於(<)。 以下敘述,將宣告priceType型態,並限制該型態之元素的內容大於300(不含),小於1100(不含)。
32
資料型態的宣告 - restriction標籤的使用
minInclusive、maxInclusive minInclusive標籤用於設定元素內容的最小值,且包含設定值,設定效果相當於大於等於(>=)。maxInclusive標籤用於設定元素內容的最大值,但不包含設定值,設定效果相當於小於等於(<=)。 以下敘述將宣告priceType型態,限制此型態之元素的內容大於等於300,小於等於1100。
33
資料型態的宣告 - restriction標籤的使用
totalDigits、fractionDigits totalDigits標籤用於設定數值型態的元素,其數值的總位數(包含小數部份),fractionDigits標籤則控制小數點位數。兩者的設定值,均必須為非負整數。 以下敘述將定義priceType型態,衍生於float型態,且元素內容有5位數字。
34
資料型態的宣告 - restriction標籤的使用
length、minLength、maxLength length標籤用於控制元素內容的字串長度。minLength、maxLength標籤則分別控制元素內容的最小長度與最大長度。此三標籤的設定值,均必須為非負整數。使用Big5編碼時,一個中文字的長度為2。 以下敘述將定義publisherType型態,衍生於string型態,且字串長度為8。
35
資料型態的宣告 - restriction標籤的使用
以下敘述將定義titleType型態,衍生於string型態,且內容字串的最小長度為5,最大長度為40。
36
資料型態的宣告 - restriction標籤的使用
enumeration enumeration標籤將以列舉方式定義元素可設定的內容。以下敘述將定義authorType型態衍生於string型態,且內容可為『郭尚君』或『馬孝瑀』。
37
資料型態的宣告 - restriction標籤的使用
whiteSpace 定義此型態對於內容中空白字元的處理方式,設定值可為preserve、replace、collapse。各設定值的意義說明如下: preserve - 不處理空白字元。 replace - 表#x9(tab)、#xA(line feed)與#xD(carriage return)將被取代為#x20(space)。 collapse - 連續的空白(#x20),將視為1個空白。 以下敘述將定義titleType型態,衍生於string型態,且設定剖析器不處理內容的空白。
38
資料型態的宣告 - restriction標籤的使用
pattern 定義此型態元素內容格式的正規語法,下表將說明常用的語法:
39
資料型態的宣告 - restriction標籤的使用
40
資料型態的宣告 - restriction標籤的使用
若欲使用正規語法內的符號時,則可在符號前加上跳脫字元 - 『\』,如:『\?』即代表『?』。 以下敘述將定義isbnType型態,衍生於string型態,並運用pattern設定其格式。
41
資料型態的宣告 - list標籤 list標籤用於配合simpleType標籤,定義資料內容為以空白間隔的資料串列型態,語法如下:
<list itemType=資料型態/> 以下敘述將定義authorlistType型態為authorType型態資料的串列,並運用enumeration標籤,定義authorType型態資料可設定的元素值(這樣也同時達到限制authorlistType設定值內容的目的)。
42
資料型態的宣告 - list標籤 以下敘述將衍生authorlistType型態,定義出限制資料串列內資料個數至少1個至多4個的authorlistlenType型態。
43
資料型態的宣告 - list標籤 以上敘述您亦可直接將定義authorType型態的simpleType標籤放到list標籤內,便可省略list標籤的itemType屬性。
44
資料型態的宣告 - union標籤 若元素的內容有兩種以上不同資料型態時,可以運用union標籤。語法如下:
<union itemType=資料型態串列/> 以下敘述將定義isbnType型態包含isbnType1與isbnType2,兩種資料型態。
45
資料型態的宣告 - union標籤 您亦可直接將isbnType1與isbnType2的宣告,直接置於union標籤,即可省略memberTypes屬性。
46
資料型態的宣告 - 自訂複雜資料型別–complexType
<complexType name=型態名稱 mixed=是否為混合內容> 元素內容 </complexType>
47
資料型態的宣告 - 自訂複雜資料型別–complexType
<complexType name=型態名稱 mixed=是否為混合內容> 元素內容 </complexType> 特定順序限制的sequence標籤 運用complexType標籤定義巢狀元素型態時,若使用sequence標籤,則被包含元素將限制元素依照宣告順序出現。
48
資料型態的宣告 - 自訂複雜資料型別–complexType
不限制順序的all標籤 運用complexType標籤定義巢狀元素型態時,若使用all標籤,則被包含的元素,出現的順序並不限制,但限制被包含元素的maxOccurs屬性,僅能設為1,minOccurs屬性則可被設為0或1,預設值為1。
49
資料型態的宣告 - 自訂複雜資料型別–complexType
選擇元素的choice標籤 運用complexType標籤定義巢狀元素型態時,若使用choice標籤,將可從包含元素裡,僅選擇一個元素出現。在choice標籤內,定義可選擇性元素的標籤,除了element標籤外,還有sequence、group與choice。
50
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告 選擇元素的choice標籤 運用complexType標籤定義巢狀元素型態時,若使用choice標籤,將可從包含元素裡,僅選擇一個元素出現。在choice標籤內,定義可選擇性元素的標籤,除了element標籤外,還有sequence、group與choice。
51
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告 混合元素的宣告 欲宣告內容為文字與元素混合的元素型態,必須在宣告型態時,將complexType標籤的mixed屬性設為true。
52
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告 空元素 宣告型態為空元素的資料型態時,僅需運用complexType空元素。 當然亦可直接將此complexType標籤置於element標籤內。
53
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告
資料型態的宣告 - 混合內容元素、空元素與未知型態元素的宣告 未知型態元素 若定義包含未知元素型態的資料型態,可運用any標籤。語法如下: <xs:any namespace=名稱空間 processContents=是否處理元素內容 minOccurs=最少個數 maxOccurs=最多個數/>
54
屬性的定義 - 定義屬性 屬性的宣告語法如下: <xs:attribute name=屬性名稱 type=資料型態 use=使用方式
default=預設值 fixed=固定值 ref=屬性參考/>
55
屬性的定義 - 定義屬性 巢狀元素 設定巢狀元素的屬性值時,只要在complexType標籤內,運用attribute標籤,定義屬性值即可。
以下敘述將宣告bookType資料型別為巢狀元素型態,並擁有sale屬性,預設值為Y,其型態將運用simpleType標籤與restriction標籤定義,衍生自string型態。
56
屬性的定義 - 定義屬性 空元素 若在complexType標籤內,刪除元素排列標籤,以及標籤內的元素宣告,便可宣告出擁有屬性的空元素。
以下敘述,則宣告authorType為空元素資料型態,且擁有string型態的name屬性。
57
屬性的定義 - 定義屬性 文字元素 若是欲定義文字元素擁有屬性時,則必須運用simpleContent標籤,配合extension標籤,宣告屬性的型態。 以下敘述將宣告publisherType型態衍生於string型態,並擁有tel屬性與FAX屬性的文字元素型態。
58
屬性的定義 - 未知類型的屬性 定義元素擁有未知類型的屬性時,可使用anyAttribute標籤,語法如下:
<xs:anyAttribute namespace=名稱空間 processContents=是否處理屬性內容/>
59
群組標籤 - 元素群組 對於某一組常用元素,可以運用group標籤群組這些元素,方便在Schema文件的其他部份引用,group標籤的使用語法如下: <group name=群組名稱 ref=參考群組 minOccurs=最少發生次數 maxOccurs=最多發生次數> 群組內容 </group>
60
群組標籤 - 元素群組 對於某一組常用元素,可以運用group標籤群組這些元素,方便在Schema文件的其他部份引用,group標籤的使用語法如下: <group name=群組名稱 ref=參考群組 minOccurs=最少發生次數 maxOccurs=最多發生次數> 群組內容 </group> 以下敘述將定義connectData群組,包含tel、FAX、 三種元素。
61
群組標籤 - 元素群組 以下敘述將在運用complexType標籤定義資料型態時,運用group標籤的ref屬性,引用connectData群組
62
群組標籤 - 屬性群組 對於某一組常用屬性,可以運用attributeGroup標籤群組這些屬性。
<attributeGroup name=群組名稱 ref=參考群組> 屬性群組 </attributeGroup> 以下敘述將運用attributeGroup標籤定義connectData屬性群組,包含tel、FAX、 三種屬性。
63
群組標籤 - 屬性群組 以下敘述將在定義authorType型態時,運用attributeGroup標籤配合ref屬性,引用connectData屬性群組。
64
應用程式資訊 對於一些提供給應用程式的文件資訊,可運用annotation標籤標示。annotation標籤可被XML Schema的所有標籤包含,做為Schema文件內各種元素、屬性…等標籤,提供應用程式資訊的途徑。 <xs:annotation> <xs:documentation source=文件來源 xml:lang=語言> 說明內容 </xs:documentation> <xs:appinfo source=資訊來源> 應用程式資訊 </xs:appinfo> </xs:annotation>
Similar presentations