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

Şer*_*cet 8 xml dtd

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

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

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

Adr*_*son 11

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

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

(这里定义了元素声明的语法)

示例:第一个选项,属性

<!ELEMENT fuel-system EMPTY>
<!ATTLIST fuel-system (fuel-injected|carburated) #REQUIRED>
Run Code Online (Sandbox Code Playgroud)

第二种选择,子元素

<!ELEMENT fuel-system (fuel-injected|carburated)>
<!ELEMENT fuel-injected ...>
<!ELEMENT carburated ...>
Run Code Online (Sandbox Code Playgroud)

  • 我说服我的老师这在 DTD 中是不可能的,我将像您的回答一样构建我的 DTD。感谢您的回答:) (2认同)

Mad*_*sen 5

必须是DTD吗?XML Schema是一个选项吗?

使用XML Schema,您可以将元素文本限制为枚举值列表:

<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>
Run Code Online (Sandbox Code Playgroud)