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:
tag
attributes
...
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 usingmake-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:
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:
tag
(define some-node ...) (if (instance? some-node html:blink) (error "blinking not allowed!"))
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.