2014-01-20 28 views
2

我刚刚学习数据库。我正在尝试为以下XML数据集编写一个DTD: http://s3.amazonaws.com/dbclass-resources/docs/countries.xml为XML数据集编写DTD(初级)

在这一点上,我尝试了几个选项,但是没有成功。有人可以告诉我如何正确地为上述数据集写一个DTD(我在下面粘贴了一个失败的尝试)。

<!ELEMENT countries (country*)> 
<!ELEMENT country (language?, city?) 
    <!ATTLIST country name CDATA #IMPLIED 
         population CDATA #IMPLIED 
         area CDATA #IMPLIED> 
    <!ATTLIST language percentage CDATA #IMPLIED 
<!ELEMENT city CDATA #IMPLIED> 
+0

分别是'country'和'language'的'ELEMENT'定义? XML中的每个元素都必须在'ELEMENT' DTD条目中指定。 –

+0

请原谅我的无知,难道我没有国家的ELEMENT定义吗? – user3216798

+0

你能编辑我所做的吗?我已经尝试了这几次,但没有成功,并且觉得只要正确地看到它会帮助我将其与数据集本身联系起来。 – user3216798

回答

2

有几个问题,我注意到你的尝试。

我注意到的第一件事是它看起来并不像你知道如何正确使用发生指示。您有country定义为(language?, city?),这意味着零个或一个language后跟零个或一个city。这不是数据中出现的内容。有时候没有城市/语言元素,有时还有更多。

我还注意到,您没有正确地结合>的一些声明(例如country的声明)。

此外,这是无效的:

<!ELEMENT city CDATA #IMPLIED> 

它看起来像一个元素声明和属性声明了一个孩子。 ;-)

这里有一个工作,你可以使用参考DTD的一个例子:

<!ELEMENT countries (country)+> 

<!ELEMENT country (city*,language*)> 
<!ATTLIST country 
      area  CDATA #REQUIRED 
      name  CDATA #REQUIRED 
      population CDATA #REQUIRED> 

<!ELEMENT city (name,population)> 

<!ELEMENT language (#PCDATA)> 
<!ATTLIST language 
      percentage CDATA #REQUIRED> 

<!ELEMENT name (#PCDATA)> 

<!ELEMENT population (#PCDATA)> 

这里有一个快捷方式quickref,将有很大的帮助与DTD语法:http://www.mulberrytech.com/quickref/XMLquickref.pdf

+0

嗨,丹尼尔,你能否帮助我对dtd进行额外的调查。这是一个我正在参加的在线课程。你愿意将你的电子邮件换成直接信息吗?感谢您的帮助 – user3216798

+0

@ user3216798 - 当然。我的电子邮件在我的档案中。 –