欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
XML認證教程,第 6 部分: XML Schema
XML Schema如同DTD一樣是負責定義和描述XML文檔的結構和內容模式。它可以定義XML文檔中存在哪些元素和元素之間的關(guān)系,并且可以定義元素和屬性的數據類(lèi)型。

什么是XML Schema
XML Schema如同DTD一樣是負責定義和描述XML文檔的結構和內容模式。它可以定義XML文檔中存在哪些元素和元素之間的關(guān)系,并且可以定義元素和屬性的數據類(lèi)型。

XML Schema本身是一個(gè)XML文檔,它符合XML語(yǔ)法結構??梢杂猛ㄓ玫腦ML解析器解析它。

為什么要使用Schema
我們前面已經(jīng)使用DTD來(lái)定義一個(gè)XML的結構和數據類(lèi)型,那為什么還要Schema呢?

因DTD有著(zhù)不少缺陷:

1) DTD是基于正則表達式的,描述能力有限;
2) DTD沒(méi)有數據類(lèi)型的支持,在大多數應用環(huán)境下能力不足;
3) DTD的約束定義能力不足,無(wú)法對XML實(shí)例文檔作出更細致的語(yǔ)義限制;
4) DTD的結構不夠結構化,重用的代價(jià)相對較高;
5) DTD并非使用XML作為描述手段,而DTD的構建和訪(fǎng)問(wèn)并沒(méi)有標準的編程接口,無(wú)法使用標準的編程方式進(jìn)行DTD維護。

而XML Schema正是針對這些DTD的缺點(diǎn)而設計的,XML Schema的優(yōu)點(diǎn):

1) XML Schema基于XML,沒(méi)有專(zhuān)門(mén)的語(yǔ)法
2) XML可以象其他XML文件一樣解析和處理
3) XML Schema支持一系列的數據類(lèi)型(int、float、Boolean、date等)
4) XML Schema提供可擴充的數據模型。
5) XML Schema支持綜合命名空間
6) XML Schema支持屬性組。

一個(gè)簡(jiǎn)單的XML Schema文檔


在這個(gè)Schema里面定義了一個(gè)元素:quantity,它的類(lèi)型是nonNegativeInteger(非負整數),xmlns是Schema的命名空間,這在前面第3部分已經(jīng)敘述過(guò)了。

下面的XML片段是合法的:

<quantity>5</quantity>

下面的XML片段是非法的:

<quantity>-4</quantiy>

Schema中的類(lèi)型
Schema中主要包括三種部件:元素(element)、屬性(attribute)、注釋(notation)。

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

a)類(lèi)型定義部件: 簡(jiǎn)單類(lèi)型和復合類(lèi)型
b)組部件
c)屬性組部件

簡(jiǎn)單類(lèi)型


XML Schema中定義了一些內建的數據類(lèi)型,這些類(lèi)型可以用來(lái)描述元素的內容和屬性值。

一個(gè)元素中如果僅僅包含數字、字符串或其他數據,但不包括子元素,這種被稱(chēng)為簡(jiǎn)單類(lèi)型。

如同圖中元素quantity就是一個(gè)簡(jiǎn)單類(lèi)型。它的元素內容必須是非負整數,不包括任何屬性和子元素。

<quantity>some</quantity>

所有內建的簡(jiǎn)單類(lèi)型
原始類(lèi)型

string,boolean,decimal,float,double,durationdatetime,time,date,gYearMonth,gYear,gMonthDay,dDay,gMonth,hexBinary,base64Binary,any URI,QNameNOTATION

衍生類(lèi)型(括號中為基類(lèi)型)

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)

創(chuàng )建簡(jiǎn)單類(lèi)型


圖中我們先創(chuàng )建了一個(gè)簡(jiǎn)單類(lèi)型:quantityType,它是從integer繼承過(guò)來(lái)的,minInclusive和maxInclusive定義了它的最小值2和最大值5。最后我們定義元素quantity的類(lèi)型為quantityType。

正確:	<quantity>3</quantity>錯誤:	<quantity>10</quantity><qauntity>aaa</quantity>

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

基本方面:equal,ordered,bounded,cardinality,numeric限制方面:length,minLength,maxLengthpattern,enumerationwhiteSpacemaxInclusive,maxExclusive,minInclusive,minExclusivetotalDigits,fractionDigits

簡(jiǎn)單類(lèi)型的例子 1


這個(gè)SKU的類(lèi)型的取值:3個(gè)數字后面根著(zhù)一個(gè)連字號接著(zhù)跟著(zhù)兩個(gè)大寫(xiě)的英文字母。

