Creating HTML nodes

The html prefix names a special namespace
(see Namespaces) of functions to create HTML element nodes.
For example, html:em is a constructor that
when called creates a element node whose tag is em.
If this element node is formatted as HTML, the
result has an <em> tag.

Syntax: html:tagattributes...content...

Creates an element node whose tag is tag.
The parameters are first zero or more attributes, followed
by zero of more child values.
An attribute is either an attribute value (possibly
created using make-attribute), or a pair of arguments:
A keyword followed by the attribute value.
Child values are usually either strings (text content),
or nested element nodes, but can also be comment or processing-instruction
nodes.

(html:a href: "http://gnu.org/" "the "(html:i "GNU")" homepage")

The compound identifier html:tag is actually
a type: When you call it as a function you’re using Kawa’s
standard coercion of a type to its constructor function.
This means you can do type tests:

Object identity is currently not fully specified. Specifically,
it is undefined if a nested (child) element node is copied
“by value” or “by reference”. This is related to whether
nodes have a parent reference. In the XPath/XQuery data model
nodes do have a parent reference, and child nodes are conceptually
copied. (In the actual implemention copying is commonly avoided.)
Kawa/Scheme currently followed the XQuery copying semantics,
which may not be the most appropriate for Scheme.