Skip to content
Testbed for trying out XSLT 3.0 techniques
Branch: master
Clone or download
Tony Graham
Latest commit 5fe8d52 Feb 12, 2014


Testbed for trying out XSLT 3.0 ( techniques.

Since few people yet have much (or any) experience using XSLT 3.0 on more than toy examples, this 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.

JATS Preview Stylesheets

The XSLT 3.0 testbed stylesheets are derived from the XSLT 1.0 "NISO Journal Article Tag Suite (JATS) version 1.0" stylesheets from

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


  • 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


  • 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


The idea is to eventually handle the following scenarios:

  • Transform JATS to (X)HTML(5) for display/EPUB/print
  • With and without display of metadata
  • Transform JATS to XSL-FO for pagination
  • Single column
  • Two column
  • With and without presentation of metadata


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?


  • LICENSE - Just so you know that it's public domain
  • - This file
  • fo - XSL-FO files generated from XML in xml
  • html - HTML filse generated from XML in xml
  • jats - Original JATS processing files, included for reference
  • xml - XML source files. Each source file and any associated graphics, etc., is in a separate subdirectory
  • xslt - XSLT 3.0 stylesheets


  • The National Library of Medicine (NLM) published the original "NISO Journal Article Tag Suite (JATS) version 1.0" stylesheets, but neither this project nor Mentea has any affiliation with NLM
  • Mentea ( started the testbed.
  • Collaborators and contributors will be acknowledged here, too


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).

Forks are encouraged (but so are pull requests).


For the "NISO Journal Article Tag Suite (JATS) version 1.0" stylesheets, NML request only that the NLM is cited as the source of the work.

You can’t perform that action at this time.