Configuration using XQJ
The root object in the XQJ (XQuery for Java) API is javax.xml.query.XQDataSource
, and the Saxon
implementation class is net.sf.saxon.xqj.SaxonXQDataSource
.
The XQDataSource
provides
methods getProperty(name)
and setProperty(name, value)
which at first sight appear to map
cleanly to the methods getConfigurationProperty(name)
and setConfigurationProperty(name, value)
in the underlying Saxon Configuration
, and indeed they can be used in this way,
using either the URI value of the
property or the symbolic constant in class net.sf.saxon.lib.FeatureKeys
.
There are some glitches, however. Firstly, the XQJ specifications mandate that the properties available through this
interface should also have explicit getters and setters: for example if a property named "lineNumbering" is available,
then there should be a pair of methods setLineNumbering()
and getLineNumbering()
. This does
not square well with the use of URIs for property names. Secondly, XQJ requires that the property values should be strings.
Saxon therefore:
-
exposes a subset of commonly-used configuration properties using shortened names such as
dtdValidation
andretainLineNumbers
; -
provides getters and setters for these properties, as required by the XQJ specification;
-
lists the names of the above properties (only) in the result of the method
getSupportedPropertyNames()
-
makes all other configuration properties available using URIs as the name, without providing getters and setters, and without listing the names in the result of
getSupportedPropertyNames
, provided that the value can be represented as a string. Boolean values can be represented using any of the strings ("yes", "on", "true", or "1"), or ("no", "off", "false", or "0").