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

Xml 如果DTD中存在属性,如何验证属性是否为空?,xml,dtd,Xml,Dtd,我有一个特点: preprocessFile CDATA #IMPLIED 我希望此属性为: 允许缺席 如果存在,则为非空字符串 我如何在DTD中表达这一点?为了最小化参数,请假设我知道rng/xsd,并且不能将其用于此特定任务。无法使用XML DTD验证属性是否存在,它是否不能为空 以下是您的选择: 可以设置默认值。例如预处理文件CDATA“novalueprovided” 您可以允许它不存在(参见上面的示例) 在任何一种情况下,您都可以在XML解析代码中强制属性为“不存在或不为空(如果存在

我有一个特点:

preprocessFile CDATA #IMPLIED
我希望此属性为:

  • 允许缺席
  • 如果存在,则为非空字符串

  • 我如何在DTD中表达这一点?为了最小化参数,请假设我知道rng/xsd,并且不能将其用于此特定任务。

    无法使用XML DTD验证属性是否存在,它是否不能为空

    以下是您的选择:

  • 可以设置默认值。例如
    预处理文件CDATA“novalueprovided”
  • 您可以允许它不存在(参见上面的示例)

  • 在任何一种情况下,您都可以在XML解析代码中强制属性为“不存在或不为空(如果存在)。

    我同意DwB的观点,这超出了DTD,即使有上述建议,DTD仍然允许显式指定空字符串。但是,由于DTD也不允许数据类型规范,这符合实际情况,因为您不仅需要字符串数据类型,而且还需要长度限制。当然,任何真正的模式语言,如RNG(RelaxNG)或XML:schema,都很容易支持这样的检查,这里给出了RNG:

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