2011-12-19 2 views
0

Я пытался конвертировать документ docbook с фрагментированными/частичными включениями в pdf с использованием Xerces 2.7.1 и Xalan 2.7.0.Преобразование Docbook 5.0 (с частичным включением) в PDF

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

Это не сработало, пока я не понял, что для того, чтобы использовать частичный включает в себя один должен обеспечить resolveable путь к schemafile с помощью <!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 для инструментальной цепочки?

ответ

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-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 (да, есть DTD, хотя нормативная схема написана в RELAX NG). DTD объявляет xml:id идентификатором типа.

+0

Звучит многообещающе :) –

+0

Как именно «использовать» Docbook DTD? –

+0

Загрузите DTD и добавьте объявление DOCTYPE в документ XML. Например: '' (предполагая, что XML-файл и DTD находятся в одном каталоге). Вы упомянули '' в вопросе, поэтому я предположил, что вы уже знаете. – mzjn

Смежные вопросы