0
 <?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 和一个温度元件,然后是可选的加热开启元件。加热开启元素具有空的内部内容。所有属性都是必需的。速度元素之后的温度元素唯一允许的位置值是“内部”和“外部”。座椅元件内的温度元件唯一允许的位置值是“前”和“后”。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>

我的主要 2 个问题:


1-他说温度恰好出现两次,但我不能写(

  <!ELEMENT sensor-system (velocity,temperature,temperature,seats)>

....所以它必须是温度+ ??

2-温度在座位上再次声明......但没有必要写(

<!ELEMENT temperature (#PCDATA)>

再次对吗?因为我们已经在上面写过了

感谢你

4

1 回答 1

1

座位上再次声明温度...但无需写

正确的。

[...] 温度恰好出现两次,但我写不出来

是的你可以 :-)

<!ELEMENT sensor-system (velocity,temperature,temperature,seats)>

完全没问题。但很可能还有其他问题。

您可能需要一种内部温度和一种外部温度。您将无法使用当前结构(即通过属性)强制执行此操作。

此外,将 location 属性设为强制意味着它还必须在 的<temperature>子元素中指定<seat>,其中inside或的值outside没有意义。(DTD 形式主义不允许属性声明或内容模型根据上下文而变化:所有声明在范围内都是“全局的”。)

元素上的位置属性<temperature>似乎是一个糟糕的设计选择。您可以删除该属性并尝试这样的事情:

<!ELEMENT sensor-system (velocity,inside,outside,seats)>
<!ELEMENT inside (temperature)>
<!ELEMENT outside (temperature)>

这似乎更好地反映了您的要求。

那个DTD正确吗

DTD 结构一致且语法正确。但它与规范声明不符。首先,有一个拼写的小问题:heating-is-onheat-is-on. 其次,更重要的是,具有location属性的业务。把它放在<seat>元素上是一件明智的事情,但规范声明有:

The only allowed location values for the temperature element after the velocity element are ”inside” and ”outside”. The only allowed location values for the temperature element inside the seat element are ”front” and ”back”. 

这在 DTD 形式中是不可指定的。所有结构约束(例如,在这种情况下,属性的允许值)在范围内都是“全局的”。

于 2013-02-06T16:18:51.170 回答