XML\DTD 基礎

DTD

DTD: Document type defination,文檔類型定義(DTD)可定義合法的XML文檔構建模塊,分爲內部和外部。內部格式:<!DOCTYPE root-element [element-declarations]>,外部格式:<!DOCTYPE root-element SYSTEM "filename">。實例:

<!-- 內部 -->
<?xml version="1.0">
<!DOCTYPE note [
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

<note>
<to>sjj</to>
<from>zzz</form>
<heading>forget</heading>
<body>forget all things</body>
</note>


<!-- 外部 -->
<?xml version="1.0">
<!DOCTYPE note SYSTEM "note.dtd">

<note>
<to>sjj</to>
<from>zzz</form>
<heading>forget</heading>
<body>forget all things</body>
</note>
# 其中 note.dtd 與此 XML 文件位於同一目錄下(否則應該用絕對目錄)

PCDATA 與 CDATA

PCDATA:被解析的字符數據(parsed character data),PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
文本中的標籤會被當作標記來處理,而實體會被展開
不過,被解析的字符數據不應當包含任何 &、< 或者 > 字符;需要使用 &amp;&lt; 以及 &gt; 實體來分別替換它們。

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

元素

元素是 XML 以及 HTML 文檔的主要構建模塊。XML 元素的例子是 “note” 和 “message” 。元素可包含文本、其他元素或者是空的。

聲明一個元素

格式:

<!ELEMENT element-name category>
<!-- or -->
<!ELEMENT element-name (element-content)

空元素

空元素通過類別關鍵詞 EMPTY 聲明:

<!ELEMENT element-name EMPTY>
<!-- 實例 -->
<!-- dtd -->
<!ELEMENT br EMPTY>
<!-- xml -->
<br />

只有 PCDATA 的元素

<!ELEMENT element-name (#PCDATA)>
<!-- 實例 -->
<!ELEMENT from (#PCDATA)>

帶有任何內容的元素

通過 ANY 聲明。

<!ELEMENT element-name ANY>
<!-- 實例 -->
<!ELEMENT not ANY>

帶有子元素的元素

<!ELEMENT element-name (child1)>
<!-- or -->
<!ELEMENT element-name (child1,child2,...)>

<!-- 實例 -->
<!ELEMENT note (to,from,heading,body)>

聲明元素出現次數

<!-- 出現一次 -->
<!ELEMENT element-name (child-name)>
<!-- 實例 -->
<!ELEMENT note (message)>

<!-- 最少出現一次 -->
<!ELEMENT element-name (chil-name+) >
<!-- 實例 -->
<!ELEMENT note (message+)>

# 出現 0 次或多次用 *
# 出現 0 次或 1 次用 ?

聲明"非…/即…" 內容

<!ELEMENT note (to,from,header,(message|body))>

# "note" 元素必須包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。

聲明混合型的內容

<!ELEMENT note (#PCDATA|to|from|header|message)*>
# "note" 元素可包含出現零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

實體

實體是用於定義引用普通文本或特殊字符的快捷方式的變量。

  • 實體引用是對實體的引用
  • 實體可在內部或外部進行聲明
  • 實體還可以分爲通用實體和參數實體

內部實體聲明

語法:

<!ENTITY entity-name "entity-value">
# 注意與單個元素定義的差別,這裏是 “""”,單個元素無 “""” 或者使用 “()”

實例:

<!-- DTD -->
<!ENTITY writer "zzz">
<!ENTITY copyright "Copyright zzzsdust.com">

<!-- XML -->
<auther>&writer;&copyright;</author>

一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 ( ; )。

外部實體聲明

語法:

<!ENTITY entity-name SYSTEM "URI/URL">

實例:

<!-- DTD -->
<!ENTITY writer SYSTEM "http://www.zzzsdsut.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.zzzsdsut.com/entities.dtd">

<!-- XML -->
<author>&writer; &copywright;</author>

通用實體

&實體名; 引用的實體,在 DTD 中定義,在 XML 文檔中引用。

參數實體

  • % 實體名(空格不可少),在 DTD 中定義,並且只能在 DTD 中使用,用 %實體名; 引用
  • 只有在 DTD 文件中,參數實體的聲明才能引用其他實體
  • 可外部引用、內部引用

實例:

<!ENTITY % an_element "<!ELEMENT mytag (subtag)>">
<!ENTITY % remote_dtd SYSTEM "http://zzzsdust.com/remote.dtd">
%an_element; %remote_dtd;

參考:DTD 教程

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