IBM XML認證知識點:Dtd

一個“有效的”文件首先應該是“形式良好”的。但這還遠遠不夠,它還要往前更進一步。一個XML(XML培訓 編程語言培訓 )文件必須遵守文件類型描述 Dtd(Document Type Definition)中定義的種種規定。所有的文件都是由序言和文件體構成的。序言中包含了XML聲明,在序言中還可以包含Dtd定義。

IBM XML認證知識點:Dtd

  內部Dtd

一個“有效的”文件首先應該是“形式良好”的。但這還遠遠不夠,它還要往前更進一步。一個XML文件必須遵守文件類型描述Dtd(Document Type Definition)中定義的種種規定。所有的文件都是由序言和文件體構成的。序言中包含了XML聲明,在序言中還可以包含Dtd定義。

最簡單的使用Dtd的方法是在XML文件的序言部分加入一個Dtd描述,加入的位置是緊接在XML處理指示之後。一個包含Dtd的XML文件的結構為:

元素描述

]>

文件體.......

這樣,我們就定義了一個文件,它以DOCTYPE中規定的根元素名作為其根元素的名字。

如果為每一個XML文件加入一段Dtd定義,是相當繁瑣的。而且,更多的情況下,我們會為一批XML文件定義一個相同的Dtd。例如,對於報社中的每篇稿件,它們都有相同的格式,可以採用一個統一的Dtd,為每一篇單獨定義既麻煩,又不利於統一格式。好在XML規範為我們提供瞭解決這個問題的方法,它就是外部Dtd。

v

外部Dtd的好處是:它可以方便高效地被多個XML文件所共享。你只要寫一個Dtd 文件,就可以被多個XML文件所引用。事實上,當許多組織需要統一它們的`數據交換格式時,它們就是通過外部Dtd來完成的。這樣做不僅簡化了輸入工作,還保證當你需要對Dtd做出改動時,不用一一去改每個引用了它的XML文件,只要改一個公用的Dtd文件就足夠了。

為了引用一個外部Dtd,必須修改XML聲明和DOCTYPE聲明。

XML聲明中必須説明這個文件不是自成一體的,即standalone屬性的屬性值不再是yes了:

在DOCTYPE聲明中,應該加入SYSTEM屬性:

例如:

上面的URL是一個絕對路徑,除此以外,它還可以是一個相對路徑,如: 它説明這個Dtd文件和引用它的XML文件在同一個目錄下。

使用這種方法,你可以方便地把Dtd文件從你的XML文件中分離出來,粘貼到另一個文件中。這樣,你就得到一個Dtd文件和一個有效的XML文件。

  公用Dtd

使用外部Dtd時,要在DOCTYPE中使用關鍵字SYSTEM。實際上,SYSTEM不是引用外部Dtd的唯一方法,這個關鍵字主要用於引用一個作者或組織所編寫的眾多 XML文件中通用的Dtd。還存在一種外部Dtd,它是一個由權威機構制訂的,提供給特定行業或公眾使用的Dtd。因此,另一個引用外部Dtd的辦法是使用關鍵字 PUbLIC,引用這一類公開給公眾使用的Dtd。

當使用關鍵字PUbLIC進行引用時,這個外部Dtd還需要得到一個標識名。引用公共Dtd的形式為:

請見下面例子:

這個Dtd標識的命名規則和XML文件的命名規則稍有不同。具體地説,Dtd名稱只能包含字母、數字、空格和下面的符號:_%$#@()+:=/!*;?。同時,Dtd名稱還必須符合一些標準的規定。例如,ISO標準的Dtd以“ISO”三個字母開頭;被改進的非ISO 標準的Dtd以加號“+”開頭;未被改進的非ISO標準的Dtd以減號“-”開頭。

無論是哪一種情況,開始部分後面都跟着兩個斜槓“//”及Dtd所有者的名稱。在這個名稱之後又是兩個斜槓“//”,再然後是Dtd所描述的文件的類型。最後,在又一對斜槓之後是語言的種類(參見ISO 639)。例如下面這個公用Dtd的引用:

看上去的確比較複雜,不過沒關係,對於Dtd的命名通常不是它的引用者的任務,XML 文件的編寫者只要在自己的文件中把事先定義好的Dtd名稱放在相應的位置中就可以了。