Антенна House XSL-FO Расширения не работают? - PullRequest
0 голосов
/ 28 октября 2010

Любая попытка использовать расширения xsl-fo для Antenna House, указывая на их пространство имен (что, между прочим, дает «страницу не найдена»), приводит к ошибке:

Элемент 'root' в пространстве имен 'http://www.w3.org/1999/XSL/Format' имеет недопустимый дочерний элемент' document-info 'в пространстве имен' http://www.antennahouse.com/names/XSL/Extensions'. Список возможных ожидаемых элементов: 'layout-master-set' в пространстве имен 'http://www.w3.org/1999/XSL/Format'.

Похоже, что существует проблема со ссылкой на пространство имен, когда элементы в пространстве имен xsl-fo не распознают, что элементы расширения являются допустимыми дочерними элементами?

Код выглядит так:

<xsl:stylesheet version='1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
     xmlns:axf='http://www.antennahouse.com/names/XSL/Extensions'>
    <xsl:template match='/root'>
        <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format' xmlns:axf='http://www.antennahouse.com/names/XSL/Extensions'>
            <axf:document-info name='title' value='value' />
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

Забавно, что на их сайте приведен пример, который выглядит точно так же: http://www.antennahouse.com/xslfo/axf4-extension.htm#axf.document-info

К сожалению, он не работает с v4.3 их xsl форматера.

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Я думаю, что проблема может заключаться в том, что xsl-fo не завершена. Ошибка возникает при преобразовании XML в XSL-FO или при обработке XSL-FO?

Кроме того, я не думаю, что вам нужно добавлять пространства имен к элементу fo:root, если они находятся в xsl:stylsheet. Это может быть характерно для процессора XSL, хотя. (Я использую саксонский.)

У меня нет опыта работы с Antenna House, но я использую RenderX с похожими расширениями.

Вот пример файла XML, таблицы стилей XSL и полученного XSL-FO. (Что прекрасно работает в RenderX.)

Файл XML

<?xml version="1.0" encoding="UTF-8"?>
<root/>

Таблица стилей XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:rx="http://www.renderx.com/XSL/Extensions">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/root">
    <fo:root>
      <rx:meta-info>
        <rx:meta-field name="title" value="Some Title"/>
        <rx:meta-field name="author" value="DevNull"/>
        <rx:meta-field name="subject" value="Some Subject"/>
        <rx:meta-field name="keywords" value="abc def ghi jkl"/>
      </rx:meta-info>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="my-page">
          <fo:region-body/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="my-page">
        <fo:flow flow-name="xsl-region-body">
          <fo:block/>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>

</xsl:stylesheet>

XSL-FO выход

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
         xmlns:rx="http://www.renderx.com/XSL/Extensions">
   <rx:meta-info>
      <rx:meta-field name="title" value="Some Title"/>
      <rx:meta-field name="author" value="DevNull"/>
      <rx:meta-field name="subject" value="Some Subject"/>
      <rx:meta-field name="keywords" value="abc def ghi jkl"/>
   </rx:meta-info>
   <fo:layout-master-set>
      <fo:simple-page-master master-name="my-page">
         <fo:region-body/>
      </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="my-page">
      <fo:flow flow-name="xsl-region-body">
         <fo:block/>
      </fo:flow>
   </fo:page-sequence>
</fo:root>

Я думаю, что если вы поменяете местами расширения renderx (rx:) для расширений антенны, это должно работать. Возможно, вам следует сначала попробовать отрендерить XSL-FO, прежде чем пытаться сгенерировать XSL-FO с использованием XSL-T.

Надеюсь, это поможет.

1 голос
/ 25 августа 2015

focheck (https://github.com/AntennaHouse/focheck) релизы включают W3C XSD для XSL 1.1 плюс расширения для Antenna House.

1 голос
/ 05 ноября 2010

Это была моя вина.Был файл схемы xsd, о котором я не знал.В итоге нам пришлось использовать элемент «any» в корневом и блочном узлах, чтобы получить шаблон для доступа к расширениям антенны.

<xs:element name="root">
  <xs:complexType>
    <xs:sequence>
      <xs:any namespace="http://www.antennahouse.com/names/XSL/Extensions" processContents="skip"/>
...

<xs:element name="block">
  <xs:complexType mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:any namespace="http://www.antennahouse.com/names/XSL/Extensions" processContents="skip"/>
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...