640 likes | 803 Views
第 5 章 XML Schema文件. 簡介 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 章的介紹,可以看出這點。.
E N D
簡介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章的介紹,可以看出這點。
簡介XML Schema - DTD與XML Schema的比較 • 運用DTD文件驗證XML文件,有以下缺點: • DTD文件並不使用XML文件的語法,而是使用另一套語法,因此,使用者必須多學習一個語法。 • DTD所支援的資料型態過少,甚至可以說,DTD並沒有資料型態的差別,因為DTD只有#PCDATA一種資料型態。 • 整份XML文件僅能套用一份DTD,且XML文件內出現的元素,必須於DTD完成定義。 • 對於文件結構的表達,DTD的彈性太低,舉例來說,定義文件內A元素擁有1個或0個B元素,DTD可以很容易地表達,但是若要表達A元素擁有0個或5個以下B元素,DTD就無法表達。
簡介XML Schema - DTD與XML Schema的比較 • XML Schema則針對DTD的缺點做了許多改進,說明如下: • XML Schema是一份Well-Formed XML,使用者只需學習XML Schema使用的元素名稱以及屬性,並不需要重新學習新的語法。 • XML Schema支援更多的資料型態,如:布林值、整數、日期、字串、浮點數…等。 • XML Schema使用開放架構,運用XML Schema的XML文件內,可以使用XML Schema並未定義的元素。運用DTD文件者,所使用的元素或屬性,則必須於DTD完成定義。
簡介XML Schema - DTD與XML Schema的比較 • 對於XML文件結構的定義,XML Schema具有更佳的彈性,可以定義類似A元素擁有0個或5個以下B元素的文件結構。 • XML Schema支援名稱空間,有較佳的擴充性。 • 針對不同的元素,XML Schema可以指定不同的XML Schema文件。 • 由於XML Schema就是XML文件,因此,可以透過存取XML文件的程式介面,修改或存取XML Schema。
簡介XML Schema - XML Schema文件的基本架構 • 以XML Schema文件定義XML文件內資料的型態,將包含元素、型態與屬性三個部份,並分別介紹於5-2-1節、5-3節與5-4節。 • 以XML文件內元素的型態來說,主要可分為簡單型態與複雜型態兩種。 • 以下敘述將定義型態為字串的title元素。
簡介XML Schema - XML Schema文件的基本架構 • 以下的XML Schema敘述則定義型態為複雜型態的book元素,該元素將依序包含title元素、subtitle元素、author元素、publisher元素與price元素。
簡介XML Schema - XML Schema文件的基本架構 • XML Schema文件內定義元素的方式有三種類型,一是直接在element標籤內,以complexType標籤定義元素的型態,進一步說明請參考5-2-1節,如下述:
簡介XML Schema - XML Schema文件的基本架構 • 另一種則是完成元素的定義,再以ref屬性參考至元素,進一步說明請參考5-2-2節。
簡介XML Schema - XML Schema文件的基本架構 • 另一種則是完成型態的定義,在宣告元素時,使用該型態,進一步說明請參考5-2-3節。
XML Schema的基礎 - 元素的宣告語法 • 以下是XML Schema宣告元素的基本語法: <element name=元素名稱 minOccurs=最少發生次數 maxOccurs=最多發生次數 type=元素內容型態 default=預設值 fix=固定值 ref=參考元素> 元素內容 </element>
XML Schema的基礎 - 元素的宣告語法 • 文字元素的宣告:對於未包含其他子元素的元素,僅需以空元素的方式宣告。 • 以下敘述將宣告title元素的內容為字串型態。
XML Schema的基礎 - 元素的宣告語法 • 包含子元素的元素:對於包含其他子元素的元素,宣告時,除了element標籤外,還必須運用complexType標籤與sequence標籤(有關此兩標籤的說明,請參考5-2-3節與5-3-6節)。 • 以下敘述將定義book元素,包含title、subtitle、author、publisher、price子元素,且不限制出現次數:
XML Schema的基礎 - 元素的宣告語法 • 元素個數的設定:對於元素個數的設定,將運用minOccurs與maxOccurs屬性控制,由於兩屬性的預設值均為1。若均不設定時,則代表該元素僅出現1次。下表將列出幾種常見的設定範例。
XML Schema的基礎 - 元素的宣告語法 • 以下敘述宣告title元素時,未設定minOccurs與maxOccurs屬性,均採預設值,表元素僅出現1次。 • 以下敘述,將設定book元素出現至少1次(minOccurs屬性使用預設值),至多不限制次數。
XML Schema的基礎 - 元素的宣告語法 • 預設值:設定文字元素的預設值時,可將元素的預設值設定為default屬性。當元素未設定值,剖析器將自動以此值設定元素。 • 以下敘述將設定author元素為string型態,且預設值為『郭尚君』。
XML Schema的基礎 - 元素的宣告語法 • 固定值:設定文字元素的值為某固定值時,可將該固定值設定給fixed屬性。若元素有設定值時,必須設定為此值。 • 以下敘述將設定publisher元素為string型態,固定值為『文魁資訊』。
XML Schema的基礎 - 元素的參考 • 5-2-1節介紹了XML Schema宣告元素的語法,但相信您也發現,若依照這個方式撰寫XML Schema文件,對於檢查結構再稍微複雜一些的XML文件,XML Schema文件的層級將非常深。 • 這個小節將介紹如何在宣告元素時,運用ref屬性,降低XML Schema文件的層級。 • 以下敘述將參考至已完成宣告的book元素。
XML Schema的基礎 - 型態的宣告 • XML Schema文件宣告元素時,element標籤內包含的complexType標籤,可以獨立出來成為XML Schema文件定義元素型態的第三種宣告方式。 • 將complexType標籤獨立後,便可運用name屬性,定義complexType標籤所定義型態的名稱。定義元素時,將type屬性設定為型態的名稱,便可將元素定義為該資料型態。
XML Schema的基礎 - 型態的宣告 • 以下是在bookch5_xs.xsd內,定義book元素的敘述。
XML Schema的基礎 - 型態的宣告 • 若將complexType標籤從element標籤獨立出來,完成bookType型態的定義。宣告book元素時,便可將type屬性設定為bookType型態。
資料型態的宣告 - 內建資料型別 • 下表為基本資料型別(Primitive datatypes)的說明。
資料型態的宣告 - 內建資料型別 • 下表將說明衍生資料型態(Derived datatypes),以及各資料的衍生來源資料型態。
資料型態的宣告- 自訂簡單資料型別–simpleType • simpleType標籤將可以內建資料型態為基礎,衍生出自訂的資料型態。 • 以下是simpleType的定義語法: <simpleType name=型態名稱> 元素內容 </simpleType>
資料型態的宣告- restriction標籤的使用 • simpleType標籤內可運用restriction標籤,定義資料型態的限制條件。語法如下: <restriction base=基本型態> 細節描述元素 </restriction>
資料型態的宣告- restriction標籤的使用 • minExclusive、maxExclusiveminExclusive標籤用於設定元素內容的最小值,但不包含設定值,設定效果相當於大於(>)。maxExclusive標籤用於設定元素內容的最大值,但不包含設定值,設定效果相當於小於(<)。 • 以下敘述,將宣告priceType型態,並限制該型態之元素的內容大於300(不含),小於1100(不含)。
資料型態的宣告- restriction標籤的使用 • minInclusive、maxInclusiveminInclusive標籤用於設定元素內容的最小值,且包含設定值,設定效果相當於大於等於(>=)。maxInclusive標籤用於設定元素內容的最大值,但不包含設定值,設定效果相當於小於等於(<=)。 • 以下敘述將宣告priceType型態,限制此型態之元素的內容大於等於300,小於等於1100。
資料型態的宣告- restriction標籤的使用 • totalDigits、fractionDigitstotalDigits標籤用於設定數值型態的元素,其數值的總位數(包含小數部份),fractionDigits標籤則控制小數點位數。兩者的設定值,均必須為非負整數。 • 以下敘述將定義priceType型態,衍生於float型態,且元素內容有5位數字。
資料型態的宣告- restriction標籤的使用 • length、minLength、maxLengthlength標籤用於控制元素內容的字串長度。minLength、maxLength標籤則分別控制元素內容的最小長度與最大長度。此三標籤的設定值,均必須為非負整數。使用Big5編碼時,一個中文字的長度為2。 • 以下敘述將定義publisherType型態,衍生於string型態,且字串長度為8。
資料型態的宣告- restriction標籤的使用 • 以下敘述將定義titleType型態,衍生於string型態,且內容字串的最小長度為5,最大長度為40。
資料型態的宣告- restriction標籤的使用 • enumerationenumeration標籤將以列舉方式定義元素可設定的內容。以下敘述將定義authorType型態衍生於string型態,且內容可為『郭尚君』或『馬孝瑀』。
資料型態的宣告- restriction標籤的使用 • whiteSpace定義此型態對於內容中空白字元的處理方式,設定值可為preserve、replace、collapse。各設定值的意義說明如下: • preserve - 不處理空白字元。 • replace - 表#x9(tab)、#xA(line feed)與#xD(carriage return)將被取代為#x20(space)。 • collapse - 連續的空白(#x20),將視為1個空白。 • 以下敘述將定義titleType型態,衍生於string型態,且設定剖析器不處理內容的空白。
資料型態的宣告- restriction標籤的使用 • pattern定義此型態元素內容格式的正規語法,下表將說明常用的語法:
資料型態的宣告- restriction標籤的使用 • 若欲使用正規語法內的符號時,則可在符號前加上跳脫字元 - 『\』,如:『\?』即代表『?』。 • 以下敘述將定義isbnType型態,衍生於string型態,並運用pattern設定其格式。
資料型態的宣告 - list標籤 • list標籤用於配合simpleType標籤,定義資料內容為以空白間隔的資料串列型態,語法如下: <list itemType=資料型態/> • 以下敘述將定義authorlistType型態為authorType型態資料的串列,並運用enumeration標籤,定義authorType型態資料可設定的元素值(這樣也同時達到限制authorlistType設定值內容的目的)。
資料型態的宣告 - list標籤 • 以下敘述將衍生authorlistType型態,定義出限制資料串列內資料個數至少1個至多4個的authorlistlenType型態。
資料型態的宣告 - list標籤 • 以上敘述您亦可直接將定義authorType型態的simpleType標籤放到list標籤內,便可省略list標籤的itemType屬性。
資料型態的宣告 - union標籤 • 若元素的內容有兩種以上不同資料型態時,可以運用union標籤。語法如下: <union itemType=資料型態串列/> • 以下敘述將定義isbnType型態包含isbnType1與isbnType2,兩種資料型態。
資料型態的宣告 - union標籤 • 您亦可直接將isbnType1與isbnType2的宣告,直接置於union標籤,即可省略memberTypes屬性。
資料型態的宣告- 自訂複雜資料型別–complexType • 以下為complexType標籤的運用語法: <complexType name=型態名稱 mixed=是否為混合內容> 元素內容 </complexType>
資料型態的宣告- 自訂複雜資料型別–complexType • 以下為complexType標籤的運用語法: <complexType name=型態名稱 mixed=是否為混合內容> 元素內容 </complexType> • 特定順序限制的sequence標籤運用complexType標籤定義巢狀元素型態時,若使用sequence標籤,則被包含元素將限制元素依照宣告順序出現。
資料型態的宣告- 自訂複雜資料型別–complexType • 不限制順序的all標籤運用complexType標籤定義巢狀元素型態時,若使用all標籤,則被包含的元素,出現的順序並不限制,但限制被包含元素的maxOccurs屬性,僅能設為1,minOccurs屬性則可被設為0或1,預設值為1。
資料型態的宣告- 自訂複雜資料型別–complexType • 選擇元素的choice標籤運用complexType標籤定義巢狀元素型態時,若使用choice標籤,將可從包含元素裡,僅選擇一個元素出現。在choice標籤內,定義可選擇性元素的標籤,除了element標籤外,還有sequence、group與choice。
資料型態的宣告- 混合內容元素、空元素與未知型態元素的宣告 • 選擇元素的choice標籤運用complexType標籤定義巢狀元素型態時,若使用choice標籤,將可從包含元素裡,僅選擇一個元素出現。在choice標籤內,定義可選擇性元素的標籤,除了element標籤外,還有sequence、group與choice。