【问题标题】:Declaring multiple rules in DTD schema在 DTD 模式中声明多个规则
【发布时间】:2013-12-04 11:06:31
【问题描述】:

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

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

现在我希望执行以下操作: 假设我有:

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

当然,这个值必须用&lt;![CDATA[some_value_with_&amp;&amp;&amp;]]&gt;包围

由于我已经有一个 dtd 架构,我想我可以删除 CDATA(保持原来的样子),然后在 DTD 中声明它的 cdata 类型,这可能吗? 我尝试添加以下内容: &lt;!ELEMENT value (#CDATA)&gt; 但我有两个问题:

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

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

为什么会这样?

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

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

    CDATA 关键字(没有#)有两种不同的用途:

    1. attribute declarations in DTDs
    2. CDATA sections 中,仅出现在 XML 文档实例中(不能在 DTD 中声明)。

    明确一点:不能将元素声明为“cdata/CDATA/#CDATA”类型。 CDATA 部分 (&lt;![CDATA[...]]&gt;) 为 XML 作者提供了便利。如果需要,它只是在 XML 文档中使用。它不是在 DTD 中声明的东西。

    另请参阅此答案:https://stackoverflow.com/a/12128273/407651

    【讨论】:

    • 我不确定我是否理解。是否可以将元素声明为 cdata,以便我可以简单地用唯一字符(&>!?)填充元素的内容,而无需实际编写 &lt;![CDATA[....]]&gt;
    • 不,不可能将元素声明为“cdata”(或“CDATA”)。如果需要,只需在 XML 文档中使用 CDATA 部分。它不能在 DTD 中声明。
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多