![]() |
VOOZH | about |
XSDL(XML Schema定義語言)由元素、屬性、命名空間和XML文檔種的其他節點構成的。
一、XSD中的元素
XSD文檔至少要包含:schema根元素和XML模式命名空間的定義、元素定義。
1、schema根元素語法如下:
…
在XSD中必須定義一個且只能定義一個schema根元素。根元素中包括模式的約束、XML模式命名空間的定義,其他命名空間的定義、版本信息、語言信息和其他一些屬性。
2、元素
語法如下:
XSD中的元素是利用element標識符來聲明的。其中name屬性是元素的名字,type屬性是元素值的類型,在這裡可以是XML Schema中內置的數據類型或其他類型。
例子:
以上文檔對應的有效XML文檔如下:
string
在元素的定義中還有2個屬性:minOccurs和maxOccurs。其中minOccurs定義了該元素在父元素中出現的最少次數(默認為1,值為大於等於0的整數),maxOccurs定義了該元素在父元素中出現的最多次數(默認為1,值為大於等於0的整數)。在maxOccurs中可以把值設置為unbounded,表示對元素出現的最多次數沒有限制。
例子:
表示為元素user的類型為string,出現的次數最少為0(也就是可選),最多不限制。
3、引用元素和替代
語法如下:
引用是利用element標記符的ref屬性實現的。主要適用於避免在文檔中多次定義同一個元素,應當將經常使用的元素定義為根元素的子元素,以便在文檔的任何地方引用它。
在這裡還可以為某個定義的元素起一個別名,方法如下:
string主要是利用element標識符中的屬性substitutionGroup實現的。
4、設置默認值和固定值
語法如下:
通過default屬性的設置,可以在XML文檔中沒有對city元素定義時賦予默認值。而使用fixed屬性,可以給元素country設定一個固定的值china,並且不允許改變!
5、利用組合器控制結構
sequence組合器,定義了一列元素必須按照模式中指定的順序顯示(如果是可選的,也可以不顯示)。語法如下:
all組合器,允許所定義的元素可以按照任意順序顯示,all元素的子元素在默認情況下是必須的,而且每次最多顯示一次。語法如下:
choice組合器,允許指定多組聲明中的一個,用於互斥情況。語法如下:
二、定義屬性
在XML Schema文檔中可以按照定義元素的方法定義屬性,但受限制的程度較高。它們只能是簡單類型,只能包含文本,且沒有子屬性。可以應用在attribute元素定義中的屬性如下:
default 初始默認值
fixed 不能修改和覆蓋的屬性固定值
name 屬性的名稱
ref 對前一個屬性定義的引用
type 該屬性的XSD類型或者簡單類型
use 如何使用屬性
form 確定attributeFormDefault的本地值
id 模式文檔中屬性唯一的ID
Default、fixed、name、ref和type屬性與在element標記中定義的對應屬性相同,但type只能是簡單類型。Use屬性的值可以是:optional(屬性不是必須的,此為默認屬性)、prohibited或者required(屬性是強制的)。
1、創建屬性
語法如下:
該語句定義了一個名為age的屬性,它的值必須是一個整數。把它添加到模式中時,它必須時schema元素、complexType元素或者attributeGroup元素的子元素。
例子:
以上文檔對應有效的XML文檔如下:
string如上所示,要把屬性附加在元素上,屬性應該在complexType定義中的組合器之後定義或引用。
三、XML Schema數據類型
XML
Schema提供了一組豐富的內置數據類型,用於定義元素中允許的類型。下面將介紹一些完全符合C#標準的通用類型。
1、基本數據類型
基本數據類型是在XML Schema中使用的每種數據類型的最基本構成塊。可以根據這些類型構造自定義的類型。這些類型包括:
boolean 可以是1(true)或者0(false)。
dateTime 表示時間的部分可選,格式:CCYY-MM-DDThh:mm:ss
例如:2005-3-18T14:48:12
decimal 表示任意精度的十進位數字。
string 字符數據。
int 表示從-2,147,483,648到2,147,483,648之間一個整數。
nonNegativeInteger 表示大於或者等於0的一個整數。
nonPositiveInteger 表示小於或者等於0的一個整數。
short 表示從-32768到32767之間的一個整數。
wang10.27
2、簡單類型
雖然從內置數據類型中得到了許多的功能,但是在許多情況下,只有數據類型來限制數據的值是遠遠不夠的。這裡在學習簡單類型之前,先看看關於約束。
約束方面
enumeration 用空格分開的一組指定的數值。它把數據類型約束為指定的值。
fractionDigit 指定小數點後的最大位數。
length 長度單位。
minExclusive 下限值,所有的值都必須大於該值。
maxExclusive 上限值,所有的值都應該小於該值。
minLength 長度單位的最小個數。
maxLength 長度單位的最大數。
minInclusive 最小值,所有的值都應該大於或者等於該值。
maxInclusive 最大值,所有的值都應該小於或者等於該值。
pattern 數據類型的值必須匹配的指定模式,pattern值必須是一個正則表達式。
totalDigits 指定小數最大位數的值。
whiteSpace 其值為:preserve(值中的空格不能改變),replace(所有的制表
符、換行符和回車符都用空格代替),collapse(執行replace,刪
除相鄰的、結尾處和開頭處的空格)。
要應用上述的約束,就要利用元素restriction。這個元素中有2個屬性:id屬性是模式文檔中restriction元素的唯一標識符,base屬性設置為一個內置的XSD數據類型或者現有的簡單類型定義,他是一種被限制的類型。
例如:
如上,將字符串最小長度限定為4個字符,將最大長度限定為10個字符。
如上,將一個整數的取值範圍設置為1到100之間。
如上,字符串只能為枚舉出的三種值。
簡單類型
簡單類型是對一個節點的可能值進一步限制的自定義數據類型。創建簡單類型需要利用simpleType元素,其定義如下:
id屬性應唯一的標明文檔內的simpleType元素,name不能使用冒號字符。simpleType不能包含元素,也不能有屬性,根據在simpleType中定義的規則,它基本上是一個值,或者是一個值的集合。
例如:
SS或者Santld wang再舉個例子:
上面定義的類型personsTitle是一個字符串類型,但它的值只能是Mr.、Mrs.或者Miss.其中的一個。
複雜類型
複雜類型的定義必須使用complexType元素,在這裡可以包含屬性和元素。在複雜類型的使用中,主要是complexType和simpleType配合使用。格式如下:
例如:
default=」John」 />
maxOccurs=」unbounded」 nillable=」true」 />
default=」Doe」 />
如上就實現了一個複雜類型,該例子實現了一個複雜類型FullName,其中包含了兩個簡單類型PersonsFirstname和PersonsTitle。
分組和屬性
在為定義XML文檔而創建的一些更為複雜的定義中,會有一些元素集、屬性集的組合,這是我們就使用了分組的概念。分組定義中使用的是group元素。
例如:
Beijing 」 type=」xsd:string」 />
Shanghai 」 type=」xsd:string」 />
對屬性的分組,應該使用attributeGroup元素,例如:
內容模型
內容模型可以對在XML文檔內使用的元素、屬性和類型進行限制,確定用戶可以在XML實例的哪些等級添加自己的元素和屬性。
any
當在XML中聲明元素時any是默認的內容模型,該模型可以包含文本、元素和空格。如果允許添加元素的內容,且無需屋裡修改模式文件,就可以使用該模型。
http://www.w3.org/2001/XMLSchema」>
maxOccurs=」unbounded」 />
例子中的xsd:any元素說明該類型允許添加內容。namespace屬性允許的值為:
##any(元素可以來自任何命名空間)
##other(元素可以來自除了該元素的父元素所在的目標命名空間之外的命名空間)
##local(元素不受命名空間的限制)
##targetNamespace(元素來自父元素的目標命名空間)
processContents屬性說明對這裡所創建的元素進行驗證時所執行的操作,取值有如下3種:
strict(標明XML處理器必須獲得和那些命名空間相關聯的模式,並驗證元素和屬性)
lax(與strict相似,只是如果處理器找不到模式文檔,也不會出現錯誤)
skip(不利用模式文檔驗證XML文檔)
Sanwang
empty
empty元素禁止把文本或者元素作為一個聲明為空的元素的子元素,如果要保證該元素不包括子元素、文本甚至空格,就可以使用它。在XSD中時利用xsd:anyType類型來限定它的,這樣就意味元素只能包含屬性,例如:以上就是一個複雜類型,只允許有一個age屬性。在例子裡complexContent元素可以表示complexType的內容要進行擴充或者限制,在這裡,我們對其內容進行限制,因此使用了restriction元素,如果擴成則使用exension元素。
element(前邊已經了解過了)
mixed
最後一個內容模型就是mixed,它包含文本、內容和屬性。在complexType元素上把mixed屬性的值設為true,就一個聲明一個mixed內容模型了。例如:
My first name is.