第3章 XML Schema.ppt_第1頁
第3章 XML Schema.ppt_第2頁
第3章 XML Schema.ppt_第3頁
第3章 XML Schema.ppt_第4頁
第3章 XML Schema.ppt_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余51頁可下載查看

下載本文檔

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

文檔簡介

1、第3章 XML Schema,3.1 XML模式Schema,3.1 Schema與DTD的區(qū)別和優(yōu)勢 DTD不使用XML語法,而XML Schema使用XML語法。也就是說,可以使用分析、編輯和處理XML的工具(包括DOM、SAX等APIs)對XML Schema進(jìn)行處理。 DTD作為XML1.0的一部分,對名字空間(名字空間晚于XML1.0發(fā)布)不能提供很好的支持。在DTD中只能把名字空間作為元素前綴聲明,然后在XML文檔中進(jìn)行URI綁定;XML Schema提供對名字空間很好的支持,可在XML Schema直接對名字空間進(jìn)行URI綁定。 DTD對數(shù)據(jù)類型只提供了粗略描述,如PCDATA、

2、NMTOKEN等等,而XML Schema提供了諸如string、int、token、date、byte、language等等內(nèi)建數(shù)據(jù)類型,還提供用數(shù)據(jù)類型的派生(derivation)、繼承和戶自定義數(shù)據(jù)類型,不僅如此,XML Schema還可以對可選數(shù)據(jù)范圍很方便得進(jìn)行限制。同時(shí),XML Schema可以對文檔結(jié)構(gòu)進(jìn)行比DTD精確的定義,如子元素出現(xiàn)的次數(shù)。,3.2局部和全局定義,DTD中的所有聲明都是全局聲明,而XML模式則既有全局聲明也有局部聲明,可以視情況而定。 在DTD中,每個(gè)元素都被聲明為全局的,所以每個(gè)元素必須有一個(gè)唯一的名字并且只能聲明一次。元素可被多個(gè)其他元素所引用,但在這

3、些情況下,它們的定義必須完全相同。 然而在XML模式中,上下文是非常重要的。在模式的頂層聲明的元素被認(rèn)為是全局聲明。在定義一個(gè)復(fù)雜類型時(shí),可以參考和使用這些全局定義的元素作為該類型的一個(gè)子部分,也可以同時(shí)定義一些新的局部元素,但作用域被限制在該復(fù)雜類型之內(nèi)。 值得注意的是,XML Schema雖然具有以上特點(diǎn),但在實(shí)際應(yīng)用中并不能完全代替DTD。,3.3 Schema的基本結(jié)構(gòu)和使用, This is my very first schema. It does not have any elements yet, but it will. ,3.4 設(shè)計(jì)思路,Schema在設(shè)計(jì)思路上與DTD不

4、同: DTD直觀而簡單得描述XML文檔,而Schema基本思路是從通過描述元素/屬性的類型(type)及該類型中的內(nèi)容(content)來“復(fù)雜”而準(zhǔn)確地描述XML文檔。 簡單類型(simpleType) 復(fù)雜類型(complexType) 有名/無名類型 全局/局部聲明,Schema內(nèi)建了豐富的數(shù)據(jù)類型,被稱為“簡單類型(simpleType)”,可以直接在元素和屬性中使用它們,如上例中的xs:string,也可以用它們派生出其它“簡單類型”和“復(fù)雜類型(complexType)”。 值得注意的是XML Schema雖然提供內(nèi)建ENEITY數(shù)據(jù)類型,卻沒有提供聲明ENTITY的機(jī)制,如果要使

5、用ENTITY,必須在DTD中聲明(XML文檔在一定程度上可以同時(shí)使用XML Schema和DTD)。 Schema內(nèi)建的簡單類型圖,Schema內(nèi)建數(shù)據(jù)類型,數(shù)據(jù)類型,元素的聲明 xsd:element元素的可選屬性很多,如上面的name(name屬性也是可選的,因?yàn)檫€有其它的聲明方式,如ref,見“元素和屬性的引用”),還有type、maxOccurs、minOccurs、default、fixed等等,將在后面介紹。,1. 元素的類型,1. 元素的類型,1. 元素的類型,1. 元素的類型,1. 元素的類型 僅僅聲明元素的名字是不夠的,還必須說明元素的類型(type): (1)直接聲明。聲

6、明語法: 其中“元素的類型”可以是內(nèi)建的數(shù)據(jù)類型(如xsd:string),也可以是自定義的數(shù)據(jù)類型。就是一個(gè)元素名字和類型的直接聲明: 聲明了一個(gè)名字為的street元素,它的類型為xsd:string,即它的內(nèi)容為Scheam內(nèi)建數(shù)據(jù)類型string。,(2)元素內(nèi)聲明。聲明語法: xs:element name=”元素的名字” 其中xs:complexType可用來聲明子元素或?qū)傩?如: ,2. 子元素的聲明 在XML Schema中,一個(gè)元素包含了子元素(或?qū)傩裕瑒t說該元素具有復(fù)雜類型(complex type)。也就是說,元素和它的子元素(或?qū)傩裕┦峭ㄟ^復(fù)雜類型構(gòu)建的。 如: ,或

