說到schema和dtd,相信對
xml有所了解的人,都會自動化的想到驗證兩個字。是的,這兩個技術就是用來驗證
xml的。那麼為什麼要對
xml進行驗證呢?這就要說到有效的
xml了。
如果乙個
xml文件規定其文件型別和資料結構的
dtd或者
schema
,並且與之關聯,並且校驗正確,則此文件是有效的。那麼有效和良好又是什麼關係?
明白了schema和dtd的作用,那麼到底它們又是什麼?它們又有什麼區別呢?不能互相替代嗎?下面且聽我細細說來吧。
先說說dtd。
dtd(
document typedefinition
,文件型別定義)是一套標記的語法規則。具體官方的解釋就不說了,用我自己理解的話來說,dtd顧名思義,文件型別定義--定義xml文件的各種型別,例如元素啊,屬性等的定義規則。這就是dtd。
再說說schema。
它是用一套預先規定的
xml元素和屬性建立的,也就是說
xmlschema
是用來規定
xml文件例項的結構和每個元素
/屬性的資料型別的。
看到這裡,讀者大概明白什麼是schema和dtd,可以是不是也不明白為什麼他們倆這麼相似還要兩個都存在呢?請往下看吧~
正如我們看到的,schema和dtd確實是非常相似的,但是也只是相似,它們還是有區別的。
區別一:
在此區別上,給xml schema的使用帶來許多好處:
區別二:
對於開發者而言,這是兩者特別顯著的乙個區別了.
1.xml dtd
提供的資料型別只有
nmtoken
、nmtokens
等十種內建(
built-in
)資料型別.這些資料型別顯然無法滿足文件的可理解性和資料交換的需要. 2.
xml schema
則不同,它內建了三十七種資料型別,如
int,
short
,double
等常用的資料型別,並通過將資料型別表示為由
value space
、lexicalspace
和facet
三部分組成的三元組而獲得更大的靈活性。
這裡需要提一下,xml schema之所以可以達到這樣的靈活性,主要來自於對使用者自定義型別的支援.
xml schema
提供兩種方式來實現資料型別的定義: 1)
簡單型別定義(
******type
),即在
xml schema
內建的資料型別基礎上或其它由
xml schema
內建的資料型別繼承或定義所得到的簡單的資料型別(
******type
)基礎上,通過
restriction
,list
或者union
方式定義新的資料型別。 2)
復合型別定義(
complextype
),該方法提供了一種功能強大的複雜資料型別定義機制,可以實現包括結構描述在內的複雜的資料型別。
其他區別:
綜上可知,dtd和schema的區別還是比較顯著的,但是至於schema能否取代dtd呢?我覺得正如"存在即合理",dtd雖然沒有schema那麼強的表現力,但是它讓有它的適用範圍.
我覺得這句話來最後總結兩者的恩恩怨怨很合適:
作為一種強有力的標準,
xml schema
作為xml
模式的主流已經成為一種趨勢;但作為一種最簡單的
xml模式,
xml dtd
也還將會在一段時間內發揮它應有的作用。
你覺得呢?
Schema和DTD的區別
schema是對xml文件結構的定義和描述,其主要的作用是用來約束xml檔案,並驗證xml檔案有效性。dtd的作用是定義xml的合法構建模組,它使用一系列的合法元素來定義文件結構。它們之間的區別有下面幾點 1 schema本身也是xml文件,dtd定義跟xml沒有什麼關係,schema在理解和實際應...
Schema和DTD的區別
schema是對xml文件結構的定義和描述,其主要的作用是用來約束xml檔案,並驗證xml檔案有效性。dtd的作用是定義xml的合法構建模組,它使用一系列的合法元素來定義文件結構。它們之間的區別有下面幾點 1 schema本身也是xml文件,dtd定義跟xml沒有什麼關係,schema在理解和實際應...
Schema和DTD的區別
schema是對xml文件結構的定義和描述,其主要的作用是用來約束xml檔案,並驗證xml檔案有效性。dtd的作用是定義xml的合法構建模組,它使用一系列的合法元素來定義文件結構。它們之間的區別有下面幾點 1 schema本身也是xml文件,dtd定義跟xml沒有什麼關係,schema在理解和實際應...