1

これは私の頭に浮かぶので、familyというノードを持つXMLドキュメントがあります

<family>
  <parents>
    <name>Bob</name>
    <init>R</init>
    <surname>Johnson</surename>
  </parents>
  <kids>
    <name>Lucy</name>
    <surname>Johnson</surname>
  </kids>
</family>

イニシャルはオプションなので、このためのDTDを作成すると、次のようになります。

<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>

しかし、私はこのエラーを受け取り続けます有効性エラー:要素名の再定義^ /tmp/tmp.dtd:26:有効性エラー:要素の初期の再定義^ /tmp/tmp.dtd:27:有効性エラー:要素の名前の再定義^

DTDをこのように変更しても。

<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>

同じエラー..これは文字通り私がxmlを使用している2日目であり、私が読んだチュートリアルから、私が間違っていることを理解できないようです。

4

1 に答える 1

3

nameを宣言する必要はinitialありません。2surname回試してみてください。

<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>

parentkid3つ(または2つ)の子要素について同じ定義を共有します。の追加の定義が与えられた

<!ELEMENT family (parent*, kid*)>

これにより、以下が検証されます(質問に含めたドキュメントから修正)

<family>
  <parent>
    <name>Bob</name>
    <initial>R</initial>
    <surname>Johnson</surname>
  </parent>
  <kid>
    <name>Lucy</name>
    <surname>Johnson</surname>
  </kid>
</family>
于 2013-01-21T15:08:39.350 に答える