Internal changes

Namespace nodes

It is no longer always true that namespaces present on a parent element are automatically inherited by the children. XML Namespaces 1.1 allows namespaces to be undeclared using a construct such as xmlns:x="", and this capability is reflected in the model. Namespace undeclarations will be output by the serializer if the serialization property undeclare-namespaces="yes" is set. In XSLT, this can be defined on xsl:output. In XQuery, it can be controlled from the API (using the constant SaxonOutputKeys.UNDECLARE_NAMESPACES or the command line option !{http://saxon.sf.net}undeclare-namespaces=yes). If you don't set this option, you probably won't notice any difference. However, the change does mean that you sometimes get an unexpected xmlns="" undeclaration.

The rules for both XSLT and XQuery say that namespace nodes are never inherited when you add an element to a new parent element. Saxon isn't quite implementing this yet. Given the way Saxon represents namespaces internally, namespaces get inherited unless the code goes out of its way to prevent it, and at the moment this is only happening when an element is explicitly copied using xsl:copy or the equivalent in XQuery.