2017-08-21 6 views
1

私はXMLと学習者に新しいです! XSDを使用したXMLはDTDよりも快適です! DTD拡張を解決する際にエラーに直面するXML - 外部DTD:要素タイプの内容は一致する必要があります

質問: 人は扶養家族となり、扶養家族は配偶者と子供または配偶者のみになります。人は1つ以上の子を持つことができます。XMLとDTDを生成

そのスキーマからDTDを書くことができます!名前のXMLファイルにリンクされます外部DTD "をperson.dtd"。、

[person.dtd] [2] やXMLなど。、 [person.xml] [1]

私が直面しているエラーはそれです!

Error: Public ID: null System ID: file:/home/p11422/person_given.xml Line number: 11 Column number: 12 Message: The content of element type "spouse" must match "(spouse_name,spouse_age)".

誰でもこのエラーを取り除くのを手伝ってください! これですperson.dtd - >

<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT person (name , age , address , dependents)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT age (#PCDATA)> 
<!ELEMENT address (#PCDATA)> 
<!ELEMENT dependents (spouse,children?)> 
<!ELEMENT spouse (spouse_name , spouse_age)> 
<!ELEMENT spouse_name (#PCDATA)> 
<!ELEMENT spouse_age (#PCDATA)> 
<!ELEMENT children (child+)> 
<!ELEMENT child (cname , gender , cage)> 
<!ELEMENT cname (#PCDATA)> 
<!ELEMENT gender (#PCDATA)> 
<!ELEMENT cage (#PCDATA)> 

これはperson.xmlある

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE person SYSTEM "person.dtd"> 
<person> 
    <name>Deepak</name> 
    <age>28</age> 
    <address>Vijayawada</address> 
    <dependents> 
    <spouse> 
     <spouse_name>padma</spouse_name> 
     <spouse_age>26</spouse_age> 
    </spouse> 
    </dependents> 
</person> 
+1

入力(DTD、XML)はリンクされたイラストではなく、問題のコードとして入力してください。ありがとう。 – potame

+0

応答ありがとうございます!私は上記のコードスニペットを追加しました!見てください! :) –

答えて

1

プロヒント:あなただけの代わりに、問題の実際のコードを入れた場合は、問題のデバッグを支援するためにはるかに簡単です画像。

私は自分の電話にいるので、簡単に問題を再現することができないので、私は最高の推測をするつもりです。

あなたが持っている問題は、dependents要素のコンテンツモデルが非決定的であることです。つまり、あいまいです。パーサーは先読みせずに一致するものがどれかを判断できません。これは、ゼロまたは1 children続く正確に一つspouseを意味

<!ELEMENT dependents (spouse,children?)> 

:に

<!ELEMENT dependents (spouse|(spouse,children))> 

からあなたの宣言を変更してみてください。

これはあなたが得ているエラーと一致していないようですが、私が間違って見ている唯一のものです。 spouseの宣言/用法はOKと思われる。

+0

ありがとう@ダニエル・ヘイリー、私は宣言を変更し、私の質問を更新しました!しかし、私は同じエラーが発生している!私はDTDとXMLコードブロックを追加しました。ありがとうございます –

0

確かに、バリデータによって読み取られた入力は、あなたが思っている入力ではありません。あなたが表示する入力はあなたが表示するDTDに対して有効で、xmllintもRXPも 'spouse'要素に関するエラーメッセージを出すことはありません。 (どちらもDTDの先頭にある空白の空白について文句を言います)

関連する問題