<?xml version="1.0" encoding="UTF-8"?>
<sensor-system>
<velocity>120.00</velocity> <!-- km/h -->
<temperature location="inside">24.6</temperature>
<temperature location="outside">-12.5</temperature>
<seats>
<seat location="front">
<id>1</id>
<temperature>32.5</temperature>
<heating-is-on/>
</seat>
<seat location="back">
<id>2</id>
<temperature>23.5</temperature>
</seat>
</seats>
</sensor-system>
<!-- degree celsius -->
传感器系统元件中只有一个速度元素,后面跟着两个具有强制位置属性的温度元素。强制席位元素包含更多的座位元素。座椅元件内只有一个内径和一个温度元件,后面是可选的加热元件。加热元件具有空的内含物。所有属性都是必需的。速度元素之后温度元素的唯一允许位置值是“内部”和“外部”。座椅元件内的温度元件的唯一允许位置值是“前”和“后”。 id元素包含整数。
<!ELEMENT sensor-system (velocity,temperature+,seats)>
<!ELEMENT velocity (#PCDATA)>
<!ELEMENT temperature (#PCDATA)>
<!ATTLIST temperature location (inside|outside) #REQUIRED>
<!ELEMENT seats (seat+)>
<!ELEMENT seat (id, temperature , heat-is-on?)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT heat-is-on EMPTY>
<!ATTLIST seat location (back|front) #REQUIRED>
我的主要两个问题:
<!ELEMENT sensor-system (velocity,temperature,temperature,seats)>
....所以它必须是温度+ ??
在座位上再次宣布2温度......但是没有必要写 (
<!ELEMENT temperature (#PCDATA)>
再好吧?因为我们已经在上面写了
谢谢你
答案 0 :(得分:1)
温度再次在座位上宣布......但不需要写
正确。
[...]温度恰好发生两次,但我不能写
是的,你可以:-)
<!ELEMENT sensor-system (velocity,temperature,temperature,seats)>
完全没问题。但很可能还有其他问题。
您可能需要一个内部温度和一个外部温度。您将无法使用当前结构(即通过属性)强制执行该操作。
此外,将location属性设为强制表示还必须在<temperature>
的{{1}}子元素中指定它,其中<seat>
或inside
的值为no感。 (DTD形式主义不允许根据上下文改变声明或内容模型:所有声明在范围内都是“全局的”。)
outside
元素上的位置属性似乎是一个糟糕的设计选择。你可以删除属性并尝试这样的事情:
<temperature>
似乎更能反映您的要求。
DTD是否正确
DTD结构一致且语法正确。但它与规范声明不符。首先,有一个小问题拼写:<!ELEMENT sensor-system (velocity,inside,outside,seats)>
<!ELEMENT inside (temperature)>
<!ELEMENT outside (temperature)>
与heating-is-on
。其次,更重要的是具有heat-is-on
属性的业务。将它放在location
元素上是明智之举,但规范声明有:
<seat>
这在DTD形式主义中是不可预知的。所有结构约束(例如,在这种情况下,属性的允许值)在范围内是“全局的”。