您的位置:首頁>正文

XSD 的實例

演示如何編寫一個 XML Schema。 您還將學習到編寫 schema 的不同方法。

XML 文檔

讓我們看看這個名為 "shiporder.xml" 的 XML 文檔:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="shiporder.xsd">

John Smith

Ola Nordmann

Langgt 23

4000 Stavanger

Norway

Empire Burlesque

Special Edition

1

10.90

Hide your heart

1

9.90

上面的XML文檔包括根項目 "shiporder", 其中包含必須名為 "orderid" 的屬性。 "shiporder" 元素包含三個不同的子元素:"orderperson"、"shipto" 以及 "item"。 "item" 元素出現了兩次, 它含有一個 "title"、一個可選 "note" 元素、一個 "quantity" 以及一個 "price" 元素。

上面這一行 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance", 告知XML解析器根據某個 schema 來驗證此文檔。 這一行:xsi:noNamespaceSchemaLocation="shiporder.xsd" 規定了 schema 的位置(在這裡, 它與 "shiporder.xml" 處於相同的資料夾)。

創建一個 XML Schema

現在, 我們需要為上面這個 XML 文檔創建一個 schema。

我們可以通過打開一個新的檔來開始, 並把這個檔命名為 "shiporder.xsd"。 要創建schema, 我們僅僅需要簡單地遵循 XML 文檔中的結構,

定義我們所發現的每個元素。 首先我們開始定義一個標準的 XML 聲明:

...

在上面的 schema 中, 我們使用了標準的命名空間 (xs), 與此命名空間相關聯的 URI 是 Schema 的語言定義(Schema language definition), 其標準值是 http://www.w3.org/2001/XMLSchema。

接下來, 我們需要定義 "shiporder" 元素。 此元素擁有一個屬性, 其中包含其他的元素, 因此我們將它認定為複合類型。 "shiporder" 元素的子元素被 xs:sequence 元素包圍, 定義了子元素的次序:

...

然後我們需要把 "orderperson" 元素定義為簡易類型(這是因為它不包含任何屬性或者其他的元素)。 類型 (xs:string) 的首碼是由命名空間的首碼規定的, 此命名空間與指示預定義的 schema 資料類型的 XML schema 相關聯:

接下來, 我需要把兩個元素定義為複合類型:"shipto" 和 "item"。 我們從定義 "shipto" 元素開始:

通過 schema, 我們可使用 maxOccurs 和 minOccurs 屬性來定義某個元素可能出現的次數。

maxOccurs 定義某元素出現次數的最大值, 而 minOccurs 則定義某元素出現次數的最小值。 maxOccurs 和 minOccurs 的預設值都是 1!

現在, 我們可以定義 "item" 元素了。 這個元素可在 "shiporder" 元素內部出現多次。 這是通過把 "item" 元素的 maxOccurs 屬性的值設定為 "unbounded" 來實現的, 這樣 "item" 元素就可出現創作者所希望的任意多次。 請注意, "note" 元素是可選元素。 我們已經把此元素的 minOccurs 屬性設定為 0 了:

現在, 我們可以聲明 "shiporder" 元素的屬性了。 由於這是一個必選屬性, 我們規定 use="required"。

注意:此屬性的聲明必須被置於最後:

這是這個名為 "shiporder.xsd" 的 schema 檔的文檔清單:

分割 Schema

前面的設計方法非常容易, 但當文檔很複雜時卻難以閱讀和維護。

接下來介紹的設計方法基於首先對所有元素和屬性的定義, 然後再使用 ref 屬性來引用它們。

這是用新方法設計的 schema 檔("shiporder.xsd"):

使用指定的類型(Named Types)

第三種設計方法定義了類或者類型, 這樣使我們有能力重複使用元素的定義。 具體的方式是:首先對簡易元素和複合元素進行命名, 然後通過元素的 type 屬性來指向它們

這是利用第三種方法設計的 schema 檔 ("shiporder.xsd"):

restriction 元素顯示出資料類型源自於 W3C XML Schema 命名空間的資料類型。 因此, 下面的片段也就意味著元素或屬性的值必須是字串類型的值:

restriction 元素常被用於向元素施加限制。 請看下面這些來自以上 schema 的片段:

這段代碼指示出, 元素或屬性的值必須為字串, 並且必須是連續的六個字元, 同時這些字元必須是 0-9 的數字。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示