XML Schema全接觸的圖文代碼詳解

黄舟
發布: 2017-03-28 16:55:33
原創
2341 人瀏覽過

內容摘要:XML Schema如同DTD一樣是負責定義和描述XML文件的結構和內容模式。它可以定義XML文件中存在哪些元素和元素之間的關係,並且可以定義元素和屬性資料類型

什麼是XML Schema

XML Schema如DTD一樣是負責定義和描述XML文件的結構和內容模式。它可以定義XML文件中存在哪些元素和元素之間的關係,並且可以定義元素和屬性的資料類型。

XML Schema本身是一個XML文檔,它符合XML語法結構。可以用通用的XML解析器解析它。

為什麼要使用Schema

我們前面已經使用DTD來定義一個XML的結構和資料類型,那為什麼還要Schema呢?

因DTD有著不少缺陷:

1) DTD是基於正規表示式的,描述能力有限;

2) DTD沒有資料類型的支持,在大多數應用環境下能力不足;

3) DTD的約束定義能力不足,無法對XML實例文件作出更細緻的語意限制;

4) DTD的結構不夠結構化,重複使用的代價相對較高;

5) DTD並非使用XML作為描述手段,而DTD的建構與存取並沒有標準的程式設計##介面#,無法使用標準的程式設計方式進行DTD維護。

而XML Schema正是針對這些DTD的缺點而設計的,XML Schema的優點:

1) XML Schema基於XML,沒有專門的語法

2) XML可以像其他XML檔案一樣解析和處理

3) XML Schema支援一系列的資料型別(int、float、Boolean、date等)

4) XML Schema提供可擴充的數據模型。

5) XML Schema支援綜合命名空間

6) XML Schema支援屬性組。

一個簡單的XML Schema文件

XML Schema全接觸的圖文代碼詳解

在這個Schema裡面定義了一個元素:quantity,它的型別是nonNegativeInteger(非負整數),xmlns是Schema的命名空間,這在前面第3部分已經敘述過了。

下面的XML片段是合法的:

<quantity>5</quantity>
登入後複製

下面的XML片段是非法的:

<quantity>-4</quantiy>
登入後複製

Schema中的類型

Schema中主要包括三種部件:元素(element)、屬性(attribute)、註解(notation)。

這三種基本的部件還能組合成以下的部件:

a) 類型定義部件: 簡單類型和複合類型

b)群組部件

c)屬性組部件

簡單類型

XML Schema全接觸的圖文代碼詳解

XML Schema中定義了一些內建的資料類型,這些類型可以用來描述元素的內容和屬性值。

一個元素中如果僅僅包含數字、

字串或其他數據,但不包括子元素,這種稱為簡單類型。

如同圖中元素quantity就是一個簡單型別。它的元素內容必須是非負整數,不包括任何屬性和子元素。

<quantity>some</quantity>
登入後複製

所有內建的簡單型別

原始型別

string,boolean,decimal,float,double,duration
datetime,time,date,gYearMonth,gYear,gMonthDay,
dDay,gMonth,hexBinary,base64Binary,any URI,QName
NOTATION
登入後複製

衍生型別(括號中為基底型別)

normalizedString(string),language(tonken),token(normalizedString)
NMTOKEN(token),Name(token),NCName(Name),ID(NCName),IDREF(NCName)
IDREFS(list of IDREF),ENTITY(NCName),ENTITIES(list of ENTITY)
integer(decimal),nonPositiveInteger(integer),
negativeInteger(noPositiveInteger),long(integer),int(long),
short(int),byte(short),nonNegativeInteger(integer)
unsignedLong(nonNegativeInteger),unsignedInt(unsignedLong),
unsignedShort(unsignedInt),unsignedByte(unsignedShort),
positiveInteger(nonNegativeInteger)
登入後複製

建立簡單型別

XML Schema全接觸的圖文代碼詳解

圖中我們先建立了一個簡單型別:quantityType,它是從integer

繼承過來的,minInclusive和maxInclusive定義了它的最小值2和最大值5。最後我們定義元素quantity的類型為quantityType。

正确:  <quantity>3</quantity>
错误:  <quantity>10</quantity>
<qauntity>aaa</quantity>
登入後複製

使用restriction我們可以限制只能接受一定數值或只能接受一定文字,

基本方面:equal,ordered,bounded,cardinality,numeric
限制方面:length,minLength,maxLength
pattern,enumeration
whiteSpace
maxInclusive,maxExclusive,minInclusive,minExclusive
totalDigits,fractionDigits
登入後複製

簡單類型的例子1

XML Schema全接觸的圖文代碼詳解

這個SKU的類型的取值:3個數字後面根著一個連字號接著跟著兩個大寫的英文字母。

pattern後面跟的是正規表示式。有關正規表示式的語法請參閱其他書籍。

正确:  <ourSKU>123-AB</ourSKU>
错误:  <ourSKU>abc-AB</ourSKU>
<ourSKU>123-ab</ourSKU>
登入後複製

簡單類型的例子2

XML Schema全接觸的圖文代碼詳解

這是用來描述美國州名的類型USState,透過enumeration來列出所有州名,取值時就只能取裡面列出的州名。