Используя Cala bash 1.1.30 из командной строки, я смог заставить работать следующее:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xpath-version="2.0"
xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source">
<p:empty/>
</p:input>
<p:output port="result" primary="true" sequence="true">
<p:pipe port="result" step="secondary-storage"/>
</p:output>
<p:xslt name="xslt-pagelist" version="2.0">
<p:input port="stylesheet">
<p:document href="page-list.xsl"/>
</p:input>
<p:input port="source">
<p:document href="toc.xml"/>
</p:input>
<p:input port="parameters">
<p:empty/>
</p:input>
</p:xslt>
<p:store href="toc-list.html"/>
<p:for-each name="secondary-storage">
<p:iteration-source select=".">
<p:pipe port="secondary" step="xslt-pagelist"/>
</p:iteration-source>
<p:output port="result">
<p:pipe port="result" step="store"/>
</p:output>
<p:store name="store">
<p:with-option name="href" select="document-uri(.)"/>
</p:store>
</p:for-each>
</p:declare-step>
Таким образом, в основном p:for-each
вместо p:iteration-source
, который использует secondary
порт вывода результата из шага p:xslt
, а затем внутри просто использует document-uri(.)
для получения URI результата. Все это требует xpath-version="2.0"
.
Каким-то образом oXygen 22 не запускает код, но выдает ошибку отказа в доступе, похоже, он настроен на запись вторичных документов в установочный каталог oXygen, который при обычном Windows настройки безопасности не разрешены и не являются тем местом, где вам нужны файлы результатов; Чтобы исправить эту проблему, я настроил XPro c так, чтобы вход XML использовался в качестве источника ввода для всего сценария XPro c, затем на шаге p:xslt
я могу использовать функцию p:base-uri
, чтобы установить output-base-uri
для XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xpath-version="2.0"
xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source">
<p:document href="toc.xml"/>
</p:input>
<p:output port="result" primary="true" sequence="true">
<p:pipe port="result" step="secondary-storage"/>
</p:output>
<p:xslt name="xslt-pagelist" version="2.0">
<p:with-option name="output-base-uri" select="p:base-uri()"/>
<p:input port="stylesheet">
<p:document href="page-list.xsl"/>
</p:input>
<p:input port="parameters">
<p:empty/>
</p:input>
</p:xslt>
<p:store href="toc-list.html"/>
<p:for-each name="secondary-storage">
<p:iteration-source select=".">
<p:pipe port="secondary" step="xslt-pagelist"/>
</p:iteration-source>
<p:output port="result">
<p:pipe port="result" step="store"/>
</p:output>
<p:store name="store">
<p:with-option name="href" select="document-uri(.)"/>
</p:store>
</p:for-each>
</p:declare-step>
Таким образом, Cala bash из командной строки и внутри oXygen ведут себя одинаково, записывая результаты в тот же каталог, откуда поступает источник ввода.