1 / 46

第四章 XML Schema

第四章 XML Schema. Schema 與 DTD 的比較 XML Schema 的特性 XML 資料型態 XML Schema 屬性宣告. 簡介. 現今 XML 最主要的功能是在程式、系統或是公司、組織之間交換資料,所以資料的正確性是相當重要的。資料的結構與格式的正確是基礎要求,這可以透過 XML Schema 或是 Document Type Definition (DTD) 來定義。 XML Schema 提供比 DTD 更多的彈性,且與 XML 語法相容,所以是較好的選擇。. Schema 與 DTD 的比較.

varsha
Download Presentation

第四章 XML Schema

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 XML Schema Schema 與DTD的比較 XML Schema 的特性 XML 資料型態 XML Schema 屬性宣告

  2. 簡介 • 現今 XML 最主要的功能是在程式、系統或是公司、組織之間交換資料,所以資料的正確性是相當重要的。資料的結構與格式的正確是基礎要求,這可以透過 XML Schema 或是 Document Type Definition (DTD) 來定義。 • XML Schema 提供比 DTD 更多的彈性,且與 XML 語法相容,所以是較好的選擇。

  3. Schema 與 DTD 的比較 • DTD 的缺點 • DTD 採用與 XML 不同的語法 • 無法支援名稱空間(Namespace) • 僅能支援有限的資料型態 • 建立於字串取代的延伸機制(參數實體)

  4. XML Schema的特性 • XML Schema 本身就是一份良好格式的XML文件。 • XML Schema 支援更多XML元素的「資料型態」,可以定義各種XML元素的資料型態。 • XML Schema支援名稱空間,比起DTD擁有更大的擴充性。

  5. 結構 • XML Schema 和 DTD 定義了一篇 XML 文章內可以使用的元素和屬性。XML Schema 提供比 DTD 更嚴格的定義。

  6. 結構 • 常用的Schema元素如下表所示:

  7. XML Schema 資料型態 • XML Schema 支援多達四十種以上的資料型態,而且允許使用者自定資料型態,這些資料型態是使用在XML元素和屬性內容。

  8. 內建資料型態 • XML Schema支援內建資料型態,能夠直接用來定義XML元素或屬性的內容,如下所示: 上述指令的type屬性使用的就屬於內建資料型態string和decimal,用來定義XML元素code和price內容的資料型態。 <xsd:element name=“code” type=“xsd:string”/> <xsd:element name=“price” type=“xsd:decimal”/>

  9. 基本資料型態 • XML Schema 內建的資料型態都是由一些基本資料型態所產生,如下表所示:

  10. 自訂資料型態 • 當需要替XML元素或屬性自訂資料型態時,我們需要使用simpleType元素定義所需的資料型態,語法如下所示: <simpleType name=“name” base=“datatypes”> <facets_element value=“value”/> ………… </simpleType>

  11. 自訂資料型態(續) • 前頁simpleType元素的屬性說明如下: • Name屬性:使用者自訂資料型態的名稱。 • Base屬性:基底的資料型態,例如:string , boolean , float , double , decimal…等。

  12. 自訂資料型態(續) • 在simpleType元素的子元素facets_element就是在描述資料型態的細節,如下所示

  13. 自訂資料型態(續) • 定義數字範圍: • 使用simpleType元素定義一個範圍的數字資料型態,例如訂購的數量最少為1,最大為100,如下所示: • 上述指令轉換成數學運算示可表示成: 0<=OrderQuantity<=100 <simpleType name=“OrderQuantity” base=“integr”> <minInclusive value=“1”/> <maxInclusive value=“100”/> </simpleType>

  14. 自訂資料型態(續) • 定義列舉的元素內容 • 如果元素內容為列與清單中的其中之一,如:色彩值紅、白、黑、和藍,如下所示。 <simpleType name=“color” base=“string”> <enumeration value=“red”/> <enumeration value=“white”/> <enumeration value=“blue”/> <enumeration value=“black”/> </simpleType>

  15. 自訂資料型態(續) • 正規語法 • 當我們需要定義一個字串的模型如 02-22222222時,可以用以下的指令: <simpleType name=“PhoneNumver” base=“string”> <length value=“11”/> <pattern value=“\d{2}-\d{8}”/> </simpleType>

  16. 自訂資料型態(續) • 上頁的\d代表數字,前二位,後八位,中間有個“-”符號,一些常用的正規語法如下:

  17. XML元素宣告 • XML Schema的目的就是在宣告XML文件的元素,目前共有兩種方法進行宣告,第一種是參考其他已經定義好的資料型態,另一種就是使用complexType元素同時定義字元素和資料型態,首先我們先來看看第一種元素宣告,使用的為element元素,基本的語法如下所示: <element name=“name” type=“type“ minOccurs=“int” maxOccurs=“int”/>

  18. XML元素宣告(續) • 上頁的宣告各屬性參數說明如下: • name屬性:此為XML元素名稱。 • type屬性:XML元素內容的資料型態,可為內建資料型態、simpleType和complexType 元素宣告的資料或名稱型態。 • minOccurs屬性:元素最少出現的次數。 • maxOccurs屬性:元素最多出現的次數,如為unbounded表示無限次數。

  19. XML元素宣告(續) • minOccurs和maxOccurs屬性值和其意義,相對於DTD指令如下表所示:

  20. 內建資料型態 • 如果XML元素內容為內建資料型態,且沒有擁有其他子元素,此時便可直接使用內建資料型態宣告XML元素。 • 上述element元素宣告一個title的XML元素,此元素為字串string,而且只會出現一次。 <element name=“title” type=“string” minOccurs=“1” maxOccurs=“1”/>

  21. 內建資料型態(續) • 如果XML擁有固定值,此時可使用fixed屬性指定元素值。 • 上述XML元素zero的值為0,因為我們使用fixed屬性指定其值。 <element name=“zero” type=“unsignedByte” fixed=“0” minOccurs=“1” maxOccurs=“1”/>

  22. simpleType元素 • 對於比較複雜的資料型態,例如:ISBN圖書書號,我們可以用simpleType元素定義所需的新資料型態,如下: <simpleType name=“ISBNType” base=“string”> <pattern value=“\d{3}-\d{3}-\d{3}-\d{1}”/> </simpleType>

  23. simpleType元素(續) • 在定義好所需的資料型態後,我們就可以使用此型態宣告XML元素: • 上述元素定義XML的ISBN元素,使用的資料型態就是上頁定義的ISBNType,則所呈現的資料舉例如下: ex:957-717-658-5 <element name=“ISBN” type=“ISBNType” minOccurs=“1” maxOccurs=“1”/>

  24. complexType元素 • 如果XML元素擁有子元素,此時我們就需要使用complexType元素的子元素名稱和型態 • 上述的complexType元素的屬性參數說明如下: • name屬性:此為資料型態的名稱。 • content屬性:說明元素的內容為何,值elementOnly表示在宣告XML元素,值mixed表示宣告元素和屬性,值empty表示此為空元素。 <complexType name=“name” content=“elementOnly”> <element …/> </complexType>

  25. complexType元素(續) • 上述的complexType元素定義了bookType的內容,也就是子元素code、title、authorlist和price,其中authorlist也是另一個complexType元素。 <complexType name=“bookType” content=“elementOnly”> <element name=“code” type=“string”/> <element name=“title” type=“string”/> <element name=“authorlist” type=“authorlsitType”/> <element name=“price” type=“decimal”/> </complexType>

  26. complexType元素(續) • 上述這個元素出現次數最少為1,最多為無限,使用的bookType是上頁所宣告的一個complexType元素所建立的名稱型態,所以book元素擁有子元素code、title、authorlist和price。。 <element name=“book” type=“bookType” minOccurs=“1” maxOccurs=“unbounded”/>

  27. complexType元素(續) • complexType元素的語法除了屬性外,其本身還擁有一些指令的子元素,如下:

  28. complexType元素(續) • 我們也可以用另一種方式,直接在element元素使用complexType子元素定義XML元素的子元素和屬性,如下: <element name=“name”> <complexType> ….. </complexType> </element>

  29. sequence順序元素 • sequence元素可以宣告XML子元素出現的順序,例如:book元素的子元素依序為code、title、authorlist和price,如下: <complexType name=“bookType” content=“elementOnly”> <sequence> <element name=“code” type=“string”/> <element name=“title” type=“string”/> <element name=“authorlist” type=“authorlsitType”/> <element name=“price” type=“decimal”/> </sequence> </complexType>

  30. choice選項元素 • 如果XML元素出現的次數允許選擇,也可能重覆出現,也可能不出現,choice可指定那些XML元素為選項元素: <choice> <element name=“a” type=“string minOccurs=“1” maxOccurs=“1”/> <element name=“b” type=“string” minOccurs=“1” maxOccurs=“1”/> <element name=“c” type=“stringl” minOccurs=“1” maxOccurs=“1”/> </choice> • 上述指令為三選一,只能為a,b,c元素其中之一。

  31. choice選項元素(續) • 如果有需要重覆出現,choice需要指定屬性。如下: <choice minOccurs=“0” maxOccurs=“unbounded”> ………… </choice> • 上述元素屬性minOccurs和maxOccurs指出choice元素下的XML元素允許出現無限次,也可以為零次。

  32. empty空元素 • 上述元素image並沒有內容,只擁有屬性file,此時合法的元素如下: <image file=“f1234.gif”/> • 如果XML元素為空元素,只需指定complexType元素的content屬性即可 <element name=“image” minOccurs=“1” maxOccurs=“1”> <complexType content=“empty”> <attribute name=“file” type=“string” use=“required”/> </complexType> </element>

  33. group群組元素 • 對於XML文件一些基本的XML元素,我們可以將它們給合成為一個group元素,例如:code,title,authorlist和price元素。 <group name=“bookData”> <sequence> <element name=“code” type=“string”/> <element name=“title” type=“string”/> <element name=“authorlist” type=“authorlsitType”/> <element name=“price” type=“decimal”/> </sequence> </group>

  34. group群組元素(續) • 上述的group元素將code,title,authorlist和price建立成一個稱為bookData的群組,在建立好群組後,我們可以在宣告時直接使用此群組,下頁說明如何使用。

  35. group群組元素(續) • 上述的group元素使用ref屬性指定使用的群組,並可以指定出現的次數,不過請注意group元素需在真的參考前宣告。 <complexType name=“bookType” content=“elementOnly”> <sequence> <group ref=“bookData” minOccurs=“1” maxOccurs=“1”/> <element name=“image” minOccurs=“1” maxOccurs=“1”> <complexType content=“empty”> <attribute name=“file” type=“string” use=“required”/> </complexType> </element> </sequence> </complexType>

  36. XML Schema屬性宣告 • 使用XML Schema宣告XML元素後,接下來就是宣告XML元素的屬性,基本上屬性的宣告方式有兩種,一種使用內建資料型態或simpleType元素的自訂資料型態,另一種是在宣告同時,使用simpleType元素宣告所需的資料型態。

  37. XML元素屬性 • 如果XML元素擁有屬性,我們就需要在宣告complexType元素或element元素時,同時宣告元素的屬性,使用的就是attribute元素,其語法如下: <attribute name=“name” type=“simple_type” use=“how_its_used” value=“value”/>

  38. XML元素屬性(續) • 上頁attribute元素可以宣告XML元素的屬性,一個attribute元去宣告一個屬性,其屬性參數的說明如下: • Name屬性:XML元素的屬性名稱。 • Type屬性:屬性的資料型態,可以使用內建或simpleType元素定義的資料型態。 • Use/value屬性:這兩個屬性擁有關連性,use屬性為XML屬之的使用方式,不同的使用方式擁有不同的value屬性值,詳細的說明,如下表所示。

  39. XML元素屬性(續)

  40. complexType元素的屬性 • 當使用attribute元素宣告XML屬性,通常都屬於complexType元素的子元素,如果complexType元素同時宣告有元素和屬性,此時的content屬性值為mixed。 <complexType name=“bookType” content=“mixed”> <sequence> …. </sequence> <attribute name=“sales” use=“required” type=“boolean”/> </complexType>

  41. complexType元素的屬性(續) • 上頁的attribute元素宣告一個sales屬性required表示為必須的屬性,宣告的屬性屬於此complexType元素的element元素,也就是book元素,如下: <element name=“book” type=“bookType” minOccurs=“1” maxOccurs=“unbounded”/> • 上述的element元素宣告一個XML元素book,這個元素擁有屬性sales。

  42. Element元素的屬性 • 同樣的attribute也可以屬於element元素的子元素,例如XML元素book擁有屬性code,如下所示: <element name=“book” type=“string”> <attribute name=“code” type=“string” use=“required”/> </element> • 上述指示使用element元素宣告一個XML元素book後,同時也使用attribute宣告此元素的屬性code。

  43. 宣告XML屬性同時宣告資料型態 • 如果屬性值不是使用內建的資料型態,此時我們可以在宣告屬性時,同時使用simpleType元素宣告屬性的資料型態。 <attribute name=“name” use=“how_its_used” value=“value”> <simpleType base=“simpleType”> …………. </simpleType> </attribute>

  44. attributeGroup元素 • 如同宣告XML元素時使用group群組元素,XML屬性一樣也可以使用attributeGroup元素建立群組屬性,例如:將原來圖書資料的XML元素都改為屬性內容,如下 <attributeGroup name=“bookAttr”> <element name=“code” type=“string” use=“required”/> <element name=“title” type=“string” use=“required” /> <element name=“author” type=“string” use=“required” /> <element name=“price” type=“decimal” use=“required” /> </attributeGroup>

  45. attributeGroup元素(續) • 上頁群組屬性bookAttr宣告code,title, author和price屬性,接著可以在宣告XML元素book時,直接套用群組屬性,如下: <element name=“image” minOccurs=“1” maxOccurs=“1”> <complexType content=“empty”> <attributeGropu ref=“bookAttr”/> </complexType> </element>

  46. attributeGroup元素(續) • 上頁attributeGroup元素使用ref屬性參考群組屬性bookAttr,也就是說XML元素book將擁有群組屬性的所有屬性,如下: <book code=“F8931” title=“XML Schema探討” author=“JACK” price=“500”/>

More Related