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
dtdValidationandretainLineNumbers -
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").