【问题标题】:Attribute of an Element must exist and be one of a defined list in a dtd file元素的属性必须存在并且是 dtd 文件中定义的列表之一
【发布时间】:2012-01-23 21:31:37
【问题描述】:

在 DTD 文件中,如何声明元素必须具有属性。 此属性必须是以下三个之一:si、sl 或 ii

<bla si="foo">
<bla ii="foo">
<bla sl="foo">

有效,并且:

<bla> or
<bla somthing="foo"> or
<bla si="foo" ii="bar">

应该都是无效的

提前感谢

编辑:

这并不能解决问题,但很接近:

<!ATTLIST bla si CDATA #REQUIRED
                sl CDATA #REQUIRED
                ii CDATA #REQUIRED
 >

它要求所有属性都存在,但我想强制,只有一个属性存在。

【问题讨论】:

    标签: xml schema dtd


    【解决方案1】:

    在 DTD 中,属性不能相互依赖。您可以使用#REQUIRED#IMPLIED 将任何属性设置为强制或可选,但不能强制指定必须存在的属性数量。

    一般来说,一个好的设计实践是只使用属性来逐项列出元素的特征,而不是改变元素的含义,并保持属性相互独立。如果这些是您的目标,请考虑将它们制作(替代)子元素或提供“宿主”元素的替代版本,以便它们可以具有不同的属性集。

    【讨论】:

    • 好吧..这个属性不会改变相应元素的含义..它只是那个元素的一个属性...可以声明吗?喜欢通过 xsd 吗?
    • @Stephan 也不可能使用 XSD(除非我忘记了一些技巧)。具有讽刺意味的是,这种限制的一个例子是 XML-Schema 本身的模式:xsd 元素 &lt;xs:attribute&gt; 只能具有属性 defaultfixed 之一,但 XML 模式的模式文件不强制执行此限制,它是仅在建议的文本中说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2011-04-23
    相关资源
    最近更新 更多