第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頁
免費預覽已結束,剩余51頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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進行處理。 DTD作為XML1.0的一部分,對名字空間(名字空間晚于XML1.0發(fā)布)不能提供很好的支持。在DTD中只能把名字空間作為元素前綴聲明,然后在XML文檔中進行URI綁定;XML Schema提供對名字空間很好的支持,可在XML Schema直接對名字空間進行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ù)范圍很方便得進行限制。同時,XML Schema可以對文檔結構進行比DTD精確的定義,如子元素出現(xiàn)的次數(shù)。,3.2局部和全局定義,DTD中的所有聲明都是全局聲明,而XML模式則既有全局聲明也有局部聲明,可以視情況而定。 在DTD中,每個元素都被聲明為全局的,所以每個元素必須有一個唯一的名字并且只能聲明一次。元素可被多個其他元素所引用,但在這

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

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

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

6、明語法: 其中“元素的類型”可以是內(nèi)建的數(shù)據(jù)類型(如xsd:string),也可以是自定義的數(shù)據(jù)類型。就是一個元素名字和類型的直接聲明: 聲明了一個名字為的street元素,它的類型為xsd:string,即它的內(nèi)容為Scheam內(nèi)建數(shù)據(jù)類型string。,(2)元素內(nèi)聲明。聲明語法: xs:element name=”元素的名字” 其中xs:complexType可用來聲明子元素或屬性 如: ,2. 子元素的聲明 在XML Schema中,一個元素包含了子元素(或屬性),則說該元素具有復雜類型(complex type)。也就是說,元素和它的子元素(或屬性)是通過復雜類型構建的。 如: ,或

7、 其中xs:sequence控制子元素在XML文檔中出現(xiàn)的順序:xs:sequence包含的元素必須都出現(xiàn)而且必須按照聲明的順序。 相關的順序控制符還有xs:choice和xs:all。 xs:choice表示它包含的多個元素中有且只有一個元素出現(xiàn)在相應的XML文檔中。 xs:all表示它包含的多個元素必須都出現(xiàn)但可以按任何順序。,3. 混合內(nèi)容(mixed content) 通過在xs:complexType元素中設置mixed屬性為true,XML Schema允許混合內(nèi)容的XML實例文檔,如下: 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來控制元素在實例文檔中的出現(xiàn)情況。,4. 元素的默認值 元素的默認值可以按照如下方式聲明: 如: 默認值表示該元素值如果在XML文檔沒有出現(xiàn),則解析器以該默認值代替;如果出現(xiàn),則按出現(xiàn)的值處理。,5. 元素的固定值 元素的固定值可以按照如下方式聲明: 如: 固定值表示該元素值如果在XML文檔沒有出現(xiàn),則解析器以該固定值代替;如果出現(xiàn),則必須是該固定值。,6. 元素的出現(xiàn)次數(shù) XML Schema可以控制元素出現(xiàn)的次數(shù),如下: 如: minOccur

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

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

11、為空Empty)。如果需要元素province只能為空值,可用如下方式定義該空元素: ,如果有必要聲明沒有屬性的空元素(通常這沒有實際意義),可按如下方式聲明: 必須指出,空(Empty)元素和nill 元素不同(nill 元素不是表示元素為空值,而是表示元素可以沒有值或不知道該值,類似于SQL的null),這里不討論nill 元素,可參考相關書籍。,類型的派生 聲明新的簡單類型 取值說明 復雜類型的派生 restriction extension,1. 聲明新的簡單類型 如下Schema片段: 使用xs:simpleType和xs:restriction可以為元素或屬性定制新的簡單類型,本例

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

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

14、,其結果相當于定義如下類型: ,全局聲明和有名類型聲明方式的Schema 先來看一個發(fā)貨單的實例文檔: John Smith Ola Nordmann Langgt 23 4000 Stavanger Norway Empire Burlesque 1 10.90 Hide your heart 1 9.90 , ,全局(global)聲明方式的Schema 全局聲明方式把元素或屬性作為xs:schema的直接子元素聲明叫作全局聲明。反之,把元素或屬性放在其他元素內(nèi)聲明,叫作局部聲明。上面的Schema使用的是局部聲明方式。下面的Schema使用全局聲明和對已聲明元素或屬性的引用(refere

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

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

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

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

溫馨提示

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

評論

0/150

提交評論