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 -->

センサーシステム要素内には正確に1つの速度要素があり、その後に必須の位置属性を持つ正確に2つの温度要素が続きます。必須の座席要素には、さらに多くの座席要素が含まれています。シート要素内には、IDと温度要素が1つだけあり、その後にオプションの暖房オン要素が続きます。Heating-is-on要素の内部コンテンツは空です。すべての属性は必須です。速度要素の後の温度要素に許可される唯一の位置値は、「内側」と「外側」です。シート要素内の温度要素に許可される位置の値は、「前面」と「背面」のみです。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-彼は温度が正確に2回発生すると言いましたが、私は書くことができません(

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

....だからそれは温度+でなければなりませんか?

2-温度は座席で再び宣言されます...しかし、書く必要はありません(

<!ELEMENT temperature (#PCDATA)>

もう一度ね?すでに上に書いたので

ありがとう

4

1 に答える 1

1

温度は座席で再び宣言されます...しかし、書く必要はありません

正しい。

[...] 正確に 2 回発生する温度ですが、書ききれません

はい、できます:-)

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

全然大丈夫です。しかし、他の問題がある可能性が非常に高いです。

おそらく、1 つの内部温度と 1 つの外部温度が必要です。現在の構造 (つまり、属性を介して) でそれを強制することはできません。

さらに、 location 属性を必須にするということは、またはの値が意味をなさないの<temperature>サブ要素でも指定する必要があることを意味します。(DTD の形式では、属性の宣言やコンテンツ モデルがコンテキストによって異なることは許可されていません。すべての宣言のスコープは「グローバル」です。)<seat>insideoutside

要素の位置属性は、<temperature>設計上の選択として適切ではないようです。属性をドロップして、代わりに次のようなことを試すことができます。

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

これはあなたの要件をよりよく反映しているようです。

そのDTDは正しいですか

DTD は構造的に一貫しており、文法的に正しいです。しかし、それは仕様ステートメントと一致しません。まず、スペリングのマイナーな問題があります: heating-is-onvs heat-is-on. location2 番目に重要なのは、属性を使用したビジネスです。それを<seat>要素に配置することは賢明なことでしたが、spec ステートメントには次のように記載されています。

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 に答える