Schema和DTD之間的那些事兒

2021-06-20 06:25:43 字數 2241 閱讀 7261

說到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在理解和實際應...