fo: сущность, на которую ссылаются, но не объявляют

Я получаю сообщение об ошибке «объект 0slash был упомянут, но не объявлен» всякий раз, когда я пытаюсь преобразовать файл .fo в .pdf с помощью apache fop 1.0.

Я узнал, что вы можете объявлять объекты в DTD, однако в моем файле .fo нет DTD. Он должен быть один? Если нет, то как я могу решить эту проблему? Желательно без использования дополнительных .xsl или любых других файлов?


person Sejanus    schedule 18.05.2011    source источник


Ответы (1)


(ПРИМЕЧАНИЕ. В своем ответе я использую «Oslash» (о, косая черта) вместо «0slash» (нулевая косая черта), который у вас есть в вашем вопросе. Поскольку вы не можете начинать имя объекта с цифры, я предполагая, что ноль является опечаткой.)

У вас есть несколько вариантов:

  1. Вы можете изменить все, что создает ваш XSL-FO, чтобы выводить шестнадцатеричные ссылки вместо ссылок на объекты ISO. В этом случае Ø будет Ø.

  2. Вы можете объявить объект во внутреннем подмножестве объявления DOCTYPE.

Вот пример XSL-FO с добавленным DOCTYPE:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fo:root [
<!ENTITY Oslash "&#xD8;">
]>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="page">
            <fo:region-body region-name="body"></fo:region-body>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="page">
        <fo:flow flow-name="body">
          <fo:block>Hello World! &Oslash;</fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

Если вы обработаете это с помощью FOP, вы получите: Hello World! Ø

person Daniel Haley    schedule 18.05.2011