第四章-XML-schema-《XML編程原理與實(shí)例教程》電子教案課件_第1頁(yè)
第四章-XML-schema-《XML編程原理與實(shí)例教程》電子教案課件_第2頁(yè)
第四章-XML-schema-《XML編程原理與實(shí)例教程》電子教案課件_第3頁(yè)
第四章-XML-schema-《XML編程原理與實(shí)例教程》電子教案課件_第4頁(yè)
第四章-XML-schema-《XML編程原理與實(shí)例教程》電子教案課件_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第四章XMLschema第四章XMLschema14.1XMLschema簡(jiǎn)介Schema是一種與DTD類似的,同樣用于定義在各種XML文檔中使用標(biāo)記的規(guī)范的一個(gè)工具。從功能上來(lái)講,Schema與DTD是等效的,但是前者比后者更具靈活性,由于DTD使用了一種特殊的規(guī)范來(lái)定義使用XML標(biāo)記的規(guī)范,有許多常用的限制不能用DTD來(lái)表述,人們開始尋求另外的解決方法,微軟發(fā)展了一套不同于DTD方法來(lái)定義XML數(shù)據(jù)類型,這個(gè)方法成為了現(xiàn)今的W3C定義的Schema的原型。4.1XMLschema簡(jiǎn)介Schema是一種與DTD類24.2XMLSchema與DTD的比較

Schema具有如下優(yōu)點(diǎn):一致性:Schema使得對(duì)XML的定義不必再利用一種特定的形式化的語(yǔ)言,而是直接借助XML自身的特性,利用XML的基本語(yǔ)法規(guī)則來(lái)定義XML文檔的結(jié)構(gòu),使得XML達(dá)到了從內(nèi)到外的統(tǒng)一,也為XML的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。擴(kuò)展性:Schema對(duì)DTD進(jìn)行了擴(kuò)充,引入了數(shù)據(jù)類型、命名空間,從而使其具備較強(qiáng)的可擴(kuò)展性。互換性:利用Schema,我們能夠書寫XML文檔以及驗(yàn)證文檔的合法性。另外,通過(guò)特定的映射機(jī)制,還可以將不同的Schema進(jìn)行轉(zhuǎn)換,以實(shí)現(xiàn)更高層次的數(shù)據(jù)交換。規(guī)范性:同DTD一樣,Schema也提供了一套完整的機(jī)制以約束XML文檔中置標(biāo)的使用,但相比之下,后者基于XML,更具有規(guī)范性。Schema利用元素的內(nèi)容和屬性來(lái)定義XML文檔的整體結(jié)構(gòu),如哪些元素可以出現(xiàn)在文檔中、元素間的關(guān)系是什么、每個(gè)元素有哪些內(nèi)容和屬性以及元素出現(xiàn)的順序和次數(shù)等等,都可一目了然。4.2XMLSchema與DTD的比較

Schema具34.3XML元素聲明

4.3.1根元素 4.3.2簡(jiǎn)單元素 4.3.3復(fù)雜元素 4.3.4特殊元素 4.3.5元素組 4.3.6元素限制 4.3.7全局元素與局部元素 4.3.8any元素4.3XML元素聲明

4.3.1根元素44.3.1根元素

每一個(gè)schema文檔都必須擁有一個(gè)根元素——schema元素,并且這個(gè)根元素也是唯一的。Schema文檔其他所有的元素及其屬性聲明和數(shù)據(jù)類型定義都必須嵌套在根元素中。4.3.1根元素

每一個(gè)schema文檔都必須擁有一個(gè)根54.3.2簡(jiǎn)單元素

簡(jiǎn)單元素是指不包含子元素和屬性的元素。是一種簡(jiǎn)單數(shù)據(jù)類型的元素。簡(jiǎn)單元素的數(shù)據(jù)類型既可以是內(nèi)建數(shù)據(jù)類型,也可以是用戶派生的簡(jiǎn)單類型。4.3.2簡(jiǎn)單元素

簡(jiǎn)單元素是指不包含子元素和屬性的元素64.3.2簡(jiǎn)單元素

聲明一個(gè)簡(jiǎn)單元素的具體的語(yǔ)法格式如下:<xsd:elementname=”element-name”type=”data-type”/><xsd:simpleTypename=”data-type”…</xsd:simpleType>4.3.2簡(jiǎn)單元素

聲明一個(gè)簡(jiǎn)單元素的具體的語(yǔ)法格式如下74.3.3復(fù)雜元素

包含子元素的元素就是復(fù)雜元素,對(duì)應(yīng)的,它屬于復(fù)雜數(shù)據(jù)類型。聲明一個(gè)復(fù)雜元素的語(yǔ)法規(guī)則是:<xsd:elementname=”element-name”type=”data-type”/><xsd:complexTypename=”data-type”><xsd:sequence><xsd:elementname=”child1”/><xsd:elementname=”child2”/>…</xsd:sequence></xsd:complexType>4.3.3復(fù)雜元素

包含子元素的元素就是復(fù)雜元素,對(duì)應(yīng)的84.3.4特殊元素

1.空元素 空元素就是元素內(nèi)容為空值的元素,它也不包含子元素。有兩種表示空值的方法:使用屬性nillable=”true”或者使用屬性minOccurs=”0”。2.ANY類型的元素 一個(gè)anyType類型不以任何形式約束其包含的內(nèi)容,我們可以象使用其他類型一樣使用anyType。聲明一個(gè)元素為anyType類型的語(yǔ)法是:

<xsd:elementname=”element-name”type=”xsd:anyType”>

4.3.4特殊元素

