XML中的DTD文件類型定義詳細介紹

黄舟
發布: 2017-03-10 19:32:35
原創
2051 人瀏覽過

這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學習中的基礎知識,需要的朋友可以參考下

XML 文檔類型定義,俗稱DTD,它是一種準確描述XML 語言的方式。 DTDs 根據適當 XML 語言的語法規則檢查 XML 文件的詞彙和結構的有效性。

XML DTD 可以指定在文件內部,也可以儲存在獨立的文件中然後單獨連結。

語法
DTD 的基本語法如下:

<!DOCTYPE element DTD identifier   
[   
    declaration1   
    declaration2   
    ........   
]>
登入後複製

上述語法:

DTD 以< ;!DOCTYPE 定界符開始。 <br/>element 用來告訴解析器從指定的根元素開始解析文件。 <br/>DTD identifier 是一個用於文件類型定義的標示符,它可以是一個指向系統中某個文件的路徑或連接到互聯網上某個文件的 URL。如果 DTD 指向外部路徑,則稱為外部子集。 _ [] 內是一個可選的實體聲明列表,稱為內部子集。 <br/>內部 DTD<br/>如果一個元素宣告在 XML 文件的內部則 DTD 稱為內部 DTD。為了把它當作內部 DTD,XML 聲明中的 standalone 屬性必須設定為 yes。這意味著,聲明的工作獨立於外部來源。

語法

內部DTD 語法如下所示:

<!DOCTYPE root-element [element-declarations]>
登入後複製

這裡root-element 是根元素的名稱,element -declarations 表示我們聲明的元素。

範例

下面是一個內部DTD 的簡單範例:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
<!DOCTYPE address [   
<!ELEMENT address (name,company,phone)>  
    <!ELEMENT name (#PCDATA)>  
    <!ELEMENT company (#PCDATA)>  
    <!ELEMENT phone (#PCDATA)>  
]>  
<address>  
    <name>Tanmay Patil</name>  
    <company>TutorialsPoint</company>  
    <phone>(011) 123-4567</phone>  
</address>
登入後複製

我們來看看上面的程式碼:

開始宣告- 使用下列語句開始XML 宣告:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
登入後複製

#DTD - 緊接在XML 頭後面,_文件類型宣告_如下,通常稱為DOCTYPE:

DTD Body - DOCTYPE 宣告後面緊跟著DTD 體,這裡我們宣告元素,屬性,實體和符號:

<!ELEMENT address (name,company,phone)>  
<!ELEMENT name (#PCDATA)>  
<!ELEMENT company (#PCDATA)>  
<!ELEMENT phone_no (#PCDATA)>
登入後複製

許多元素都在這裡透過 定義元素_名稱_為 "#PCDATA" 型別。這裡 #PCDATA 意味著可解析的文字資料。

結束聲明 - 最後,DTD 的聲明部分使用方括號和尖括號(]>)閉合。這是一個有效的結束定義,後面跟上的就是 XML 文件內容。

規則

文件類型宣告必須出現在文件的開頭部分(只先與 XML 頭),不允許出現在文件的任何其他位置。 <br/>類似於 DOCTYPE 聲明,元素聲明必須以感嘆號開始。 <br/>文檔類型宣告中的 Name 必須與根元素的類型相符。 <br/>外部 DTD<br/>在外部 DTD 中元素宣告在 XML 文件的外部。透過指定 system 屬性來訪問,這個屬性值可以是合法的 .dtd 檔案或有效的 URL。為了指示它是外部 DTD,XML 聲明的 standalone 屬性必須設為 no。這就意味著,聲明包含來自外部來源的資訊。

語法

下面是外部 DTD 的語法:

<!DOCTYPE root-element SYSTEM "file-name">
登入後複製

這裡 file-name 就是 .dtd 擴充的檔案。 <br/>

範例

下面的範例展示了外部DTD 的用法:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>  
<!DOCTYPE address SYSTEM "address.dtd">  
<address>  
    <name>Tanmay Patil</name>  
    <company>TutorialsPoint</company>  
    <phone>(011) 123-4567</phone>  
</address>  
DTD 文件 address.dtd 的内容如下所示:   
  
<!ELEMENT address (name,company,phone)>  
<!ELEMENT name (#PCDATA)>  
<!ELEMENT company (#PCDATA)>  
<!ELEMENT phone (#PCDATA)>
登入後複製

類型

##我們可以透過使用系統標示符或公共標示符來引用一個外部DTD。

系統標示符

系統標示符允許我們指定包含 DTD 宣告的外部檔案的位置。語法如下:

<!DOCTYPE name SYSTEM "address.dtd" [...]>
登入後複製

正如我們可以看到的,它包含 SYSTEM 關鍵字和一個指向文件位置的 URI 引用。

公有標示符

公有標示符提供了定位DTD 資源的機制,寫法如下:

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
登入後複製

正如我們可以看到的,它以PUBLIC 關鍵字開始,後面緊接的是專門的識別符。公共標識符被用來標識目錄中的條目。公共識別碼可以遵循任意格式,但是常用的格式是正式公用識別碼(或 FPIs)。

宣告元素<br/>在dtd中宣告元素(在一個xml如果一個元素想要讓它是合法的,則需要在dtd中宣告)      語法:< ;!ELEMENT 元素名稱類別>和這兩種方式<br/><br/>

#例如:

<!ELEMENT br EMPTY>
登入後複製

則xml可以寫成:

<br/>
登入後複製

#

注意点
在dtd中
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA
下面是一些注意点:
(1)实体是用来定义普通文本的变量。实体引用是对实体的引用。
大多数同学都了解这个 HTML 实体引用:" "。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。
当文档被 XML 解析器解析时,实体就会被展开。
XML中的DTD文件類型定義詳細介紹

(2) PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器解析成实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
(3)CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

以上是XML中的DTD文件類型定義詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!