我們可以看到,DTD的語法相當複雜,而且它不符合xml檔的標準,自成一個體系。也就是說DTD文檔本身並不是一個良好形式的XML文檔,上面的關於DTD的介紹也僅僅是作了一個簡介,目的是幫助大家能讀懂DTD文件以及在必要時創建簡單的DTD文件,因為現在很多的XML應用是建立在DTD之上的。
另外一個取代DTD的就是W3C定義的Schema,Schema從字面上來說,可以翻譯成模式、大綱、計畫、規劃等等。它的基本意思就是說要為XML文件製定一種模式。
Schema相對於DTD的明顯好處是XML Schema文檔本身也是XML文檔,而不是像DTD一樣使用自成一體的語法。這就方便了使用者和開發者,因為可以使用相同的工具來處理XML Schema和其他XML訊息,而不必專門為Schema使用特殊工具。 Schema簡單易懂,懂得XML文法、規則的人都可以立刻理解它。 Schema的概念提出已久,但W3C的標準最近才出來,相應的應用支援尚未完善,但採用Schema已成為XML發展的一個趨勢。
首先我們還是從最簡單的例子著手來學習Schema的語法結構:
例如一個簡單的XML文件如下:
<书本> <名称>天涯明月刀 <作者>古龙
如果用DTD的形式來定義該XML文檔結構的話,可以如下所示:
<!ELEMENT 书本 (名称, 作者)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> 那么用Schema形式如何定义呢?见下面的代码: <element name='书本' type='书本类型'/> <complexType name='书本类型'> <element name='名称' type='string'/> <element name='作者' type='string'/> </complexType>
可以注意的一點是,在Schema中,也是透過對元素的定義和元素關係的定義來實現對整個文檔性質和內容的定義。同時要注意的是,在Schema中,元素是透過它的名字和內容模型來決定,名稱就是該元素的名字,而這個大家都可以理解,而內容模型其實就是表示元素的類型。就像在C++中,我們可以隨便定義一個變量,但是必須定義變量的類型,變量的類型就可能有多種形式,它可以是一個簡單的變量(如C++內部指定的類型,bool,int,double ,char等等),也可以是很複雜的型別(例如是一個struct或是class),在Schema中也是一樣,型別(type)可以分成兩種形式,一種是非常簡單的類型,被稱為為simple,一種是複雜的類型,被稱為complex。簡單類型不能包含元素和屬性(注意在Schema中和DTD一樣,都有元素屬性的說法,大道相同)。而複雜類型不僅可以包含屬性,而且可以在其中嵌套其他的元素,或者可以和其他元素中的屬性相關聯。
以上就是一個簡單的XML Schema的範例程式碼詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!