【问题标题】:element book: validity error : Element book content does not follow the DTD元素书:有效性错误:元素书内容不遵循DTD
【发布时间】:2022-11-09 02:16:29
【问题描述】:

我的 book.xml 文件中有以下 DocBook 结构:

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" 
    [ <!-- -->
   <!ENTITY bookinfo SYSTEM "bookinfo.sgm">
      <!ENTITY abstract SYSTEM "abstract.sgm">
      <!ENTITY chap1 SYSTEM "chap1.sgm">
      <!ENTITY biblio SYSTEM "biblio.sgm">
      <!ENTITY the_author "Author Name">
    ] > 
    <book> 
      <title>Book title</title>
     &bookinfo; 
      <abstract>
        <para>Abstract.</para>
      </abstract>
     &chap1; 
     &biblio; 
    </book> 

当我从 cmd 运行 xmllint -valid book.xml 时,我收到此错误:

book.xml:18: 元素书:有效性错误:元素书内容不遵循 DTD,期望 ((title , subtitle? , titleabbrev?)? , bookinfo? , (dedicate | toc | lot | 词汇表 | 参考书目 | 前言 |章 | 参考 | 部分 | 文章 | 附录 | 索引 | setindex | colophon)*), got (title CDATA abstract CDATA CDATA )

为什么 xmllint 给我它?似乎一切正常...

请帮我纠正这个错误。

【问题讨论】:

  • 很难重现,因为我们不知道&amp;bookinfo 中的内容,即bookinfo.sgm,但很可能是它打开和关闭了&lt;bookinfo&gt; 块。可能&lt;abstract&gt; 现在位于无效位置(应该是信息类型的块,也可以:tdg.docbook.org/tdg/5.0/abstract.html

标签: xml docbook sgml


【解决方案1】:

假设文档中引用的外部解析实体(bookinfo.sgm、chap1.sgm 和 biblio.sgm)的位置正确且有效,则验证错误是由book 元素中存在abstract 元素引起的。

有关abstract 的父母名单,请参阅"abstract" in DocBook: The Definitive Guide

您可以通过将abstract 移动到允许的元素内来解决此问题。例如,如果bookinfo.sgm 定义如下,则 book.xml 将验证:

<subtitle>The Subtitle</subtitle>
<bookinfo>
  <abstract>
    <para>Abstract.</para>
  </abstract>
</bookinfo>

我不知道您在bookinfo.sgm 中还有什么,但是将摘要移动到bookinfo 元素中绝对有效并且有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多