只能有两个文本值之一的元素?

时间:2009-11-22 10:47:24

标签: xml dtd xml-dtd

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

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

我没有提到像这样的东西=&gt;属性类型(化油器,燃油喷射),因为我想在<fuel_system>标签中强制使用此规则,而不是fuel_system的属性。

2 个答案:

答案 0 :(得分:10)

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

所以,基本上你有两个限制<fuel-system>的选项:要么将其声明为属性(<fuel-system type="fuel-injected"/>),要么声明子元素<fuel-injected><carburated>。这两个选项之间的选择取决于您要描述的内容以及根据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 ...>

答案 1 :(得分:5)

是否成为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>