02 XML DTD

02 XML DTD


一、DTD 簡介

DTD (Document Type Definition 文檔類型定義)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。DTD 可被成行地聲明於 XML 文檔中,也可作爲一個外部引用。

二、DTD 文檔聲明

  • 內部聲明
    基本格式: <!DOCTYPE 根元素 [元素聲明]>

    <?xml version="1.0"?>
    <!DOCTYPE note [
    <!ELEMENT note (to,from)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    ]>
    <note>
    <to>George</to>
    <from>John</from>
    </note>
    

    以上 DTD 解釋如下:
    !DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。
    !ELEMENT note (第三行)定義 note 元素有四個元素:“to、from、heading,、body”
    !ELEMENT to (第四行)定義 to 元素爲 “#PCDATA” 類型
    !ELEMENT from (第五行)定義 from 元素爲 “#PCDATA” 類型

  • 外部引用
    基本格式:<!DOCTYPE 根元素 SYSTEM "文件名">

    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    </note>
    

    外部引用文件:note.dtd

    <!ELEMENT note (to,from)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    

三、DTD - XML 構建模塊

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="001">
        <name>張三</name>
        <age>18</age>
        <hobby>籃球</hobby>
    </student>
    <student id="002">
        <name>李四</name>
        <age>25</age>
        <hobby>足球</hobby>
    </student>
</students>

XML 構建模塊構成:

  1. 元素
    students 、student 、name 、age 、hobby都是元素
  2. 屬性
    id="001",其中id是屬性,"001"是屬性值
  3. PCDATA

    PCDATA 的意思是被解析的字符數據(parsed character data)。
    可把字符數據想象爲 XML 元素的開始標籤與結束標籤之間的文本。
    PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
    文本中的標籤會被當作標記來處理,而實體會被展開。
    不過,被解析的字符數據不應當包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 實體來分別替換它們。

  4. CDATA

    CDATA 的意思是字符數據(character data)。
    CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被當作標記來對待,其中的實體也不會被展開。

四、DTD 元素

  1. 聲明一個元素

    <!ELEMENT 元素名稱 類別>
    或者
    <!ELEMENT 元素名稱 (元素內容)>

  2. 空元素

    <!ELEMENT 元素名稱 EMPTY>

  3. 只有 PCDATA 的元素

    <!ELEMENT 元素名稱 (#PCDATA)>

  4. 帶有任何內容的元素

    <!ELEMENT 元素名稱 ANY>

  5. 帶有子元素(序列)的元素

    <!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>

  6. 聲明最少出現一次的元素

    <!ELEMENT 元素名稱 (子元素名稱+)>

  7. 聲明出現零次或多次的元素

    <!ELEMENT 元素名稱 (子元素名稱*)>

  8. 聲明出現零次或一次的元素

    <!ELEMENT 元素名稱 (子元素名稱?)>

  9. 聲明“非…/既…”類型的內容

    <!ELEMENT note (to,from,header,(message|body))>
    上面的例子聲明瞭:“note” 元素必須包含 “to” 元素、“from” 元素、“header” 元素,以及非 “message” 元素既 “body” 元素。

  10. 聲明混合型的內容

    <!ELEMENT note (#PCDATA|to|from|header|message)*>
    上面的例子聲明瞭:“note” 元素可包含出現零次或多次的 PCDATA、“to”、“from”、“header” 或者 “message”。

五、DTD 屬性

  1. 屬性聲明

    屬性聲明使用下列語法:
    <!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>

  2. 屬性類型的選項

類型 描述
CDATA 值爲字符數據 (character data)
(en1 en2
ID 值爲唯一的 id
IDREF 值爲另外一個元素的 id
IDREFS 值爲其他 id 的列表
NMTOKEN 值爲合法的 XML 名稱
NMTOKENS 值爲合法的 XML 名稱的列表
ENTITY 值是一個實體
ENTITIES 值是一個實體列表
NOTATION 此值是符號的名稱
xml: 值是一個預定義的 XML 值
  1. 默認值參數可使用值
解釋
屬性的默認值
#REQUIRED 屬性值是必需的
#IMPLIED 屬性不是必需的
#FIXED value 屬性值是固定的

六、DTD 實體

  1. 內部實體定義

    <!ENTITY 實體名稱 "實體的值">

    示例:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE note [
        <!ELEMENT note (name)>
        <!ELEMENT name (#PCDATA)>
        <!ENTITY write "張三">
        ]>
    <note>
    <name>&write;</name>
    </note>
    
    //一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。
    
    
  2. 外部引用實體

    <!ENTITY 實體名稱 SYSTEM "URI/URL">

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章