- From: Alex Muir <alex.g.muir@gmail.com>
- Date: Tue, 8 Dec 2009 12:12:06 +0000
- To: Kevin Flynn <kevin@escenic.com>
- Cc: "xproc-dev@w3.org" <xproc-dev@w3.org>
- Message-ID: <88b533b90912080412s4127c5a9of347efbd7ee01716@mail.gmail.com>
Hi Kevin,
I'm just getting a chance now to get your example running. It has helped me
out a tonne and I'm sure it will help others down the road.
One thing that I don't understand is why <p:pipe step="pipe-abc"
port="par"/> needs to be inside the p:variable. What function does it have
in there?
<p:variable name="input-file"
select="/c:param-set/c:param[@name='input-file']/@value">
<p:pipe step="pipe-abc" port="par"/>
</p:variable>
<p:load name="load">
<p:with-option name="href" select="$input-file"/>
</p:load>
Thanks Much
Alex
On Fri, Nov 27, 2009 at 8:51 AM, Kevin Flynn <kevin@escenic.com> wrote:
> I received the following request from alex.g.muir@gmail.com:
>
>
> I was looking over your posts at the following link regarding Xproc and
> using and xml file
> to drive the processing. I'm looking to do something similar I was
> wondering if you could
> share some solution on the xproc dev list to show how you ended up solving
> what you were doing.
>
> http://lists.w3.org/Archives/Public/xproc-dev/2009Jul/att-0013/00-part
>
> So here goes:
> =========================================================
> It's still a work in (intermittent) progress, but what I currently do is
> use the http://www.w3.org/ns/xproc-step param-set element for making
> configuration files. For example:
>
> ---------------------
> <c:param-set xmlns:c="http://www.w3.org/ns/xproc-step">
>
> <!-- run this pipeline... -->
> <c:param name="pipeline" value="xyz"/>
>
> <!-- with these parameters... -->
> <c:param name="input-file" value="file:///some/input/file.ext"/>
> <c:param name="output-file" value="file:///some/output/file.ext"/>
> <c:param name="abc" value="def"/>
>
> </c:param-set>
> -----------------------
>
> A configuration file always contains one "master" parameter, "pipeline"
> that names the actual pipeline to be run. All the other parameters are the
> parameters required by that pipeline.
>
> This parameter file is submitted as the only input to a master pipeline
> (called run-pipe.xpl) which just contains a big choose element that runs the
> specified pipeline and passes on all the specified parameters.
>
> ---------------------
> <p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
> xmlns:c="http://www.w3.org/ns/xproc-step"
> xmlns:pipes="http://xmlns.escenic.com/2009/xproc/my-pipes"
> xmlns:lib="http://xmlns.escenic.com/2009/xproc/my-library"
> name="run-pipe">
>
> <p:input port="source"/>
> <p:input port="par" kind="parameter"/>
>
> <!-- output port not needed, but this will output the URL of the saved
> file -->
> <p:output port="result">
> <p:pipe step="end-of-pipe" port="result"/>
> </p:output>
>
> <p:import href="pipes.xpl"/>
>
> <p:variable name="pipeline"
> select="/c:param-set/c:param[@name='pipeline']/@value">
> <p:pipe step="run-pipe" port="par"/>
> </p:variable>
>
> <p:choose>
> <p:when test="$pipeline='abc'">
> <pipes:abc name="abc">
> <p:input port="par" kind="parameter">
> <p:pipe step="run-pipe" port="par"/>
> </p:input>
> </pipes:abc>
> </p:when>
> <!-- ...lots more "whens"... -->
> <p:otherwise>
> <p:identity>
> <p:input port="source">
> <p:inline>
> <ebd:message>Pipe not found</ebd:message>
> </p:inline>
> </p:input>
> </p:identity>
> </p:otherwise>
> </p:choose>
>
> <p:identity name="end-of-pipe"/>
>
> </p:declare-step>
> ---------------------
>
> pipes.xpl contains all the actual pipelines, each of which has the
> following basic structure:
>
> ---------------------
> <p:declare-step type="pipes:abc" name="pipe-abc">
>
> <p:input port="source"/>
> <p:input port="par" kind="parameter"/>
> <p:output port="result">
> <p:pipe step="store" port="result"/>
> </p:output>
>
> <p:import href="library.xpl"/>
>
> <p:variable name="input-file"
> select="/c:param-set/c:param[@name='input-file']/@value">
> <p:pipe step="pipe-abc" port="par"/>
> </p:variable>
> <p:variable name="output-file"
> select="/c:param-set/c:param[@name='output-file']/@value">
> <p:pipe step="pipe-abc" port="par"/>
> </p:variable>
>
> <p:load name="load">
> <p:with-option name="href" select="$input-file"/>
> </p:load>
>
> <lib:some-basic-pipe name="some-basic-pipe">
> <p:input port="par" kind="parameter">
> <p:pipe step="pipe-abc" port="par"/>
> </p:input>
> </lib:some-basic-pipe>
>
> <!-- ...more pipes from library.xpl... -->
>
> <p:store name="store">
> <p:with-option name="href" select="$output-file"/>
> </p:store>
>
> </p:declare-step>
> ---------------------
>
> The pipelines in pipes.xpl extract the parameters they need to "load" input
> files and "store" output files, and otherwise just call a sequence of
> simpler pipelines from library.xpl.
>
> The pipelines in library.xpl are mostly just sequences of xslt and other
> atomic steps:
>
> ---------------------
> <p:declare-step type="lib:some-basic-pipe" name="lib-some-basic-pipe">
> <p:input port="source"/>
> <p:input port="par" kind="parameter"/>
> <p:output port="result">
> <p:pipe step="trf2" port="result"/>
> </p:output>
> <p:xslt name="trf1">
> <p:input port="stylesheet">
> <p:document href="xsl/trf1.xsl"/>
> </p:input>
> </p:xslt>
>
> <p:xslt name="trf2">
> <p:input port="stylesheet">
> <p:document href="xsl/trf2.xsl"/>
> </p:input>
> </p:xslt>
> </p:declare-step>
> ---------------------
>
> All the parameters specified in the configuration file are passed in to all
> the transformations, which can use the ones they need. trf1.xsl, for
> example, might contain:
>
> ---------------------
> <xsl:param name="abc"/>
> ---------------------
>
> and would therefore use the setting 'def' specified in the configuration
> file.
>
> This structure means you can build up a library.xpl containing basic pipes
> that can be re-used in various ways, and a higher-level pipes.xpl that slots
> them together in more complex ways and deals with reading and writing files.
> It's all accessible in a uniform way - one pipe to call them all, plus a
> configuration file. Since I'm using the standard
> http://www.w3.org/ns/xproc-step param-set element for the configuration
> file, you can alternatively specify parameters on the command line.
>
> In order to make this framework really useable, two things are needed:
>
> - strict naming conventions for parameters
> - an automated means of exposing all the parameters used by a particular
> pipeline.
>
> What I am thinking of doing is defining a standard way of documenting all
> parameters, wherever they appear - in XSLT transformations or pipes - most
> likely using a namespace. It would then be possible to make an XSLT
> transformation that, given the name of one of the top-level pipes in
> pipes.xpl, could drill down through all the called sub-pipes and
> transformations, find all the parameters used and generate a complete,
> fully-documented configuration file.
>
> Any advice, suggestions, offers of help etc. are more than welcome.
>
> If this list is an inappropriate forum for this kind of discussion (most
> posts seem to be focused on the specification, rather than applications),
> maybe somebody can suggest an alternative?
>
> Regards,
>
> Kevin Flynn
>
>
--
Alex
https://sites.google.com/a/utg.edu.gm/alex
Received on Tuesday, 8 December 2009 12:12:47 UTC