Передача параметра 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 в требуемом типе.