三、 CHEMA簡介 (一) Schema的引入 通過上幾章介紹,相信大家對XML的基本文法已經有了一個基本瞭解。 XML本身的文法很嚴謹,也就是要求格式必須嚴整,包 括區分大小寫、整個文檔有且只有一個根、需要序言等等。在符合格式化良好的要求以後,就可以寫出規則整齊、可以通過內建XML解 析器的瀏覽器解析XML文檔了。但XML本身也相當的靈活,在符合基本文法的前提下,可以任意的編寫各種符合XML文法要求的文檔,這 也正是XML可擴充的靈活性所在,但同時也產生了問題,比如要寫一個說明個人資訊的XML文檔,可以這樣寫: <?xml version = “1.0” encoding=”GB2312” ?> <resume> <name>張立東</name> <sex>男</sex> <age>28</age> <birthday>1974-8-10</birthday> <address>北京市 海澱區</address> </resume> 也可以這麼寫: <?xml version = “1.0” encoding=”GB2312”?> <resume> <name>張立東</name> <sex>男</sex> <age>28</age> <birthday> <year>1974</year> <month>8</month> <day>10</day> </birthday> <address>北京市 海澱區</address> </resume> 上面的兩個文檔對於人來說是很容易看懂的,但對於機器來說,它們就無法判斷 <birthday>1974-8-10</birthday>和 <birthday> <year>1974</year> <month>8</month> <day>10</day> </birthday> 中的內容是否相同了。這就需要一個相應的“約束”,來規定一個固定的格式,這樣機器才可以正確的識別、比較和處理。正如 沒有規矩難以成方圓一樣, XML這麼強大的語言自然也有這方面的考慮,這也就是DTD和Schema所要完成的功能。 (二)DTD和Schema 提到Schema就必須提到DTD。最早建立對SGML約束的是DTD,而XML又是SGML的超集,所以DTD由於曆史的原因也可以對XML本身 進行約束,比如:每個節點可以含有的元素、元素的個數等等。但它也有很多的局限性,如不能定義元素值的範圍、學習起來有一定 的難度(要學習一種新的文法)等等。而最新的XML約束標準就可以輕鬆的滿足要求,這就是Schema。Schema與DTD不同,DTD本身有自 己的文法和要求,而Schema是完全符合XML文法的,只要對XML有初步的瞭解,就很容易對Schema上手。說了這麼多,還是首先讓我們 通過一個例子來看看Schema是如何定義XML結構的吧: [1]<?xml version="1.0" encoding="GB2312" ?> [2]<Schema xmlns="urn:schemas-microsoft-com:xml-data" [3] xmlns:dt="urn:schemas-microsoft-com:datatypes"> [4] <ElementType name= "name"/> [5] <ElementType name= "sex"/> [6] <ElementType name= "age"/> [7] [8] <ElementType name= "address" /> [9] <ElementType name= "month"/> [10] <ElementType name= "year"/> [11] <ElementType name= "day"/> [12] <ElementType name= "birthday" content="eltOnly"> [13] <element type= "year" /> [14] <element type= "month" /> [15] <element type= "day" /> [16] </ElementType> [17] <ElementType name= "resume" content="eltOnly"> [18] <element type= "name" /> [19] <element type="sex"/> [20] <element type="age"/> [21] <element type="birthday"/> [22] <element type="address"/> [23] </ElementType> [24]</Schema> 下面對上面的例子做一個簡單的講解: [1]行是一個XML序言,從這行也可以看出Schema是符合XML基本文法要求的。 [2]-[3]是對Schema名域的一個定義。(由於我們這裡是一個XML的入門文章,有關XML的名域問題可以參考相應的XML文檔。) [4]定義一個名字為name的元素。 [5]-[11]分別是對sex、age、address、month、year、day元素的定義。 [12]-[16]是對birthday元素的一個定義,但birthday這個元素比較特殊,它其中又包含了year、month和day三個元素。 其中content這個屬性是對元素中的資料進行說明的。根據content中的資料eltOnly可以知道這個birthday元素的資料只能夠由元素構 成。 [17]-[23]是對resume這個元素的定義,resume這個元素是由name、sex、age、birthday、address這幾個元素構成的。 從上面的例子可以知道如何對一個簡單的元素進行定義,也可以知道一個由其他元素組成的元素如何定義。通過由元素組成的元 素的這種定義,就可以定義一個嵌套結構的XML樹的基本結構。 到這裡讀者對Schema已經就有了一個基本的瞭解,也該是我們給Schame下一個簡單定義的時候了: XML Schema是用來描述XML元素和屬性的。它包括屬性和元素類型說明,是可以為XML元素和屬性提供資料的類型校正模組。 |