XProc Last Call!

Volume 10, Issue 94; 21 Sep 2007; last modified 08 Oct 2010

The XML Processing Model Working Group has published XProc: An XML Pipeline Language as a Last Call Working Draft!

While I was somewhere over the Atlantic yesterday, winging my way home, XProc: An XML Pipeline Language was published as a Last Call Working Draft. What that means is, we (the Working Group) think we're done! In the absence of comments to the contrary, we're going to assume that you think we're done too. In other words, if you've been waiting until the last minute to review the specification, consider this minute the last.

Looking back to the preceding working draft, we've made a lot of improvements to the specification, I think. Unfortunately, the extent of the editorial improvements means that we can't produce a useful “revision markup” version from the previous draft.

Two fairly deep technical issues held us up for several weeks right at the end: managing namespace bindings and namespace fixup on output documents. (Namespaces turned out to be complex and subtle, quelle surprise!)

The trickiest issue with namespaces in XProc is managing the namespace context correctly on options and parameters. A QName, defined on an option in one pipeline might be passed to another pipeline where it's used in the context of a document read from a URI. The relevant namespace bindings might be different in all three places, so some care must be exercised to make sure that the step can find the right bindings when it needs them.

Namespace fixup comes into play because some steps produce synthetic infosets (that is, they construct infosets programmatically, ones that didn't result from parsing a document). Consider p:unwrap; unwrap removes an element but leaves the nodes that were the children of that element in the document. It's possible that removing a wrapper will remove namespace declarations that have to be propagated across the children if the document is ever to be serialized such that it can be reconstructed by parsing.

Beyond those issues, we wrestled a bit with the way context and size are defined in steps that perform iteration. That was tricky too, but I think we got it right in the end.

We declared a MIME type (application/xproc+xml) for XProc documents and a fragment identifier syntax that makes it possible to point to any step in a pipeline.

There are a few new step types. I predict that we'll get a fair number of comments of the form “please add a step that does some task.” I can't think of any litmus test for deciding which ones are accepted and which ones aren't. It'll just come down to the consensus of the Working Group.

I have registered exproc.org with a plan to follow the model of exslt.org. Hopefully that will help implementors develop an interoperable library of steps outside the specification.

I think the Working Group has done a great job. We've got a solid spec that's already been implemented (at least mostly) a few times. Full speed ahead!

You have until October 24, 2007 to submit your last call comments to the usual place. To the extent that it's practical, please send one message per comment instead of lumping all your comments into one message. That greatly simplifies the task of tracking the status of comments.