XProc Implementation

Volume 10, Issue 33; 18 Apr 2007; last modified 08 Oct 2010

In the intervening months since I first mentioned my plans to implement XProc, I've ripped it apart and started over twice. Third time, it seems, really is a charm.

When last I reported success with my XProc implementation, it had made the smallest of baby steps. Almost a year later, almost a year to the day, in fact, my implementation is starting to feel pretty solid.

When I say “my implementation”, I mean my current implementation. It bears nothing but broad conceptual similarity to my first implementation and little beyond that to my second. Developing large, complex software applications is a skill. One lets a skill lie fallow at his or her own peril. The realization that I was out of practice was unpleasant and sobering.

My current implementation supports all of the core language steps except p:viewport (that's p:pipeline, p:for-each, p:choose, p:group, p:try, and p:catch) and a smattering of the standard library (p:identity, p:load, p:xinclude, p:xslt, and p:xslt2). I've also implemented a few components of my own (px:diffmk, px:debug, and px:equal).

I'm going through the internal processes required to release open sorce code. It's a process no doubt, but so far it's all been smooth sailing. With a little luck, there'll be something you can play with in a week or three.

In the meantime, I'm starting to collect pipelines for the test suite and there are plenty of loose ends and other components to implement. Oh, and documentation to write of course.


I'm looking forward to playing with your implementation and reading the code, Norm, as I haven't been able to really grok all the nuances of the spec w/o an implementation.

Thanks for your work.

—Posted by Keith Fahlgren on 19 Apr 2007 @ 12:13 UTC #

Heh, I just finished reading the spec a couple of days ago, and I have been looking around for an implementation. I'd really like to try it out when it's ready. Let me know if you want any help with anything - one thing I'd like to see is <p:validate-xml-schema> and <p:validate-relax-ng> - and then of course <p:xquery> would be nice, and well, all of the rest too :)

—Posted by Dustin Whitney on 19 Apr 2007 @ 06:03 UTC #

I believe p:viewport now works. Except that I realize I've overlooked a buffering issue in both p:viewport and p:for-each.

—Posted by Norman Walsh on 19 Apr 2007 @ 05:58 UTC #