You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML DTD无法使用SGML DTD式定义内注释?解析报错咨询

XML DTD 是否移除了SGML DTD的声明内注释语法?

没错,XML DTD确实移除了SGML DTD里允许在<!ELEMENT>、<!ATTLIST>这类声明的内容部分嵌入-- 注释 --的语法,这正是你遇到解析错误的原因。

核心差异:SGML vs XML DTD

  • SGML的宽松规则:HTML4的SGML DTD之所以能在元素/属性声明里插注释,是因为SGML本身支持在声明的内容模型中嵌入注释,语法规则更灵活,允许这类“内嵌式”注释存在。
  • XML的简化与严格性:XML是SGML的简化子集,为了降低解析复杂度、提升一致性,XML规范明确禁止在DTD的元素声明、属性列表声明的内容区域(比如<!ELEMENT>的内容模型部分)插入注释。注释只能放在声明的外部,或者声明之间的空白位置。

正确的XML DTD写法示例

你原来的写法在XML DTD里是非法的:

<!ELEMENT A (#PCDATA) -- a link -- >

改成以下两种合法形式之一:

  1. 把注释放在声明外部:
<!-- 这是一个链接元素 -->
<!ELEMENT A (#PCDATA)>
  1. 如果需要给元素添加结构化的描述信息,XML DTD本身不支持内嵌注释,你可以考虑改用XML Schema(XSD),它提供了更丰富的注释机制(比如<xs:annotation>标签)。

关于解析错误的说明

解析器抛出的expected '>'错误,是因为它在(#PCDATA)之后只期望看到>来结束<ELEMENT>声明,而你写的-- a link --不符合XML DTD的语法规则,所以触发了内容错误。

内容的提问来源于stack exchange,提问作者wirrbel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:37