DTD元素和重复元素

时间:2013-02-06 14:01:21

标签: xml dtd

 <?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元素包含整数。

DTD是否正确:

 <!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)>
再好吧?因为我们已经在上面写了

谢谢你

1 个答案:

答案 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形式主义中是不可预知的。所有结构约束(例如,在这种情况下,属性的允许值)在范围内是“全局的”。