1.空元素94.3.4特殊元素3.混合內(nèi)容元素如果一個(gè)元素,它既需要包含子元素,又需要包含字符數(shù)據(jù),那么它就必須作為一個(gè)混合內(nèi)容形式的元素。具體的語(yǔ)法格式如下:<xsd:elementname=”element-name”><xsd:complexTypemixed=”true”><xsd:sequence>…</xsd:sequence></xsd:complexType></xsd:element>4.3.4特殊元素3.混合內(nèi)容元素104.3.4特殊元素4.選擇型元素如果一個(gè)元素只能在有限的幾個(gè)子元素中選擇一個(gè)子元素作為元素內(nèi)容,那么需要將它聲明為選擇型的元素,選擇型元素也是復(fù)雜類型元素。具體的格式如下:<xsd:elementname=”element-name”><xsd:complexType><xsd:choice><xsd:elementname=”child1”type=”data-type”/><xsd:elementname=”child2”type=”data-type”/>…</xsd:choice></xsd:complexType></xsd:element>4.3.4特殊元素4.選擇型元素114.3.5元素組

在一個(gè)元素的多個(gè)子元素中,有時(shí)候幾個(gè)子元素之間存在一些邏輯上的聯(lián)系,比如我們描述地址時(shí),門牌號(hào)、街道和城市這幾個(gè)元素就存在聯(lián)系,這時(shí)候如果將它們分為一組也是較為合適的?;谶@種需要,因此XML提供了一個(gè)聲明若干個(gè)元素為一組的機(jī)制,這就是元素組。4.3.5元素組

在一個(gè)元素的多個(gè)子元素中,有時(shí)候幾個(gè)子124.3.5元素組

具體的格式如下:<xsd:groupname=”group-name”><xsd:sequence><xsd:elementname=”element1”type=”date-type”/><xsd:elementname=”element2”type=”date-type”/>… </xsd:sequence></xsd:group>4.3.5元素組

具體的格式如下:134.3.6元素限制

可以通過(guò)指定元素的minOccurs和maxOccurs屬性來(lái)限制元素的出現(xiàn)次數(shù)。當(dāng)需要指定元素的默認(rèn)值時(shí),就需要使用到元素的default屬性和fixed屬性。使用sequence關(guān)鍵字的意思就是規(guī)定子元素在xml文檔中的出現(xiàn)順序是順序出現(xiàn)的——與schema文件中聲明的順序一致。all,這種方式使得序列中的元素可以按照任意的順序出現(xiàn),但是這些元素每個(gè)最多只能出現(xiàn)一次。choice,這一種也即是前面介紹過(guò)的選擇型元素,它起到的作用就是在若干個(gè)給定的子元素中選擇一個(gè)出現(xiàn)在XML文檔中,注意只能選擇一個(gè),不能選多個(gè),也不能選擇不在給定范圍內(nèi)的子元素。4.3.6元素限制

可以通過(guò)指定元素的minOccurs144.3.7全局元素與局部元素

在schema文件中,schema根元素的直接子元素就是全局元素。局部元素就是它的父元素不是schema根元素的元素。4.3.7全局元素與局部元素

在schema文件中,sc154.3.8any元素

XML存在一個(gè)較為特殊的元素,那就是any元素,在復(fù)雜類型內(nèi)使用any元素意味著任何元素都可以出現(xiàn)在那個(gè)位置上,這可有效地使它成為事先無(wú)法預(yù)知的內(nèi)容的占位符。4.3.8any元素

XML存在一個(gè)較為特殊的元素,那就164.3.8any元素

使用any元素時(shí),也可以通過(guò)指定它的名稱空間屬性namespace來(lái)指明any元素的詳細(xì)情況,namespace有四種取值,分別為:##any: 來(lái)自任何命名空間的任何元素##local:任何非限定元素(不屬于命名空間)##other:非targetNamespace命名空間中的任何元素##targetNamespace:targetNamespace中的任何元素4.3.8any元素

使用any元素時(shí),也可以通過(guò)指定它174.4XMLschema屬性聲明

4.4.1聲明屬性 4.4.2屬性引用4.4.3屬性組4.4.4any類型屬性4.4.5屬性限制4.4XMLschema屬性聲明

4.4.1聲明屬184.4.1聲明屬性

使用attribute關(guān)鍵字來(lái)聲明一個(gè)屬性。與元素不同,屬性都需要是簡(jiǎn)單的數(shù)據(jù)類型。聲明屬性的語(yǔ)法如下:<xsd:attributename=”attribute-name”type=”simple-type”/>4.4.1聲明屬性

使用attribute關(guān)鍵字來(lái)聲明一194.4.2屬性引用

屬性也存在引用,可以引用已聲明的屬性來(lái)作為自己元素的屬性。聲明一個(gè)屬性引用使用的關(guān)鍵字也是ref,具體的格式如下:<xsd:attributeref=”ref-of-attribute”/>注意引用的屬性一定要有聲明,不能引用不存在的屬性。4.4.2屬性引用

屬性也存在引用,可以引用已聲明的屬性204.4.3屬性組

屬性也可以聲明成一組屬性組。聲明屬性組使用的關(guān)鍵字是:attributeGroup,具體的格式請(qǐng)看下面:<xsd:attributeGroupname=”attributeGroup-name”><xsd:attributename=”attribute1”…/><xsd:attributename=”attribute2”…/> …</xsd:attributeGroup>屬性組有助于XML文檔結(jié)構(gòu)的模塊化,允許在一處聲明常用的屬性集合,然后在一個(gè)或多個(gè)文檔中引用。4.4.3屬性組

屬性也可以聲明成一組屬性組。聲明屬性組214.4.4any類型屬性

屬性也有一個(gè)用聲明任意屬性類型的方法,這就是使用anyAttribute關(guān)鍵字進(jìn)行屬性聲明。聲明為any類型的屬性也就具備了占位符的功能,在XML文檔實(shí)例中它允許將這種類型的屬性替換成任意類型的屬性。它也提供名稱空間屬性,相應(yīng)的屬性值取值也是分別為:##any: 來(lái)自任何命名空間的任何元素##local:任何非限定元素(不屬于命名空間)##other:非targetNamespace命名空間中的任何元素##targetNamespace:targetNamespace中的任何元素4.4.4any類型屬性

