0

我试图使用 Xerces 2.7.1 和 Xalan 2.7.0 将带有碎片/部分包含的 docbook 文档转换为 pdf。

<xi:include href="./TestDocument.included.xml" xpointer="Section2"/>

直到我发现为了使用部分包含,这才起作用,必须使用<!DOCTYPE ..>.

但是对于 Docbook 5.0,应该/必须使用命名空间声明而不是 DOCTYPE。

<?xml version="1.0" encoding="UTF-8"?>
<article xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xml:lang="de" version="5.0" status="DRAFT" security="confidential"> 

如何将 docbookxi.rng 提供给工具链?

4

1 回答 1

1

在这种情况下,没有办法“将 docbookxi.rng 提供给工具链”。甚至没有将 XML 文档与 RELAX NG 模式相关联的标准方法。命名空间声明将xmlns="http://docbook.org/ns/docbook"文档标识为 DocBook 5(连同version属性),但它没有说明模式的位置。

像这样的一条线,

<xi:include href="./TestDocument.included.xml" xpointer="Section2"/>

表示:“包括TestDocument.included.xml由元素标识的部分,该元素的属性类型为 ID,值为Section2”。

在 DocBook 5 中,xml:id用于唯一标识符。此属性被识别为类型 ID,并且不需要模式来确定其“ID-ness”(参见http://www.w3.org/TR/xml-id/)。因此,如果您id的 DocBook 5 文档中有任何属性,请将它们更改为xml:id.

但是,您还应该确保 XML 解析器支持xml:id. 这里似乎缺少 Xerces,因此它可能仍然不适合您(请参阅https://issues.apache.org/jira/browse/XERCESJ-1113)。

如果有问题,您可以尝试使用DocBook 5 DTD(是的,即使规范模式是用 RELAX NG 编写的,也有一个 DTD)。该DTD 声明xml:id为ID 类型。

于 2011-12-19T14:28:48.733 回答