Saxon Editions and BaseX

Saxon 726,956 comes as HE (open source, MPL-2.0), PE and EE (commercial, priced per developer and server on Saxonica's shop). This chapter found the boundaries by running HE: no saxon: extension functions (Saxon Extension Functions), no XQuery Update or XSD 1.1 (EE), no schema-aware XSLT or streaming (EE, Schema-Aware XSLT and XSLT Analysis and Streaming), and no 4.0 features in Saxon 13 HE.

Saxon 12 editions, from Saxonica's feature matrix
Feature (Saxon 12) HE PE EE
XSLT 3.0, XQuery 3.1, XPath 3.1 Yes Yes Yes
saxon: extensions, EXPath modules No Yes Yes
Schema-aware XSLT and XQuery, XSD 1.1 No No Yes
Streaming XSLT, XQuery Update No No Yes
Export compiled packages (SEF) No No Yes

BaseX 693,830 (BSD 3-Clause) is the open-source alternative where documents are queried repeatedly: it stores them in an indexed database. On the 100,000-book file:

engines.sh: Saxon parses every time; BaseX queries an indexShell
~/de-venv/bin/python ../s2-26/make_big.py 100000
q='//book[@id = "x50000-b3"]/title/string()'
xquery -t -s:big-catalog.xml -qs:"$q" 2>&1 |
  grep -E -o "Tree built in [0-9.]+s|Execution time: [0-9.]+ms"
basex -c "CREATE DB bigcat big-catalog.xml"
basex -V -c "OPEN bigcat" -c "XQUERY $q" | grep -E "index|Evaluating"
basex -c "DROP DB bigcat"
Output
Tree built in 5.048201786s
Execution time: 313.615799ms
- apply attribute index for "x50000-b3"
Evaluating: 1.34 ms

Saxon spent seconds building the tree before a query that took a third of a second; BaseX built its database once, then answered from the attribute index in milliseconds (1-28 ms over several runs on this busy machine). Use Saxon for transformations in a pipeline step, BaseX (or eXist-db) when users or services query the same XML again and again.