XML& DTD:元素类型的内容必须匹配

时间:2015-02-27 12:00:25

标签: xml dtd

我目前正在学习XML,而且我正在努力解决第一个DTD扩展问题。我的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE Activities [
<!ELEMENT Activities (ToDo)>
<!ELEMENT ToDo (Household,Cat,House,Bills,Groceries)>
<!ELEMENT Object (Cat,House,Bills,Groceries)>
<!ELEMENT Cat (#PCDATA)>
<!ELEMENT House (#PCDATA)>
<!ELEMENT Bills (#PCDATA)>
<!ELEMENT Groceries (#PCDATA)>
<!ATTLIST ToDo id CDATA #IMPLIED>
<!ATTLIST Object id CDATA #IMPLIED>
]>
<Activities>
<ToDo id="Household">
<Object id="Cat">
    <ToDo>bathe</ToDo>
</Object>
<Object id="House">
    <ToDo>vacuum</ToDo>
</Object>
<Object id="Bills">
    <ToDo>pay</ToDo>
</Object>
<Object id="Groceries">
    <ToDo>Buy</ToDo>
</Object>
</ToDo>
</Activities>

XML验证(http://xmlvalidation.com)告诉我&#34;元素类型的内容&#34; ToDo&#34;必须匹配&#34;那个&#34;元素类型的内容&#34;对象&#34;必须匹配&#34;。

我做错了什么? 非常感谢提前!

1 个答案:

答案 0 :(得分:1)

<!ELEMENT ToDo (Household,Cat,House,Bills,Groceries)>

例如,不允许Object作为Child而是HouseHold等,即将Xml更改为:

<Activities>
  <ToDo id="Household">
    <HouseHold/>
    <Cat>
      xxx
    </Cat>
    <House>
      yyy
    </House>
     .....
  </ToDo>
</Activities>

从那里你将清除'Outer'“元素类型”ToDo“的内容必须匹配

现在你还有说Cat的内部待办事项,即<ToDo>bathe</ToDo>但你DTD说: <!ELEMENT ToDo (Household,Cat,House,Bills,Groceries ToDo必须有一个Houshold,然后是Cat等,即它只能是文本。

同样<!ELEMENT Cat (#PCDATA)>说猫必须只包含文字。

目前还不清楚你的目标是什么,但从<!ELEMENT ToDo (Household,Cat,House,Bills,Groceries中删除家庭

<Activities>
  <ToDo id="Household">
    <Cat id="1">
      bathe
    </Cat>
    <House id="2">
      vacumm
    </House>
     .....
  </ToDo>
</Activities>

满足DTD