Как упростить этот конвейер xproc? - PullRequest
4 голосов
/ 08 октября 2010

Я только начал копаться в XProc (используя Calabash ).У меня есть серия XSLT-преобразований, которые я хочу применить к одному входному документу для создания одного выходного документа.Раньше я использовал простой скрипт Python для управления преобразованиями, но казалось, что XProc может подойти.По сути, это просто список преобразований XSLT, которые необходимо применить, в правильном порядке.Проблема в том, что это кажется избыточным.Я надеюсь, что есть какой-то способ сократить это, но (пока) я не могу понять это самостоятельно.

<?xml version="1.0"?>
<p:pipeline version="1.0" xmlns:p="http://www.w3.org/ns/xproc">
    <p:xslt name="remove-locations">
        <p:input port="stylesheet">
            <p:document href="preprocessors/remove-locations.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="divisions-1">
        <p:input port="stylesheet">
            <p:document href="preprocessors/divisions-1.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="divisions-2">
        <p:input port="stylesheet">
            <p:document href="preprocessors/divisions-2.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="subjects-1">
        <p:input port="stylesheet">
            <p:document href="preprocessors/subjects-1.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="subjects-2">
        <p:input port="stylesheet">
            <p:document href="preprocessors/subjects-2.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="types-1">
        <p:input port="stylesheet">
            <p:document href="preprocessors/types-1.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="types-2">
        <p:input port="stylesheet">
            <p:document href="preprocessors/types-2.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="core">
        <p:input port="stylesheet">
            <p:document href="preprocessors/core.xsl"/>
        </p:input>
    </p:xslt>

    <p:xslt name="consolidate-descriptions">
        <p:input port="stylesheet">
            <p:document href="preprocessors/consolidate-descriptions.xsl"/>
        </p:input>
    </p:xslt>
</p:pipeline>

Ответы [ 2 ]

5 голосов
/ 12 октября 2010

Я обратился за помощью к списку рассылки xproc-dev , и решение было быстро предложено и реализовано для меня.Это позволило мне упростить приведенный выше конвейер до этого (пространства имен изменены, чтобы защитить невинных):

<?xml version="1.0"?>
<p:pipeline
    version="1.0"
    xmlns:p="http://www.w3.org/ns/xproc"
    xmlns:ex="http://example.com">

    <p:declare-step type="ex:xslt" name="xslt">
        <p:input port="source" sequence="true" primary="true"/>
        <p:input port="parameters" kind="parameter"/>
        <p:output port="result" primary="true"/>
        <p:option name="stylesheet" required="true"/>

        <p:load name="load-stylesheet">
            <p:with-option name="href" select="$stylesheet"/>
        </p:load>

        <p:xslt>
            <p:input port="stylesheet">
                <p:pipe port="result" step="load-stylesheet"/>
            </p:input>
            <p:input port="source">
                <p:pipe port="source" step="xslt"/>
            </p:input>
        </p:xslt>
    </p:declare-step>

    <ex:xslt stylesheet="remove-locations.xsl"/>
    <ex:xslt stylesheet="divisions-1.xsl"/>
    <ex:xslt stylesheet="divisions-2.xsl"/>
    <ex:xslt stylesheet="subjects-1.xsl"/>
    <ex:xslt stylesheet="subjects-2.xsl"/>
    <ex:xslt stylesheet="types-1.xsl"/>
    <ex:xslt stylesheet="types-2.xsl"/>
    <ex:xslt stylesheet="core.xsl"/>
    <ex:xslt stylesheet="consolidate-descriptions.xsl" />
</p:pipeline>

(я фактически разделил шаг в его собственный файл и <p:import> его, поэтому основной конвейерфайл еще проще, чем это.)

0 голосов
/ 08 октября 2010

Я не вижу способа упростить конвейер ... если вы не измените сами таблицы стилей.Например, создайте одну таблицу стилей, которая импортирует все остальные и продолжает передавать выходные данные одного на вход следующего.(Для этого потребуется XSLT 2.0 или расширение exsl: nodeset.)

Но нет, я не вижу способа упростить конвейер XProc без изменения других вещей.

...