- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 18 Aug 2006 15:32:42 +0100
- To: public-xml-processing-model-wg@w3.org
Hi Norm,
Norm Walsh wrote:
> Those wishing to peek at the inner working's of your humble editor's
> deranged mind are encouraged to consider the evidence at
>
> http://www.w3.org/XML/XProc/docs/langspec.html
>
> I've worked my way from the top of the document down to Section 4.6.
> (Everything after that is likely to be cruft.)
Good work! I know we want to get this out the door, so I've tried to
limit myself to editorial comments. Feel free to ignore those that aren't.
1. Section 2 (Pipeline Concepts), 2nd para, last sentence:
s/imputs/inputs/
2. Section 2.1 (Components), last para, last sentence:
"In other words, every input and required parameter must be specified;
no undeclared outputs can be specified, but some declared outputs may
be left unspecified; and no undeclared parameters can be specified,
but parameters that are not required do not have to be specified."
isn't all that much clearer than the more formal definition! :) Perhaps:
"In other words, every input and required parameter must be specified
and only inputs, outputs, and parameters that are declared may be
specified. Outputs and optional parameters do not have to be
specified."
(FWIW, if we don't specify outputs when we instantiate components (i.e.
don't have a <output> within <step> then we should probably change this
definition to make it clearer that "specifying an output" actually means
referencing it from elsewhere.)
3. Section 2.2 (Inputs and Outputs), 1st para, 2nd sentence:
"Each XML document (or document in a sequence) must be a well formed
XML document conforming to the document production of [ XML 1.0 ] or
the document production of [ XML 1.1 ]."
One day it would be useful to have a note or something that indicates
that implementations can pass character streams, SAX streams, Infosets,
DOMs, PSVIs, XDMs or whatever else they might want to between components
as long as these data structures represent well-formed XML documents. At
the moment it sounds a bit as though XML documents can only be
represented as character streams.
4. Section 2.3 (Parameters), only para, 3rd sentence:
"If a document or other node is given as the value of a parameter, the
string value of the specified node will be used."
I think we also want numbers/booleans and other data types to be
automatically cast to strings.
5. Section 3.2 (For-each):
I think it would be useful to mention that for-eaches can have multiple
output ports.
6. Section 3.3 (Viewport):
Nice example!
7. Section 3.4 (Choose), 1st para, 1st sentence:
"A choose component selects exactly one of a set of possible
subpipelines based on the evaluation of an XPath expression."
s/an XPath expression/XPath expressions/
8. Section 3.4 (Choose), 2nd para:
"For example, a choose might test an input document and apply XML
Schema validation if it is an XML Schema document, apply RELAX NG
validation if it is a RELAX NG grammar, and perform no validation
otherwise."
I think you probably mean:
"For example, a choose might test an schema and apply XML Schema
validation to an input document if the schema is an XML Schema
document, apply RELAX NG validation if the schema is a RELAX NG
grammar, and perform no validation otherwise."
9. Section 3.4 (Choose), 3rd para:
"Each subpipeline is associated with a separate XPath expression that
is evaluated in the context of the specified input document. The
specified input document can be different for different XPath
expressions."
would be clearer as:
"Each subpipeline is associated with a separate XPath expression that
is evaluated in the context of a document. The context document can
be different for different XPath expressions."
(I don't *think* we want to call these 'input document's because that
implies that the context document for the test must be an input to the
pipeline, whereas it could be an output from a previous step.)
10. Section 3.4 (Choose)
There ought to be some mention in here of a 'default subpipeline' that
gets evaluated if none of the XPath expressions evaluate to true (i.e.
the 'otherwise' branch).
11. Section 3.5 (Try/Catch), 1st para:
"A try component isolates a subpipeline that fails at runtime. If any
component in the try subpipeline fails, then the subpipeline in the
catch component is processed and the result of the try component is
the result of the subpipline specified in the catch. If all the
components in the try subpipline proceed to completion without
signalling an error, then the result of the try component is the
result of that subpipline and the catch subpipline is never
processed."
This is a bit confusing because of the slippery distinction between the
"try component" and the "try subpipeline", and the introduction of a
"catch component". Perhaps it would help to call it a "trap component"
which has a "try subpipeline" and a "catch subpipeline"? Something like:
"A trap component isolates a subpipeline that fails at runtime. It has
a try subpipeline and a catch subpipeline. The try subpipeline is
evaluated, and if any component in the try subpipeline fails, then
the catch subpipeline is evaluated and the result of the trap
component is the result of the catch subpipline. If all the
components in the try subpipline proceed to completion without
signalling an error, then the result of the trap component is the
result of the try subpipline and the catch subpipline is never
processed."
12. Section 3.5 (Try/Catch), 4th para:
s/assure/ensure/
13. Section 4.1 (p:pipeline-library Element):
This implies that you're going to define a <p:import-library> element. I
think this should just be called <p:import>, since I think we agreed
that it could import standalone pipelines as well as pipeline libraries.
14. Section 4.3 (p:declare-input) and Section 4.4 (p:declare-output)
Were we going to have a sequence="yes|no" on these?
15. Section 4.3 (p:declare-input) With a source attribute, last para,
last sentence:
"It is a static error if the specified port is not a source."
I don't think you've defined what "a source" is anywhere? Presumably it
means "an output from a previous step, or an input to the subpipeline".
You also might want to mention something about the syntax for specifying
other input ports in the same subpipeline (is the 'stepname' required in
these circumstances?).
16. Section 4.3 (p:declare-input) With a "here" document and
Section 4.4 (p:declare-output) With a "here" document
"literal-content" could be taken as meaning a serialized XML document
(e.g. in a CDATA section). Perhaps calling it "embedded-document" or
something similar would help.
17. Section 4.3 (p:declare-input)
You haven't mentioned the select attribute for filtering. Perhaps you're
not including it in this version of the WD.
18. Section 4.4 (p:declare-output) With a source attribute, last-1 para,
last sentence:
"It is a static error if the specified port is not a sink."
I don't think you mean "a sink" here (not that you've defined what "a
sink" means anyway). The port specified in an output declaration must be
either an output from a contained step or an input to the subpipeline
(i.e. what you called "a source" when you talked about p:declare-input).
Port specifications never reference sinks.
A last general comment: I can understand why you've separated the
language constructs from the syntax for those language constructs, but I
think it would be easier to understand what's intended if they weren't
separated. In my view, the syntax specifications (and examples) help to
explain the abstract notions. If you were thinking of reorganising
anyway, take this as a nudge to do so.
Cheers,
Jeni
--
Jeni Tennison
http://www.jenitennison.com
Received on Friday, 18 August 2006 14:32:50 UTC