屬性也有一個(gè)用聲明任意屬性類型224.4.5屬性限制

關(guān)鍵字use來(lái)對(duì)屬性的出現(xiàn)做出限制。use的值可以為:required、optional和prohibited三種,相應(yīng)的意思分別為必須出現(xiàn)、選擇出現(xiàn)和禁止出現(xiàn)4.4.5屬性限制

關(guān)鍵字use來(lái)對(duì)屬性的出現(xiàn)做出限制。234.4.5屬性限制default和fixed兩個(gè)值用于規(guī)定屬性的內(nèi)容。default規(guī)定屬性的默認(rèn)值,而fixed規(guī)定屬性的內(nèi)容一定要是fixed指定的值。并且當(dāng)一個(gè)屬性指定了default值的話,那么如果需要指定use的值,就一定要選擇optional。4.4.5屬性限制default和fixed兩個(gè)值用于規(guī)244.5注釋

XMLSchema提供三個(gè)元素用于注釋,以提高代碼的可讀性,并且也可以為其它應(yīng)用程序提供一定的輔助信息。三個(gè)元素分別是:annotation、documentation和appinfo,其中documentation和appinfo是annotation的子元素。4.5注釋

XMLSchema提供三個(gè)元素用于注釋,以254.6XMLSchema數(shù)據(jù)類型

4.6.1原始數(shù)據(jù)類型 4.6.2派生數(shù)據(jù)類型 4.6.3用戶派生數(shù)據(jù)類 4.6.4約束面4.6XMLSchema數(shù)據(jù)類型

4.6.1原始數(shù)264.6.1原始數(shù)據(jù)類型

19種原始數(shù)據(jù)類型中可以分成幾個(gè)大類,分別是:程序設(shè)計(jì)數(shù)據(jù)類型XML數(shù)據(jù)類型二進(jìn)制數(shù)據(jù)類型時(shí)間數(shù)據(jù)類型。4.6.1原始數(shù)據(jù)類型

19種原始數(shù)據(jù)類型中可以分成幾個(gè)274.6.1原始數(shù)據(jù)類型1.程序設(shè)計(jì)數(shù)據(jù)類型在大部分的程序設(shè)計(jì)語(yǔ)言或者數(shù)據(jù)庫(kù)系統(tǒng)中都會(huì)有一些常見的數(shù)據(jù)類型,這幾類就是string、boolean、decimal、float和double類型。2.XML數(shù)據(jù)類型共有三種數(shù)據(jù)類型屬于XMl數(shù)據(jù)類型,分別是anyURI、QName和NOTATION。4.6.1原始數(shù)據(jù)類型1.程序設(shè)計(jì)數(shù)據(jù)類型284.6.1原始數(shù)據(jù)類型3.二進(jìn)制數(shù)據(jù)類型表示二進(jìn)制數(shù)據(jù)類型的有兩種,hexBinary和base64Binary。4.6.1原始數(shù)據(jù)類型3.二進(jìn)制數(shù)據(jù)類型294.6.1原始數(shù)據(jù)類型4.時(shí)間類型有9種原始數(shù)據(jù)類型用于時(shí)間的表示:第一種是表示持續(xù)時(shí)間,對(duì)應(yīng)的數(shù)據(jù)類型是duration,它基于ISO8601數(shù)據(jù)格式標(biāo)準(zhǔn),表示時(shí)間的長(zhǎng)度,如1個(gè)小時(shí),3分鐘等等。第二種表示一個(gè)時(shí)間或者日期,是一個(gè)時(shí)間點(diǎn),相應(yīng)的數(shù)據(jù)類型有date、time和dateTime。第三種表示循環(huán)的日期或者時(shí)間,分別是gDay、gMonth、gMonthDay、gYear和gYearMonth。4.6.1原始數(shù)據(jù)類型4.時(shí)間類型304.6.2派生數(shù)據(jù)類型

XMLSchema定義了25種派生數(shù)據(jù)類型,它們都是在原始數(shù)據(jù)類型的基礎(chǔ)上定義的,此外XMLSchema也允許用戶定義自己的派生數(shù)據(jù)類型。4.6.2派生數(shù)據(jù)類型

XMLSchema定義了25種314.6.2派生數(shù)據(jù)類型

XMLSchema定義的派生數(shù)據(jù)類型可以分為幾組:第一組是整型數(shù),它包括如下幾種數(shù)據(jù)類型:integer:十進(jìn)制整型數(shù);positiveInteger:正的整數(shù);negativeInteger:負(fù)的整數(shù);nonPositiveInteger:非正整數(shù);nonNegativeInteger:非負(fù)整數(shù)。4.6.2派生數(shù)據(jù)類型

XMLSchema定義的派生數(shù)324.6.2派生數(shù)據(jù)類型

第二組是與計(jì)算機(jī)字長(zhǎng)成倍數(shù)關(guān)系的一組數(shù)據(jù)類型:byte:8位帶符號(hào)數(shù)(-128~127之間);unsignedByte:8位無(wú)符號(hào)數(shù)(0~255之間);short:16位短整型數(shù)(-32768~32767之間);unsignedShot:16位無(wú)符號(hào)短整型數(shù)(0~65535之間);int:32位整型數(shù)(-2147483648~2147483647之間);unsignedInt:無(wú)符號(hào)32位整型數(shù)(0~4294967295之間);long:64位整型數(shù)(-9223372036854775808~9223372036854775807之間);unsignedLong:64位無(wú)符號(hào)整型數(shù)(0~18446744073709551615之間)。4.6.2派生數(shù)據(jù)類型

第二組是與計(jì)算機(jī)字長(zhǎng)成倍數(shù)關(guān)系的334.6.2派生數(shù)據(jù)類型

