ELEMENT定义元素内容规则,ATTLIST定义属性规则;前者规定元素能包含什么内容,后者规定元素可带哪些属性、类型及默认值。

DTD 中的 ELEMENT 和 ATTLIST 是定义 XML 文档结构和约束的核心语法。前者管“元素能长什么样”,后者管“元素能带哪些属性”。用对了,XML 才能被规范解析;写错了,解析器会直接报错。
ELEMENT:定义元素的内容规则
它声明某个元素允许包含什么内容,比如纯文本、子元素、空内容,或任意组合。
-
#PCDATA 表示只能放解析过的字符数据(即普通文本),不能嵌套其他标签:
-
子元素序列 用逗号分隔,表示必须按顺序出现且各一次:
-
可选/重复子元素 用符号控制次数:
(*表示 0 次或多次,+表示至少一次) -
EMPTY 表示该元素不能有任何内容,只能写成自闭合形式:
→ 合法写法是 -
ANY 表示不限制内容(不推荐在严格场景使用):
ATTLIST:定义元素的属性规则
它给已声明的元素添加属性,并规定每个属性的类型、是否必填、默认值等。
- 基本格式:
-
CDATA 是最常用类型,表示属性值是普通字符串:
(src必须出现) -
#IMPLIED 表示该属性可有可无,没写就不提供值:
- #REQUIRED 表示 XML 中必须显式写出这个属性,否则解析失败
-
"default" 是带引号的字符串,默认值,当属性未出现时自动补上:
→等价于 -
#FIXED "value" 表示该属性值固定不可改,XML 中即使写了也必须跟 DTD 一致:
实际配合使用的例子
假设要定义一个简单配置项 :
- 先声明它是空元素:
- 再给它加两个属性:
- 这样就要求
host必须写,port可省略(默认为 8080)
注意几个易错点
-
ELEMENT和ATTLIST都必须大写,且前后紧贴和> - 一个元素可以有多个
ATTLIST声明(但通常写在一起更清晰) -
ATTLIST只能作用于已用ELEMENT声明过的元素,否则无效 - 属性默认值、固定值、枚举值等所有字符串都必须用单引号或双引号包裹
基本上就这些。不复杂但容易忽略大小写和引号,写完建议用支持 DTD 验证的编辑器或解析器跑一遍。










