fo: объект указан, но не объявлен - PullRequest
3 голосов
/ 18 мая 2011

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

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

1 Ответ

4 голосов
/ 18 мая 2011

(ПРИМЕЧАНИЕ. В своем ответе я использую «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! Ø

...