xproc / 3.0-specification

A community-driven effort to define an XProc 3.0 specification (formerly 1.1)
http://spec.xproc.org/
33 stars 10 forks source link

What version(s), exactly? #1116

Open ndw opened 3 weeks ago

ndw commented 3 weeks ago

The section Versioning Considerations in the 3.1 specification is a hot mess. It still very explicitly says "3.0" which either needs to change or be clarified. Also, we say:

XProc 3.0 takes a draconian approach to versioning. It is a static error (err:XS0060) if the processor encounters an explicit request for a version of the language other than “3.0”.

What are we doing about that? I think we could say:

  1. 3.1 doesn't change the version of pipeline documents, it's a minor revision, you must still use "3.0"
  2. Or we could say that "3.1" is allowed
  3. Or we could say that "3.1" is required.

I don't think option 3 is a good idea. I could live with 1 or 2. I'd want to make it implementation defined, however, if a 3.1 processor must handle 3.0 pipelines in some backwards compatible way (using the old, 3.0 library declarations for example). I'm not eager to do that.

xatapult commented 3 weeks ago

From a consistency perspective, option 3 would be the best! Why isn't that a good idea? Because its hard to implement? I can understand that it's a nuisance to create an XProc processor that must support both...

I think we should at least allow 3.1, so option 2. Whether (if we don't do option 3) version="3.0" actually does 3.1 could be implementation defined, yes. Still, it will be confusing.

ndw commented 3 weeks ago

There are only a very few, small changes between 3.0 and 3.1. I don't think you're suggesting that a 3.1 processor should reject, out of hand, any pipeline labeled 3.0. So you must be suggesting that a 3.1 processor should also handle 3.0 pipelines. But then we need to define rules for what it means if a 3.0 pipeline imports a 3.1 step, and vice versa. It's impractical to have different declarations in scope for steps in a 3.0 pipeline vs steps in a 3.1 pipeline. It's not impossible but it is absolutely not worth the (significant, IMHO) effort that would be required.

I think it's easier to say that a 3.1 processor may load 3.0 pipelines and then pretend they were labeled 3.1. But if you're going to do that, would it be better to just leave them all labeled "3.0"?