GB | BIG5
|
| 首頁 > 編程技術 > XML/WML > 正文 |
 |
| XML技術系列講座(11)驗証XLM數據合法性(上) |
| 本文出自:http://www.computerworld.com.cn 作者: 北京郵電大學 張劍 (2002-02-12 06:15:00) |
|
應用XML技術的一個主要目標是為了方便信息交換。很顯然,只有XML文檔的格式或是結構得到交互各方的一致認可,這個目標才有可能實現。XML Schema(大綱)和DTD就是描述信息結構的模型,可以用來對XML文檔內容的合法性進行驗証。 |
|
Schema和DTD規定了在文檔中能夠使用的元素和屬性,以及這些對象與文本內容的可能組合形式。作為對文檔驗証的標準,Schema和DTD不僅應該能被人們理解,對應用程序來說也應當是易理解的。對文檔合法性的驗証包括兩個方面:一方面是語法結構的驗証,即元素類型、元素嵌套格式、屬性類型、屬性值數據類型、屬性值是否可選等相關文檔對象單元本身及其結構的合法性;另一方面是語義的驗証,只有真正理解了XML文檔的含義才能算是實現了信息交互,否則僅是結構上正確但意義模糊的信息,對接收方來說一樣是無用的,有時甚至會產生誤解,起到相反的作用。 |
|
1.定義一份XML Schema或DTD: Schema或DTD為同一類型的所有文檔定義了結構標準,比如有關書籍信息的文檔可共享一份標準。 |
|
2.應用Schema或DTD:一般由文檔的作者指定Schema,這樣接收方可以很快地根據說明對文檔進行驗証。但在C/S(客戶機/服務器)環境中,由服務器無法判斷XML在客戶端是否已經驗証過,所以為了能夠確保驗証過程,也為了避免可能的重復驗証,對文檔應用Schema或DTD的操作由服務器完成。 |
|
3.運行解析器進行驗証:解析器在裝載文檔的同時掃描結構,遇到任何錯誤都會終止裝載過程,並做出適當的響應。 |
|
雖然,XML Schema和DTD都是用文檔驗証,但二者還是有一定的區別,其中前者更為精確和靈活: |
|
● XML Schema是一種內容“開放”的模型,可擴展、功能強,而DTD是內容“封閉”的模型,可擴展性差; |
|
● XML Schema支持豐富的數據類型,完全能夠滿足網絡應用特別是電子商務的需求,而DTD不支持元素的數據類型,對屬性的類型定義也很有限; |
|
● XML Schema支持名稱空間機制,DTD不支持; |
|
● XML Schema可以針對不同情況分別對整個XML文檔或者是文檔局部進行驗証,而DTD缺乏這種靈活性; |
|
● XML Schema的語法完全遵循XML規范,可以和DOM技術結合使用,功能強大,而DTD語法自成一體,比較難以學習。 |
|
所以,Schema很有可能取代DTD成為驗証XML文檔合法性的新標準。 |
|
Schema共有8種元素:<Schema>、<ElementType>、<element>、<group>、<AttributeType>、<attribute>、<datatype>和<description>。這些元素對XML中允許的語法和結構進行了定義。注意:必須在使用Schema前對這些元素進行定義。 |
|
Schema文件與其他的XML文檔結構非常相似,根元素為<Schema>,表明文檔類型: |
|
xmlns=“urn:schemas-microsoft-com:xml-data” |
|
xmlns:dt=“urn:schemas-microsoft-com:datatypes”> |
|
其中屬性name指定Schema名稱,xmlns指定所屬名稱空間。第一個xmlns指定全文的缺省名稱空間,第二個定義了文檔中可使用的數據類型的名稱空間。 |
|
在XML中引用Schema的方法是在XML文檔的根元素中使用名稱空間指明Schema文件的URL地址,在URL前要加上“x-schema”前綴: |
|
<myElement xmlns=“x-schema:http://mysite.com/myschema.xml”> |
|
如果是在XML文檔中的某一個元素中使用xmlns引用Schema,就是對文檔進行局部合法性驗証。 |
|
<ElementType>元素用來聲明XML文檔中使用的新元素: |
|
name = “element tag name” |
|
content = “empty”|“textOnly”|“eltOnly”|“mixed” |
|
model = “open” | “closed” |
|
order = “one” | “seq” | “many” |
|
dt:type = “XML data type” > |
|
Content屬性規定聲明的元素是否為空,是否包含文本或子元素,還是兩者都有;order指定子元素的排列順序; model規定了元素中是否可以包含未在Schema中定義的元素或屬性; dt: type則指定了元素的數據類型。 |
|
<element>元素是對<ElementType>聲明的元素的內容進行定義,說明在指定的元素類型中允許使用哪些子元素: |
|
type = “declared element type” |
|
Type屬性是必要的,同時要與〈ElementType〉中的name屬性完全一致。minOccurs和maxOccurs屬性分別指定了元素出現的最少和最多次數,默認值都為1。minOccurs為0說明元素是可選的,maxOccurs為*說明元素出現的次數不受限制。 |
|
<group>元素也出現在<ElementType>中,表達元素成組的概念。組裡的對象可以是元素也可以是另一個子組。order屬性制定組中元素的順序: |
|
<ElementType name=“...” > |
|
<group minOccurs = “0” | “1” |
|
order = “one” | “seq” | “many” > |
|
<AttributeType>元素定義了Schema中使用的屬性類型。根據出現位置不同,其作用范圍也不一樣。如果是在<ElementType>元素中定義,那所定義的屬性類型就只能作用在該元素類型上; 如果定義在外部,那文檔中所有的元素類型就都可以使用該屬性。 |
|
dt:type = “XML data type” |
|
dt:values = “enumerated list of values” |
|
default = “default value” > |
|
Name是屬性類型名稱; dt:type同<ElementType>元素中的用法一樣 ;required指定該屬性對引用它的元素是否是必要的;dt:values只有當dt:type是“enumeration”時才有效,此時它列舉屬性的所有可能取值; default指定屬性類型的缺省值,並且一定是有效值,比如屬性類型是枚舉型時,default取值一定是dt:values所列舉值中的一個。 |
|
<attribute>元素對<AttributeType>聲明的屬性進行具體的定義: |
|
type = “declared attribute type” |
|
default = “default value” /> |
|
type屬性唯一指定了引用的屬性類型,取值要與<AttributeType>中的name屬性完全一致; required說明該屬性對引用它的元素是否為必要的; default指定屬性類型的缺省值。如果對同一屬性的<AttributeType>和<attribute>中相對應的default和required屬性都給出了定義,那<attribute>的優先級別更高,以它的取值為準。 |
|
其他兩個元素<datatype>和<description>分別定義了Schema元素的數據類型和為元素提供的說明資料,用法簡單,本文不再一一舉例說明。 |
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
XML技術系列講座(13)XML與電子商務 (2002-02-13 06:15:00) XML技術系列講座(12)驗証XML數據合法性(下) (2002-02-12 07:15:00) XML技術系列講座(11)驗証XLM數據合法性(上) (2002-02-12 06:15:00) XML技術系列講座(10)客戶機與服務器的數據交互(下) (2002-02-11 07:15:00) XML技術系列講座(9)客戶機與服務器的數據交互(上) (2002-02-11 06:15:00) XML技術系列講座(8)通過DOM操作數據(下) (2002-02-10 07:20:01) XML技術系列講座(7)通過DOM操作數據(上) (2002-02-09 07:20:00) XML技術系列講座(6)XML與HTML的結合(下) (2002-02-08 07:15:00) XML技術系列講座(5)XML與HTML的結合(上) (2002-02-08 06:15:00) XML技術系列講座(4)XML的顯示XSL樣式單(下) (2002-02-07 07:15:01)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |