【问题标题】:DTD and XML examplesDTD 和 XML 示例
【发布时间】:2015-03-08 16:39:36
【问题描述】:

这是我的 DTD 规则应该具有以下属性: 书名、发行年份、一位或多位作者、一个或多个评级 (0-5)、任意数量的评论。

<!ELEMENT books (book+)>
<!ELEMENT book (title, author+,year,rating+,review*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT rating (0|1|2|3|4|5)>
<!ELEMENT review (#PCDATA)>

这是我的示例 XML:

 <?xml version="1.0" standalone="no" ?>
 <!DOCTYPE books SYSTEM "books.dtd">
<books>
    <book>
      <title>book1</title>
      <author>bob</author>
      <year>2000</year>
      <rating>2</rating>
      <rating>3</rating>
    </book>
    <book>
     <title>book2</title>
     <author>alice</author>
     <year>2001</year>
     <rating>4</rating>
     <rating>5</rating>
    </book>
    <book>
     <title>book3</title>
     <author>john</author>
     <year>2002</year>
     <rating>5</rating>
     <rating>0</rating>
     <review>not bad</review>
    </book>
</books>

但我总是收到此错误。

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    &lt;!ELEMENT rating (0|1|2|3|4|5)&gt; 在 DTD 和您的 XML 中不正确。这意味着您希望 rating 元素包含名为“0”(&lt;0&gt;) 的元素或“1”、“2”等元素。不幸的是,标签名称不能以数字开头。

    为了实现你想要做的事情,通常是通过一个属性来完成的。将 rating 元素声明为空,并在列表中的值中选择一个属性,如下所示:

    <!ELEMENT rating EMPTY>
    <!ATTLIST rating
              rank  (0|1|2|3|4|5)   #REQUIRED  >
    

    您的 XML 实例将变为:

    <?xml version="1.0" standalone="no" ?>
    <!DOCTYPE books SYSTEM "books.dtd">
    <books>
        <book>
          <title>book1</title>
          <author>bob</author>
          <year>2000</year>
          <rating rank="2" />
          <rating rank="3" />
        </book>
        <book>
         <title>book2</title>
         <author>alice</author>
         <year>2001</year>
         <rating rank="4" />
         <rating rank="5" />
        </book>
        <book>
         <title>book3</title>
         <author>john</author>
         <year>2002</year>
         <rating rank="5 />
         <rating rank="0" />
         <review>not bad</review>
        </book>
    </books>
    

    如果您确实希望将评级设置为文本内容,则无法使用 DTD 限制其值,但可以使用 XML Schema。

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2021-05-13
      • 2016-03-04
      • 2017-07-01
      相关资源
      最近更新 更多