第四章 XML Schema

Preview:

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

Citation preview

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

第四章 XML Schema

簡介

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

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

Schema 與 DTD 的比較• DTD 的缺點

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

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

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

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

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

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

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

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

內建資料型態

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

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

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

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

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

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

n時間資料

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

時間資料 NOTATION 參考的記法

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

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

<facets_element value=“value”/>

…………

</simpleType>

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

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

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

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

自訂資料型態 (續 )

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

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

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

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

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

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

<enumeration value=“red”/>

<enumeration value=“white”/>

<enumeration value=“blue”/>

<enumeration value=“black”/>

</simpleType>

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

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

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

<length value=“11”/>

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

</simpleType>

自訂資料型態 (續 )

•上頁的 \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

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

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

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

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

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

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

minOccurs

maxOccurs

說明

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

1 1 出現一次0 Unbounde

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

1 unbounded

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

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

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

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

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

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

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

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

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

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

</simpleType>

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

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

ex:957-717-658-5

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

complexType 元素

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

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

<element …/>

</complexType>

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

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>

complexType 元素 (續 )

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

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

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

子元素 說明sequence

XML 子元素需依順序出現

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

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

<element name=“name”>

<complexType>

…..

</complexType>

</element>

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>

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

choice 選項元素 (續 )

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

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

…………

</choice>

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

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 屬性即可

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>

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

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>

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

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

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

XML 元素屬性 (續 )

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

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

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

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

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

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

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

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

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

<sequence>

….

</sequence>

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

</complexType>

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

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

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

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

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

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

</element>

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

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

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

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

<simpleType base=“simpleType”>

………….

</simpleType>

</attribute>

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>

attributeGroup 元素 (續 )

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

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

<complexType content=“empty”>

<attributeGropu ref=“bookAttr”/>

</complexType>

</element>

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

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

Recommended