# Choosing a software package

Saxon is distributed in two packages: Saxon-B and Saxon-SA, each of which is available for both the Java and .NET platforms. Saxon-B is available under an open-source license and all its features are available to all users. Saxon-SA requires activation by a license key, and it is possible to purchase various subsets of the functionality. These are summarized in the table below.

Feature | Saxon-B | Saxon-SA
| all | SA001 (Full) | SA030 (XSLT) | SA040 (XQuery) | SA050 (Schema)
Basic XSLT | yes | yes | yes | yes | yes
Basic XQuery including XQJ interface | yes | yes | yes | yes | yes
Schema-Aware XSLT | no | yes | yes | no | no
Schema-Aware XQuery | no | yes | no | yes | no
XQuery Updates | no | yes | no | yes | no
Schema Validation | no | yes | yes | yes | yes
Java Code Generation | no | yes | no | yes | no
Advanced Extension Functions (see Note 1) | no | yes | yes | yes | no
Advanced Optimizer (see Note 2) | no | yes | yes | yes | no
Streaming Extensions for Large Documents | no | yes | yes | no | no
Binary Document Storage (PTree) | no | yes | yes | yes | no

Note 1: Extension functions in this category include `saxon:try()`, which provides the ability to catch run-time errors; `saxon:function()` which provides higher-order functions; `saxon:analyze-string()` and `saxon:for-each-group()` which provide XQuery users with an equivalent to the `xsl:analyze-string` and `xsl:for-each-group` instructions in XSLT; and `saxon:index()` and `saxon:find()` which provide a "manual" indexing capability for XQuery, similar to the `xsl:key` construct in XSLT.

Note 2: Saxon-B always implements joins using a nested-loop strategy, which takes increasingly long as the documents become larger. Saxon-SA where possible uses a hash-join algorithm. This applies whether the join is expressed as a path expression, an XQuery FLWOR expression, or a nested set of `xsl:for-each` instructions in XSLT. In some of the queries in the XMark benchmark, the effect is to reduce query time on a 10Mb source document from 16 seconds to 45 milliseconds.

For some of these products, it is also possible for existing users to purchase an upgrade license.

For product prices, see the online store.

Next