【问题标题】:Writing a XML and DTD document编写 XML 和 DTD 文档
【发布时间】:2015-04-26 12:11:11
【问题描述】:

我正在尝试解决过去的两个考试问题,我设法完成了它,但我不确定我是否做对了。如果有人可以帮助我,我真的很感激。我已经粘贴了考试题。

第一个问题要求我为 TOP 3 BOOKS 编写一个 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)>

谢谢

【问题讨论】:

    标签: xml tags element document dtd


    【解决方案1】:

    例如,Wine 类别似乎应该稍作改动

    一个。该类别不是一本书。它应该是一个带有类型的Category 元素。 湾。所有书籍均为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)>
    ]>
    

    【讨论】:

    • 感谢您的回答,现在说得通了。我是否正确完成了 DTD?
    • @Mikey,我也编辑了它。可能有不止 1 个正确答案,我写了我认为正确的答案。
    • 谢谢,这看起来很混乱,有什么有用的材料/书籍/教程我可以阅读/观看。再次感谢。
    • 试试看this list
    • 谢谢,我已经看过你提供的一些链接,比如 W3C,我现在看看其他的。感谢您的帮助。
    【解决方案2】:

    这是一个实际有效且涵盖所有要求的示例。 (前面的答案都不是。)

    <!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;amp; 需要是&amp;amp;。)

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2013-04-07
      • 2013-06-15
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多