天天看點

DTD 學習筆記

DTD 學習筆記

前言

DTD (Document Type Definition)的作用是定義 XML 文檔的合法構模組化塊。

DOCTYPE 聲明方式

一、内部的 DOCTYPE 聲明

格式:

<!DOCTYPE 根元素 [元素聲明]>      

例如:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE book [
        <!ELEMENT book (bookName, publishedDate, author)>
        <!ELEMENT bookName (#PCDATA)>
        <!ELEMENT publishedDate (#PCDATA)>
        <!ELEMENT author (authorName, birthday)>
        <!ELEMENT authorName (#PCDATA)>
        <!ELEMENT birthday (#PCDATA)>
        ]>
<book>
    <bookName>Thinking in Java</bookName>
    <publishedDate>2017-04</publishedDate>
    <author>
        <authorName>Bruce Eckel</authorName>
        <birthday>1957-07-08</birthday>
    </author>
</book>      

二、外部的 DOCTYPE 聲明

<!DOCTYPE 根元素 SYSTEM "檔案名">      

DTD 檔案(bookOuter.dtd)

<!ELEMENT book (bookName, publishedDate, author)>
<!ELEMENT bookName (#PCDATA)>
<!ELEMENT publishedDate (#PCDATA)>
<!ELEMENT author (authorName, birthday)>
<!ELEMENT authorName (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>      

XML 檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE book SYSTEM "bookOuter.dtd">
<book>
    <bookName>Thinking in Java</bookName>
    <publishedDate>2017-04</publishedDate>
    <author>
        <authorName>Bruce Eckel</authorName>
        <birthday>1957-07-08</birthday>
    </author>
</book>      

構模組化塊

元素

聲明一個元素

<!--元素第一種形式-->
<!ELEMENT 元素名稱 類别>
<!--元素第二種形式-->
<!ELEMENT 元素名稱 (元素内容)>
<!--空元素-->
<!ELEMENT 元素名稱 EMPTY> eg: <!ELEMENT br EMPTY>
<!--隻有 PCDATA 的元素-->
<!ELEMENT 元素名稱 (#PCDATA)> eg: <!ELEMENT bookName (#PCDATA)>
<!--可以帶任何内容的元素-->
<!ELEMENT 元素名稱 ANY> eg: <!ELEMENT book ANY>
<!--帶子元素的元素-->
<!ELEMENT 元素名稱 (子元素清單)> eg: <!ELEMENT book (bookName, publishedDate, author)>      

聲明元素出現次數

<!--子元素清單中每個元素,隻能出現一次-->
<!ELEMENT 元素名稱 (子元素清單)>
<!--子元素清單中的元素至少出現一次-->
<!ELEMENT 元素名稱 (子元素清單)+>
<!--子元素清單中的元素,出現零次或者多次-->
<!ELEMENT 元素名稱 (子元素清單)*>
<!--子元素清單中的元素,出現零次或者一次-->
<!ELEMENT 元素名稱 (子元素清單)?>
<!--子元素清單中聲明非某元素既某元素,元素C、元素D隻能出現一個元素-->
<!ELEMENT 元素名稱 (子元素A,子元素B,(子元素C|子元素D))>      

屬性

元素聲明之後,可以聲明元素中對應的屬性

<!ELEMENT 元素名稱 (子元素清單)>
<!ATTLIST 元素名稱 屬性名稱 屬性類型 預設值 屬性值的預設性>      

屬性類型

DTD 學習筆記

屬性值的預設性

DTD 學習筆記

*實體

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

實體由三部分組成: & + 實體名稱 + ;

需要将 ; 前面的 \ 去掉      
DTD 學習筆記

PCDATA

PCDATA 是會被解析器解析的文本。文本中标簽和實體會被解析處理。      

CDATA

CDATA 是不會被解析器解析的文本。文本中标簽和實體當做文本處理。