第三組是基于XML屬性類型構(gòu)成的一組數(shù)據(jù)類型:ID:文檔中單個(gè)元素唯一的標(biāo)示符;IDREF文檔中對(duì)一個(gè)元素ID的引用;IDREFS:文檔中對(duì)多個(gè)個(gè)元素ID的引用,每個(gè)ID之間使用空格進(jìn)行分隔;ENTITY:文檔非解析實(shí)體名稱;ENTITIES:文檔多個(gè)非解析實(shí)體名稱,每個(gè)名稱之間使用空格分隔;NMTOKEN:帶有特定約束的字符串。NMTOKENS:多個(gè)帶有特定約束的字符串,每個(gè)名稱之間使用空格分隔。4.6.2派生數(shù)據(jù)類型

第三組是基于XML屬性類型構(gòu)成的344.6.2派生數(shù)據(jù)類型

第四組是XML的一類數(shù)據(jù)類型:Name:以字母或者下劃線和冒號(hào)開始,后繼字符包括數(shù)字、字母、下劃線、連字符和句點(diǎn)的字符串類型。NCName:以字母或者下劃線開始,后繼字符包括數(shù)字、字母、下劃線、連字符和句點(diǎn)的字符串類型。normalizedString:將字符串中的回車或者制表符之類的空白符變?yōu)橛煽崭翊娴淖址愋汀oken:將字符串中多個(gè)相鄰空白壓縮為一個(gè)空白符,并且去除前導(dǎo)和末尾空格后變成的新的字符串類型。4.6.2派生數(shù)據(jù)類型

第四組是XML的一類數(shù)據(jù)類型:354.6.3用戶派生數(shù)據(jù)類型

利用XMLSchema已有的數(shù)據(jù)類型——原始數(shù)據(jù)類型和派生數(shù)據(jù)類型,來(lái)派生出自己需要的數(shù)據(jù)類型。4.6.3用戶派生數(shù)據(jù)類型

利用XMLSchema已有364.6.3用戶派生數(shù)據(jù)類型

1.簡(jiǎn)單數(shù)據(jù)類型(simpleType)簡(jiǎn)單數(shù)據(jù)類型只能包含字符數(shù)據(jù),不能包含子元素,也不能包含屬性。派生簡(jiǎn)單數(shù)據(jù)類型主要通過(guò)三個(gè)方面來(lái)實(shí)現(xiàn)。列表(list)派生聯(lián)合派生限制派生4.6.3用戶派生數(shù)據(jù)類型

