2010-10-27 1 views
0

Любая попытка использовать расширения XSL-FO Антенный Хауза, указывая на их имен (что дает «страница не найдена» КСТАТИ) приводит к ошибке:Антенный дом Расширения XSL-FO не работают?

The element 'root' in namespace 'http://www.w3.org/1999/XSL/Format' has invalid child element 'document-info' in namespace 'http://www.antennahouse.com/names/XSL/Extensions'. List of possible elements expected: 'layout-master-set' in namespace '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 форматирования.

+0

Для записи URI пространства имен, такой как 'http: // www.antennahouse.com/names/XSL/Extensions', не нуждается ни в чем. В разделе «Пространства имен в XML» (https://www.w3.org/TR/REC-xml-names/#ns-decl) есть «Не цель, чтобы она была непосредственно использована для извлечения схемы (если любой существует). (То, что он должен решить, если он что-то разрешает, - это целая отдельная дискуссия.) –

ответ

2

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

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

У меня нет опыта работы с Антенным домом, но я использую RenderX с аналогичными расширениями.

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

XML File

<?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

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

<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"/> 
... 

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

  • Нет связанных вопросов^_^