【发布时间】:2010-12-19 04:50:53
【问题描述】:
我正在构建一个具有fuel_system 元素的DTD。
我想限制<fuel_system> 标记之间的文本。它只能是carbureted 或fuel-injected。我怎样才能做到这一点?
我不提这种 = > 属性类型(化油器、燃油喷射),因为我想在<fuel_system> 标签中强制执行此规则,而不是fuel_system 的属性。
【问题讨论】:
我正在构建一个具有fuel_system 元素的DTD。
我想限制<fuel_system> 标记之间的文本。它只能是carbureted 或fuel-injected。我怎样才能做到这一点?
我不提这种 = > 属性类型(化油器、燃油喷射),因为我想在<fuel_system> 标签中强制执行此规则,而不是fuel_system 的属性。
【问题讨论】:
必须成为 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>
【讨论】:
在 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 ...>
【讨论】: