<?xml-stylesheet href="../make-menu.xsl?cache=20260710" type="text/xsl"?>
<html>
    <head>
        <this-is section="technology" page="publications" subpage=""></this-is>
        <title>Saxonica: Publications</title>
        <meta name="title" content="Saxonica: Publications" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="description" content="contains introduction to XML, XSLT and XQuery, with links to FAQ details of publications, Dr.Michael Kay’s Saxon diaries blog" />
        <meta name="keywords" content="XML, XSLT, XQUERY, PUBLICATIONS, W3C" />
        <meta name="coverage" content="Worldwide" />
        <meta name="copyright" content="Copyright Saxonica Ltd" />
        <meta name="robots" content="index, follow" />
    </head>
    <body class="main">
        <h1>Publications and presentations</h1>
        <div id="fixed-aside">
            <h2>On this page:</h2>
            <ul>
                <li>
                    <a href="#books" class="title">Books</a>
                </li>
                <li>
                    <a href="#podcasts" class="title">Podcasts</a>
                </li>
                <li>
                    <a href="#papers" class="title">Published papers and articles, and presentations</a>
                </li>
                <li>
                    <a href="#stylus" class="title">Articles written for Stylus Studio</a>
                </li>
                <li>
                    <a href="#demos" class="title">Demonstrations</a>
                </li>
            </ul>
        </div>
        <h2>Blog</h2>
        <p>The <a href="https://blog.saxonica.com/" class="bodylink"
            target="_blank">Saxonica blogs</a> contain in-depth entries about a variety of
            topics relating to the current development of Saxon.</p>
        <a id="books" class="anchor"></a>
        <h2>Books</h2>
        <p><i>XSLT 2.0 Programmer's Reference 4th edition</i> by Michael Kay, published by Wrox
            Press. This book is widely recognized as the authoritative reference on the XSLT 2.0
            language, second only to the W3C specification itself. It covers every feature of the
            language comprehensively, while at the same time explaining the concepts behind the
            language design, and giving many examples of practical stylesheets to illustrate each
            language feature.</p>
        <blockquote>
            <p>Michael Kay's XSLT 2.0 and XPath 2.0 (for XML, XSLT, and XPath) is some of the best
                money I've ever spent on XML-technology-related documentation - it is a fantastic
                piece of work.</p>
            <p class="align-right"><i>&#8212; Bridger Dyson-Smith, posting on xsl-list, 2 August
                    2014</i></p>
        </blockquote>
        <table>
            <tr>
                <td>
                    <img src="../img/XSLT-XPath-book.jpg" />
                </td>
                <td><a href="https://www.amazon.com/exec/obidos/ASIN/0470192747" target="_blank"
                        class="bodylink">Find it on amazon.com</a></td>
            </tr>
        </table>
        <p>Previous editions</p>
        <ul>
            <li>The <b>third edition</b> was published in two separate volumes, covering XSLT 2.0
                and XPath 2.0 separately. This edition was produced before the final specifications
                were ratified by W3C, so there are some inaccuracies. The format (split into two
                volumes) was not especially popular with readers, especially as many made the
                mistake of buying the XSLT volume on its own, without realising that it relied
                heavily on the reader also having access to the XPath book. Navigation in the book
                was also difficult because of the absence of running heads for the alphabetical
                chapters. The fourth edition corrects all these problems, and has received a much
                more enthusiastic reception. </li>
            <li>The <b>second edition</b> remains in print, and is useful as the definitive
                reference to the XSLT 1.0 language (though it does include some features from the
                draft XSLT 1.1 specification, which W3C abandoned just before the book went to
                print. </li>
            <li>The <b>first edition</b> was published in April 2000, very soon after the XSLT 1.0
                specification was ratified. It quickly established itself as the definitive guide to
                the language and played a significant part in ensuring the rapid and successful
                adoption of XSLT by the user community. </li>
        </ul>
        <p>Also available:</p>
        <p>
            <i>XQuery from the Experts: A Guide to the W3C XML Query Language</i>
            <a href="https://www.amazon.com/exec/obidos/ASIN/0321180607" target="_blank"
                class="bodylink">https://www.amazon.com/exec/obidos/ASIN/0321180607</a>
        </p>
        <p>Eight chapters by members of W3C's Query Working Group provide an overview of XQuery
            designed to be of interest to programmers at every skill level. Coverage ranges from
            strictly technical subjects to historical essays on the language's ancestry and the
            process behind XQuery's design. The book presents its material in both tutorial and
            reference form.</p>
        <p>Michael Kay's chapter provides a high-level comparison of XQuery and XSLT, looking both
            at the differences between the two languages and at their similarities.</p>
        <blockquote>
            <p>Chapter Three is especially helpful for understanding the similarities and
                differences between XQuery, XPath and XSLT. To really understand where XQuery fits,
                you must understand this interrelationship. Not only does Mr. Kay do a great job
                explaining that, he actually makes it fun to read.</p>
            <p class="align-right"><i>&#8212; A quote from a reader's review</i></p>
        </blockquote>
        <a href="#top" class="top-of-page"><p>Return to top of page</p></a>
        <a id="podcasts" class="anchor"></a>
        <h2>Podcasts</h2>
        <p>In January 2022, Michael Kay was interviewed by Yegor Bugayenko for the Shift-M podcast. They
            discussed the history and the future of XSLT, the secrets of the Saxonica business, and software
            development in general. The <a href="https://www.youtube.com/watch?v=2Zt9oJtFKGw" target="_blank"
                class="bodylink">podcast video</a> is available on YouTube.</p>
        
        <a href="#top" class="top-of-page"><p>Return to top of page</p></a>
        <a id="papers" class="anchor"></a>
        <h2>Published papers and articles, and presentations</h2>
        
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2026mp.pdf" target="_blank"
            class="bodylink">The story of Gerald Cinamon's germandesigners.net: Transforming a
            complex MS Word manuscript into an interactive web experience</a></h3>
        <p>Matt Patterson. Presented at XML Prague 2026. </p>
        <p>The renowned Graphic Designer and Author Gerald Cinamon wrote a comprehensive biographical
            dictionary about graphic designers working in Germany during the Nazi regime, "German graphic
            designers during the Hitler period". The book was written as a manuscript in Microsoft Word,
            containing over 900 entries across several separate files.</p>
        <p>When turning the manuscript into a viable print-published book seemed unlikely, I was approached
            about whether it would be possible to publish it as a website.</p>
        <p>This is the story of how we were able to combine the author's Word files, metadata annotations in
            Word, and XSLT to create well-structured, richly annotated markup that could, in turn, be
            transformed into a work of Hypertext.</p>
        <p><i>Matt Patterson. "The story of Gerald Cinamon's germandesigners.net". XML Prague 2026.
            https://archive.xmlprague.cz/2026/files/xmlprague-2026-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2026mhk.pdf" target="_blank"
            class="bodylink">Implementing Maps for XPath 4.0</a></h3>
        <p>Michael Kay. Presented at XML Prague 2026. </p>
        <p>The main purpose of this paper is to describe how the Saxon product implements maps as currently
            proposed for the 4.0 versions of XSLT, XPath, and XQuery. The specifications introduce new
            features that create a number of challenges. In describing the implementation we also have to
            introduce these new features.</p>
        <p><i>Michael Kay. "Implementing Maps for XPath 4.0". XML Prague 2026.
            https://archive.xmlprague.cz/2026/files/xmlprague-2026-proceedings.pdf</i></p>
        <h3><a
            href="https://balisage.net/Proceedings/vol30/html/NTovey-Walsh01/BalisageVol30-NTovey-Walsh01.html"
            target="_blank" class="bodylink">Pipe cleaner: ensuring the correctness of XProc pipelines</a></h3>
        <p>Norm Tovey-Walsh. Presented at Balisage 2025.</p>
        <p>As users begin to explore using XProc 3.x pipelines, and migrate existing 1.0 pipelines
            to 3.x, they naturally have questions about how to tell if a pipeline will work and will
            produce the correct result. This breaks down, broadly, into four categories: is the
            pipeline written correctly: is it syntactically valid; is the pipeline written
            correctly: is logically valid; does it do what the author intended: does it produce the
            correct results; and if it doesn’t, how can the author figure out why?</p>
        <p><i>Tovey-Walsh, Norm. "Pipe cleaner: ensuring the correctness of XProc pipelines."
            Presented at Balisage: The Markup Conference 2025, Washington, DC, August 4 - 8, 2025.
            In Proceedings of Balisage: The Markup Conference 2025. Balisage Series on Markup
            Technologies, vol. 30 (2025). https://doi.org/10.4242/BalisageVol30.NTovey-Walsh01.</i></p>
        <h3><a
            href="https://balisage.net/Proceedings/vol30/html/Lockett01/BalisageVol30-Lockett01.html"
            target="_blank" class="bodylink">SaxonJS 3 coding improvements</a>
            <a target="_blank" class="bodylink"
                href="https://www.saxonica.com/slides/balisage.2025.lockett.saxonjs3-coding-improvements.slides.pdf"
                >[+slides]</a></h3>
        <p>Debbie Lockett. Presented at Balisage 2025.</p>
        <p>Many of the new SaxonJS 3 features have been developed in response to issues that were
            originally raised by SaxonJS users. "Here's a problem I'm trying to solve. This is what
            I can do. But what about X? How can I do it with SaxonJS?"</p>
        <p>Sometimes the SaxonJS 2 solutions may be somewhat unsatisfactory - yes we can code that;
            but the code isn't especially "pretty", or intuitive, or easy to write... or perhaps
            there remain limitations...</p>
        <p>In some cases, there was actually a limitation with the SaxonJS 2 processor - for
            instance perhaps it is not possible to do what the user wants only with XSLT and IXSL,
            but instead integrating a JavaScript solution is required. In other cases, the SaxonJS 2
            solution is perhaps just rather complicated, and requires putting features together in
            an unfamiliar way.</p>
        <p>In this paper we will look at how new SaxonJS 3 IXSL features can be used to write much
            cleaner solutions for some problems which were tricky with SaxonJS 2.</p>
        <p><i>Lockett, Debbie. "SaxonJS 3 coding improvements." Presented at Balisage: The Markup
            Conference 2025, Washington, DC, August 4 - 8, 2025. In Proceedings of Balisage: The
            Markup Conference 2025. Balisage Series on Markup Technologies, vol. 30 (2025).
            https://doi.org/10.4242/BalisageVol30.Lockett01.</i></p>
        <h3><a
            href="https://balisage.net/Proceedings/vol30/html/Kay01/BalisageVol30-Kay01.html"
            target="_blank" class="bodylink">JNodes: a New Model for Navigating JSON Trees</a></h3>
        <p>Michael Kay. Presented at Balisage 2025.</p>
        <p>A W3C Community Group has been formed to develop proposed specifications for 4.0 versions
            of XSLT, XPath, and XQuery. One of the aims is to provide improved capabilities for
            processing of JSON, and the associated constructs in the data model such as maps and
            arrays. This paper describes a new capability that has just been added to the draft
            specification, allowing navigation of trees of maps and arrays using the familiar path
            expressions of XPath 1.0, largely unchanged in syntax.</p>
        <p><i>Kay, Michael. "JNodes: a New Model for Navigating JSON Trees." Presented at
            Balisage: The Markup Conference 2025, Washington, DC, August 4 - 8, 2025. In Proceedings
            of Balisage: The Markup Conference 2025. Balisage Series on Markup Technologies, vol. 30
            (2025). https://doi.org/10.4242/BalisageVol30.Kay01.</i></p>
        <h3><a target="_blank" class="bodylink"
            href="https://markupuk.org/webhelp/index.html#markupuk2025.html" 
            >Surfing the web with XProc</a></h3>
        <p>Norm Tovey-Walsh. Presented at Markup UK 2025. </p>
        <p>XProc 3.1 comes with many great features for surfing the web. The <code>p:document</code>
            instruction will load XML, HTML, or JSON documents. The <code>p:http-request</code> step
            allows a pipeline author to interact with web services. It supports many HTTP methods,
            query parameters, content negotiation, and single and multipart request and response
            bodies.</p>
        <p>But what about web applications? Web pages that rely on client-side processing, with XSLT
            using SaxonJS, for example, or just plain old Javascript, present a special challenge.
            What can we do about that?</p>
        <h3><a target="_blank" class="bodylink"
            href="https://markupuk.org/webhelp/index.html#ar04.html" 
            >Processing JSON with Template Rules</a></h3>
        <p>Michael Kay. Presented at Markup UK 2025. </p>
        <p>This paper describes a case study exploring how effective the current design of XSLT 4.0
            is in processing JSON files with a recursive structure, using the rule-based recursive
            descent design pattern familiar to XSLT users. It explores the conversion of an existing
            non-trivial XSLT-based application (a transpiler that converts Java source code to C#)
            to see how well it would be able to cope if the input were JSON rather than XML. The
            exercise has led to a number of changes in the proposed features of XSLT 4.0, and
            identifies other areas where the design could be further improved.</p>
        <h3><a target="_blank" class="bodylink"
            href="https://www.saxonica.com/slides/balisage.2024.tovey-walsh.qt4cg-update.slides.pdf" 
            >QT4CG update</a></h3>
        <p>Norm Tovey-Walsh. Presented at Balisage 2024. </p>
        <p>The <a href="https://qt4cg.org/" target="_blank" class="bodylink">XQuery and XSLT
            Extensions Community Group</a>, known informally as "QT4CG", has been continuing
            development of version 4.0 of XPath, XQuery, XSLT, and related specifications. This
            presentation offered a very brief overview of what has changed recently.</p>
        <h3><a target="_blank" class="bodylink"
            href="https://www.saxonica.com/slides/balisage.2024.tovey-walsh-lockett.saxonjs3.slides.pdf" 
            >SaxonJS 3.0: Major new functionality!</a></h3>
        <p>Norm Tovey-Walsh and Debbie Lockett. Sponsor Presentation at Balisage 2024. </p>
        <p>SaxonJS is an XSLT 3.0 processor, written mainly in JavaScript but partly in XSLT, that
            is available for two JavaScript environments: the browser and Node.js. Saxonica is
            planning a major release (SaxonJS 3.0) this summer, which introduces a new API for
            calling JavaScript functions from XPath, and for calling XSLT functions from JavaScript.
            This API means, for example, that a SaxonJS application can directly access JavaScript
            APIs from XPath and that JavaScript APIs can make calls to XSLT functions.</p>
        <p>In addition, SaxonJS 3.0 expands mechanisms for handling asynchrony, a critical feature
            of well-behaved JavaScript applications. The JavaScript engine has a single thread and
            demands that applications manage access to that thread in a responsible way by releasing
            control of the thread whenever they do something that might block processing (for
            example, disk I/O or web service requests). SaxonJS has long supported asynchronous
            evaluation of templates through <code>ixsl:schedule-action</code>. But in 2024,
            "promises" have become the standard mechanism for managing JavaScript asynchrony. A
            promise associates a request that the JavaScript environment can perform in the
            background with the code (the function) that should eventually run when the request
            completes. SaxonJS 3.0 adds support for asynchrony through a set of functions that allow
            XSLT programmers to create, manage, and respond to promises.</p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2024ond.pdf" target="_blank"
            class="bodylink">Bridging XDM types in multiple native type systems</a>
            <a target="_blank" class="bodylink"
                href="https://www.saxonica.com/slides/xmlprague.2024.delpratt-patterson.bridging-xdm-types.slides.pdf"
                >[+slides]</a></h3>
        <p>O'Neil Delpratt and Matt Patterson. Presented at XML Prague 2024. </p>
        <p>We explore the relationship of XDM types and the native types in the host language of an
            XML processing system. In multi-tier language systems such as SaxonC we find that there
            is not always that one size fits all approach to representing data of a native type to
            what we require in the XDM type system. Secondly, we look at the complexities of
            handling numbers and strings; it seems simple to represent them across languages and
            within the XDM system, but this we found can get cumbersome and complicated. Thirdly,
            we consider the more complex XDM Map, and how issues of implicit and explicit type
            conversion meet issues of XDM and local idiom. Lastly, we dive into the use case of
            handling XDM Node objects such as traversing, cross language memory management (i.e.
            from Java to C++ and vice versa). On top of that we discuss how we add further
            complexity in layering C++ extension to support APIs in Python and PHP which operate in
            a managed code environment again.</p>
        <p><i>O'Neil Delpratt and Matt Patterson. "Bridging XDM types in multiple native type
            systems". XML Prague 2024.
            https://archive.xmlprague.cz/2024/files/xmlprague-2024-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2024mhk.pdf" target="_blank"
            class="bodylink">Navigating and Updating Trees of Maps and Arrays</a></h3>
        <p>Michael Kay. Presented at XML Prague 2024. </p>
        <p>This paper describes new features proposed for the 4.0 versions of XSLT, XPath, and
            XQuery, designed to make it easier and more efficient to query and update trees of maps
            and arrays, such as those typically derived by parsing JSON.</p>
        <p><i>Michael Kay. "Navigating and Updating Trees of Maps and Arrays". XML Prague 2024.
            https://archive.xmlprague.cz/2024/files/xmlprague-2024-proceedings.pdf</i></p>
        <h3><a target="_blank" class="bodylink"
            href="https://www.saxonica.com/slides/da.2023.lockett.asynchrony-saxonjs.slides.pdf" 
            >Asynchrony with Promises in SaxonJS</a></h3>
        <p>Debbie Lockett. Presented at Declarative Amsterdam 2023. </p>
        <p>One of the main developments for the next major release of SaxonJS is a redesign of the
            mechanisms for asynchronous processing from XSLT. The new conceptual design, and
            implementation, is closely aligned with JavaScript promises, making it more accessible
            to users familiar with the JavaScript processing model. A new extension instruction
            ixsl:promise can be used in the place of the existing instruction ixsl:schedule-action
            to initiate an asynchronous process, and specify its handling on completion or failure.
            A number of new extension functions are provided to create promises (e.g. for
            asynchronous resource fetches and HTTP requests), and to enable these to be chained and
            processed concurrently. In this presentation we will provide an introduction to IXSL
            promises with examples and demonstrations in anticipation of the release of SaxonJS 3.</p>
        <h3><a target="_blank" class="bodylink"
            href="https://www.saxonica.com/slides/da.2023.tovey-walsh.qt4-status-update.slides.pdf" 
            >QT4 status update</a></h3>
        <p>Norm Tovey-Walsh. Presented at Declarative Amsterdam 2023. </p>
        <p>The <a href="https://qt4cg.org/" target="_blank" class="bodylink">XSLT Extensions
            Community Group</a>, known informally as "QT4CG", has been working on new editions of
            XPath, XQuery, XSLT, and related specifications for just over a year. This presentation
            will provide a brief survey of how much progress we've made, how much more we might
            imagine remains to be done, and some of the exciting new functionality that will be
            available in "4.0".</p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol28/html/Kay01/BalisageVol28-Kay01.html"
            target="_blank" class="bodylink">Schema-Aware Conversion of XML to JSON</a></h3>
        <p>Michael Kay. Presented at Balisage 2023, Washington DC.</p>
        <p>A W3C Community Group has been formed to develop proposed specifications for 4.0 versions of XSLT,
            XPath, and XQuery. One of the aims is to provide improved capabilities for processing of JSON, and
            the associated constructs in the data model such as maps and arrays. One of the development
            threads is conversion between XML, JSON, and other data formats such as HTML and CSV. This paper
            looks at one particular aspect of the proposals, a new function for XML-to-JSON conversion.</p>
        <p><i>Kay, Michael. "Schema-Aware Conversion of XML to JSON." Presented at
            Balisage: The Markup Conference 2023, Washington, DC, July 31 - August 4, 2023. In Proceedings
            of Balisage: The Markup Conference 2023. Balisage Series on Markup Technologies, vol. 28
            (2023). https://doi.org/10.4242/BalisageVol28.Kay01.</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol28/html/Tovey-Walsh01/BalisageVol28-Tovey-Walsh01.html"
            target="_blank" class="bodylink">Ambiguity in iXML: And How to Control It</a></h3>
        <p>Norm Tovey-Walsh. Presented at Balisage 2023, Washington DC.</p>
        <p>Humans are really good at resolving ambiguities. Our senses are trained for it: is that pattern of
            shadows in the forest dappled sunlight, or a tiger waiting to pounce? Our minds quickly and almost
            effortlessly adjust interpretations based on contextual clues that change over time. Parsers? Not
            so much. Our everyday languages and formats: XML, JSON, JavaScript, Java, etc. are rigorously
            defined to avoid ambiguity: you must put a quote here, a semicolon there. (Most) parsers reject
            anything that cannot be unambiguously identified within a small textual window. Invisible XML is
            an uncommon format in that it doesn’t reject grammars or parses that are ambiguous. That doesn’t
            mean ambiguity is a good thing, and it doesn’t mean authors wouldn’t like to control it.</p>
        <p><i>Tovey-Walsh, Norm. "Ambiguity in iXML: And How to Control It." Presented at
            Balisage: The Markup Conference 2023, Washington, DC, July 31 - August 4, 2023. In Proceedings
            of Balisage: The Markup Conference 2023. Balisage Series on Markup Technologies, vol. 28
            (2023). https://doi.org/10.4242/BalisageVol28.Tovey-Walsh01.</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol27/html/Kay01/BalisageVol27-Kay01.html"
            target="_blank" class="bodylink">XSLT Extensions for JSON Processing</a></h3>
        <p>Michael Kay. Presented at Balisage 2022, Washington DC.</p>
        <p>XSLT 3.0 contains basic facilities for transforming JSON as well as XML. But looking at
            actual use cases, it's clear that some things are a lot harder than they need to be. How
            could we extend XSLT to make JSON transformations as easy as XML transformations, using
            the same rule-based tree-walking paradigm? Some of these extensions are already
            implemented in current Saxon releases, so we are starting to get user feedback.</p>
        <p><i>Kay, Michael. "XSLT Extensions for JSON Processing." Presented at
            Balisage: The Markup Conference 2022, Washington, DC, August 1 - 5, 2022. In Proceedings
            of Balisage: The Markup Conference 2022. Balisage Series on Markup Technologies, vol. 27
            (2022). https://doi.org/10.4242/BalisageVol27.Kay01.</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol27/html/Sperberg-McQueen01/BalisageVol27-Sperberg-McQueen01.html"
            target="_blank" class="bodylink">Designing for change: Pragmas in Invisible XML as an
            extensibility mechanism</a></h3>
        <p>Norm Tovey-Walsh, Tomos Hillman, C. M. Sperberg-McQueen and Bethan Tovey-Walsh. Presented
            at Balisage 2022, Washington DC.</p>
        <p>Invisible XML (ixml) is a method for treating non-XML documents as if they were XML. The
            1.0 specification for Invisible XML was announced in June of this year. No technology
            foresees all of its use cases, especially in 1.0. How can ixml allow experimentation,
            and channel experimentation in useful ways, to allow ideas to be expressed in ixml
            grammars that go beyond what is foreseen, without compromising interoperability or the
            value of strict conformance to the specification?</p>
        <p>Many programming languages (C, JavaScript, Pascal, XQuery, etc.) address this question
            with pragmas. A pragma is a semi-formal way to instruct a processor/compiler/interpreter
            how it should operate. Typical pragmas extend a specification but are not a part of it.
            We propose pragmas as an optional add-on to ixml to allow implementation of
            non-standardized functionality in a way that does not interfere with standard ixml
            processing. We describe our general framework for pragmas, some specific pragmas (to
            illustrate how pragmas can be used), and a few pragmatic implementations.</p>
        <p><i>Hillman, Tomos, C. M. Sperberg-McQueen, Bethan Tovey-Walsh and Norm Tovey-Walsh.
            "Designing for change: Pragmas in Invisible XML as an extensibility mechanism."
            Presented at Balisage: The Markup Conference 2022, Washington, DC, August 1 - 5, 2022.
            In Proceedings of Balisage: The Markup Conference 2022. Balisage Series on Markup
            Technologies, vol. 27 (2022).
            https://doi.org/10.4242/BalisageVol27.Sperberg-McQueen01.</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol27/html/Eccl01/BalisageVol27-Eccl01.html"
            target="_blank" class="bodylink">Invisible XML Coming into Focus: Status report from the
            community group</a></h3>
        <p>Norm Tovey-Walsh, Tomos Hillman, John Lumley, Steven Pemberton, C. M. Sperberg-McQueen
            and Bethan Tovey-Walsh. Presented at Balisage 2022, Washington DC.</p>
        <p>Invisible XML has had a long incubation process, but in the last year things have heated
            up. A W3C Community Group has been formed, the spec has been improved, and
            implementations have been released or are in various stages of development. This paper
            gives an overview of iXML in its stable version 1.0 form, with discussion of some of the
            design decisions that have shaped it, and accounts from implementors of their practical
            experiences with iXML.</p>
        <p><i>Hillman, Tomos, John Lumley, Steven Pemberton, C. M. Sperberg-McQueen, Bethan
            Tovey-Walsh and Norm Tovey-Walsh. "Invisible XML coming into focus: Status report from
            the community group." Presented at Balisage: The Markup Conference 2022, Washington, DC,
            August 1 - 5, 2022. In Proceedings of Balisage: The Markup Conference 2022. Balisage
            Series on Markup Technologies, vol. 27 (2022).
            https://doi.org/10.4242/BalisageVol27.Eccl01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2022mhk.pdf" target="_blank"
            class="bodylink">Expression Elaboration</a></h3>
        <p>Michael Kay. Presented at XML Prague 2022. </p>
        <p>This paper describes an approach to evaluation of expression-based languages such as XSLT,
        XQuery, and XPath, in which nodes on the expression tree output by the language parser are
        converted to lambda expressions in Java, JavaScript, or C#, with the aim of doing as much
        work as possible once only, in advance of the actual expression evaluation.</p>
        <p><i>Michael Kay. "Expression Elaboration". XML Prague 2022.
            https://archive.xmlprague.cz/2022/files/xmlprague-2022-proceedings.pdf</i></p>
        <h3><a target="_blank" class="bodylink"
            href="https://xmlresolver.org/presentations/2021/declarative-amsterdam/index.html" 
            >Features of a modern XML Resolver</a></h3>
        <p>Norm Tovey-Walsh. Presented at Declarative Amsterdam 2021. </p>
        <p>XML Resolvers are a core extension feature in XML parsers and other applications in the
            XML stack. They allow you to transparently satisfy requests for DTDs, schemas,
            stylesheet modules, etc., with local copies of those resources. This offers improvements
            in both performance and security. XML Resolver 3.0, available in Java and (soon!) C#,
            provides full support for the XML Catalogs standard and a broad range of features
            designed to make deploying and using catalog-based resolution faster and easier. This
            talk will highlight the new features of the resolver including:</p>
        <ul>
            <li>Dynamic catalog construction with caching.</li>
            <li>Automatically loading catalogs from extension modules (jar files or assemblies).</li>
            <li>Improved support for resources distributed in extension modules.</li>
            <li>Handling http: and https: entries transparently.</li>
            <li>Validation of catalog files.</li>
            <li>Namespace-based resource discovery by indirection through RDDL documents.</li>
        </ul>
        <h3><a target="_blank" class="bodylink"
            href="https://saxonica.github.io/SaxonJS-Tutorial-2021/presentation/" 
            >SaxonJS Tutorial</a></h3>
        <p>Norm Tovey-Walsh and Debbie Lockett. Presented at Declarative Amsterdam 2021. </p>
        <p>SaxonJS is an XSLT 3.0 processor written in JavaScript and XSLT. It offers all of the
            traditional declarative features of XSLT in any modern browser and, on the server side,
            in Node.js. This tutorial will explain how to setup and use SaxonJS. We'll cover the
            interactive extensions that make SaxonJS a powerful platform for developing
            browser-based applications. We'll also explore how to use it on Node.js for traditional
            server-side automation tasks. Participants will be guided through a series of hands-on
            sessions where they will experience first hand how easy and fun it is to build
            applications with SaxonJS.</p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol26/html/Kay01/BalisageVol26-Kay01.html"
            target="_blank" class="bodylink">ZenoString: A Data Structure for Processing XML Strings</a></h3>
        <p>Michael Kay. Presented at Balisage 2021, Washington DC.</p>
        <p>This paper describes a novel data structure for the representation of Unicode strings,
            designed to efficiently support the usage patterns that arise when processing XML using
            languages such as XSLT, XPath, and XQuery.</p>
        <p><i>Kay, Michael. "ZenoString: A Data Structure for Processing XML Strings." Presented at
            Balisage: The Markup Conference 2021, Washington, DC, August 2 - 6, 2021. In Proceedings
            of Balisage: The Markup Conference 2021. Balisage Series on Markup Technologies, vol. 26
            (2021). https://doi.org/10.4242/BalisageVol26.Kay01.</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol26/html/Walsh01/BalisageVol26-Walsh01.html"
            target="_blank" class="bodylink">Interactivity Three Ways</a></h3>
        <p>Norm Tovey-Walsh and Michael Sperberg-McQueen. Presented at Balisage 2021, Washington DC.</p>
        <p>One of the most obvious differences between documents physically printed on pages of
            paper and documents displayed on electronic devices is that the latter can be
            interactive in ways that the former cannot. More than 50 years ago, this is what
            convinced Ted Nelson and others that when used well computers would dramatically change
            our relation with text. What kinds of interactivity are possible, and to what extent
            interactivity adds value to a document, are challenging questions that require careful
            analysis.</p>
        <p>Deciding that some specific interactive feature would add value immediately raises a new
            challenge: how is that feature going to be realized? In this paper, we look at three
            different technologies that can be used to add interactivity to a document presented on
            the web: "plain old JavaScript", Saxon-JS, and XForms. We examine a specific feature and
            compare the differences between similar implementations across these three platforms.</p>
        <p><i>Walsh, Norman, and C. M. Sperberg-McQueen. "Interactivity Three Ways." Presented at
            Balisage: The Markup Conference 2021, Washington, DC, August 2 - 6, 2021. In Proceedings
            of Balisage: The Markup Conference 2021. Balisage Series on Markup Technologies, vol. 26
            (2021). https://doi.org/10.4242/BalisageVol26.Walsh01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/markupuk-2021mhk.pdf" target="_blank"
            class="bodylink">&lt;transpile from="Java" to="C#" via="XML" with="XSLT"/&gt;</a></h3>
        <p>Michael Kay. Presented at Markup UK 2021. </p>
        <p>This paper describes a project to convert a substantial piece of software (an XSLT
            processor, as it happens, but it could have been anything) from Java to C#, using an XML
            representation as the intermediate format, and using XSLT as the transformation language.</p>
        <p><i>Michael Kay. "&lt;transpile from="Java" to="C#" via="XML" with="XSLT"/&gt;". Markup UK 2021.
            https://markupuk.org/pdf/Markup-UK-2021-proceedings.pdf</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol25/html/Kay01/BalisageVol25-Kay01.html"
            target="_blank" class="bodylink">Asynchronous XSLT</a></h3>
        <p>Michael Kay. Presented at Balisage 2020, Washington DC.</p>
        <p>This paper describes a proposal for language extensions to XSLT 3.0, and to the XDM data
            model, to provide for asynchronous processing. The proposal is particularly motivated by
            the requirement for asynchronous retrieval of external resources on the Javascript
            platform (whether client-side or server-side), but other use cases for asynchronous
            processing, and other execution platforms, are also considered.</p>
        <p><i>Michael Kay. "Asynchronous XSLT" Presented at Balisage: The Markup Conference 2020,
            Washington, DC, July 27 - 31, 2020. In Proceedings of Balisage: The Markup Conference
            2020. Balisage Series on Markup Technologies, vol. 25 (2020).
            https://doi.org/10.4242/BalisageVol25.Kay01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2020mhk.pdf" target="_blank"
            class="bodylink">A Proposal for XSLT 4.0</a></h3>
        <p>Michael Kay. Presented at XML Prague 2020. </p>
        <p>This paper defines a set of proposed extensions to the XSLT 3.0 language, suitable for
            inclusion in version 4.0 of the language were that ever to be defined. The proposed
            features are described in sufficient detail to enable the functionality to be understood
            and assessed, but not in the microscopic detail needed for the eventual language
            specification. Brief motivation is given for each feature. The ideas have been collected
            by the author both from his own experience in using XSLT 3.0 to develop some sizable
            applications (such as an XSLT compiler), and also from feedback from users, reported
            either directly to Saxonica in support requests, or registered on internet forums such
            as StackOverflow.</p>
        <p><i>Michael Kay. "A Proposal for XSLT 4.0". XML Prague 2020.
            http://archive.xmlprague.cz/2020/files/xmlprague-2020-proceedings.pdf</i></p>
        <h3><a target="_blank" class="bodylink"
            href="https://www.saxonica.com/slides/da.2019.delpratt-lockett.implementing-xforms.slides.pdf" 
            >Implementing XForms using interactive XSLT 3.0</a></h3>
        <p>O'Neil Delpratt and Debbie Lockett. Presented at Declarative Amsterdam 2019. </p>
        <p>Saxon-Forms is a (currently) partial XForms implementation developed using Saxon-JS, an
            XSLT 3.0 run-time written purely in JavaScript. Designed for browsers the mechanics of
            the XForms implementation such as actions are implemented using 'interactive' XSLT 3.0
            extensions available with Saxon-JS, to update form data in the (X)HTML page, and handle
            user input using event handling templates.</p>
        <h3><a href="https://www.saxonica.com/papers/markupuk-2019jl.pdf" target="_blank"
            class="bodylink">&lt;Angle-brackets/&gt; on the Branch Line</a></h3>
        <p>John Lumley. Presented at Markup UK 2019. </p>
        <p>As a retirement 'hobby', somewhat removed from the computing milieu, the author has
            started building a model railway in his garden. Surveying the extant tools for designing
            such layouts and finding them not quite right, he started building a design tool
            himself, using the familiar technologies of XSLT3 and SVG executing in a browser,
            employing Saxon-JS as the processing platform. The results of this were demonstrated,
            with some success, at Markup UK in 2018. This paper describes the design of this tool in
            some detail, as well as developments since that demonstration.</p>
        <p><i>John Lumley. "&lt;Angle-brackets/&gt; on the Branch Line". Markup UK 2019.
            https://markupuk.org/Markup-UK-2019-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2019mhk.pdf" target="_blank"
            class="bodylink">An XSLT compiler written in XSLT: can it perform?</a></h3>
        <p>Michael Kay and John Lumley. Presented at XML Prague 2019. </p>
        <p>This paper discusses the implementation of an XSLT 3.0 compiler written in XSLT 3.0. XSLT
            is a language designed for transforming XML trees, and since the input and output of the
            compiler are both XML trees, compilation can be seen as a special case of the class of
            problems for which XSLT was designed. Nevertheless, the peculiar challenges of
            multi-phase compilation in a declarative language create performance challenges, and
            much of the paper is concerned with a discussion of how the performance requirements
            were met.</p>
        <p><i>Michael Kay and John Lumley. "An XSLT compiler written in XSLT: can it perform?". XML
            Prague 2019.
            http://archive.xmlprague.cz/2019/files/xmlprague-2019-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2019dcl.pdf" target="_blank"
            class="bodylink">Task Abstraction for XPath Derived Languages</a> 
            <a target="_blank" class="bodylink"
                href="https://evolvedbinary.slides.com/adamretter/task-abstraction-for-xpdls"
                >[+slides]</a></h3>
        <p>Debbie Lockett and Adam Retter. Presented at XML Prague 2019. </p>
        <p>XPDLs (XPath Derived Languages) such as XQuery and XSLT have been pushed beyond the
            envisaged scope of their designers. Perversions such as processing Binary Streams, File
            System Navigation, and Asynchronous Browser DOM Mutation have all been witnessed. Many
            of these novel applications of XPDLs intentionally incorporate non-sequential and/or
            concurrent evaluation and embrace side effects to achieve their purpose. To arrive at a
            solution for safely managing side effects and concurrent execution, this paper first
            surveys both the available XPDL vendor extensions and approaches offered in non-XPDLs,
            and then describes EXPath Tasks, a novel solution derived for the safe evaluation of
            side effects in XPDLs which respects both sequential and concurrent execution.</p>
        <p><i>Debbie Lockett and Adam Retter. "Task Abstraction for XPath Derived Languages".
            XML Prague 2019.
            http://archive.xmlprague.cz/2019/files/xmlprague-2019-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/markupuk-2018mhk.pdf" target="_blank"
            class="bodylink">An XSD 1.1 Schema Validator Written in XSLT 3.0</a></h3>
        <p>Michael Kay. Presented at Markup UK 2018. </p>
        <p>This paper presents a successfully completed project to write an XSD 1.1 validator using
            XSLT 3.0. There are several motivations for attempting this; the most immediate was the
            need for a schema validator to run in the browser, and given the existence of XSLT 3.0
            in the browser (in the form of Saxon-JS) writing the validator in XSLT 3.0 seems a more
            attractive choice than the alternative, of writing it in Javascript. The portability
            benefits of being able to do schema validation anywhere you can run XSLT 3.0 are an
            additional factor. Possibly too, wider availability of XSD 1.1 validators will encourage
            those who publish XML Schemas for common standard vocabularies to take advantage of the
            powerful features introduced in version 1.1 of the XSD standard. The second motivation
            was simply as a usability test of XSLT 3.0: this is a complex application, and it is
            useful to see whether XSLT 3.0 is up to the job.</p>
        <p><i>Michael Kay. "An XSD 1.1 Schema Validator Written in XSLT 3.0". Markup UK 2018.
            http://markupuk.org/2018/Markup-UK-2018-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2018ond.pdf" target="_blank"
            class="bodylink">Implementing XForms using interactive XSLT 3.0</a> 
            <a target="_blank" class="bodylink"
                href="https://www.saxonica.com/slides/xmlprague.2018.delpratt-lockett.implementing-xforms-using-ixslt3.slides.pdf"
                >[+slides]</a></h3>
        <p>O'Neil Delpratt and Debbie Lockett. Presented at XML Prague 2018. </p>
        <p>In this paper, we discuss our experiences in developing Saxon-Forms, a new partial XForms
            implementation for browsers using "interactive" XSLT 3.0, and suggest some benefits of
            this implementation over others. Firstly we describe the mechanics of the implementation
            - how XForms features such as actions are implemented using the interactive XSLT
            extensions available with Saxon-JS, to update form data in the (X)HTML page, and handle
            user input using event handling templates. Secondly we discuss how Saxon- Forms can be
            used, namely by integrating it into the client-side XSLT of a web application, and
            examples of the advantages of this architecture. As a motivation and use case we use
            Saxon-Forms in our in-house license tool application.</p>
        <p><i>O'Neil Delpratt and Debbie Lockett. "Implementing XForms using interactive XSLT 3.0".
            XML Prague 2018.
            http://archive.xmlprague.cz/2018/files/xmlprague-2018-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2018mhk.pdf" target="_blank"
            class="bodylink">XML Tree Models for Efficient Copy Operations</a></h3>
        <p>Michael Kay. Presented at XML Prague 2018. </p>
        <p>A large class of XML transformations involves making fairly small changes to a document.
            The functional nature of the XSLT and XQuery languages mean that data structures must be
            immutable, so these operations generally involve physically copying the whole document,
            including the parts that are unchanged, which is expensive in time and memory. Although
            efficient techniques are well known for avoiding these overheads with data structures
            such as maps, these techniques are difficult to apply to the XDM data model because of
            two closely-related features of that model: it exposes node identity (so a copy of a
            node is distinguishable from the original), and it allows navi- gation upwards in the
            tree (towards the root) as well as downwards. This paper proposes mechanisms to
            circumvent these difficulties.</p>
        <p><i>Michael Kay. "XML Tree Models for Efficient Copy Operations". XML Prague 2018.
            http://archive.xmlprague.cz/2018/files/xmlprague-2018-proceedings.pdf</i></p>
        <h3><a
            href="https://www.balisage.net/Proceedings/vol19/html/Lumley01/BalisageVol19-Lumley01.html"
            target="_blank" class="bodylink">Compiling XSLT3, in the browser, in itself</a></h3>
        <p>John Lumley. Presented at Balisage 2017, Washington DC.</p>
        <p>This paper describes the development of a compiler for XSLT 3.0 which can run directly in
            modern browsers. It exploits a virtual machine written in JavaScript, Saxon-JS, which
            interprets an execution plan for an XSLT transform, consuming source documents and
            interpolating the results into the displayed web page. Ordinarily these execution plans
            (Stylesheet Export File, SEF), which are written in XML, are generated offline by the
            Java-based Saxon-EE product. Saxon-JS has been extended to handle dynamic XPath
            evaluation, by adding an XPath parser and a compiler from the XPath parse tree to SEF.
            By constructing an XSLT transform that consumes an XSLT stylesheet and creates an
            appropriate SEF, exploiting this XPath compiler, we have managed to construct an
            in-browser compiler for XSLT 3.0 with high levels of standards compliance. This opens the
            way to support dynamic transforms, in-browser stylesheet construction and execution, and
            a potential route to language-portable XSLT compiler technologies.</p>
        <p><i>Lumley, John, Debbie Lockett and Michael Kay. "Compiling XSLT3, in the browser, in
            itself." Presented at Balisage: The Markup Conference 2017, Washington, DC, August 1 -
            4, 2017. In Proceedings of Balisage: The Markup Conference 2017. Balisage Series on
            Markup Technologies, vol. 19 (2017). doi:10.4242/BalisageVol19.Lumley01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmllondon-2017ond.pdf" target="_blank"
            class="bodylink">Distributing XSLT Processing between Client and Server</a>
            <a target="_blank" class="bodylink"
                href="https://www.saxonica.com/slides/xmllondon.2017.delpratt-lockett.distributing-xslt.slides.pdf"
                >[+slides]</a></h3>
        <p>O'Neil Delpratt and Debbie Lockett. Presented at XML London 2017. </p>
        <p>This paper presents work on improving an existing in-house License Tool
            application. The current tool is a server-side web application, using XForms in the
            front end. The tool generates licenses for the Saxon commercial products using
            server-side XSLT processing. Our main focus is to move parts of the tool's architecture
            client-side, by using "interactive" XSLT 3.0 with Saxon-JS. A beneficial outcome of this
            redesign is that we have produced a truly XML end-to-end application.</p>
        <p><i>O'Neil Delpratt and Debbie Lockett. "Distributing XSLT Processing between Client and
            Server". Presented at XML London 2017, June 10 - 11th, 2017.
            doi:10.14337/XMLLondon17.Lockett01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2017mhk.pdf" target="_blank"
            class="bodylink">Projection and Streaming: Compared, Contrasted, and Synthesized</a></h3>
        <p>Michael Kay. Presented at XML Prague 2017. </p>
        <p>This paper describes, compares, and contrasts two techniques designed to enable an XML
            document to be processed without building an entire tree representation of the document
            in memory. Document projection analyses a query to determine which parts of the document
            are relevant to the query, and discards everything else during source document parsing.
            Streaming attempts to execute a stylesheet "on the fly" while the source document is
            being read. For both techniques, the paper describes the way that they are implemented
            in the Saxon XSLT and XQuery engine. Performance results are given that apply to both
            techniques, in relation to the queries in the XMark benchmark applied to a 118Mb source
            document. The paper concludes with a discussion of ideas for combining the benefits of
            both techniques and getting more synergy between them.</p>
        <p><i>Michael Kay. "Projection and Streaming: Compared, Contrasted, and Synthesized". XML
            Prague 2017.
            http://archive.xmlprague.cz/2017/files/xmlprague-2017-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2017jl.pdf" target="_blank"
            class="bodylink">XPath 3.1 in the Browser</a></h3>
        <p>John Lumley, Debbie Lockett, Michael Kay. Presented at XML Prague 2017. </p>
        <p>This paper discusses the implementation of an XPath 3.1 processor with high levels of
            standards compliance that runs entirely within current modern browsers. The runtime
            engine Saxon-JS, written in JavaScript and developed by Saxonica, used to run
            pre-compiled XSLT 3.0 stylesheets, is extended with a dynamic XPath parser and
            converter to the Saxon-JS compilation format. This is used to support both XSLT's
            <code>xsl:evaluate</code> instruction and a JavaScript API <code>XPath.evaluate()</code>
            which supports XPath outside an XSLT context.</p>
        <p><i>John Lumley, Debbie Lockett, and Michael Kay. "XPath 3.1 in the Browser". XML
            Prague 2017.
            http://archive.xmlprague.cz/2017/files/xmlprague-2017-proceedings.pdf</i></p>
        <h3><a
                href="https://www.balisage.net/Proceedings/vol17/html/Lumley01/BalisageVol17-Lumley01.html"
                target="_blank" class="bodylink">Approximate CSS Styling in XSLT</a></h3>
        <p>John Lumley. Presented at Balisage 2016, Washington DC.</p>
        <p>This paper discusses transforming a CSS stylesheet into an XSLT transform that projects
            an approximation of the styling from the CSS onto a target XML document. It was
            developed during several XSLT-based projects involving multi-dialect XML documents,
            where there was a need either to evaluate CSS properties for another external tool, such
            as in an HTML → XSL-FO → PDF pipeline, or where a document styling needed to be "fixed"
            for embedding in another document, such as examples in professional papers. The paper
            presents examples, explains the general architecture of the generated XSLT transform,
            discusses how that transform is itself constructed from the CSS stylesheet and outlines
            the strengths and weaknesses and some of the directions in which the tool could be
            developed. It is approximate in that it only supports some of the core CSS features,
            assumes the user is "skilled in the art" and is working with CSS stylesheets that are
            understood and visible, and that the execution speed of the CSS "projection" is not an
            issue. Nevertheless, in the author's experience the ability to mix CSS styling into the
            "XSLT researcher's toolbox" has proved to be of some utility.</p>
        <p><i>Lumley, John. "Approximate CSS Styling in XSLT". Presented at Balisage: The Markup
                Conference 2016, Washington, DC, August 2 - 5, 2016. In Proceedings of Balisage: The
                Markup Conference 2016. Balisage Series on Markup Technologies, vol. 17 (2016).
                doi:10.4242/BalisageVol17.Lumley01.</i></p>
        <h3><a
                href="https://www.balisage.net/Proceedings/vol17/html/Lockett01/BalisageVol17-Lockett01.html"
                target="_blank" class="bodylink">Saxon-JS: XSLT 3.0 in the Browser</a> 
            <a target="_blank" class="bodylink"
                href="https://www.saxonica.com/saxonjs/demos/balisage/index.html"
                >[+slides]</a></h3>
        <p>Debbie Lockett and Michael Kay. Presented at Balisage 2016, Washington DC.</p>
        <p>We introduce Saxon-JS, an XSLT 3.0 run-time written in pure JavaScript. We've effectively
            split the Saxon product into its compile time and run time components. The compiler runs
            on the server, and generates an intermediate representation of the compiled and
            optimized stylesheet in a custom XML format. Saxon-JS, running on the browser, reads in
            the compiled stylesheet and executes it. We describe some particular features of
            Saxon-JS: the event-handling extensions to the XSLT language (as used for Saxon-CE), the
            way that XSLT and JavaScript can interwork, conformance to the W3C XSLT and XPath
            specifications, and some details of the internal implementation.</p>
        <p><i>Lockett, Debbie, and Michael Kay. "Saxon-JS: XSLT 3.0 in the Browser." Presented at
                Balisage: The Markup Conference 2016, Washington, DC, August 2 - 5, 2016. In
                Proceedings of Balisage: The Markup Conference 2016. Balisage Series on Markup
                Technologies, vol. 17 (2016). doi:10.4242/BalisageVol17.Lockett01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2016mhk.pdf" target="_blank"
                class="bodylink">Transforming JSON using XSLT 3.0</a></h3>
        <p>Michael Kay. Presented at XML Prague 2016. </p>
        <p>The XSLT 3.0 and XPath 3.1 specifications, now at Candidate Recommendation status,
            introduce capabilities for importing and exporting JSON data, either by converting it to
            XML, or by representing it natively using new data structures: maps and arrays. The
            purpose of this paper is to explore the usability of these facilities for tackling some
            practical transformation tasks. Two representative transformation tasks are considered,
            and solutions for each are provided either by converting the JSON data to XML and
            transforming that in the traditional way, or by transforming the native representation
            of JSON as maps and arrays. The exercise demonstrates that the absence of parent or
            ancestor axes in the native representation of JSON means that the transformation task
            needs to be approached in a very different way.</p>
        <p><i>Kay, Michael. "Transforming JSON using XSLT 3.0". XML Prague 2016.
                http://archive.xmlprague.cz/2016/files/xmlprague-2016-proceedings.pdf</i></p>
        <h3><a
                href="https://www.balisage.net/Proceedings/vol15/html/Lumley01/BalisageVol15-Lumley01.html"
                target="_blank" class="bodylink">Two from Three (in XSLT)</a></h3>
        <p>John Lumley. Presented at Balisage 2015, Washington DC. </p>
        <p> This paper discusses automated methods of 'downgrading' XSLT 3.0 programs into XSLT 2.0
            syntax and semantics. The stimulus was running portions of a document processing system,
            that had been upgraded to use more coherent features of XSLT 3.0, in the environment of
            a browser-based standards-compliant XSLT 2.0 implementation (Saxon-CE). The work
            involves detailed knowledge of XSLT and is intended to automate significant sections of
            the 'downconversion', leaving other sections to conditional compilation directives. All
            conversion tools are of course written in XSLT and several aspects involve partial
            processing and evaluation of XSLT semantics within XSLT. </p>
        <p><i>Lumley, John. "Two from Three (in XSLT)". Presented at Balisage: The Markup Conference
                2015, Washington, DC, August 11 - 14, 2015. In Proceedings of Balisage: The Markup
                Conference 2015. Balisage Series on Markup Technologies, vol. 15 (2015).
                doi:10.4242/BalisageVol15.Lumley01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmllondon-2015jl.pdf" target="_blank"
                class="bodylink">Improving Pattern Matching Performance in XSLT</a></h3>
        <p>John Lumley and Michael Kay. Presented at XML London 2015 and again at Balisage 2015,
            Washington DC. </p>
        <p>This paper discusses improving the performance of XSLT programs that use very large
            numbers of similar patterns in their push-mode templates. The experimentation focusses
            around stylesheets used for processing DITA document frameworks, where much of the
            document logical structure is encoded in @class attributes. The processing stylesheets,
            often defined in XSLT 1.0, use string-containment tests on these attributes to describe
            push-template applicability. For some cases this can mean a few hundred string tests
            have to be performed for every element node in the input document to determine which
            template to evaluate, which sometimes means up to 30% of the entire processing time is
            taken up with such pattern matching. The paper examines methods, within XSLT
            implementations, to ameliorate this situation, including using sets of pattern
            preconditions and pretokenization of the class-describing attributes. How such
            optimisation may be configured for an XSLT implementation is discussed.</p>
        <p><i>Dr. John Lumley and Dr. Michael Kay. "Improving Pattern Matching Performance in XSLT".
                Presented at XML London 2015, June 6 - 7th, 2015.
                doi:10.14337/XMLLondon15.Lumley01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2015mhk.pdf" target="_blank"
                class="bodylink">Parallel Processing in the Saxon XSLT Processor</a></h3>
        <p>Michael Kay. Presented at XML Prague 2015. </p>
        <p> One of the supposed benefits of using declarative languages (like XSLT) is the potential
            for parallel execution, taking advantage of the multi-core processors that are now
            available in commodity hardware. This paper describes recent developments in one popular
            XSLT processor, Saxon, which start to exploit this potential. It outlines the challenges
            in implementing parallel execution, and reports on the benefits that have been observed. </p>
        <p><i>Kay, Michael. "Parallel Processing in the Saxon XSLT Processor". XML Prague 2015.
                http://archive.xmlprague.cz/2015/files/xmlprague-2015-proceedings.pdf</i></p>
        <h3><a
                href="https://www.balisage.net/Proceedings/vol13/html/Lumley01/BalisageVol13-Lumley01.html"
                target="_blank" class="bodylink">Analysing XSLT Streamability</a></h3>
        <p>John Lumley. Presented at Balisage 2014, Washington DC. </p>
        <p> Determining streamability of constructs in XSLT 3.0 involves the application of a set of
            rules that appear to be complex. A tool that analyses these rules on a given stylesheet
            has been developed to help developers understand why sections which were designed with
            streaming might fail the required conditions. This paper discusses the structure of this
            analysis tool. </p>
        <p><i>Lumley, John. "Analysing XSLT Streamability". Presented at Balisage: The Markup
                Conference 2014, Washington, DC, August 5 - 8, 2014. In Proceedings of Balisage: The
                Markup Conference 2014. Balisage Series on Markup Technologies, vol. 13 (2014).
                doi:10.4242/BalisageVol13.Lumley01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmllondon-2014mhk.pdf" target="_blank"
                class="bodylink">Benchmarking XSLT Performance</a></h3>
        <p>Michael Kay and Debbie Lockett. Presented at XML London 2014. </p>
        <p> This paper presents a new benchmarking framework for XSLT. The project, called <a
                href="https://github.com/Saxonica/XT-Speedo/" target="_blank" class="bodylink">
                XT-Speedo</a>, is open source and we hope that it will attract a community of
            developers. The tangible deliverable consists of a set of test material, a set of test
            drivers for various XSLT processors, and tools for analyzing the test results.
            Underpinning these deliverables is a methodology and set of measurement objectives that
            influence the design and selection of material for the test suite, which are also
            described in this paper.</p>
        <p><i>Dr. Michael Kay and Dr. Debbie Lockett. "Benchmarking XSLT Performance". Presented at
                XML London 2014, June 7 - 8th, 2014. doi:10.14337/XMLLondon14.Kay01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2014mhk.pdf" target="_blank"
                class="bodylink">Streaming in the Saxon XSLT Processor</a></h3>
        <p>Michael Kay. Presented at XML Prague 2014. </p>
        <p> Streaming is a major new feature of the XSLT 3.0 specification, currently a Last Call
            Working Draft. This paper discusses streaming as defined in the W3C specification, and
            as implemented in Saxon. Streaming refers to the ability to transform a document that is
            too big to fit in memory, which depends on transformation itself being in some sense
            linear, so that pieces of the output appear in the same order as the pieces of the input
            on which they depend. This constraint is reflected in the W3C specification by a set of
            streamability rules that determine statically whether a stylesheet is streamable or not.
            This paper gives a tutorial introduction to the streamability rules and they way they
            are implemented in Saxon. It then does on to describe the implementation architecture
            for implementing streaming in the Saxon run-time, by means of push pipelines, and gives
            rationale for this choice of architecture. </p>
        <p><i>Kay, Michael. "Streamability in Saxon". XML Prague 2014.
                http://archive.xmlprague.cz/2014/files/xmlprague-2014-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/xmlprague-2014jl.pdf" target="_blank"
                class="bodylink">Finalising a (small) Standard</a></h3>
        <p>John Lumley. Presented at XML Prague 2014. </p>
        <p> This paper discusses issues and lessons that arose during the finalisation of a standard
            (library) for XSLT/XPath/XQuery extension functions to manipulate binary data. This
            process took place during 2013 in the EXPath community, through shared (mailing-list)
            commenting, specification redrafting, implementation experimentation and test suite
            development. The purpose, form and specification of the library (which isn’t technically
            difficult) are described briefly. Lessons and suggestions arising from the development
            are presented in four broad categories: establishing policies, concurrent implementation
            and application, using tools and declarative approaches, and pragmatic issues. None of
            these lessons are new, but bear reinforcement. This work was performed under the
            auspices of the EXPath community and was funded by Saxonica Ltd. </p>
        <p><i>Lumley, John. "Finalising a (small) Standard". XML Prague 2014.
                http://archive.xmlprague.cz/2014/files/xmlprague-2014-proceedings.pdf</i></p>
        <h3><a href="https://www.saxonica.com/papers/XMLLondon2013ond1.pdf" target="_blank"
                class="bodylink">XML on the Web: Is it still relevant?</a></h3>
        <p>O'Neil Delpratt. Presented at XML London 2013. </p>
        <p> This paper discusses what is meant by the term XML on the Web and how this relates to
            the browser. The success of XSLT in the browser has so far been underwhelming, and it
            examines the reasons for this and considers whether the situation might change. It
            describes the capabilities of the first XSLT 2.0 processor designed to run within web
            browsers, bringing not just the extra capabilities of a new version of XSLT, but also a
            new way of thinking about how XSLT can be used to create interactive client-side
            applications. Using this processor, the author demonstrates as a use-case, a technical
            documentation application which permits browsing and searching in a intuitive way and
            shows its internals to illustrate how it works. </p>
        <p><i>O'Neil Delpratt. "XML on the Web: Is it still relevant?". Presented at XML London
                2013, June 15 - 16th, 2013. doi:10.14337/XMLLondon13.Delpratt01.</i></p>
        <h3><a href="https://www.saxonica.com/papers/prague2013ond1_mhk.pdf" target="_blank"
                class="bodylink">Multi-user interaction using client-side XSLT</a></h3>
        <p>O'Neil Delpratt and Michael Kay. Presented at XML Prague 2013. </p>
        <p> This paper describes two use-case applications to illustrate the capabilities of the
            first XSLT 2.0 processor designed to run within web browsers. The first is a technical
            documentation application, which permits browsing and searching in a intuitive way. The
            second is a multi-player chess game application; using the same XSLT 2.0 processor as
            the first application, it is in fact very different in purpose and design in that it
            provides multi-user interaction on the GUI and implements communication via a social
            media network: namely Twitter. </p>
        <p><i>O'Neil Delpratt and Michael Kay. "Multi-user interaction using client-side XSLT". XML
                Prague 2013.
                http://archive.xmlprague.cz/2013/files/xmlprague-2013-proceedings.pdf</i></p>
        <h3><a
                href="https://www.balisage.net/Proceedings/vol7/html/Delpratt01/BalisageVol7-Delpratt01.html"
                target="_blank" class="bodylink">The Effects of Bytecode Generation in XSLT and
                XQuery</a></h3>
        <p>O'Neil Delpratt and Michael Kay. Presented at Balisage 2011, Montréal. </p>
        <p> This paper discusses highly efficient optimization of expression with XSLT and XQuery
            processors today and presents further speed improvements that can be gained by
            generating bytecode rather than interpreting queries directly. Although optimization
            produces the most throughput gain, the gains from optimization and bytecode generation
            are orthogonal, and compilation can produce about 25% gain over and above gains from
            optimization. Tests with two variants of a well-known XSLT/XQuery processor, one with
            code generation and one with optimization alone, demonstrate the effect on a range of
            queries. </p>
        <p><i>Delpratt, O'Neil Davion, and Michael Kay. "The Effects of Bytecode Generation in XSLT
                and XQuery". Presented at Balisage: The Markup Conference 2011, Montréal, Canada,
                August 2 - 5, 2011. In Proceedings of Balisage: The Markup Conference 2011. Balisage
                Series on Markup Technologies, vol. 7 (2011).
                doi:10.4242/BalisageVol7.Delpratt01.</i></p>
        <h3><a href="https://www.balisage.net/Proceedings/vol5/html/Kay01/BalisageVol5-Kay01.html"
                target="_blank" class="bodylink">A Streaming XSLT Processor</a></h3>
        <p> XSLT transformations can refer to any information in the source document from any point
            in the stylesheet, without constraint; XSLT implementations typically support this
            freedom by building a tree representation of the entire source document in memory and in
            consequence can process only documents which fit in memory. But many transformations can
            in principle be performed without storing the entire source tree. The paper (given at
            Balisage 2010, Montréal) reports on the progress of the W3C XSL Working Group
            implementation of a new version of XSLT, designed to make streamed implementations of
            XSLT feasible. </p>
        <p><i>Kay, Michael. "A Streaming XSLT Processor". Presented at Balisage: The Markup
                Conference 2010, Montréal, Canada, August 3 - 6, 2010. In Proceedings of Balisage:
                The Markup Conference 2010. Balisage Series on Markup Technologies, vol. 5 (2010).
                doi:10.4242/BalisageVol5.Kay01.</i></p>
        <h3><a href="https://www.balisage.net/Proceedings/vol3/html/Kay01/BalisageVol3-Kay01.html"
                target="_blank" class="bodylink">You Pull, I’ll Push: On the Polarity of
                Pipelines</a></h3>
        <p> This paper (given at Balisage 2009, Montréal) discusses the most effective way to move
            XML data through a processing pipeline. It draws on the concept of program inversion,
            originally developed to eliminate bottlenecks in magnetic-tape-based processes, and
            ideas derived from Jackson Structured Programming which allow processes written in a
            convenient pull style to be compiled into push-style code; thus potentially reducing
            both coordination overhead and latency. </p>
        <p><i>Kay, Michael. "You Pull, I’ll Push: on the Polarity of Pipelines". Presented at
                Balisage: The Markup Conference 2009, Montréal, Canada, August 11 - 14, 2009. In
                Proceedings of Balisage: The Markup Conference 2009. Balisage Series on Markup
                Technologies, vol. 3 (2009). doi:10.4242/BalisageVol3.Kay01.</i></p>
        <h3><a href="http://sites.computer.org/debull/A08dec/saxonica.pdf" target="_blank"
                class="bodylink">Ten Reasons Why Saxon XQuery is Fast</a></h3>
        <p> A paper written for the IEEE Data Engineering Bulletin, included in a special issue
            published in December 2008 and devoted to papers on the state-of-the-art in XQuery
            implementation. Most of what the paper says is of course equally applicable to XSLT.</p>
        <h3><a href="https://www.saxonica.com/papers/Extreme2007/EML2007Kay01.html" target="_blank"
                class="bodylink">Writing an XSLT Optimizer in XSLT</a></h3>
        <p> This paper (given at Extreme Markup 2007) explores the possibility that since query
            optimization is an exercise in transforming expression trees, and XSLT is a language for
            transforming trees, it ought to be possible to write an optimizer in XSLT. (The
            rendition of the paper is poor because it has been only partially recovered after
            IDEAlliance, the conference organizers, withdrew their public archive of the conference
            proceedings.)</p>
        <h3><a href="http://ref.c24.biz/whitepapers/c24_xquery.pdf" target="_blank" class="bodylink"
                >C24 White Paper: Using XQuery with Financial Messages</a></h3>
        <p> Back in 2006-7, Saxonica collaborated with C24 to enable Saxon to be used as the query
            engine within the C24 Integration Objects product. (The company was subsequently
            acquired by Iona, which in turn was acquired by Progress, but it is now independent
            again and trading under its old name. In 2013 we've resumed the collaboration and hope
            to move the technology forward to take advantage of all the things that have happened in
            Saxon in the meantime.) This May 2007 paper describes how such an integration enables
            XQuery to be used to access non-XML data such as SWIFT financial messages, and to
            convert data between different formats.</p>
        <h3><a href="https://www.saxonica.com/papers/positionalgrouping.pdf" target="_blank"
                class="bodylink">Positional Grouping in XQuery</a></h3>
        <p> Published at the XIME-P 2006 XQuery workshop at the SIGMOD Conference in Chicago, this
            paper proposes an extension to XQuery to handle positional grouping problems, derived
            from experience with the <code>xsl:for-each-group</code> construct in XSLT 2.0.</p>
        <h3><a href="https://www.saxonica.com/papers/XTech2006.pdf" target="_blank" class="bodylink"
                >Using XSLT and XQuery for Life-Size Applications</a></h3>
        <p> This paper discusses the role of the XSLT 2.0 and XQuery 1.0 languages when it comes to
            writing real-life, sizeable applications for performing data transformations: especially
            factors such as error handling, debugging, performance, reuse and customization of code,
            relationships with XML Schema and other technologies such as XForms, and the use of
            pipeline-based application architectures.</p>
        <h3><a href="https://www.saxonica.com/papers/XTech2005/mhkpaper.html" target="_blank"
                class="bodylink">Comparing XSLT and XQuery</a></h3>
        <p> This paper by Michael Kay was presented at XTech 2005 in Amsterdam. It compares XSLT and
            XQuery not just using a blow-by-blow feature comparison, but an assessment of the
            suitability of the languages for different tasks, and the kinds of users the two
            languages are aimed at.</p>
        <h3><a href="https://www.saxonica.com/papers/ideadb-1.1/mhk-paper.xml" target="_blank"
                class="bodylink">Up-Conversion using XSLT 2.0</a></h3>
        <p> This paper by Michael Kay was presented at XML 2004 in Washington DC. By means of a case
            study, it shows how some of the new features in XSLT 2.0 (notably the grouping
            instructions and the facilities for handling regular expressions) make XSLT 2.0 suitable
            for applications such as up-conversion (creating structured XML from unstructured input)
            that were quite infeasible in XSLT 1.0.</p>
        <h3><a href="https://www.saxonica.com/papers/xslt_xpath.pdf" target="_blank" class="bodylink"
                >XSLT and XPath Optimization</a></h3>
        <p> This paper by Michael Kay, presented at XML Europe 2004 in Amsterdam, looked at the
            techniques used inside an XSLT processor (Saxon, of course!) to optimize performance. It
            described some of the techniques actually used in the Saxon processor, and surveyed
            other ideas coming from academia. </p>
        <h3><a href="https://www.saxonica.com/papers/DocEng2003.pdf" target="_blank" class="bodylink"
                >XML Five Years On: <i>a review of the achievements so far and the challenges
                    ahead</i></a></h3>
        <p> Keynote address given by Michael Kay at the Document Engineering 2003 Conference in
            Grenoble, France. </p>
        <h3><a class="bodylink" target="_blank"
            href="https://www.computerwoche.de/a/xml-und-co-was-bringt-die-zukunft,1056095"
                >XML &amp; Co. - was bringt die Zukunft?</a></h3>
        <p> Article in ComputerWoche (in German): <i>XML begann als "SGML light" und sollte sich vor
                allem durch Einfachheit auszeichnen. Eine Reihe von Zusatzstandards erhöhten aber
                zwischenzeitlich die Komplexität beträchtlich. Während der Kernstandard weitgehend
                stabil bleibt, stehen in anderen Bereichen größere Änderungen bevor.</i></p>
        <h3><a class="bodylink" target="_blank"
            href="https://www.saxonica.com/papers/IBM2001/AnatomyOfAnXSLTProcessor.html">Saxon: Anatomy of an XSLT
                Processor</a></h3>
        <p> This paper by Michael Kay, although published as long ago as 2001, remains a frequently
            cited description of how XSLT processing in a product like Saxon actually works.</p>
        <!--<h3><a class="bodylink" target="_blank"
                href="http://www.ibm.com/developerworks/xml/library/x-xslt/">What kind of a language
                is XSLT?</a></h3>
        <p> This paper by Michael Kay, published at the same time as the one above, gives an
            overview of the capabilities of the XSLT language.</p>-->
        <!--<p><a class="bodylink" target="_blank"
            href="http://www.ibm.com/developerworks/xml/library/x-soapbx4.html">Reflections
            on open-source development</a>. Some personal insights into the experience of
            undertaking open-source software development, in particular solo development as distinct
            from group development.</p>-->
        <a href="#top" class="top-of-page"><p>Return to top of page</p></a>
        <a id="stylus" class="anchor"></a>
        <h2>Articles written for Stylus Studio</h2>
        <p>Saxonica has a close working relationship with the <a href="https://www.stylusstudio.com"
                target="_blank" class="bodylink">Stylus Studio</a> team: Stylus Studio was the first
            XML development environment to offer Saxon-SA as a standard feature. As part of this
            collaboration, we wrote a regular column for their web site. The following articles have
            been published:</p>
        <ul>
            <li>
                <a href="https://www.stylusstudio.com/xquery_primer.html" target="_blank"
                    class="bodylink">Introduction to XQuery</a>
            </li>
            <li>
                <a href="https://www.stylusstudio.com/xquery_flwor.html" target="_blank"
                    class="bodylink">The XQuery FLWOR expression</a>
            </li>
            <li>
                <a href="https://www.stylusstudio.com/schema_aware.html" target="_blank"
                    class="bodylink">Schema Aware XQuery</a>
            </li>
            <li>
                <a href="https://www.stylusstudio.com/xml/workflow.html" target="_blank"
                    class="bodylink">XML Work Flow Applications</a>
            </li>
            <li>
                <a href="https://www.stylusstudio.com/xquery/xquery_functions.html" target="_blank"
                    class="bodylink">XQuery Functions</a>
            </li>
        </ul>
        <a href="#top" class="top-of-page"><p>Return to top of page</p></a>
        <a id="demos" class="anchor"></a>
        <h2>Demonstrations</h2>
        <p>Some of Michael Kay's tutorials and seminars use a genealogy application to illustrate the
            features of XSLT 2.0. The files for this demonstration are available for <a
                href="https://www.saxonica.com/papers/gedcom-demo.zip" class="bodylink"
            >download</a>.</p>
        <a href="#top" class="top-of-page"><p>Return to top of page</p></a>
    </body>
</html>
