XML DTD
# 声明
在XML中如下声明 DTD
<!DOCTYPE root-element SYSTEM "URI">
<!DOCTYPE root-element PUBLIC "prefix//owner//desc//lang" "URI">
其中
root-element 是根元素
URI 是 DTD 文件的相对或绝对 URI
prefix 为
ISO 表示该DTD是ISO标准
+ 表示该DTD不是 ISO 标准,但已被批准
- 表示该DTD不是 ISO 标准,且未被批准
owner 表示DTD所有者
desc 为该DTD描述信息
lang ISO 639 语言代码
例如
<!DOCTYPE document SYSTEM "subjects.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# 元素(Element)定义
o 空元素
<!ELEMENT element-name EMPTY>
空元素没有属性,没有子元素或文本内容
例如定义空元素 br:
<!ELEMENT br EMPTY>
则在XML可以定义:
<br/>
o PCDATA 元素
PCDATA 指 Parsed Character DATA,即经过解析器解析的文本(与 CDATA 相反)
定义只包含 PCDATA(无子元素)的元素的格式是
<!ELEMENT element-name (#PCDATA)>
o 包含任意内容的元素
<!ELEMENT element-name ANY>
o 包含子元素的元素
<!ELEMENT element-name (child-name,child-name,...)>
- XML中,子元素出现的顺序必须按照这里声明的顺序
- 子元素必须也在 DTD 中定义,可以放在父元素的定义之后
child-name 后面可以加以下后缀
- ? 表示此子元素允许出现0或1次
- * 表示此子元素可出现0或任意次
- + 表示此子元素可出现1或任意次
- 如果没有任何后缀,则必须且只能出现1次
o 包含子元素多选一
用 (child-name1|child-name2|...) 表示多选一,如
<!ELEMENT parent (child1,child2, (child3|child4), child5)>
多选一子元素声明后面也可以增加后缀,如
<!ELEMENT parent (child1,child2, (child3|child4)?)>
o 包含PCDATA和子元素的元素
#PCDATA 可以与子元素名称混用,如
<!ELEMENT parent (#PCDATA|child1|child2|child3|child4|child5)*>
# 属性(Element Attribute) 定义
属性定义的格式是
<!ATTLIST element-name attribute-name type value>
其中,type 可以为
- CDATA 表示属性值为字符
- (v1|v2|...) 表示属性值为 v1, v2, ... 之一(枚举)
-
value 可以为
- "value" 表示默认值
- #REQUIRED 表示该属性值必须指定
- #IMPLIED 表示该属性值可缺省(但无默认值)
- #FIXED "value" 表示该属性值必须为 value
o 属性默认值
<!ATTLIST element-name attribute-name CDATA "value">
o 枚举值
<!ATTLIST element-name attribute-name (v1|v2|...) "value">
其中 "value" 表示默认值,为 v1,v2... 之一
# Entity 定义
XML 使用 Entity 的格式是
&entity-name;
DTD 定义 Entity 的格式是
<!ENTITY entity-name "value">