如果存在于DTD中,如何验证属性是否为空?

时间:2011-01-20 17:34:50

标签: xml dtd

我有一个属性:

preprocessFile CDATA #IMPLIED

我想要这个属性:

  1. 允许缺席
  2. 如果存在,则为非空字符串
  3. 我如何在DTD中表达这一点?为了最小化参数,请假设我知道rng / xsd并且不能将它们用于此特定任务。

2 个答案:

答案 0 :(得分:2)

使用XML DTD无法验证如果存在属性,则不能为空。

以下是您的选择:

  1. 您可以设置默认值。例如preprocessFile CDATA "novalueprovided"
  2. 您可以允许它不存在(请参阅上面的示例)。
  3. 在任何一种情况下,您都可以在XML解析代码中将该属性强制为“缺席或不存在(如果存在)”。

答案 1 :(得分:1)

我同意DwB,这超出了DTD,即使有上述建议仍然允许明确指定空字符串。但由于DTD也不允许数据类型规范,因此这适用于图片,因为您不仅需要字符串数据类型,还需要长度限制。当然任何真正的模式语言,如RNG(RelaxNG)或XML:Schema都可以轻松支持这样的检查,RNG在这里给出:

<optional>
    <attribute name="preprocessFile">
       <data type=string">
          <minLength value="1"/>
       </data>
    </attribute>
</optional>