定义XML标签/命名空间?无法识别的警告

时间:2013-12-11 05:34:54

标签: xml dtd xml-dtd

我是XML的新手,我不明白为什么我会收到这些警告或者他们的意思。我正在定义代表游戏列表的标签。这是我的dtd文件和IDE已经识别的警告。

my dtd file

这些警告意味着什么,我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:2)

每个错误都与未声明的元素有关。要解决这些特定错误,您需要声明DTD中引用的每个元素。 (为<!ELEMENTnamedeveloper等添加engine声明。)

此外,您已将namedeveloperengine等声明为属性(<!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”))