0

XMLfile の次のスニペットがあるとします。

<Active>
  <SystemName Permissions="RW" Datatype="STRING" Case="MIXED_RESPECT">NASCENT Default System Name</SystemName>
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</ModelNumber>

<!-- snip snip snip -->

およびそれに一致する DTD の対応するスニペット:

<!ELEMENT Active (SystemName,ModelNumber,SerialNumber....)>
   <!ELEMENT ModelNumber (#PCDATA)>
      <!ATTLIST ModelNumber Permissions   CDATA #FIXED "RO">
      <!ATTLIST ModelNumber Datatype      CDATA #FIXED "STRING">
      <!ATTLIST ModelNumber Case          CDATA #FIXED "MIXED_RESPECT">
   <!ELEMENT SystemName (#PCDATA)>
      <!ATTLIST SystemName  Permissions   (RW|RO) "RO"
                            Datatype      CDATA #FIXED "STRING"
                            Case          CDATA #FIXED "MIXED_RESPECT">

<!-- snip snip snip -->

XML を DTD に対して実行すると、次のエラーが発生します。

/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Permissions of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M
                                                                          ^
/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Datatype of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M
                                                                          ^
/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Case of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M

<!-- snip snip snip -->

誰かが泣き言を言っていることを説明できますか? 斜視になるまでGoogleを見ました。SystemName は機能し、ModelNumber などは !Attlist の!

4

1 に答える 1

1

あなたの分析は私には正しいように見えます: あなたのバリデーターは ModelNumber 属性の宣言を見ていません。あなたが示したDTDフラグメントにはそれらがあり、DTDとドキュメントインスタンスはすべて同じようにつづっています.あなたが示したフラグメントを使用して私のシステムで問題を再現することはできません.

考えられる原因の 1 つは、バリデーターが読み取っていると思われる DTD を読み取っていないことです。これをテストする 1 つの方法は、構文エラーを導入するか、使用されていると思われる DTD で SystemName の属性の 1 つを抑制し、エラー メッセージが変化するかどうかを確認することです。

幸運を。

于 2012-09-20T23:36:05.950 に答える