- From: Norman Walsh <ndw@nwalsh.com>
- Date: Thu, 08 Oct 2009 09:19:47 -0400
- To: public-xml-processing-model-comments@w3.org
- Message-ID: <m2r5teqaz0.fsf@nwalsh.com>
"Toman_Vojtech@emc.com" <Toman_Vojtech@emc.com> writes:
> "1. If an unknown step in the XProc namespace is encountered, it is
> assumed to be correct."
>
> What does "correct" mean in this case? Because the step is unknown, the
> processor has no idea about how its signature (input ports, output
> ports, options, ...) looks like. Knowing the input and output ports (and
> which ones are primary, if any) is essential to determine the correct
> evaluation order of steps in the pipeline.
I managed to convince myself that this wasn't actually a problem. Any
attempt to evaluate an unknown step will raise an error, so unless the
step occurs inside a p:when or the p:group of a p:try, the error can
propogate upwards. In a p:when or p:try, you know the order because
you have the other branches.
But that's an awfully dramatic change and I could be wrong. Certainly,
there may be sharp edges somewhere. So let's back off a bit.
(I know we're late in the game, I desperately want to reject any
change in this area, but I'm acutely aware that if you don't get this
right in V1.0, it's very hard to fix.)
What I think Vasil has identified pretty persuasively is that the
status quo makes it very hard to write conditional pipelines that can
degrade gracefully on older processors.
Perhaps a much less agressive change will cover it though. Ignore my
earlier proposal in this thread.
Instead of saying that "it is a static error if the signature of a
known step in the version library has changed, except for new options",
we say:
3. It is a dynamic error to attempt to evaluate a step that has unknown
attributes or unknown descendants.
This makes it statically ok to say:
<p:identity>
<p:xyzzy/>
</p:identity>
but the step will always raise an error if it is evaluated.
4. If the signature of a step includes unexpected input ports, any
inputs that appear on those ports will simpy be ignored.
This means that if p:identity grows a new input port, it'll be ok for a 1.0
processor to process that step, it will simply do whatever it does without
paying any attention to the new inputs.
5. If the signature of a step includes unexpected output ports, an
empty sequence of documents will appear on that port. (Consequently,
it will be a dynamic error if the new ports do not accept a sequence
of documents.)
This means that if p:xslt grows a new output port, it'll simply always
produce an empty sequence of documents if it's used by a 1.0
processor.
6. New options on known steps are ignored.
Same as before.
I think this all works because we will continue to require that a 1.0
processor has all the declarations for the 2.0 steps.
Be seeing you,
norm
--
Norman Walsh <ndw@nwalsh.com> | If God created us in his own image, we
http://nwalsh.com/ | have more than reciprocated.-- Voltaire
Received on Thursday, 8 October 2009 13:20:27 UTC