我是XML的新手,我不明白为什么我会收到这些警告或者他们的意思。我正在定义代表游戏列表的标签。这是我的dtd文件和IDE已经识别的警告。
这些警告意味着什么,我该如何解决?谢谢!
答案 0 :(得分:2)
每个错误都与未声明的元素有关。要解决这些特定错误,您需要声明DTD中引用的每个元素。 (为<!ELEMENT
,name
,developer
等添加engine
声明。)
此外,您已将name
,developer
,engine
等声明为属性(<!ATTLIST
)。
您可能应该决定要成为什么元素以及想要成为属性的内容,而不仅仅是解决错误。
以下是一些例子。 (DTD和XML结合在一起使测试更容易。(DTD在内部子集中。)DTD可以分开。):
使用元素
<!DOCTYPE gamelist [
<!ELEMENT gamelist (game*)>
<!ELEMENT game (data,metadata)>
<!ELEMENT data (name,developer,engine?,releasedate?)>
<!ELEMENT metadata (hoursplayed?,lastplayed?,lastdataupdate)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT developer (#PCDATA)>
<!ELEMENT engine (#PCDATA)>
<!ELEMENT releasedate (#PCDATA)>
<!ELEMENT hoursplayed (#PCDATA)>
<!ELEMENT lastplayed (#PCDATA)>
<!ELEMENT lastdataupdate (#PCDATA)>
]>
<gamelist>
<game>
<data>
<name></name>
<developer></developer>
<engine></engine>
<releasedate></releasedate>
</data>
<metadata>
<hoursplayed></hoursplayed>
<lastplayed></lastplayed>
<lastdataupdate></lastdataupdate>
</metadata>
</game>
</gamelist>
使用属性
<!DOCTYPE gamelist [
<!ELEMENT gamelist (game*)>
<!ELEMENT game (data,metadata)>
<!ELEMENT data EMPTY>
<!ATTLIST data
name CDATA #REQUIRED
developer CDATA #REQUIRED
engine CDATA #IMPLIED
releasedate CDATA #IMPLIED >
<!ELEMENT metadata EMPTY>
<!ATTLIST metadata
hoursplayed CDATA #IMPLIED
lastplayed CDATA #IMPLIED
lastdataupdate CDATA #REQUIRED>
]>
<gamelist>
<game>
<data name="" developer="" engine="" releasedate=""/>
<metadata hoursplayed="" lastplayed="" lastdataupdate=""/>
</game>
</gamelist>
以下是一些可能有用的链接:
XML Essentials(先从这里开始。)
XML 1.0(特别是“Logical Structures”。)(或者:XML 1.1(“Logical Structures”))