Perhaps the penultimate XProc draft

Volume 12, Issue 18; 28 May 2009; last modified 08 Oct 2010

Today, the XML Processing Model Working Group published a new working draft. Not the very last working draft, but possibly very close.

For the past few months, the XML Processing Model Working Group has been busily resolving issues raised during the CR. So busy with XProc, in fact, that we forgot about our heartbeat requirement.

Today, we published a new working draft of XProc: An XML Pipeline Language. In addition to editorial improvements and clarifications, this draft contains a small number of significant changes:

  1. Changed p:choose and p:try. An output port produces a sequence if that port produces a sequence in any subpipeline.

  2. Changed p:error. Added primary output port result.

Taken together, these two changes make it much easier for pipeline authors to write p:choose steps where one of the branches uses a p:error.

  1. Changed p:exec. Added arg-separator, path-separator, and failure-threshold. Input can be zero or one document only. Added support for a result code.

Implementor experience revealed that our design for p:exec was insufficient. These changes fix problems with platform-specific path separators and dealing with arguments that contain spaces.

  1. Clarified p:http-request. Interaction with HTTP redirects and cookies is now explicit; the interaction of media types and serialization, several aspects of multipart messages, and a number of other areas have been clarified as well.

The p:http-request step was the subject of a lot of discussion. We made quite a few changes, almost exclusively clarifications.

  1. Clarified the interpretation of base URIs and the xml:base attribute.

This last change clarifies that the inherent base URI of a node can exist independent of an xml:base attribute. In particular, removing the xml:base attribute does not change the inherent base URI. (Though adding one does change the base URI, of course, so perhaps “independent” wasn't exactly the right word.)

We're almost done

The bottom line is that we really are almost finished. The test suite still needs to be fleshed out, and our implementors need to get to complete coverage, but I think that language evolution is coming to an end.

Ironically, in the time between requesting publication of today's draft and today, the WG identified and corrected one more issue. We added a p:value-available() function to allow pipeline authors to identify options that have no specified value.

Clearly, we can't absolutely promise nothing else will change, but the chair is setting the bar pretty high.