当我使用 RelaxNG 和 DocBook 5.0 发行版上提供的 docbook.rng
架构验证我的文档时,会出现这样的错误,
error: attribute "title" not allowed at this point; ignored
并且有问题的 XML 元素是 informaltable
。事实上,我在 O'Reilly 网站上读到,informaltable
的基本定义是一个没有标题的表格。但是,同一发行版上提供的 docbook.dtd DTD 将 title
指定为 informatltable
上的属性。那么这是 DTD 中的错误吗?
DTD 片段,包含在此处,以供引用。如果这个 DTD 确实不正确,那么某处是否有正确的 DTD,或者我可以以某种方式生成它?
<!ELEMENT informaltable (info?, ((textobject*, (mediaobject+|tgroup+))|((col*|colgroup*), thead?, tfoot?, (tbody+|tr+))))>
<!ATTLIST informaltable
xmlns CDATA #FIXED "http://docbook.org/ns/docbook"
role CDATA #IMPLIED
%db.common.attributes;
%db.common.linking.attributes;
tabstyle CDATA #IMPLIED
floatstyle CDATA #IMPLIED
orient (land|port) #IMPLIED
colsep (0|1) #IMPLIED
rowsep (0|1) #IMPLIED
frame (all|bottom|none|sides|top|topbot|void|above|below|hsides|lhs|rhs|vsides|box|border) #IMPLIED
pgwide (0|1) #IMPLIED
rowheader (firstcol|norowheader) #IMPLIED
class CDATA #IMPLIED
style CDATA #IMPLIED
title CDATA #IMPLIED
lang CDATA #IMPLIED
onclick CDATA #IMPLIED
ondblclick CDATA #IMPLIED
onmousedown CDATA #IMPLIED
onmouseup CDATA #IMPLIED
onmouseover CDATA #IMPLIED
onmousemove CDATA #IMPLIED
onmouseout CDATA #IMPLIED
onkeypress CDATA #IMPLIED
onkeydown CDATA #IMPLIED
onkeyup CDATA #IMPLIED
summary CDATA #IMPLIED
width CDATA #IMPLIED
border NMTOKEN #IMPLIED
rules (none|groups|rows|cols|all) #IMPLIED
cellspacing CDATA #IMPLIED
cellpadding CDATA #IMPLIED
>
最佳答案
DocBok 5.0 DTD 只是一个近似值。针对 DTD 进行验证的文档不一定针对规范的 RELAX NG 模式有效。
DocBook 支持两种类型的表结构:CALS 和 HTML。 informaltable
上的 title
属性仅在 HTML 表中受支持。 RELAX NG 架构可以区分这两种类型的表(具有相同的名称),但在 DTD 中,无法强制执行仅在 HTML 表中允许 title
的限制。
另请参阅https://docbook.org/docs/howto/howto.html#introduction-schemas .
关于xml - DocBook 5.0 发行版上 docbook.dtd 和 docbook.rng 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17972902/