2011-12-19 46 views
0

我试图使用Xerces 2.7.1和Xalan 2.7.0将包含碎片/部分的docbook文档转换为pdf。将Docbook 5.0(含部分包含)转换为PDF

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

这并没有工作,直到我想通了,为了使用部分包括一个具有提供使用<!DOCTYPE ..>的schemafile一个resolveable路径。

但是对于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提供给工具链?

回答

1

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

像这样的一条线,

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

意思是:“包括由具有ID类型的具有Section2的值的属性的元素标识的的TestDocument.included.xml部”。

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

+0

听起来很有希望:) – 2011-12-19 15:18:27

+0

我该如何“使用”Docbook DTD? – 2011-12-20 11:25:46

+0

下载DTD并向XML文档添加DOCTYPE声明。像这样:'<!DOCTYPE book SYSTEM“docbook.dtd”>'(假设XML文件和DTD在同一个目录中)。你在问题中提到了'',所以我认为你已经知道了。 – mzjn 2011-12-20 11:40:33

相关问题