pattern后面跟的是正則表達式。有關(guān)正則表達式的語(yǔ)法請參閱其他書(shū)籍。

正確:	<ourSKU>123-AB</ourSKU>錯誤:	<ourSKU>abc-AB</ourSKU><ourSKU>123-ab</ourSKU>

簡(jiǎn)單類(lèi)型的例子 2


這是一個(gè)用來(lái)描述美國州名的類(lèi)型USState,通過(guò)enumeration來(lái)列出所有州名,取值時(shí)就只能取里面列出的州名。

<!-- and so on ...-> 這是一個(gè)注釋語(yǔ)句。

正確:	<statename>AK</statename>錯誤:	<statename>Alaska</statename>

列表類(lèi)型


list可以用來(lái)定義列表類(lèi)型,listOfIntType這個(gè)類(lèi)型被定義為一個(gè)Integer的列表,元素listOfMyInt的值可以幾個(gè)整數,他們之間用空格隔開(kāi)。

正確: <listOfMyInt>1 5 15037 95977 95945</listOfMyInt>錯誤: <listOfMyInt>1 3 abc</listOfMyInt>

聯(lián)合類(lèi)型


圖中用union來(lái)定義了一個(gè)聯(lián)合類(lèi)型,里面的成員類(lèi)型包括USState和listOfMyIntType,應用了聯(lián)合類(lèi)型的元素的值可以是這些原子類(lèi)型或列表類(lèi)型中的一個(gè)類(lèi)型的實(shí)例,但是一個(gè)元素實(shí)例不能同時(shí)包含兩個(gè)類(lèi)型。

正確:	<zips>CA</zips><zips>95630 95977 95945</zips><zips>AK</zips>錯誤:	<zips>CA 95630</zips>
匿名類(lèi)型定義


前面我們在定義元素類(lèi)型時(shí)總是先定義一個(gè)數據類(lèi)型,然后再把元素的type設成新定義的數據類(lèi)型。如果這個(gè)新的數據類(lèi)型只會(huì )用一次,我們就可以直接設置在元素定義里面,而不用另外來(lái)設置。如圖中元素quantity的類(lèi)型就是一個(gè)從1到99的整數。

這種新的類(lèi)型沒(méi)有自己的名字的定義方法我們稱(chēng)之為匿名類(lèi)型定義。

復合類(lèi)型


前面我們所講到的都是屬于簡(jiǎn)單類(lèi)型,即元素里面只有內容,不再包括屬性或者其它元素。接下來(lái)我們要讓元素里面包含屬性和其它元素,稱(chēng)之為復合類(lèi)型。

圖中我們用complexType表示這是一個(gè)復合類(lèi)型(這里我們是用匿名類(lèi)型定義的)。simpleContent表示這個(gè)元素下面不包括子元素,extension表示這個(gè)元素值是decimal的,attribute來(lái)設置它的一個(gè)屬性currency,類(lèi)型為string.

正確:<internationalPrice currency="EUR">423.46</internationalPrice>

混合內容


同樣,我們采用了匿名類(lèi)型方式來(lái)定義一個(gè)元素salutation。我們注意到在complexType后面多了一個(gè)mixed="true",這表明這是一個(gè)混合類(lèi)型:里面既有元素本身的內容,又有其它子元素。name元素就是salutation的子元素。

正確:	<salutation>Dear Mr.<name>Robert Smith</name>.</salutation>錯誤:	<salutation>Dear Mr.</salutation>

sequence表示子元素出現的順序要和schema里面的順序一樣。我們在后面還會(huì )講到和sequence對應的choice和all兩種方式。

空內容


有的時(shí)候元素根本沒(méi)有內容,他的內容模型是空。為了定義內容是空的類(lèi)型,我們可以通過(guò)這樣的方式:首先我們定義一個(gè)元素,它只能包含子元素而不能包含元素內容,然后我們又不定義任何子元素,依靠這樣的方式,我們就能夠定義出內容模型為空的元素。

圖中complexConet表示只包含子元素,然后我們定義了兩個(gè)屬性currency和value,但是卻不定義任何子元素。

正確:<internationalPrice currency="EUR" value="423.46"/>錯誤:<internationalPrice currency="EUR" value="423.46">Here is a mistake!</interanationPrice>

還要更簡(jiǎn)潔的方法定義:

<xsd:element name="internationalPrice"><xsd:complexType><xsd:attribute name="currency" type="xsd:string"/><xsd:attribute name="value" type="xsd:decimal"/></xsd:complexType></xsd:element>

