- From: Norman Walsh <ndw@nwalsh.com>
- Date: Wed, 06 Jun 2007 16:27:41 -0400
- To: public-xml-processing-model-wg@w3.org
- Message-ID: <877iqgkev6.fsf@nwalsh.com>
/ Jeni Tennison <jeni@jenitennison.com> was heard to say:
| I think we're getting there. A few more comments from me.
|
| Norman Walsh wrote:
|> This proposal is my proposal from a few days ago adjusted to address
|> the comments made by Alex, Henry, and Jeni.
|>
|> 1. No more automatic inheritance. Consequently, remove parameters
|> from compound steps.
|>
|> 2. Add a grouping mechanism, a la XSLT attribute sets:
|>
|> <p:parameter-set
|> name = NCName>
|> (p:inline|p:pipe|p:document|p:parameter*)
|> </p:parameter-set>
|>
|> For V1, I propose that p:parameter-set be allowed only as a child
|> of p:pipeline.
|
| Is it allowed between steps or only before the subpipeline? I think
| the latter will be hard to use, so I hope it's the former.
I hadn't thought about it. I'd have been tempted to say only at the
beginning, like p:option and p:parameter, but...
| In fact, I'm not all that convinced that parameter sets will get much
| reuse, so rather than forcing people to do:
|
| <p:pipeline ...>
| ...
| <p:parameter-set name="my-xslt-parameters">
| <p:pipe step="foo" source="result" />
| <p:parameter name="view" value="default" />
| </p:parameter-set>
| ...
| <p:xslt use-parameter-sets="my-xslt-parameters">
| ...
| </p:xslt>
| </p:pipeline>
|
| I think we should allow:
|
| <p:pipeline ...>
| ...
| <p:xslt>
| ...
| <p:parameter-set>
| <p:pipe step="foo" source="result" />
| <p:parameter name="view" value="default" />
| </p:parameter-set>
| </p:xslt>
| </p:pipeline>
|
| The proximity of the construction of the parameter set and the use of
| the parameter set will help users.
|
| [In fact, I think that <p:parameter-set> could be removed from the
| <p:pipeline> context: if you want to share parameter sets, you can
| always create a sequence of <c:parameter> documents to hold them.]
I think that would complicate the defaulting story. Instead of saying
that the default value for @use-parameter-sets is "#top-level" we
have to say ... something like:
A step that does not contain a p:parameter-set is treated as if it
contained a p:parameter-set that contained a pipe pointing to a step
that copies the top level parameters. The copying step is also
implied if it doesn't exist.
|> If the same parameter is specified more than once inside a
|> p:parameter-set, the last value specified is used.
|>
|> Having sets isn't very useful if you can't use them, so we also
|> need @use-parameter-sets on steps. (For steps not in the pipeline
|> namespace, that's spelled @p:use-parameter-sets.)
|
| I have a strong preference for using a nested syntax rather than an
| attribute for constructing the parameter set from other parameter
| sets. In other words, rather than:
|
| <p:parameter-set name="setc" use-parameter-sets="seta">
| <p:parameter name="aname" value="3"/>
| </p:parameter-set>
|
| use:
|
| <p:parameter-set name="setc">
| <p:use-parameter-set name="seta" />
| <p:parameter name="aname" value="3" />
| </p:parameter-set>
|
| and rather than:
|
| <p:xslt use-parameter-sets="seta setb">
| ...
| <p:xslt>
|
| use:
|
| <p:xslt>
| <p:use-parameter-set name="seta" />
| <p:use-parameter-set name="setb" />
| </p:xslt>
|
| The reason is that elsewhere (namely in <p:input>) we use a nested
| syntax for constructing sequences of documents, and this seems to be a
| similar kind of thing. It also simplifies things when it comes to
| figuring out whether parameters in the content or from the used
| parameter sets get priority (see below).
I have a preference for attributes. It's not uncommon to use
attributes to point to stuff: attribute-sets, output parameters, and
character maps in XSLT, for example.
That said, you're right about the fact that we use nested elements
inside p:input.
I'll vote "concur" on this one if it helps get us finished.
|> I propose that we address that by allowing "#top-level" as a
|> parameter set name. It means "all the parameters passed to the
|> p:pipeline", which might be the empty set.
|
| I don't much like '#top-level' as a name (sorry). What about
| '#pipeline-parameters'?
"Concur" :-)
I proposed #default and Henry didn't like it. I considered
"#pipeline-parameters" and rejected it mostly because it's about 10
letters longer, but that's not a good reason.
| In the nested syntax that I suggested above, you could manage this by
| altering the order in which the nested <p:parameter> or
| <p:use-parameter-set> elements were specified. For example, to get the
| same effect as above you could do:
|
| <p:parameter-set name="setc">
| <p:parameter name="aname" value="3" />
| <p:use-parameter-set name="seta" />
| </p:parameter-set>
|
| and:
|
| <p:parameter-set name="setd">
| <p:use-parameter-set name="seta" />
| <p:parameter name="aname" value="3" />
| </p:parameter-set>
Yes, I agree, if we nest them that's the right answer.
| The other thing from my proposal that I'd like to see here is to allow
| extension attributes on the <c:parameter> elements, which are simply
| ignored when a new parameter set is created. It just means that I can
| use documents to hold my parameter sets and not have to worry about
| stripping away any annotations I might place on them.
Yes, I didn't say it, but I intended that extension attributes would
be allowed.
|> Pipelines that need to perform more complex computations can do so:
|>
|> <p:pipeline>
|> <p:parameter-set name="global">
|> <p:pipe port="result" step="load-global"/>
|> <p:pipe port="result" step="some-top-level"/>
|> </p:parameter-set>
|>
|> <p:try name="load-global">
|> <p:group>
|> <p:output port="result"/>
|> <p:load>
|> <p:option name="href" value="~/.globals.xml"/>
|> </p:load>
|> </p:group>
|> <p:catch>
|> <p:output port="result"/>
|> <p:identity>
|> <p:input port="source">
|> <p:inline>
|> <c:parameters/>
|> </p:inline>
|> </p:input>
|> </p:identity>
|> </p:catch>
|> </p:try>
|
| That should be:
|
| <p:catch>
| <p:output port="result" />
| <p:identity>
| <p:input port="source"><p:empty /></p:input>
| </p:identity>
| </p:catch>
Right. That was a holdover from when I was thinking of having
c:parameter*s* documents.
Be seeing you,
norm
--
Norman Walsh <ndw@nwalsh.com> | One may be driven to commit murder by
http://nwalsh.com/ | love or hatred, but one can only
| advocate murder out of sheer
| wickedness.--Italo Svevo
Received on Wednesday, 6 June 2007 20:28:04 UTC