- From: Alex Muir <alex.g.muir@gmail.com>
- Date: Tue, 8 Dec 2009 12:48:58 +0000
- To: Toman_Vojtech@emc.com
- Cc: xproc-dev@w3.org
- Message-ID: <88b533b90912080448h4b57c9cbje2deef530916791@mail.gmail.com>
Hi Vojtech, Thanks. I get that now given the select statement would be selecting from the wrong input. It's taking me a while to understand the input/output and pipes in xproc. I was just investigating without luck if using a p:group I could wrap say 5 variables and specify only once which port the following statements are using? (had a pascal "with" statement on my mind) Is is possible to do something that in xproc? Thanks Alex On Tue, Dec 8, 2009 at 12:20 PM, <Toman_Vojtech@emc.com> wrote: > Hi Alex, > > The p:pipe binding is necessary here because in this case, you want to read > the documents appearing on the "par" *parameter* port of the pipeline. > Without the p:pipe binding, the p:variable would be connected to the > "source" document input port of the pipeline. > > Regards, > Vojtech > > ------------------------------ > *From:* xproc-dev-request@w3.org [mailto:xproc-dev-request@w3.org] *On > Behalf Of *Alex Muir > *Sent:* Tuesday, December 08, 2009 1:12 PM > *To:* Kevin Flynn > *Cc:* xproc-dev@w3.org > > *Subject:* Re: Difficulty overriding parameter values > > 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 > > -- Alex https://sites.google.com/a/utg.edu.gm/alex
Received on Tuesday, 8 December 2009 12:49:33 UTC