XSLT 3.0 testbed

Inasmuch as few people yet have much (or any) experience using XSLT 3.0 on more than toy examples, https://github.com/MenteaXML/xslt3testbed is a public, medium-sized XSLT 3.0 project where people could try out new XSLT 3.0 features on the transformations to (X)HTML(5) and XSL-FO that are what we do most often and, along the way, maybe come up with new design patterns for doing transformations using the higher-order functions, partial function application, and other goodies that XSLT 3.0 gives us.

There’s undoubtedly many things to try out, but a starter list of things to look at includes:

  • How will XSLT 3.0 features make it easier to:
    • Customise the output?
    • Modularise stylesheets?
    • Re-use modules between HTML and XSL-FO output?
  • Will higher-order functions, anonymous function, partial function application, and/or dynamic XPath evaluation improve upon xsl:attribute-set?

The XSLT 3.0 testbed stylesheets are derived from the XSLT 1.0 “NISO Journal Article Tag Suite (JATS) version 1.0” stylesheets by the National Library of Medicine (NLM) available from https://github.com/NCBITools/JATSPreviewStylesheets.

The JATS preview stylesheets made a good place to start since:

  • JATS is in wide use as the medium of exchange, and of archiving, for published scientific journal articles (and more)
  • It has the Goldilocks factor of not being too large (it’s not as large as DocBook or TEI) nor too small (it’s also not a toy)
  • There’s lots of sample data available
  • There’s existing XSLT 1.0 stylesheets
  • The existing stylesheets are in the public domain
  • There’s a quick win in just adding XSLT 2.0-isms to the XSLT 1.0 stylesheets


Results to work towards:

  • Trial – and make prior art for – different techniques for using XSLT 3.0
  • Get an early start for developing the patterns and idioms for using XSLT 3.0 that many of us will be using for years to come
  • Standalone XSLT 3.0 xsl:package for transforming XHTML tables to XSL-FO and/or HTML
    • xsl:package is new in XSLT 3.0
    • (X)HTML tables are used with many document types
    • A stable, reusable module for formatting tables will be a good thing


Possible results to not work towards or to actively work against:

  • The single best way of doing anything
    • Since this is a testbed it’s okay for it to try different ways of achieving the same result
  • The definitive XSLT 3.0 testbed
    • This project is on GitHub because it’s easy to fork Git projects and develop your own flavour of them
    • Pull requests are encouraged, but if you want to make your own version of this, that’s more than fine, too
  • Complete stylesheets for all of JATS
    • JATS gives the work a focus, but it isn’t the focus of the work
    • The original XSLT 1.0 stylesheets don’t cover all of JATS to begin with


This work is in the public domain and may be reproduced, published or otherwise used without the permission of Mentea or of the National Library of Medicine (NLM), and neither the GitHub project nor Mentea has any affiliation with NLM.