/ / Convertendo o Docbook 5.0 (com inclusões parciais) para PDF - xml, xerces, docbook, xinclude

Convertendo Docbook 5.0 (com parcial inclui) para PDF - xml, xerces, docbook, xinclude

Eu estava tentando converter um documento docbook com fragmentado / parcial inclui para pdf usando Xerces 2.7.1 e Xalan 2.7.0.

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

Isso não funcionou até que eu descobri que, para usar as inclusões parciais, é necessário fornecer um caminho resolvível para o arquivo de esquema usando <!DOCTYPE ..>.

Mas, com o Docbook 5.0, deve-se usar declarações de namespace em vez de 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">

Como posso fornecer o docbookxi.rng para o toolchain?

Respostas:

1 para resposta № 1

Não há como "fornecer o docbookxi.rng para o conjunto de ferramentas" que ajudaria nesse caso. Não existe uma maneira padrão de associar um documento XML a um esquema RELAX NG. xmlns="http://docbook.org/ns/docbook" declaração de namespace identifica o documento como DocBook 5 (junto com o version atributo), mas não diz nada sobre a localização do esquema.

Uma linha como esta,

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

significa: "incluir a porção de TestDocument.included.xml que é identificado pelo elemento que possui um atributo do tipo ID com um valor de Section2".

No DocBook 5, xml:id é usado para identificadores exclusivos. Este atributo é reconhecido como sendo do tipo ID, e não há necessidade de um esquema para determinar sua "ID-ness" (veja http://www.w3.org/TR/xml-id/). Então, se você tem algumaid atributos em seus documentos do DocBook 5, altere-os para xml:id.

Além disso, você também deve se certificar de que o analisador XML suporta xml:id. Xerces parece estar faltando aqui, então ainda pode não funcionar para você https://issues.apache.org/jira/browse/XERCESJ-1113).

Se houver problemas, você pode tentar usar o DocBook 5 DTD (sim, há um DTD mesmo que o esquema normativo esteja escrito em RELAX NG). Que DTD declara xml:id para ser do tipo ID.