# Command line and configuration changes

The code for the `net.sf.saxon.Transform` and `net.sf.saxon.Query` command line interfaces has been refactored. Impact: (a) some legacy options are no longer supported (for example, `-ds`,`-dt`, and the ability to separate keyword from value using a space rather than a colon, e.g. "`-o output.html`"). (b) `-opt:?` now requests help on that particular option, (c) options that were previously freestanding now accept "on" as a value, e.g. `-t` can be written `-t:on`.

A new option `-init:initializer` is available on all command line interfaces. The value is the name of a user-supplied class that implements the interface `net.sf.saxon.lib.Initializer`; this initializer will be called during the initialization process, and may be used to set any options required on the `Configuration` programmatically. It is particularly useful for such tasks as registering extension functions, collations, or external object models, especially in Saxon-HE where the option does not exist to do this via a configuration file. Saxon only calls the initializer when running from the command line, but of course the same code may be invoked to perform initialization when running user application code.

On the `Transform` command line interface, the `-traceout` option now governs the destination of trace output from the standard `TraceListener` (-T option) as well as from the `trace()` function. The `-TP` option (for timing profile information) is extended so a filename can be specified: `-TP:filename`.

On the `Transform` command line interface, the option `-xsltversion:2.0` or `-xsltversion:3.0` indicates whether the XSLT processor should implement the XSLT 2.0 specification or the XSLT 3.0 (also known as 2.1) specification. The default value `-xsltversion:0.0` indicates that this decision should be made based on the `version` attribute of the `xsl:stylesheet` element. Similar options to set the XSLT processor version are available in the `XsltCompiler` class (s9api on Java, Saxon.Api on .NET), and via new options in `FeatureKeys` and in the configuration file.

The `com.saxonica.Validate` interface accepts some additional options as a result of these changes: `-dtd`, `-ext`, `-opt`, `-y`. The option `-xsdversion` was already accepted, but not documented.

The `com.saxonica.Validate` interface has a new option `-stats:filename` which produces an output document showing which schema components were used during the validation, and how often. The output is in XML, allowing further processing to produce profiles and coverage reports for the schema. (There are corresponding internal APIs that allow the same effect when validation is invoked from an application, but they are not currently exposed through s9api.)

The command `com.saxonica.CompileStylesheet` now uses the `-key:value` argument style throughout. It now accepts a `-config:filename` argument. The compiled stylesheet output may be specified using `-csout:filename`

All commands now accept `--F:value` where F is the name of a string defined in FeatureKeys (the part after `"http://saxon.sf.net/feature/"`), and value is the string value of the feature; or `--F` as a synonym for `--F:true`.

Most places in the code that previously wrote to `System.err`, or that used `System.err` as a default destination, now default instead to using `Configuration.getStandardErrorOutput()`. This can be set to a different destination by calling `Configuration.setStandardErrorOutput()` (which expects a `PrintStream`), or by setting the write-only configuration property `FeatureKeys.STANDARD_ERROR_OUTPUT_FILE` (which expects a filename, which will be appended to). In the configuration file the corresponding setting is `global/@standardErrorOutputFile`. Note that this only redirects Saxon output; other application output written to `System.err` is unaffected. Output written directly by command-line interfaces such as `net.sf.saxon.Transform` is unaffected. Examples of affected output are the default destination of the `ErrorListener`; the default destination for `TraceListener` and `xsl:message` output; the default destination for optimizer tracing and "explain" output.

Next