编写 XML 和 DTD 文档

Writing a XML and DTD document

我正在尝试解决过去的两道试题,我设法完成了,但我不确定我是否做对了。如果有人可以帮助我,我真的很感激。我把试题贴出来了。

第一个问题要求我为 TOP 3 书籍编写一个 XML 文档,这就是我得到的。是正确的吗?有没有更简单的方法来做,因为我需要用笔和纸写一份 XML 文档。


<Top_3_Books> 

<Book Catagory="Wine">
<Book1> 
<Title> French Wines: The Essential Guide <\Title>
<Author> Penguin Publishers <\Author>
<\Book1>

<Book2> 
<Title> An Encyclopaedia of the Wines and Domains of France <\Title>
<Author> Oxford Press <\Author>
<\Book2>

<Book3> 
<Title> Hachette Atlas of French Wines & Vineyards <\Title>
<Author> Addison-Wesley <\Author>
<\Book3>

<\Book>


<Book Catagory="Food">

<Book1> 
<Title> Seafood Recipes from Cornwall <\Title>
<Author> R.Steinway and BBC Press <\Author>
<\Book1>

<Book2> 
<Title> D. Smithson's Easy How-To-Cook <\Title>
<Author> D. Smithson and Prentice-Hall <\Author>
<\Book2>

<Book3> 
<Title> All Rhodes Lead to the Kitchen <\Title>
<Author> J. Rhodes and Addison-Wesley <\Author>
<\Book3>

<\Book>

<\Top_3_Books>

对于c部分,我需要写一个DTD,下面是我的尝试。是不是更简单或更快的方式再次写入。谢谢

<!ELEMENT Top_3_Books(Wines,Food)*>
<!ELEMENT Wines (Books, Author?)>
<!ELEMENT Books (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Food (Books, Author)>
<!ELEMENT Books (#PCDATA)>
<!ELEMENT Author (#PCDATA)>

谢谢

例如,Wine 类别似乎应该稍微改变一下

一个。该类别不是一本书。它应该是一个 Category 元素,有一个类型。 b.所有书籍都是 Book 项。无需创建单独的项目 Book1Book2 等。 C。 Publisher 每本书的属性。 d.作者列表,可选。这个分类好像没有,上一本书自己发明了一个

<Category type="Wine">
   <Books>
      <Book Publisher="Penguin Publishers"> 
         <Title> French Wines: The Essential Guide <\Title>
         <Authors><\Authors>
      <\Book>

      <Book Publisher="Oxford Press "> 
         <Title> An Encyclopaedia of the Wines and Domains of France <\Title>
         <Authors><\Authors>
      <\Book>

      <Book Publisher="Addison-Wesley"> 
         <Title> Hachette Atlas of French Wines & Vineyards <\Title>
         <Authors>
            <Author>W. Esley</Author>
         <\Authors>
      <\Book>    
   <Books>
<\Category>

DTD 应该有一个 DOCTYPE 定义根元素。

括号定义元素中的内容,因此

<!DOCTYPE Top_3_Books
[
   <!ELEMENT Top_3_Books(Category)>
   <!ELEMENT Category(Books)>
   <!ATTLIST Category
      type   CDATA          #REQUIRED
   >
   <!ELEMENT Books (Book)>
   <!ELEMENT Book (Title, Authors)>
   <!ATTLIST Book 
      Publisher CDATA       #REQUIRED
   >
   <!ELEMENT Title (#PCDATA)>
   <!ELEMENT Authors (Author)*>
   <!ELEMENT Author (#PCDATA)>
]>

这是一个实际有效的示例,涵盖了所有要求。 (之前的回答都不是。)

<!DOCTYPE top3books [

<!--Requirement #1 - zero or more categories-->
<!ELEMENT top3books (category*)>

<!--Requirement #3 - each category has at least one book-->
<!ELEMENT category (book+)>
<!--Requirement #2 - category has a type-->
<!ATTLIST category
    type CDATA #REQUIRED>

<!--Requirements #4 and #6 - each book has a title and an optional list of authors-->
<!ELEMENT book (title, authors?)>
<!--Requirement #5 - each book has a publisher attribute-->
<!ATTLIST book 
    publisher CDATA #REQUIRED>

<!ELEMENT title (#PCDATA)>
<!ELEMENT authors (author+)>
<!ELEMENT author (#PCDATA)>
]>
<top3books>
    <category type="Wine">
        <book publisher="Penguin Publishers">
            <title>French Wines: The Essential Guide</title>
        </book>
        <book publisher="Oxford Press">
            <title>An Encyclopedia of the Wines and Domains of France</title>
        </book>
        <book publisher="Addison-Wesley">
            <title>Hachette Atlas of French Wines &amp; Vineyards</title>
        </book>
    </category>
    <category type="Food">
        <book publisher="BBC Press">
            <title>Seafood Recipes from Cornwall</title>
            <authors>
                <author>R.Steinway</author>
            </authors>
        </book>
        <book publisher="Prentice-Hall">
            <title>D. Smithson's Easy How-To-Cook</title>
            <authors>
                <author>D. Smithson</author>
            </authors>
        </book>
        <book publisher="Addison-Wesley">
            <title>All Rhodes Lead to the Kitchen</title>
            <authors>
                <author>J. Rhodes</author>
            </authors>
        </book>
    </category>
</top3books>

你错过的最重要的事情之一是你的 XML 不是 well-formed。 (特别是结束标签应该使用 / 而不是 \ 并且 & 需要是 &amp;。)

我还将所有元素和属性名称更改为小写。这不是必需的,但请记住,无论您如何定义元素,它都需要如何使用(视情况而定)。

我也注意到您在 Top_3_Books 和内容规范 (Wines,Food) 之间缺少 space。确保你有 required space between the name and the content spec.

另外一件事;我的示例在内部子集中包含 DTD(在 [] 之间的文档类型内)。这意味着 DTD 和 XML 实例都在同一个文件中。如果要将 DTD 写入单独的文件,则需要在 XML 实例中的 doctype 声明中引用 DTD。让我知道您是否需要一个示例来说明它的外观。