Source documents
Source documents may be read using the doc() and document() functions
in the usual way.
The root (document) node of the HTML page is accessible using the extension function
ixsl:page() (with no arguments). Because the HTML data model is not a direct match
for the XDM data model used by XPath 2.0 and XSLT 2.0, some special considerations apply.
When navigating the HTML DOM, regular elements and attributes are treated as being in no namespace, and their names are always written in lower-case regardless of the actual case used in the HTML page.
As well as exposing regular attributes in the DOM tree, Saxon also exposes pseudo-attributes to
make available information that would be available to a Javascript programmer via JavaScript properties rather than as
DOM attribute nodes. For example, clicking a checkbox changes the checked property
to true or false, but it does not affect the value of the checked attribute. Saxon
therefore makes the property available as a pseudo-attribute @prop:checked, where
the namespace prefix prop is bound to the namespace URI
http://saxonica.com/ns/html-property. Moreover, Saxon exposes properties of the
style of the element in a similar way: for example the style's font-size property is available as
the pseudo-attribute @style:fontSize, where the namespace prefix style
is bound to the namespace URI http://saxonica.com/ns/html-style-property.
Pseudo-attributes are accessible by explicit name in a path expression, but they are not included
in the results when you read all attributes of an element using @*. They are also
not copied by xsl:copy. They can be written as well as read, using
xsl:attribute, attributes in a literal result element, or
ixsl:set-attribute.
When you write a style attribute to the HTML DOM, Saxon parses the value of the
attribute and updates the corresponding properties of the style object associated
with the DOM element. For example, if you set style="font-size:30px;
font-weight:normal" on an element E, Saxon will set
E.style.fontSize to 30px and E.style.fontWeight to
normal. (Firefox does this automatically, Internet Explorer does not, so this feature
is there to improve portability across browsers.)