【问题标题】:Element that can only have one of two text values?只能具有两个文本值之一的元素?
【发布时间】:2010-12-19 04:50:53
【问题描述】:

我正在构建一个具有fuel_system 元素的DTD。

我想限制<fuel_system> 标记之间的文本。它只能是carburetedfuel-injected。我怎样才能做到这一点?

我不提这种 = > 属性类型(化油器、燃油喷射),因为我想在<fuel_system> 标签中强制执行此规则,而不是fuel_system 的属性。

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    必须成为 DTD 吗? XML Schema 是一种选择吗?

    Using XML Schema you can restrict element text to an enumerated list of values

    <xs:element name="fuel-system">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="fuel-injected"/>
          <xs:enumeration value="carbourated"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    

    【讨论】:

    • 您的回复是我职责的另一个答案。非常感谢:)
    【解决方案2】:

    在 DTD 中定义元素时,无法限制元素内的 文本。您只能告诉它可能包含哪些其他元素(子元素)及其顺序,或者您可以告诉该元素包含文本,或两者的混合。

    所以,基本上你有 2 个选项来限制 &lt;fuel-system&gt;:要么将其声明为属性 (&lt;fuel-system type="fuel-injected"/&gt;),要么声明子元素 &lt;fuel-injected&gt;&lt;carburated&gt;。这两个选项之间的选择取决于您要描述的内容以及会根据fuel-system 的类型而改变的内容。

    (元素声明的语法定义为here

    示例第一个选项,属性

    <!ELEMENT fuel-system EMPTY>
    <!ATTLIST fuel-system (fuel-injected|carburated) #REQUIRED>
    

    第二个选项,子元素

    <!ELEMENT fuel-system (fuel-injected|carburated)>
    <!ELEMENT fuel-injected ...>
    <!ELEMENT carburated ...>
    

    【讨论】:

    • 我说服我的老师,这在 DTD 中是不可能的,我会像您的回复一样构建我的 DTD。谢谢您的回答 :)
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2019-01-12
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多