2013-12-11 142 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 - 請參閱我的更新。 –

相關問題