在DTD模式中声明多个规则

时间:2013-11-20 12:39:32

标签: xml dtd xml-dtd

我有一个带有dtd架构的xml文件。 我尝试在属性和元素上添加一些规则。 到目前为止,我设法为以下格式的不同元素提供了两个ATTLIST

<!DOCTYPE root [
 <!ATTLIST a ..... >
 <!ATTLIST b ..... >
]>

现在我想做以下事情: 假设我有:

<a ...><value>some_value_with_&&&</value></a>

当然,该值必须用<![CDATA[some_value_with_&&&]]>

包围

由于我已经有了dtd模式,我想我可以删除CDATA(最初保留它),然后在DTD中声明它的cdata类型,这可能吗? 我试着添加以下内容: <!ELEMENT value (#CDATA)> 但我有两个问题:

  1. 它强制自己(我假设)任何值元素,我可以将其限制为仅a个元素吗?

  2. 我使用java。我得到以下错误: A '(' character or an element type is required in the declaration of element type "value".

  3. 为什么?

1 个答案:

答案 0 :(得分:2)

#CDATA是一个不存在的关键字。无法将元素声明为#CDATA类型。

CDATA关键字(不含#)有两个不同的用途:

  1. attribute declarations in DTDs
  2. CDATA sections中,仅出现在XML文档实例中(无法在DTD中声明)。
  3. 要明确:不能将元素声明为“cdata / CDATA /#CDATA”类型。 CDATA部分(<![CDATA[...]]>)是XML作者的便利。如果需要,它只是在XML文档中使用。它不是在DTD中声明的东西。

    另见答案:https://stackoverflow.com/a/12128273/407651