[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

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

===更多相關===
 

★  樊強制作 歡迎分享  ★