第四章 xml schema

46
• Schema 與 DTD 與與與 • XML Schema 與與與 • XML 與與與與 • XML Schema 與與與與 與與與 XML Schema

Upload: varsha

Post on 22-Jan-2016

105 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 第四章  XML Schema

• Schema 與 DTD 的比較• XML Schema 的特性• XML 資料型態• XML Schema 屬性宣告

第四章 XML Schema

Page 2: 第四章  XML Schema

簡介

•現今 XML 最主要的功能是在程式、系統或是公司、組織之間交換資料,所以資料的正確性是相當重要的。資料的結構與格式的正確是基礎要求,這可以透過 XML Schema 或是 Document Type Definition (DTD) 來定義。

• XML Schema 提供比 DTD 更多的彈性,且與 XML 語法相容,所以是較好的選擇。

Page 3: 第四章  XML Schema

Schema 與 DTD 的比較• DTD 的缺點

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

Page 4: 第四章  XML Schema

XML Schema 的特性• XML Schema 本身就是一份良好格式的 XML文件。

• XML Schema 支援更多 XML 元素的「資料型態」,可以定義各種 XML 元素的資料型態。

• XML Schema 支援名稱空間,比起 DTD 擁有更大的擴充性。

Page 5: 第四章  XML Schema

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

Page 6: 第四章  XML Schema

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

元素 說明schema XML Schema 文件的根元素simpleType 使用者自已定義的資料型態element 宣告 XML 元素complexType 宣告 XML 元素的子元素attribute 宣告元素的屬性

Page 7: 第四章  XML Schema

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

Page 8: 第四章  XML Schema

內建資料型態

• XML Schema 支援內建資料型態,能夠直接用來定義 XML 元素或屬性的內容,如下所示 :

上述指令的 type 屬性使用的就屬於內建資料型態 string 和 decimal ,用來定義 XML 元素 code和 price 內容的資料型態。

<xsd:element name=“code” type=“xsd:string”/>

<xsd:element name=“price” type=“xsd:decimal”/>

Page 9: 第四章  XML Schema

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

資料型態 格式說明 資料型態 格式說明string “HELLO” recurringDuratio

n時間資料

boolean true,1,false,0 uriReference URL 網址float 浮點數字 ID 唯一的號碼double 雙精度浮點數 IDREF 其他 ID 屬性值decimal 數字 ENTITY 實體timeDuration

時間資料 NOTATION 參考的記法

Page 10: 第四章  XML Schema

自訂資料型態•當需要替 XML 元素或屬性自訂資料型態時,我們需要使用 simpleType 元素定義所需的資料型態,語法如下所示 :

<simpleType name=“name” base=“datatypes”>

<facets_element value=“value”/>

…………

</simpleType>

Page 11: 第四章  XML Schema

自訂資料型態 (續 )•前頁 simpleType 元素的屬性說明如下 :

– Name 屬性:使用者自訂資料型態的名稱。– Base 屬性:基底的資料型態,例如: string , boolean , float , double , decimal… 等。

Page 12: 第四章  XML Schema

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

元素 說明minInclusive 內容的最小且包含在內的值maxInclusive 內容的最大且包含在內的值minExclusive 內容的最小值但不包含在內maxExclusive 內容的最大值但不包含在內length 元素內容的長度minLength 元素內容的最小長度maxLength 元素內容的最大長度pattern 正規語言的元素內容enumeration 定義列舉元素內容

Page 13: 第四章  XML Schema

自訂資料型態 (續 )

• 定義數字範圍:–使用 simpleType 元素定義一個範圍的數字資料型態,例如訂購的數量最少為 1,最大為 100,如下所示:

–上述指令轉換成數學運算示可表示成:0<= OrderQuantity<=100

<simpleType name=“OrderQuantity” base=“integr”> <minInclusive value=“1”/> <maxInclusive value=“100”/></simpleType>

Page 14: 第四章  XML Schema

自訂資料型態 (續 )•定義列舉的元素內容

–如果元素內容為列與清單中的其中之一,如:色彩值紅、白、黑、和藍,如下所示。

<simpleType name=“color” base=“string”>

<enumeration value=“red”/>

<enumeration value=“white”/>

<enumeration value=“blue”/>

<enumeration value=“black”/>

</simpleType>

Page 15: 第四章  XML Schema

自訂資料型態 (續 )•正規語法

–當我們需要定義一個字串的模型如02-22222222 時,可以用以下的指令:

<simpleType name=“PhoneNumver” base=“string”>

<length value=“11”/>

<pattern value=“\d{2}-\d{8}”/>

</simpleType>

Page 16: 第四章  XML Schema

自訂資料型態 (續 )

•上頁的 \d 代表數字,前二位,後八位,中間有個“ -”符號,一些常用的正規語法如下:正規語法 範例

Chap\d \d 為數字,例如 Chap1,Chap2

a*b * 為任何次數的重複字元,例如 b 、 ab 、 aab

[xyz]a [] 內的字元為任一,例如 xa 、 ya 、 za

b?c ? 為 0 或 1 ,例如 c 、 bc

a+b + 為最小一次重覆字元,例如 ab 、 aab 、 aaab

[a-d]x 定義範圍,例如 ax 、 bx 、 cx 、 dx

a{1,3}x 定義字元個數為 1 到 3 ,例如 ax 、 aax 、 aaax

Page 17: 第四章  XML Schema

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

<element name=“name” type=“type“ minOccurs=“int” maxOccurs=“int”/>

Page 18: 第四章  XML Schema

XML 元素宣告 (續 )•上頁的宣告各屬性參數說明如下:

– name 屬性:此為 XML 元素名稱。– type 屬性: XML 元素內容的資料型態,可為內建資料型態、 simpleType 和 complexType 元素宣告的資料或名稱型態。

– minOccurs 屬性:元素最少出現的次數。– maxOccurs 屬性:元素最多出現的次數,如為 unbounded 表示無限次數。

Page 19: 第四章  XML Schema

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

minOccurs

maxOccurs

說明

0 1 0 或 1 ,相當於 DTD 的「 ? 」

1 1 出現一次0 Unbounde

d0 或無限,相當於 DTD 的「 * 」

1 unbounded

1 或無限,相當於 DTD 的「 + 」

Page 20: 第四章  XML Schema

內建資料型態•如果 XML 元素內容為內建資料型態,且沒有擁有其他子元素,此時便可直接使用內建資料型態宣告 XML 元素。

•上述 element 元素宣告一個 title 的 XML元素,此元素為字串 string ,而且只會出現一次。

<element name=“title” type=“string” minOccurs=“1” maxOccurs=“1”/>

Page 21: 第四章  XML Schema

內建資料型態 (續 )•如果 XML 擁有固定值,此時可使用 fixed屬性指定元素值。

•上述 XML 元素 zero 的值為 0,因為我們使用 fixed 屬性指定其值。

<element name=“zero” type=“unsignedByte” fixed=“0” minOccurs=“1” maxOccurs=“1”/>

Page 22: 第四章  XML Schema

simpleType 元素•對於比較複雜的資料型態,例如: ISBN圖書書號,我們可以用 simpleType 元素定義所需的新資料型態,如下:

<simpleType name=“ISBNType” base=“string”>

<pattern value=“\d{3}-\d{3}-\d{3}-\d{1}”/>

</simpleType>

Page 23: 第四章  XML Schema

simpleType 元素 (續 )•在定義好所需的資料型態後,我們就可以使用此型態宣告 XML 元素:

•上述元素定義 XML 的 ISBN 元素,使用的資料型態就是上頁定義的 ISBNType ,則所呈現的資料舉例如下:

ex:957-717-658-5

<element name=“ISBN” type=“ISBNType” minOccurs=“1” maxOccurs=“1”/>

Page 24: 第四章  XML Schema

complexType 元素

• 上述的 complexType 元素的屬性參數說明如下:– name 屬性:此為資料型態的名稱。– content 屬性:說明元素的內容為何,值 elementOnly 表示在宣告 XML 元素,值 mixed 表示宣告元素和屬性,值 empty 表示此為空元素。

<complexType name=“name” content=“elementOnly”>

<element …/>

</complexType>

•如果 XML 元素擁有子元素,此時我們就需要使用 complexType 元素的子元素名稱和型態

Page 25: 第四章  XML Schema

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>

Page 26: 第四章  XML Schema

complexType 元素 (續 )

•上述這個元素出現次數最少為 1,最多為無限,使用的 bookType 是上頁所宣告的一個 complexType 元素所建立的名稱型態,所以 book元素擁有子元素 code 、 title 、authorlist 和 price 。。

<element name=“book” type=“bookType” minOccurs=“1” maxOccurs=“unbounded”/>

Page 27: 第四章  XML Schema

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

子元素 說明sequence

XML 子元素需依順序出現

choice 可以是 XML 子元素的任一個或數個group 將基本的 XML 子元素建立成為一個群組element 宣告 XML 元素attribute 宣告 XML 屬性

Page 28: 第四章  XML Schema

complexType 元素 (續 )•我們也可以用另一種方式,直接在 element元素使用 complexType 子元素定義 XML 元素的子元素和屬性,如下:

<element name=“name”>

<complexType>

…..

</complexType>

</element>

Page 29: 第四章  XML Schema

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>

Page 30: 第四章  XML Schema

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 元素其中之一。

Page 31: 第四章  XML Schema

choice 選項元素 (續 )

