DTD中的ELEMENT和ATTLIST怎么用

10次阅读

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

DTD中的ELEMENT和ATTLIST怎么用

DTD 中的 ELEMENTATTLIST 是定义 xml 文档结构和约束的核心语法。前者管“元素能长什么样”,后者管“元素能带哪些属性”。用对了,XML 才能被规范解析;写错了,解析器会直接报错。

ELEMENT:定义元素的内容规则

它声明某个元素允许包含什么内容,比如纯文本、子元素、空内容,或任意组合。

  • #PCDATA 表示只能放解析过的字符数据(即普通文本),不能嵌套其他标签:
  • 子元素序列 用逗号分隔,表示必须按顺序出现且各一次:
  • 可选/重复子元素 用符号控制次数:
    * 表示 0 次或多次,+ 表示至少一次)
  • EMPTY 表示该元素不能有任何内容,只能写成自闭合形式:
    → 合法写法是
  • ANY 表示不限制内容(不推荐在严格场景使用):

ATTLIST:定义元素的属性规则

它给已声明的元素添加属性,并规定每个属性的类型、是否必填、默认值等。

  • 基本格式:
  • CDATA 是最常用类型,表示属性值是普通字符串
    src 必须出现)
  • #IMPLIED 表示该属性可有可无,没写就不提供值:
  • #REQUIred 表示 XML 中必须显式写出这个属性,否则解析失败
  • default 是带引号的字符串,默认值,当属性未出现时自动补上:
    等价于
  • #FIXED “value” 表示该属性值固定不可改,XML 中即使写了也必须跟 DTD 一致:

实际配合使用的例子

假设要定义一个简单配置项

  • 先声明它是空元素:
  • 再给它加两个属性:
  • 这样就要求 host 必须写,port 可省略(默认为 8080)

注意几个易错点

  • ELEMENTATTLIST 都必须大写,且前后紧贴 >
  • 一个元素可以有多个 ATTLIST 声明(但通常写在一起更清晰)
  • ATTLIST 只能作用于已用 ELEMENT 声明过的元素,否则无效
  • 属性默认值、固定值、枚举值等所有字符串都必须用单引号或双引号包裹

基本上就这些。不复杂但容易忽略大小写和引号,写完建议用支持 DTD 验证的编辑器或解析器跑一遍。

text=ZqhQzanResources