Configuration using XQJ
The root object in the XQJ (XQuery for Java) API is javax.xml.query.XQDataSource
, and the Saxon implementation class is com.saxonica.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").