Введение

Saxon — это процессор XSLT и XQuery, созданный Майклом Кеем и в настоящее время разрабатываемый и поддерживаемый его компанией Saxonica. Существуют версии с открытым и закрытым исходным кодом. Доступны версии для Java, JavaScript и .NET. По состоянию на январь 2023 года, текущая версия — 12.0.

Версии

Первоначальная линия разработки Saxon закончилась с версией 6 серии. Это серия процессоров XSLT 1.0. Текущая версия, 6.5.5, не подвергается дальнейшей разработке, кроме поддержки и обслуживания. Серия 6 доступна только для языка программирования Java. Текущая линия разработки, Saxon 12, реализует спецификации XSLT 3.0 и XQuery 3.1. Saxon 12 может обрабатывать таблицы стилей XSLT 1.0 и XSLT 2.0. (XSLT 2.0 и 3.0 в значительной степени обратно совместимы с XSLT 1.0) и также включает выборочную поддержку предлагаемой спецификации XSLT 4.0. Существуют две отдельные кодовые базы: исходный код на Java и исходный код на JavaScript. Исходный код на Java используется для создания продуктов для трех платформ: SaxonJ (для Java и других языков JVM, таких как Scala), SaxonCS (для C# и других языков .NET, таких как VB.NET) и SaxonC (с API для C, C++, Python и PHP). Исходная база на JavaScript используется для генерации SaxonJS, который работает в веб-браузерах и под Node.js. Версии Java выпускаются в трех редакциях: Home Edition предлагает минимальный уровень соответствия стандартам, определенным в спецификациях, как продукт с открытым исходным кодом. Professional Edition добавляет функциональность, специфичную для поставщика, не требуемую стандартами, например, ряд расширений и опций сериализации. Enterprise Edition добавляет расширенные функции (определенные в стандартах W3C как необязательные), включая поддержку схем и потоковую обработку, а также функции, связанные с производительностью, такие как многопоточное выполнение и генерация байт-кода. Продукт SaxonCS строится из кодовой базы Java с помощью пользовательского транспойлера Java to C#, написанного на XSLT (см. https://markupuk.org/webhelp/index.html#ar04.html). По состоянию на апрель 2022 года на этой платформе предлагается только Enterprise Edition. С 2004 по 2009 год Saxon был доступен в двух отдельных формах: Saxon B и Saxon SA. Оба были построены на схожих кодовых базах. Saxon B был программным обеспечением с открытым исходным кодом, выпущенным под Mozilla Public License, в то время как Saxon SA был коммерческим продуктом с закрытым исходным кодом. Различие между Saxon B и Saxon SA заключалось в том, что B был "базовым", а SA – "поддерживающим схемы". Эти термины отсылают к терминам в спецификациях XSLT 2.0 и XQuery 1.0. Процессор, "поддерживающий схемы", способен использовать XML-схему W3C для определения типов данных различных элементов в исходном XML-документе. Эти типы данных затем могут использоваться в командах XPath 2.0 и XSLT 2.0. "Базовый" процессор XSLT 2.0 не может использовать информацию о типах данных. Saxon обеспечивает строгое соответствие рекомендациям W3C XSLT 2.0, XPath 2.0 и 3.0, и XQuery 1.0 и 3.0, а также реализует XML Schema 1.0 и 1.1. По состоянию на 2021 год текущая версия (10.6) соответствует рекомендациям W3C для XSLT 3.0, XPath 3.1 и XQuery 3.1. Исходный код Saxon написан на Java. В 2005 году Дэвид Петерсон и другие продемонстрировали, что Saxon можно перекомпилировать для запуска на .NET с использованием кросс-компилятора IKVM.NET, запустив Saxon.NET как отдельный продукт, независимый от первоначального разработчика. С выпуском Saxon 8.7 Saxonica приняла эту технологию, и с этого выпуска все версии выпускаются одновременно для Java и .NET. Версия продукта для .NET не включает функции, специфичные для платформы Java (такие как интеграция с JDOM, Dom4j и XOM), а вместо этого предоставляет функции, которые интегрируются с возможностями обработки XML платформы .NET. В 2012 году, после серии прототипов, Saxonica выпустила Saxon Client Edition (Saxon CE), версию продукта, адаптированную для работы в среде браузера. Это достигается путем адаптации исходного кода Java, чтобы его можно было перекомпилировать в JavaScript с использованием кросс-компилятора GWT, разработанного Google. Saxon CE предоставляет первую реализацию XSLT 2.0, работающую в браузере, а также расширяет язык, чтобы вместо простого генерирования HTML он мог напрямую обрабатывать взаимодействие с пользователем. С выпуском Saxon CE 1.1 в феврале 2013 года продукт стал открытым исходным кодом. В феврале 2016 года Майкл Кей объявил, что Saxonica работает над заменой Saxon CE, написанной на чистом JavaScript, и названной Saxon JS. Майкл Кей, автор Saxon, был редактором спецификации XSLT 2.0 и также является редактором проекта XSLT 3.0.

Особенности

Саксонские версии, доступные для платформ Java, C (включая PHP и Python) и .NET, построены из единой кодовой базы. Последняя версия создана с использованием транспойлера. Все версии технологических платформ обладают одинаковыми возможностями и доступны с тремя различными наборами функций при двух различных условиях лицензирования. Для каждой из этих технологических платформ существует продукт с открытым исходным кодом, Saxon HE, который лицензирован по MPL 2.0. Он предоставляет базовую функциональность XSLT 3.0, XPath 3.1 и XQuery 3.1, как определено соответствующими спецификациями. Кроме того, Saxon HE реализует некоторые функции, которые спецификация XSLT 3.0 объявляет необязательными и которые ранее были зарезервированы для коммерческих версий, такие как динамическая оценка XPath 3.1 и функции высшего порядка в XSLT 3.0. Коммерческие версии называются Saxon PE и Saxon EE. Подробный и актуальный матричный список функций можно найти на веб-сайте Saxonica. Четвертая технологическая платформа – JavaScript. Ранее процессор XSLT с открытым исходным кодом Saxon CE был перекомпилирован из общего исходного кода Java с использованием GWT. SaxonJS – это совершенно новая реализация на JavaScript. Исходные файлы XSLT могут быть скомпилированы с использованием Saxon EE или с использованием встроенного XSLT-компилятора, основанного на XSLT, который создает менее оптимизированный код. С другой стороны, XSLT-компилятор, основанный на XSLT, позволяет динамически компилировать и выполнять XSLT. Хотя SaxonJS поддерживает большинство функций XSLT 3.0 и XPath 3.1, доступных в Saxon HE, SaxonJS не поддерживает XQuery. В отличие от Saxon HE и прекращенного Saxon CE, SaxonJS не является открытым исходным кодом, но его можно использовать бесплатно в браузере или в Node.js.