7、 其中xs:sequence控制子元素在XML文檔中出現(xiàn)的順序:xs:sequence包含的元素必須都出現(xiàn)而且必須按照聲明的順序。 相關(guān)的順序控制符還有xs:choice和xs:all。 xs:choice表示它包含的多個(gè)元素中有且只有一個(gè)元素出現(xiàn)在相應(yīng)的XML文檔中。 xs:all表示它包含的多個(gè)元素必須都出現(xiàn)但可以按任何順序。,3. 混合內(nèi)容(mixed content) 通過在xs:complexType元素中設(shè)置mixed屬性為true,XML Schema允許混合內(nèi)容的XML實(shí)例文檔,如下: Dear Mr.John Smith. Your order 1032 will be sh

8、ipped on 2001-07-13. ,XML Schema: 在混合內(nèi)容中,依然可以用xs:sequence、xs:choice和xs:all來控制元素在實(shí)例文檔中的出現(xiàn)情況。,4. 元素的默認(rèn)值 元素的默認(rèn)值可以按照如下方式聲明: 如: 默認(rèn)值表示該元素值如果在XML文檔沒有出現(xiàn),則解析器以該默認(rèn)值代替;如果出現(xiàn),則按出現(xiàn)的值處理。,5. 元素的固定值 元素的固定值可以按照如下方式聲明: 如: 固定值表示該元素值如果在XML文檔沒有出現(xiàn),則解析器以該固定值代替;如果出現(xiàn),則必須是該固定值。,6. 元素的出現(xiàn)次數(shù) XML Schema可以控制元素出現(xiàn)的次數(shù),如下: 如: minOccur

9、s和maxOccurs的默認(rèn)值都是“1”,minOccurs為非負(fù)且要求小于或等于maxOccurs,maxOccurs的值可為“unbounded”(不限)。,6.5.3 屬性的聲明 在XML Schema中,一個(gè)元素包含了屬性(或子元素),則說該元素具有復(fù)雜類型(complex type)。也就是說,元素和它的屬性(或子元素)是通過復(fù)雜類型構(gòu)建的。如: 實(shí)例文檔片段: Sichuan,聲明屬性時(shí)也必須聲明屬性的類型,屬性本身只能是簡單的類型(不能包含屬性或元素的類型),如XML Schema內(nèi)建的數(shù)據(jù)類型,因?yàn)閷傩圆荒馨瑢傩曰蜃釉亍?xs:attribute元素有很多可選屬性,如def

10、ault、fixed和use,其中default和fixed屬性用法和xs:element中的default和fixed屬性用法相同;use屬性用來控制屬性的使用情況,它的三個(gè)可選值如下: use = ( optional | prohibited | required ) use的默認(rèn)值是optional(選用即可在實(shí)例文檔中出現(xiàn)或不出現(xiàn)),其它兩個(gè)值分別為prohibited(禁用)和required(必用)。,空(Empty)元素的聲明 前面使用了xs:simpleContent說明元素province的復(fù)雜類型有簡單內(nèi)容,所以在實(shí)例文檔元素province的內(nèi)容可為Sichuan(也可

11、為空Empty)。如果需要元素province只能為空值,可用如下方式定義該空元素: ,如果有必要聲明沒有屬性的空元素(通常這沒有實(shí)際意義),可按如下方式聲明: 必須指出,空(Empty)元素和nill 元素不同(nill 元素不是表示元素為空值,而是表示元素可以沒有值或不知道該值,類似于SQL的null),這里不討論nill 元素,可參考相關(guān)書籍。,類型的派生 聲明新的簡單類型 取值說明 復(fù)雜類型的派生 restriction extension,1. 聲明新的簡單類型 如下Schema片段: 使用xs:simpleType和xs:restriction可以為元素或?qū)傩远ㄖ菩碌暮唵晤愋停纠?/p>

12、中新的類型streetType和Schema內(nèi)建string類型相映射。這樣定義看來多余,但我們實(shí)際上常常在自定義類型中加上“取值限制”,就非常有用了。,除了list和union,取值說明符的語法為: ,例如: 這里定義了一個(gè)簡單類型,其內(nèi)容只能是由大寫字母A-Z中任六個(gè)字母組成的字符串。 實(shí)例文檔片段: HABGYH,list的語法: 列舉是用空格分開的一系列原子類型值。 例如: ,或: 實(shí)例文檔片段: HABGYH ABSDFJ DFGLKJ,union的語法。 聯(lián)合是從列舉的類型(用空白字符分開)中任選一種而且只能選一種。 例如: 實(shí)例文檔片段: HABGYH ABSDFJ 或者 124

