1 SXML
SXML is a representation of XML elements using s-expressions. The following grammar describes the structure of SXML:
top | = |
| ||||||
element | = | (name maybe-annot-attributes child ...) | ||||||
annot-attributes | = | (@ attribute ... maybe-annotations) | ||||||
attribute | = | (name maybe-value maybe-annotations) | ||||||
child | = | element | ||||||
| | character-data-string | |||||||
| | PI | |||||||
| | comment | |||||||
| | entity | |||||||
PI | = |
| ||||||
comment | = | (*COMMENT* comment-string) | ||||||
entity | = | (*ENTITY* public-id-string system-id-string) | ||||||
name | = | local-name | ||||||
| | exp-name | |||||||
local-name | = | symbol conforming to XML Namespace recommendation | ||||||
exp-name | = | symbol of the form namespace-id:local-name | ||||||
namespace-id | = | URI-symbol | ||||||
| | user-ns-shortcut-symbol | |||||||
namespaces | = | (*NAMESPACES* namespace-assoc ...) | ||||||
namespace-assoc | = | (namespace-id uri-string maybe-original-prefix) | ||||||
annotations | = | (@ maybe-namespaces annotation ...) | ||||||
annotation | = | not yet specified |
Refer to the original SXML specification for a more detailed explanation of the representation, including examples.
In short, an XML element is represented as a list consisting of its tag name as a symbol followed by its children nodes. If the XML element has attributes, they come immediately after the tag symbol, in a list tagged by an @ symbol.
For example, the XML element
<abc>def<ghi />jkl</abc>
is represented by the SXML datum
'(abc "def" (ghi) "jkl")
and the XML element
<customer specialness="gazonga">Barry White</customer>
is represented by the SXML datum
'(customer (@ (specialness "gazonga")) "Barry White")
That’s the easy part. Things get more icky when you start talking about documents and namespaces.