仅需要了解一下,能看明白就可以了。。。
简介
文档类型定义(DTD)可定义合法的XML
文档构建模块。使用一系列合法的元素来定义文档的结构
DTD
可被成行地声明与XML
文档中,也可作为一个外部引用
-
DTD声明
<!DOCTYPE root-element [element-declarations]>
-
带有
DTD
的XML
文档示例<?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
解析器