13、56 各取值說明符詳細(xì)的用法可參考相關(guān)書籍。,復(fù)雜類型的派生 我們可以通過xs:extension和xs:restriction元素來從已有的類型派生出新的復(fù)雜類型,原理上類似面對對象編程中的繼承。 (1)restriction派生。 當(dāng)新派生的類型邏輯上是現(xiàn)有類型的一個(gè)子集是,可使用restriction派生,如下: 現(xiàn)有類型: ,restriction派生: 這里新派生的類型比原有的類型少了maxOccurs=3這個(gè)限制。,(2) extension派生 extension派生相當(dāng)于在已有的類型的內(nèi)容后面加上在xs:extension中聲明的內(nèi)容。 現(xiàn)有類型: ,extension派生:

14、,其結(jié)果相當(dāng)于定義如下類型: ,全局聲明和有名類型聲明方式的Schema 先來看一個(gè)發(fā)貨單的實(shí)例文檔: John Smith Ola Nordmann Langgt 23 4000 Stavanger Norway Empire Burlesque 1 10.90 Hide your heart 1 9.90 , ,全局(global)聲明方式的Schema 全局聲明方式把元素或?qū)傩宰鳛閤s:schema的直接子元素聲明叫作全局聲明。反之,把元素或?qū)傩苑旁谄渌貎?nèi)聲明,叫作局部聲明。上面的Schema使用的是局部聲明方式。下面的Schema使用全局聲明和對已聲明元素或?qū)傩缘囊茫╮efere

15、nce)來實(shí)現(xiàn)。, , , ,有名類型(named type)聲明方式的Schema 前面所有復(fù)雜的和簡單的類型都是匿名類型或直接使用的內(nèi)建類型,用戶沒有給每個(gè)類型一個(gè)用戶取的名字,這不便于類型的控制,下面的Schema使用有名類型聲明方式來實(shí)現(xiàn)。, , , ,注釋 Schema是XML文檔,自然可以用XML注釋,即來進(jìn)行注釋,但解析器不保證這種注釋在通過解析后不變,這會(huì)導(dǎo)致重要信息的損失設(shè)想當(dāng)你用XML注釋保存版權(quán)信息時(shí),你希望該信息能保持不變甚至可以被象XML元素一樣處理,這時(shí),可以使用xs:annotation。 在xs:annotation中,可選擇使用xs:documentation

16、或xs:appinfo或二者都用。其中,xs:documentation是方便人閱讀的,xs:appinfo是方便應(yīng)用程序處理的。二者的內(nèi)容都可以是字符內(nèi)容或者任何“結(jié)構(gòu)良好的”標(biāo)記內(nèi)容。,使用多個(gè)Schema DTD中使用參數(shù)實(shí)體來使用多個(gè)DTDs,XML Schema也提供相應(yīng)機(jī)制,而且更強(qiáng)大??梢栽谝粋€(gè)Schema中包括(include)同名字空間的外部聲明,重定義(redefine)同名字空間的外部聲明,還可以輸入 (import)屬于別的名字空間的Schema。 “包括外部聲明”的語法為: “重定義外部聲明” 的語法為: “輸入屬于別的名字空間的Schema” 的語法為: ,名字空間

17、和XML Schema 使用全局聲明的一個(gè)好處是把名字空間和全局聲明的元素、屬性、屬性組、類型等相聯(lián)系。我們知道,XML Schema對名字空間有很好的支持,把一個(gè)Schema和一個(gè)名字空間聯(lián)系起來是通過xs:schema 的targetNamespace(目標(biāo)名字空間)屬性實(shí)現(xiàn)。, 注意,使用targetNamespace后,Schema中所有全局聲明就屬于該名字空間。,實(shí)例文檔中使用名字空間 XML Schema要求在實(shí)例文檔根元素中分別使用xsi:noNamespaceSchemaLocation或xsi:schemaLocation屬性來定位處理不使用或使用目標(biāo)名字空間的Schema。

18、 同時(shí),要求在實(shí)例文檔對該目標(biāo)名字空間進(jìn)行綁定:可以通過默認(rèn)名字空間或前綴進(jìn)行URI綁定。, 108 Street Chengdu Sichuan 或 108 Street Chengdu Sichuan,由于使用targetNamespace后,Schema中所有全局聲明就屬于該名字空間。下面例子將導(dǎo)致錯(cuò)誤: ,這里,addressType是全局聲明所以屬于targetNamespace,必須在使用該類型時(shí)注明名字空間。所以可將上例改為: ,xs:schema還有兩個(gè)常有屬性:elementFormDefault attributeFormDefault 分別用來控制局部聲明的元素和屬性是否受目標(biāo)名字空間限制。 elementFormD

溫馨提示

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

最新文檔

評論

0/150

提交評論