我正在尝试使用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">
我如何提供docbook ?RNG到工具链?
没有办法"提供docbook "。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性"(参见http://www.w3.org/TR/xml-id/)。所以如果你在docbook5文档中有任何id
属性,将它们更改为xml:id
。
但是,您还应该确保XML解析器支持xml:id
。这里似乎缺少Xerces,因此它可能仍然不适合您(参见https://issues.apache.org/jira/browse/XERCESJ-1113)。
如果有问题,您可以尝试使用DocBook 5 DTD(是的,即使规范模式是用RELAX NG编写的,也有DTD)。该DTD将xml:id
声明为ID类型。