因為一個(gè)不帶有simpleContent 或者complexContent的復合類(lèi)型定義,會(huì )被解釋為帶有類(lèi)型定義為anyType的complexContent,這是一個(gè)默認的速記方法,所以這個(gè)簡(jiǎn)潔的語(yǔ)法可以在模式處理器中工作。

anyType


一個(gè)anyType類(lèi)型不以任何形式約束其包含的內容。我們可以象使用其他類(lèi)型一樣使用anyType,如圖第一個(gè)語(yǔ)句,這個(gè)方式聲明的元素是不受約束的。所以元素的值可以為423.46,也可以為任何其他的字符序列,或者甚至是字符和元素的混合。實(shí)際上,anyType是默認類(lèi)型,所以上面的可以被重寫(xiě)為第二個(gè)語(yǔ)句。

如果需要表示不受約束的元素內容,舉例來(lái)說(shuō)在元素包含散文,其中可能需要嵌入標簽來(lái)支持國際化的表示,那么默認的聲明(無(wú)約束)或者有些微約束的形式會(huì )很合適。

注釋


為了方便其他讀者和應用來(lái)理解模式文檔,XML Schema提供了三個(gè)元素用來(lái)注釋。

annotationdocumentationappinfo

圖中,我們在documentation元素中放置了一個(gè)基本的模式描述和版權信息,這是放置適合人閱讀的信息的推薦位置。我們推薦你在任何的documentation元素中使用xml:lang屬性來(lái)表示這些描述信息使用的語(yǔ)言。

構造內容模型


圖中,我們在purchaseOrderType定義中引入兩個(gè)元素組定義,購買(mǎi)訂單就可以有兩種選擇來(lái)描述地址:第一種是包含彼此獨立的送貨地址和收款地址,第二種情況則是僅包含一個(gè)簡(jiǎn)單的地址,這個(gè)地址即是送貨地址也是收款地址.

對于choice組元素而言,在實(shí)例中僅僅允許出現這個(gè)組中的一個(gè)子內容。對于圖中的例子而言,第一個(gè)子內容是一個(gè)內部group元素,引用以shipAndBill命名的元素組,這個(gè)元素組由元素序列shipTo、billTo組成。第二個(gè)子內容為singleUSAddress。因此,在一個(gè)實(shí)例文檔中,purchaseOrder元素必須,要么包含一個(gè)billTo元素和一個(gè)shipTo元素,要么包含一個(gè)singleUSAddress元素。

choice組后面跟著(zhù)的是comment和items元素聲明。元素和組的聲明都是sequence 組的子內容。這樣定義的效果是comment和items元素必須按順序跟在地址元素后面。

在內容模型中被命名或未被命名的元素組(分別由group、choice、sequence、all所表現)可以帶有minOccurs 和maxOccurs屬性

屬性組


我們可以建立一個(gè)被命名的屬性組來(lái)包含所有item元素所期望的屬性,并且在item元素聲明中通過(guò)名字來(lái)引用這個(gè)屬性組ItemDeleivery

通過(guò)這種方法來(lái)使用屬性組,可以提高模式文檔的可讀性,同時(shí)也便于更新模式文檔。這是因為一個(gè)屬性組能夠在一個(gè)地方定義和編輯,同時(shí)能夠在多個(gè)定義和聲明中被引用。注意到一個(gè)屬性組可以包含其他屬性組,同時(shí)還要注意到屬性組的聲明和引用必須在復合類(lèi)型定義的最后。

空值(Nil)


XML Schema 空值機制包括一個(gè)空值信號。換句話(huà)說(shuō),作為元素內容而言,并沒(méi)有沒(méi)有真正的空值,代之的是一個(gè)說(shuō)明元素的內容是空值的屬性。為了顯示這點(diǎn),我們修改shipDate元素的聲明,這樣空值就能夠被明確地告知用戶(hù)了。

<xsd:element name="shipDate" type="xsd:date" nillable="true"/>

為了在實(shí)例文檔中明確的表示shipDate有一個(gè)空值,我們可以設置nil屬性為真:

<shipDate xsi:nil="true"></shipDate>



本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
XML開(kāi)發(fā)筆記 — 總結
理解XML Schema: XML Schema初步(II)
WSDL淺析
Schema的基本語(yǔ)法
xsd schema 語(yǔ)法
XML 文件:XML 架構快速指南 - MSDN Magazine,2002年4月
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久