2013-12-11 45 views

回答

2

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

此外,你必须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”))

+0

你给我看一个简单的例子?假设我想将名称定义为必需的字符串(我只是在网上找到很多样式,而且我无法区分DTD和XML的其他用途)。 –

+0

@Iatesometau - 请参阅我的更新。 –

相关问题