•如果有需要重覆出現, choice 需要指定屬性。如下:

<choice minOccurs=“0” maxOccurs=“unbounded”>

…………

</choice>

上述元素屬性 minOccurs 和 maxOccurs指出 choice 元素下的 XML 元素允許出現無限次,也可以為零次。

Page 32: 第四章  XML Schema

empty 空元素

•上述元素 image並沒有內容,只擁有屬性 file ,此時合法的元素如下 :

<image file=“f1234.gif”/>

<element name=“image” minOccurs=“1” maxOccurs=“1”>

<complexType content=“empty”>

<attribute name=“file” type=“string” use=“required”/>

</complexType>

</element>

如果 XML 元素為空元素,只需指定 complexType 元素的 content 屬性即可

Page 33: 第四章  XML Schema

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>

Page 34: 第四章  XML Schema

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

Page 35: 第四章  XML Schema

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>

Page 36: 第四章  XML Schema

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

Page 37: 第四章  XML Schema

XML 元素屬性•如果 XML 元素擁有屬性,我們就需要在宣告 complexType 元素或 element 元素時,同時宣告元素的屬性,使用的就是 attribute 元素,其語法如下:

<attribute name=“name” type=“simple_type” use=“how_its_used” value=“value”/>

Page 38: 第四章  XML Schema

XML 元素屬性 (續 )

•上頁 attribute 元素可以宣告 XML 元素的屬性,一個 attribute 元去宣告一個屬性,其屬性參數的說明如下:– Name 屬性: XML 元素的屬性名稱。– Type 屬性:屬性的資料型態,可以使用內建或 simpleType 元素定義的資料型態。

– Use/value 屬性:這兩個屬性擁有關連性, use 屬性為 XML 屬之的使用方式,不同的使用方式擁有不同的 value 屬性值,詳細的說明,如下表所示。

Page 39: 第四章  XML Schema

XML 元素屬性 (續 )Use 屬性值 Value 屬性值 說明

Optional N/A 屬性可有可無,沒有預設值,不需value 屬性值

Required N/A 或預設值 一定需要屬性,如果有指定 value值,就表示擁有預設值

Default 預設值 屬性可有可無,如果沒有指定就使用 value 屬性的預設值

Fixed 預設值 屬性如果存在,其內容一定是 value 屬性值

Page 40: 第四章  XML Schema

complexType 元素的屬性•當使用 attribute 元素宣告 XML 屬性,通常都屬於 complexType 元素的子元素,如果 complexType 元素同時宣告有元素和屬性,此時的 content 屬性值為 mixed 。

<complexType name=“bookType” content=“mixed”>

<sequence>

….

</sequence>

<attribute name=“sales” use=“required” type=“boolean”/>

</complexType>

Page 41: 第四章  XML Schema

complexType 元素的屬性 (續 )•上頁的 attribute 元素宣告一個 sales 屬性 required 表示為必須的屬性,宣告的屬性屬於此 complexType 元素的 element 元素,也就是 book元素,如下:

<element name=“book” type=“bookType” minOccurs=“1” maxOccurs=“unbounded”/>

上述的 element 元素宣告一個 XML 元素 book,這個元素擁有屬性 sales 。

Page 42: 第四章  XML Schema

Element 元素的屬性•同樣的 attribute也可以屬於 element 元素的子元素,例如 XML 元素 book擁有屬性code ,如下所示:

<element name=“book” type=“string”>

<attribute name=“code” type=“string” use=“required”/>

</element>

上述指示使用 element 元素宣告一個 XML元素 book後,同時也使用 attribute 宣告此元素的屬性 code 。

Page 43: 第四章  XML Schema

宣告 XML 屬性同時宣告資料型態

•如果屬性值不是使用內建的資料型態,此時我們可以在宣告屬性時,同時使用 simpleType 元素宣告屬性的資料型態。

<attribute name=“name” use=“how_its_used” value=“value”>

<simpleType base=“simpleType”>

………….

</simpleType>

</attribute>

Page 44: 第四章  XML Schema

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>

Page 45: 第四章  XML Schema

attributeGroup 元素 (續 )

•上頁群組屬性 bookAttr 宣告 code,title, author 和 price 屬性,接著可以在宣告 XML元素 book時,直接套用群組屬性,如下:

<element name=“image” minOccurs=“1” maxOccurs=“1”>

<complexType content=“empty”>

<attributeGropu ref=“bookAttr”/>

</complexType>

</element>

Page 46: 第四章  XML Schema

attributeGroup 元素 (續 )•上頁 attributeGroup 元素使用 ref 屬性參考群組屬性 bookAttr ,也就是說 XML 元素book 將擁有群組屬性的所有屬性,如下:

<book code=“F8931” title=“XML Schema 探討” author=“JACK” price=“500”/>