- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Tue, 08 Aug 2006 11:31:55 -0400
- To: public-xml-processing-model-wg <public-xml-processing-model-wg@w3.org>
I have a naming suggestion:
We declare inputs, outputs and parameters with <input>, <output> and
<param>.
<component name="select">
<input name="documents" sequence="yes" />
<param name="xpath" required="yes" />
<output name="results" sequence="yes" />
</component>
Diagrammatically:
|\ /| documents
+---+ +---+
| select |
+---+ +---+
\ / results
We invoke components with a <step> containing <pipe> and <param>
elements. The <pipe> element connects ports together. (We *only* hook up
inputs; anything we'd want to put on an output we can put on a pipe.)
Its basic form is:
<step kind="select" name="chapters">
<pipe from="validated!result" to="documents" />
<param name="xpath" value="//chap" />
</step>
Diagrammatically:
|\ /| document
+---+ +---+
| validate | validated
+---+ +---+
\ / result
|
|\v/| documents
+---+ +---+
| select | chapters
+---+ +---+
\ / results
The 'from' attribute points to an output. There can be more than one
output port named (to provide simple aggregation of documents into a
sequence). The 'to' attribute points to an input port on the component
named by the 'kind' attribute on the step.
The <pipe> element can have content for 'here' documents.
It can also provide a place for shorthands for some of the really common
components. For example (we've talked about the first two; the other two
are completely speculative):
- @load="URI": loads the document at the URI supplied
- @select="xpath": filters the documents using the XPath
- @save="URI": saves the selected documents with the base URI supplied
- @wrap="QName": wraps the documents into a single document
For example:
<step kind="xslt" name="transform">
<pipe to="source" from="validated!result"
save="debug/transform/input.xml" />
<pipe to="stylesheet" load="style.xsl" />
</step>
We define the inputs and outputs of pipelines, groups and so on using a
combination of these elements, by nesting the binding element <pipe>
within the port definition <input> and <output>. You don't have to use a
'to' attribute: the pipe goes to the port that the <pipe> appears in.
In a <group>, ports have two sides: an outside (which provides the
interface to other steps in the pipeline) and an inside (which provides
an interface for the steps within the group).
|
|\v/|
+-----+ +-----+
| \ / |
| | |
| |\v/| |
| +---+ +---+ |
| | | |
| +---+ +---+ |
| \ / |
| | |
| |\v/| |
| +---+ +---+ |
| | | |
| +---+ +---+ |
| \ / |
| | |
| |\v/| |
+-----+ +-----+
\ /
The pipes go from the outside of the group into the inport port(s) of
the group, and from the inside of the group into the output port(s) of
the group. So:
<group name="...">
<input name="document">
<pipe from="previous-step!result" />
</input>
<output name="result">
<pipe from="inner-step!result" />
</output>
...
</group>
In a pipeline, we only usually deal with the inner sides of the input
and output ports, so we don't usually have a <pipe> in the <input>.
However, we can provide defaults, so might have something like:
<pipeline name="ex1">
<input name="document" />
<input name="calculated" sequence="yes">
<pipe from="ex1!document" select="//chap" />
</input>
<output name="result" sequence="yes">
<pipe from="inner-step!result" />
</output>
...
</pipeline>
The other language constructs (<choose>, <for-each> and <viewport>)
follow the same kind of scheme, though because, in abstract, they take
pipeline definitions as input, there's some magic involved. I'll try to
make some suggestions in another mail if there's interest in taking this
naming scheme forwards.
Cheers,
Jeni
--
Jeni Tennison
http://www.jenitennison.com
Received on Tuesday, 8 August 2006 15:32:11 UTC