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.
| 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:
~/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"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.