Saxon provides a number of additional serialization parameters: these have names
in the Saxon namespace. These can be specified as attributes on the xsl:output
and xsl:result-document
elements (XSLT-only), in the Query prolog (XQuery only),
or as extra parameters on the
Query or Transform command line. They can also be specified in the query or transformation API.
For example, to request an indentation depth of on column, specify
!{http://saxon.sf.net/}indent-spaces=1
on the command line.
In XQuery, Saxon allows both standard serialization options and Saxon-specific serialization parameters to be specified by means of an option declaration in the query prolog. For example:
declare namespace saxon="http://saxon.sf.net/";
declare option "saxon:output indent=yes";
declare option "saxon:output saxon:indent-spaces=3";
The method parameter
The method
attribute of xsl:output
can take the standard values "xml",
"html", "xhtml", or "text", or a QName.
If a QName is specified, the local name must be the fully-qualified
class name of a class that implements either the
SAX2 org.xml.sax.ContentHandler
interface, or the
net.sf.saxon.event.Receiver
interface. If such a value is specified,
output is directed to a newly-created instance of the user-supplied class.
You can pass additional information to this class by means of extra user-defined attributes
on the xsl:output
element.
The prefix of the QName must correspond to a valid namespace URI. It is recommended to use the Saxon URI "http://saxon.sf.net/", but this is not enforced.
The saxon:indent-spaces attribute
When the output is XML or HTML with indent="yes", the saxon:indent-spaces attribute may be used to control the amount of indentation. The value must be an integer.
The saxon:character-representation attribute
This attribute allows greater control over how non-ASCII characters will be represented on output.
With method="xml", two values are supported: "decimal" and "hex". These control whether numeric character references are output in decimal or hexadecimal when the character is not available in the selected encoding.
With HTML, the value may hold two strings, separated by a semicolon. The first string defines how non-ASCII characters within the character encoding will be represented, the values being "native", "entity", "decimal", or "hex". The second string defines how characters outside the encoding will be represented, the values being "entity", "decimal", or "hex". Here "native" means output the character as itself; "entity" means use a defined entity reference (such as "é") if known; "decimal" and "hex" refer to numeric character references. For example "entity;decimal" (the default) means that with encoding="iso-8859-1", characters in the range 160-255 will be represented using standard HTML entity references, while Unicode characters above 255 will be represented as decimal character references.
The saxon:byte-order-mark attribute
This has been replaced (since Saxon 8.2) with the standard serialization attribute
byte-order-mark="yes|no"
.
The saxon:next-in-chain attribute
The saxon:next-in-chain
attribute (XSLT-only) is used to direct the output to another stylesheet. The
value is the URL of a stylesheet that should be used to process the output stream. In this case
the output stream must always be pure XML, and attributes that control the format of the output
(e.g. method, cdata-section-elements, etc) will have no effect. The output of the second stylesheet
will be directed to the destination that would have been used for the first stylesheet if
no saxon:next-in-chain
attribute were not present.
The saxon:require-well-formed attribute
The attribute saxon:require-well-formed
is available, with
values "yes" or "no". The default is "no". If the value is set to "yes", and a user-written
ContentHandler
is supplied to receive the results of the transformation, then Saxon will report an
error rather than sending a non-well-formed stream of SAX events to the ContentHandler
.
This attribute is useful when the output of the stylesheet is sent to a component (for example an XSL-FO
rendering engine) that is not designed to accept non-well-formed XML result trees.
Note also that namespace undeclarations of the form xmlns:p=""
(as permitted
by XML Namespaces 1.1) are passed to the startPrefixMapping()
method of
a user-defined ContentHandler
only if
undeclare-namespaces="yes"
is specified on xsl:output
.
User defined attributes
Any number of
user-defined attributes may be defined on xsl:output
. These
attributes must have names in a non-null namespace, which must not be either the XSLT
or the Saxon namespace. These attributes are interpreted as attribute value templates.
The value of the attribute is inserted into the Properties object made available to
the Emitter handling the output; they will be ignored by the standard output methods,
but can supply arbitrary information to a user-defined output method. The name of the
property will be the expanded name of the attribute in JAXP format, for example
"{http://my-namespace/uri}local-name", and the value will be the value as given,
after evaluation as an attribute value template.