Передача параметра document() в xslt в конвейере XProc

Я установил конвейер XProc, в котором у меня есть <p:xslt> шаг. Среди параметров этой таблицы стилей у меня есть параметр, который является узлом document():

Это таблица стилей km_to_dita.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dctm="http://www.documentum.com" xmlns:ale="http://www.amplexor.com/alcatel"
    exclude-result-prefixes="xs dctm ale" version="2.0">

    <xsl:param name="conf-base" select="'file:/D:/Temp/ALE_config/'" />

    <xsl:param name="output-base" select="''"/>

    <xsl:param name="lang" select="/element()[1]/@language"/>

    <xsl:param name="graphics-reference-names" as="document-node()*" />

    <!-- my templates stuff... -->
</xsl:stylesheet>

Таким образом, я вызываю этот XSLT в моем конвейере с помощью следующего шага (для демонстрации он устанавливается с <p:inline> но он предназначен для привязки к порту результата шага):

<p:xslt name="km-dm-to-dita">
    <p:input port="source">
        <p:pipe port="list-dm" step="list-csv"/>
    </p:input>
    <p:input port="stylesheet">
        <p:document href="km_to_dita.xsl"/>
    </p:input>
    <p:with-param name="output-base" select="$dita.data-dir"/>
    <p:with-param name="conf-base" select="$config-dir"/>
    <!--<p:with-param name="graphics-reference-names">
        <p:pipe port="result" step="get-figure-references"/>
    </p:with-param>-->
    <p:with-param name="graphics-reference-names">
        <p:inline>
            <graphic-ids>
                <reference type="symbol" document="dm09011b0281121ef3.xml#G4" filename="g09011b0281d9c449.gif"/>
                <reference type="symbol" document="dm09011b0281121ef3.xml#G3" filename="g09011b0281d9c449.gif"/>
                <reference type="figure" document="dm09011b0281121ef3.xml#F33" filename="g09011b0281d9c44d.gif"/>
                <reference type="symbol" document="dm09011b0281121ef3.xml#G5" filename="g09011b0281d9c451.gif"/>
                <reference type="figure" document="dm09011b0281121ef5.xml#F116" filename="g09011b0281d9c458.gif"/>
            </graphic-ids>
        </p:inline>
    </p:with-param>

    <p:with-option name="output-base-uri" select="$dita.data-dir"/>
</p:xslt>

Но происходит сбой при запуске с XML Calabash (в oXygenXML), возникает ошибка (извините, ребята, это вся информация, которая у меня есть), однако определили, что это <p:with-param name="graphics-reference-names"> что вызывает эту ошибку):

ноль

Любая идея?

1 ответ

Если вы используете

<p:input port="source">
    <p:pipe port="list-dm" step="list-csv"/>
    <p:pipe port="result" step="your-other-step"/>
</p:input>

в XProc 1 с p:xslt version="2.0" а потом

<xsl:param name="graphics-reference-names" as="document-node()*" select="subsequence(collection(), 2)" />

в коде XSLT, я думаю, он должен работать, чтобы результат другого шага был доступен в качестве вторичного входного документа (доступного как части коллекции по умолчанию).

Наконец-то я понял, что с ним не так... Прежде всего, <p:with-param> отсутствует необходимый @select атрибут, как упоминалось в XProc, но, как ни странно, oXygen не вызвал никакой ошибки проверки для моего конвейера.

Таким образом, конвейер может быть закреплен таким образом:

<p:with-param name="graphics-reference-names" select="/">
    <p:inline>
        <graphic-ids>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G4" filename="g09011b0281d9c449.gif"/>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G3" filename="g09011b0281d9c449.gif"/>
            <reference type="figure" document="dm09011b0281121ef3.xml#F33" filename="g09011b0281d9c44d.gif"/>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G5" filename="g09011b0281d9c451.gif"/>
            <reference type="figure" document="dm09011b0281121ef5.xml#F116" filename="g09011b0281d9c458.gif"/>
        </graphic-ids>
    </p:inline>
</p:with-param>

В приведенном выше решении XSLT завершается сбоем, поскольку параметр приводится к строке:

Обязательный тип элемента значения переменной $graphics-reference-names - document-node(); предоставленное значение имеет тип элемента xs:string

Это еще одна проблема, которая делает проблему неразрешимой: XProc позволяет задавать только параметры в качестве атомарных значений, как описано в XSLT с привязкой параметров XProc в требуемом типе.

Другие вопросы по тегам