仅需要了解一下,能看明白就可以了。。。

简介

文档类型定义(DTD)可定义合法的XML文档构建模块。使用一系列合法的元素来定义文档的结构

DTD可被成行地声明与XML文档中,也可作为一个外部引用

  • DTD声明

    <!DOCTYPE root-element [element-declarations]>
  • 带有DTDXML文档示例

    <?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>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend</body>
    </note>

    以上 DTD 解释如下:

    • !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
    • !ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
    • !ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
    • !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
    • !ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
    • !ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型
  • 外部文档声明

    假如DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中:

    <!DOCTYPE root-element SYSTEM "filename">

    这个XML文档和上面的XML文档相同,但是拥有一个外部的DTD

元素

声明一个元素

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

空元素

<!ELEMENT element-name EMPTY>

实例:

<!ELEMENT br EMPTY>

XML example:

<br />

PCDATA元素

<!ELEMENT element-name (#PCDATA)>

实例:

<!ELEMENT from (#PCDATA)>

带有任何内容的元素

<!ELEMENT element-name ANY>

实例:

<!ELEMENT note ANY>

带有子元素的元素

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明

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

实例:

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

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同顺序

子元素也可有子元素

声明只出现一次的元素

<!ELEMENT element-name (child-name)>

实例:

<!ELEMENT note (message)>

上面的例子声明了:message 子元素必须出现一次,并且必须只在 “note” 元素中出现一次。


声明最少出现一次的元素

EMENT element-name (child-name+)>

实例:

<!ELEMENT note (message+)>

上面的例子中的加号(+)声明了:message 子元素必须在 “note” 元素内出现至少一次。


声明出现零次或多次的元素

<!ELEMENT element-name (child-name*)>

实例:

<!ELEMENT note (message*)>

上面的例子中的星号(*)声明了:子元素 message 可在 “note” 元素内出现零次或多次。


声明出现零次或一次的元素

<!ELEMENT element-name (child-name?)>

实例:

<!ELEMENT note (message?)>

上面的例子中的问号(?)声明了:子元素 message 可在 “note” 元素内出现零次或一次。


声明"非…/即…"类型的内容

实例:

<!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”。

属性

声明

attlist: attribute list

<!ATTLIST element-name attribute-name attribute-type attribute-value>

DTD 实例:

<!ATTLIST payment type CDATA "check">

XML 实例:

<payment type="check" />

以下是 属性类型的选项:

类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值

默认属性值可使用下列值 :

解释
属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的

默认属性名

DTD:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

合法的 XML:
<square width="100" />

实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

  • 实体引用是对实体的引用。
  • 实体可在内部或外部进行声明。

外部实体引用

语法
<!ENTITY entity-name SYSTEM "URI/URL">
实例
DTD 实例:

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

XML example:

<author>&writer;©right;</author>

内部实体引用

<!ENTITY entity-name "entity-value">
实例
DTD 实例:

<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">

XML 实例:

<author>&writer;©right;</author>

验证

  • 使用浏览器
  • 使用XML解析器