1.簡(jiǎn)單數(shù)據(jù)類型(simpl374.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(complexType)復(fù)雜數(shù)據(jù)類型是一類可以包含若干子元素和屬性的一類數(shù)據(jù)類型,內(nèi)建數(shù)據(jù)類型是不包含復(fù)雜數(shù)據(jù)類型的,復(fù)雜數(shù)據(jù)類型是需要用戶自己進(jìn)行派生而獲得的,復(fù)雜數(shù)據(jù)類型也可以通過(guò)對(duì)已有的簡(jiǎn)單數(shù)據(jù)類型或者復(fù)雜數(shù)據(jù)類型進(jìn)行擴(kuò)充和限制而獲得。4.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(comple384.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(complexType)復(fù)雜類型的派生方法,那就是通過(guò)如下格式:<xsd:complexTypename=”type-name”><xsd:elementname=”element1”type=”data-type”/><xsd:elementname=”element2”type=”data-type”/>…<xsd:attributename=”attribute1”type=”data-type”/><xsd:attributename=”attribute2”type=”data-type”/>…</xsd:complextype>除此之外,還有通過(guò)擴(kuò)充或者限制已有的簡(jiǎn)單或者復(fù)雜數(shù)據(jù)類型的方法

4.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(comple394.6.4約束面

對(duì)于restriction派生方法,有12個(gè)約束面輔助進(jìn)行派生限制,這12種約束可以分成5個(gè)類別:范圍限制枚舉限制處理空白限制十進(jìn)制數(shù)字限制模式限制4.6.4約束面

對(duì)于restriction派生方法,有404.6.4約束面1.范圍限制有7個(gè)約束面是作用于范圍的,他們分別是:minInclusive、maxInclusive、minExclusive、maxExclusive、minLength、maxLength和length。4.6.4約束面1.范圍限制414.6.4約束面2.枚舉限制枚舉限制就是針對(duì)一個(gè)基礎(chǔ)數(shù)據(jù)類型限定一列允許值而派生出新的數(shù)據(jù)類型。新的數(shù)據(jù)類型的值域就只能是這一列允許值,不在這一列值中出現(xiàn)的取值都不屬于這個(gè)新的數(shù)據(jù)類型。4.6.4約束面2.枚舉限制424.6.4約束面3.處理空白限制對(duì)于文檔中的空白,約束面是whiteSpace,它有三種取值方式來(lái)約束空白的處理方法,分別是:collapse、preserve和replace。collapse規(guī)定將一個(gè)空白序列壓縮成單個(gè)空格并且去掉序列的前導(dǎo)和結(jié)尾空白;preserv規(guī)定忽略空白,不對(duì)其進(jìn)行處理;而replace則規(guī)定將所有形式的空白如制表符、換行符、回車符等都轉(zhuǎn)變成空格符。4.6.4約束面3.處理空白限制434.6.4約束面4.十進(jìn)制數(shù)字限制對(duì)于十進(jìn)制數(shù),有兩個(gè)約束面用來(lái)限制它們:totalDigits和fractionDigits。totalDigits限制一個(gè)十進(jìn)制數(shù)的最大位數(shù),fractionDigits約束十進(jìn)制數(shù)的小數(shù)部分的最大位數(shù)。4.6.4約束面4.十進(jìn)制數(shù)字限制444.6.4約束面5.模式約束模式約束是所有約束中最復(fù)雜的一類約束,一般都是通過(guò)正則表達(dá)式來(lái)描述模式約束。4.6.4約束面5.模式約束454.7import與include

4.7.1import 4.7.2include4.7import與include

4.7.1imp464.7.1import

Schema的import元素用于將元素聲明、簡(jiǎn)單或者復(fù)雜類型定義等模式結(jié)構(gòu)信息從外部模式導(dǎo)入當(dāng)前模式文件中。必須注意的是如果使用名稱空間,則外部模式的目標(biāo)名稱空間應(yīng)該與當(dāng)前導(dǎo)入模式文檔的名稱空間相同。外部模式文件也可以不使用名稱空間。4.7.1import

Schema的import元素用474.7.2include

include元素用于將元素聲明、簡(jiǎn)單和復(fù)雜數(shù)據(jù)類型定義等模式結(jié)構(gòu)從外部模式文檔導(dǎo)入include模式文檔中,并且外部模式文件所在的名稱空間必須與當(dāng)前導(dǎo)入的模式文件保持匹配,否則必須使用空名稱空間。4.7.2include

include元素用于將元素聲484.8小結(jié)

本章主要介紹Schema的相關(guān)內(nèi)容,Schema可用于對(duì)各種XML文檔進(jìn)行類型說(shuō)明,它提供一套完整的機(jī)制來(lái)約束XML文檔的結(jié)構(gòu)。Schema本身就是使用XML進(jìn)行定義,與XML文檔保持了一致性,同時(shí)Schema具備了良好的擴(kuò)展性。首先介紹了如何聲明XML元素,包括一般的簡(jiǎn)單元素、復(fù)雜元素、特殊元素和元素組的聲明方法以及如何對(duì)元素進(jìn)行限制。描述了全局元素與局部元素的關(guān)系。接著介紹了屬性聲明的一般方法、屬性引用和屬性組以及對(duì)屬性進(jìn)行限制的方法。也介紹了Schema進(jìn)行注釋的方式。最后一部分介紹了Schema的數(shù)據(jù)類型,XMLSchema中共定義了44種數(shù)據(jù)類型,其中19種是原始數(shù)據(jù)類型,用戶不能創(chuàng)建原始數(shù)據(jù)類型。另外的25種是基于這19種原始數(shù)據(jù)類型派生的,屬于派生數(shù)據(jù)類型。派生數(shù)據(jù)類型就是根據(jù)一個(gè)或者多個(gè)現(xiàn)有的數(shù)據(jù)類型進(jìn)行限制或擴(kuò)展。用戶也可以定義自己的派生數(shù)據(jù)類型。所有44種數(shù)據(jù)類型都屬于內(nèi)建數(shù)據(jù)類型。4.8小結(jié)

本章主要介紹Schema的相關(guān)內(nèi)容,Sche49第四章XMLschema第四章XMLschema504.1XMLschema簡(jiǎn)介Schema是一種與DTD類似的,同樣用于定義在各種XML文檔中使用標(biāo)記的規(guī)范的一個(gè)工具。從功能上來(lái)講,Schema與DTD是等效的,但是前者比后者更具靈活性,由于DTD使用了一種特殊的規(guī)范來(lái)定義使用XML標(biāo)記的規(guī)范,有許多常用的限制不能用DTD來(lái)表述,人們開始尋求另外的解決方法,微軟發(fā)展了一套不同于DTD方法來(lái)定義XML數(shù)據(jù)類型,這個(gè)方法成為了現(xiàn)今的W3C定義的Schema的原型。4.1XMLschema簡(jiǎn)介Schema是一種與DTD類514.2XMLSchema與DTD的比較

Schema具有如下優(yōu)點(diǎn):一致性:Schema使得對(duì)XML的定義不必再利用一種特定的形式化的語(yǔ)言,而是直接借助XML自身的特性,利用XML的基本語(yǔ)法規(guī)則來(lái)定義XML文檔的結(jié)構(gòu),使得XML達(dá)到了從內(nèi)到外的統(tǒng)一,也為XML的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。擴(kuò)展性:Schema對(duì)DTD進(jìn)行了擴(kuò)充,引入了數(shù)據(jù)類型、命名空間,從而使其具備較強(qiáng)的可擴(kuò)展性。互換性:利用Schema,我們能夠書寫XML文檔以及驗(yàn)證文檔的合法性。另外,通過(guò)特定的映射機(jī)制,還可以將不同的Schema進(jìn)行轉(zhuǎn)換,以實(shí)現(xiàn)更高層次的數(shù)據(jù)交換。規(guī)范性:同DTD一樣,Schema也提供了一套完整的機(jī)制以約束XML文檔中置標(biāo)的使用,但相比之下,后者基于XML,更具有規(guī)范性。Schema利用元素的內(nèi)容和屬性來(lái)定義XML文檔的整體結(jié)構(gòu),如哪些元素可以出現(xiàn)在文檔中、元素間的關(guān)系是什么、每個(gè)元素有哪些內(nèi)容和屬性以及元素出現(xiàn)的順序和次數(shù)等等,都可一目了然。4.2XMLSchema與DTD的比較

Schema具524.3XML元素聲明

4.3.1根元素 4.3.2簡(jiǎn)單元素 4.3.3復(fù)雜元素 4.3.4特殊元素 4.3.5元素組 4.3.6元素限制 4.3.7全局元素與局部元素 4.3.8any元素4.3XML元素聲明

4.3.1根元素534.3.1根元素

每一個(gè)schema文檔都必須擁有一個(gè)根元素——schema元素,并且這個(gè)根元素也是唯一的。Schema文檔其他所有的元素及其屬性聲明和數(shù)據(jù)類型定義都必須嵌套在根元素中。4.3.1根元素

每一個(gè)schema文檔都必須擁有一個(gè)根544.3.2簡(jiǎn)單元素

簡(jiǎn)單元素是指不包含子元素和屬性的元素。是一種簡(jiǎn)單數(shù)據(jù)類型的元素。簡(jiǎn)單元素的數(shù)據(jù)類型既可以是內(nèi)建數(shù)據(jù)類型,也可以是用戶派生的簡(jiǎn)單類型。4.3.2簡(jiǎn)單元素

簡(jiǎn)單元素是指不包含子元素和屬性的元素554.3.2簡(jiǎn)單元素

聲明一個(gè)簡(jiǎn)單元素的具體的語(yǔ)法格式如下:<xsd:elementname=”element-name”type=”data-type”/><xsd:simpleTypename=”data-type”…</xsd:simpleType>4.3.2簡(jiǎn)單元素

聲明一個(gè)簡(jiǎn)單元素的具體的語(yǔ)法格式如下564.3.3復(fù)雜元素

包含子元素的元素就是復(fù)雜元素,對(duì)應(yīng)的,它屬于復(fù)雜數(shù)據(jù)類型。聲明一個(gè)復(fù)雜元素的語(yǔ)法規(guī)則是:<xsd:elementname=”element-name”type=”data-type”/><xsd:complexTypename=”data-type”><xsd:sequence><xsd:elementname=”child1”/><xsd:elementname=”child2”/>…</xsd:sequence></xsd:complexType>4.3.3復(fù)雜元素

包含子元素的元素就是復(fù)雜元素,對(duì)應(yīng)的574.3.4特殊元素

1.空元素 空元素就是元素內(nèi)容為空值的元素,它也不包含子元素。有兩種表示空值的方法:使用屬性nillable=”true”或者使用屬性minOccurs=”0”。2.ANY類型的元素 一個(gè)anyType類型不以任何形式約束其包含的內(nèi)容,我們可以象使用其他類型一樣使用anyType。聲明一個(gè)元素為anyType類型的語(yǔ)法是:

<xsd:elementname=”element-name”type=”xsd:anyType”>

4.3.4特殊元素

1.空元素584.3.4特殊元素3.混合內(nèi)容元素如果一個(gè)元素,它既需要包含子元素,又需要包含字符數(shù)據(jù),那么它就必須作為一個(gè)混合內(nèi)容形式的元素。具體的語(yǔ)法格式如下:<xsd:elementname=”element-name”><xsd:complexTypemixed=”true”><xsd:sequence>…</xsd:sequence></xsd:complexType></xsd:element>4.3.4特殊元素3.混合內(nèi)容元素594.3.4特殊元素4.選擇型元素如果一個(gè)元素只能在有限的幾個(gè)子元素中選擇一個(gè)子元素作為元素內(nèi)容,那么需要將它聲明為選擇型的元素,選擇型元素也是復(fù)雜類型元素。具體的格式如下:<xsd:elementname=”element-name”><xsd:complexType><xsd:choice><xsd:elementname=”child1”type=”data-type”/><xsd:elementname=”child2”type=”data-type”/>…</xsd:choice></xsd:complexType></xsd:element>4.3.4特殊元素4.選擇型元素604.3.5元素組

在一個(gè)元素的多個(gè)子元素中,有時(shí)候幾個(gè)子元素之間存在一些邏輯上的聯(lián)系,比如我們描述地址時(shí),門牌號(hào)、街道和城市這幾個(gè)元素就存在聯(lián)系,這時(shí)候如果將它們分為一組也是較為合適的。基于這種需要,因此XML提供了一個(gè)聲明若干個(gè)元素為一組的機(jī)制,這就是元素組。4.3.5元素組

在一個(gè)元素的多個(gè)子元素中,有時(shí)候幾個(gè)子614.3.5元素組

具體的格式如下:<xsd:groupname=”group-name”><xsd:sequence><xsd:elementname=”element1”type=”date-type”/><xsd:elementname=”element2”type=”date-type”/>… </xsd:sequence></xsd:group>4.3.5元素組

具體的格式如下:624.3.6元素限制

可以通過(guò)指定元素的minOccurs和maxOccurs屬性來(lái)限制元素的出現(xiàn)次數(shù)。當(dāng)需要指定元素的默認(rèn)值時(shí),就需要使用到元素的default屬性和fixed屬性。使用sequence關(guān)鍵字的意思就是規(guī)定子元素在xml文檔中的出現(xiàn)順序是順序出現(xiàn)的——與schema文件中聲明的順序一致。all,這種方式使得序列中的元素可以按照任意的順序出現(xiàn),但是這些元素每個(gè)最多只能出現(xiàn)一次。choice,這一種也即是前面介紹過(guò)的選擇型元素,它起到的作用就是在若干個(gè)給定的子元素中選擇一個(gè)出現(xiàn)在XML文檔中,注意只能選擇一個(gè),不能選多個(gè),也不能選擇不在給定范圍內(nèi)的子元素。4.3.6元素限制

可以通過(guò)指定元素的minOccurs634.3.7全局元素與局部元素

在schema文件中,schema根元素的直接子元素就是全局元素。局部元素就是它的父元素不是schema根元素的元素。4.3.7全局元素與局部元素

在schema文件中,sc644.3.8any元素

XML存在一個(gè)較為特殊的元素,那就是any元素,在復(fù)雜類型內(nèi)使用any元素意味著任何元素都可以出現(xiàn)在那個(gè)位置上,這可有效地使它成為事先無(wú)法預(yù)知的內(nèi)容的占位符。4.3.8any元素

XML存在一個(gè)較為特殊的元素,那就654.3.8any元素

使用any元素時(shí),也可以通過(guò)指定它的名稱空間屬性namespace來(lái)指明any元素的詳細(xì)情況,namespace有四種取值,分別為:##any: 來(lái)自任何命名空間的任何元素##local:任何非限定元素(不屬于命名空間)##other:非targetNamespace命名空間中的任何元素##targetNamespace:targetNamespace中的任何元素4.3.8any元素

使用any元素時(shí),也可以通過(guò)指定它664.4XMLschema屬性聲明

4.4.1聲明屬性 4.4.2屬性引用4.4.3屬性組4.4.4any類型屬性4.4.5屬性限制4.4XMLschema屬性聲明

4.4.1聲明屬674.4.1聲明屬性

使用attribute關(guān)鍵字來(lái)聲明一個(gè)屬性。與元素不同,屬性都需要是簡(jiǎn)單的數(shù)據(jù)類型。聲明屬性的語(yǔ)法如下:<xsd:attributename=”attribute-name”type=”simple-type”/>4.4.1聲明屬性

使用attribute關(guān)鍵字來(lái)聲明一684.4.2屬性引用

屬性也存在引用,可以引用已聲明的屬性來(lái)作為自己元素的屬性。聲明一個(gè)屬性引用使用的關(guān)鍵字也是ref,具體的格式如下:<xsd:attributeref=”ref-of-attribute”/>注意引用的屬性一定要有聲明,不能引用不存在的屬性。4.4.2屬性引用

屬性也存在引用,可以引用已聲明的屬性694.4.3屬性組

屬性也可以聲明成一組屬性組。聲明屬性組使用的關(guān)鍵字是:attributeGroup,具體的格式請(qǐng)看下面:<xsd:attributeGroupname=”attributeGroup-name”><xsd:attributename=”attribute1”…/><xsd:attributename=”attribute2”…/> …</xsd:attributeGroup>屬性組有助于XML文檔結(jié)構(gòu)的模塊化,允許在一處聲明常用的屬性集合,然后在一個(gè)或多個(gè)文檔中引用。4.4.3屬性組

屬性也可以聲明成一組屬性組。聲明屬性組704.4.4any類型屬性

屬性也有一個(gè)用聲明任意屬性類型的方法,這就是使用anyAttribute關(guān)鍵字進(jìn)行屬性聲明。聲明為any類型的屬性也就具備了占位符的功能,在XML文檔實(shí)例中它允許將這種類型的屬性替換成任意類型的屬性。它也提供名稱空間屬性,相應(yīng)的屬性值取值也是分別為:##any: 來(lái)自任何命名空間的任何元素##local:任何非限定元素(不屬于命名空間)##other:非targetNamespace命名空間中的任何元素##targetNamespace:targetNamespace中的任何元素4.4.4any類型屬性

屬性也有一個(gè)用聲明任意屬性類型714.4.5屬性限制

關(guān)鍵字use來(lái)對(duì)屬性的出現(xiàn)做出限制。use的值可以為:required、optional和prohibited三種,相應(yīng)的意思分別為必須出現(xiàn)、選擇出現(xiàn)和禁止出現(xiàn)4.4.5屬性限制

關(guān)鍵字use來(lái)對(duì)屬性的出現(xiàn)做出限制。724.4.5屬性限制default和fixed兩個(gè)值用于規(guī)定屬性的內(nèi)容。default規(guī)定屬性的默認(rèn)值,而fixed規(guī)定屬性的內(nèi)容一定要是fixed指定的值。并且當(dāng)一個(gè)屬性指定了default值的話,那么如果需要指定use的值,就一定要選擇optional。4.4.5屬性限制default和fixed兩個(gè)值用于規(guī)734.5注釋

XMLSchema提供三個(gè)元素用于注釋,以提高代碼的可讀性,并且也可以為其它應(yīng)用程序提供一定的輔助信息。三個(gè)元素分別是:annotation、documentation和appinfo,其中documentation和appinfo是annotation的子元素。4.5注釋

XMLSchema提供三個(gè)元素用于注釋,以744.6XMLSchema數(shù)據(jù)類型

4.6.1原始數(shù)據(jù)類型 4.6.2派生數(shù)據(jù)類型 4.6.3用戶派生數(shù)據(jù)類 4.6.4約束面4.6XMLSchema數(shù)據(jù)類型

4.6.1原始數(shù)754.6.1原始數(shù)據(jù)類型

19種原始數(shù)據(jù)類型中可以分成幾個(gè)大類,分別是:程序設(shè)計(jì)數(shù)據(jù)類型XML數(shù)據(jù)類型二進(jìn)制數(shù)據(jù)類型時(shí)間數(shù)據(jù)類型。4.6.1原始數(shù)據(jù)類型

19種原始數(shù)據(jù)類型中可以分成幾個(gè)764.6.1原始數(shù)據(jù)類型1.程序設(shè)計(jì)數(shù)據(jù)類型在大部分的程序設(shè)計(jì)語(yǔ)言或者數(shù)據(jù)庫(kù)系統(tǒng)中都會(huì)有一些常見的數(shù)據(jù)類型,這幾類就是string、boolean、decimal、float和double類型。2.XML數(shù)據(jù)類型共有三種數(shù)據(jù)類型屬于XMl數(shù)據(jù)類型,分別是anyURI、QName和NOTATION。4.6.1原始數(shù)據(jù)類型1.程序設(shè)計(jì)數(shù)據(jù)類型774.6.1原始數(shù)據(jù)類型3.二進(jìn)制數(shù)據(jù)類型表示二進(jìn)制數(shù)據(jù)類型的有兩種,hexBinary和base64Binary。4.6.1原始數(shù)據(jù)類型3.二進(jìn)制數(shù)據(jù)類型784.6.1原始數(shù)據(jù)類型4.時(shí)間類型有9種原始數(shù)據(jù)類型用于時(shí)間的表示:第一種是表示持續(xù)時(shí)間,對(duì)應(yīng)的數(shù)據(jù)類型是duration,它基于ISO8601數(shù)據(jù)格式標(biāo)準(zhǔn),表示時(shí)間的長(zhǎng)度,如1個(gè)小時(shí),3分鐘等等。第二種表示一個(gè)時(shí)間或者日期,是一個(gè)時(shí)間點(diǎn),相應(yīng)的數(shù)據(jù)類型有date、time和dateTime。第三種表示循環(huán)的日期或者時(shí)間,分別是gDay、gMonth、gMonthDay、gYear和gYearMonth。4.6.1原始數(shù)據(jù)類型4.時(shí)間類型794.6.2派生數(shù)據(jù)類型

XMLSchema定義了25種派生數(shù)據(jù)類型,它們都是在原始數(shù)據(jù)類型的基礎(chǔ)上定義的,此外XMLSchema也允許用戶定義自己的派生數(shù)據(jù)類型。4.6.2派生數(shù)據(jù)類型

XMLSchema定義了25種804.6.2派生數(shù)據(jù)類型

XMLSchema定義的派生數(shù)據(jù)類型可以分為幾組:第一組是整型數(shù),它包括如下幾種數(shù)據(jù)類型:integer:十進(jìn)制整型數(shù);positiveInteger:正的整數(shù);negativeInteger:負(fù)的整數(shù);nonPositiveInteger:非正整數(shù);nonNegativeInteger:非負(fù)整數(shù)。4.6.2派生數(shù)據(jù)類型

XMLSchema定義的派生數(shù)814.6.2派生數(shù)據(jù)類型

第二組是與計(jì)算機(jī)字長(zhǎng)成倍數(shù)關(guān)系的一組數(shù)據(jù)類型:byte:8位帶符號(hào)數(shù)(-128~127之間);unsignedByte:8位無(wú)符號(hào)數(shù)(0~255之間);short:16位短整型數(shù)(-32768~32767之間);unsignedShot:16位無(wú)符號(hào)短整型數(shù)(0~65535之間);int:32位整型數(shù)(-2147483648~2147483647之間);unsignedInt:無(wú)符號(hào)32位整型數(shù)(0~4294967295之間);long:64位整型數(shù)(-9223372036854775808~9223372036854775807之間);unsignedLong:64位無(wú)符號(hào)整型數(shù)(0~18446744073709551615之間)。4.6.2派生數(shù)據(jù)類型

第二組是與計(jì)算機(jī)字長(zhǎng)成倍數(shù)關(guān)系的824.6.2派生數(shù)據(jù)類型

第三組是基于XML屬性類型構(gòu)成的一組數(shù)據(jù)類型:ID:文檔中單個(gè)元素唯一的標(biāo)示符;IDREF文檔中對(duì)一個(gè)元素ID的引用;IDREFS:文檔中對(duì)多個(gè)個(gè)元素ID的引用,每個(gè)ID之間使用空格進(jìn)行分隔;ENTITY:文檔非解析實(shí)體名稱;ENTITIES:文檔多個(gè)非解析實(shí)體名稱,每個(gè)名稱之間使用空格分隔;NMTOKEN:帶有特定約束的字符串。NMTOKENS:多個(gè)帶有特定約束的字符串,每個(gè)名稱之間使用空格分隔。4.6.2派生數(shù)據(jù)類型

第三組是基于XML屬性類型構(gòu)成的834.6.2派生數(shù)據(jù)類型

第四組是XML的一類數(shù)據(jù)類型:Name:以字母或者下劃線和冒號(hào)開始,后繼字符包括數(shù)字、字母、下劃線、連字符和句點(diǎn)的字符串類型。NCName:以字母或者下劃線開始,后繼字符包括數(shù)字、字母、下劃線、連字符和句點(diǎn)的字符串類型。normalizedString:將字符串中的回車或者制表符之類的空白符變?yōu)橛煽崭翊娴淖址愋?。token:將字符串中多個(gè)相鄰空白壓縮為一個(gè)空白符,并且去除前導(dǎo)和末尾空格后變成的新的字符串類型。4.6.2派生數(shù)據(jù)類型

第四組是XML的一類數(shù)據(jù)類型:844.6.3用戶派生數(shù)據(jù)類型

利用XMLSchema已有的數(shù)據(jù)類型——原始數(shù)據(jù)類型和派生數(shù)據(jù)類型,來(lái)派生出自己需要的數(shù)據(jù)類型。4.6.3用戶派生數(shù)據(jù)類型

利用XMLSchema已有854.6.3用戶派生數(shù)據(jù)類型

1.簡(jiǎn)單數(shù)據(jù)類型(simpleType)簡(jiǎn)單數(shù)據(jù)類型只能包含字符數(shù)據(jù),不能包含子元素,也不能包含屬性。派生簡(jiǎn)單數(shù)據(jù)類型主要通過(guò)三個(gè)方面來(lái)實(shí)現(xiàn)。列表(list)派生聯(lián)合派生限制派生4.6.3用戶派生數(shù)據(jù)類型

1.簡(jiǎn)單數(shù)據(jù)類型(simpl864.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(complexType)復(fù)雜數(shù)據(jù)類型是一類可以包含若干子元素和屬性的一類數(shù)據(jù)類型,內(nèi)建數(shù)據(jù)類型是不包含復(fù)雜數(shù)據(jù)類型的,復(fù)雜數(shù)據(jù)類型是需要用戶自己進(jìn)行派生而獲得的,復(fù)雜數(shù)據(jù)類型也可以通過(guò)對(duì)已有的簡(jiǎn)單數(shù)據(jù)類型或者復(fù)雜數(shù)據(jù)類型進(jìn)行擴(kuò)充和限制而獲得。4.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(comple874.6.3用戶派生數(shù)據(jù)類型2.復(fù)雜數(shù)據(jù)類型(complexType)復(fù)雜類型的派生方法,那就是通過(guò)如下格式:<xsd:complexTypename=”type-name”><xsd:elementname=”element1”type=”data-type”/><xsd:ele

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論