Lisp concrete syntax -- was: Namespaces and DTDs

William Lindsey lindsey at
Sat Mar 13 15:43:53 GMT 1999

On Thursday, 11 Mar 1999, Chris Maden wrote:

> The parentheses are only character data.


> I don't think that Lisp could be made SGML compliant; the delimiters
> could be redefined, but as Steve DeRose notes in _The SGML FAQ Book_,
> there are some limits to the flexibility of the redefinitions, since
> some delimiter roles are overloaded.  Also, Lisp doesn't have the
> equivalent of start-tag close, and you can only omit tagc if the next
> character is stago or etago (ISO 8879:1986, clause which it
> wouldn't be when you get to the leaves of a structure.

While it is true that not all lisp can be made SGML compliant,  it
is possible to define a concrete syntax (using parens as tag 
delimiters),  and establish a set of conventions such that you 
can create documents that are simultaneously R5RS Scheme 
programs and valid SGML documents.  

The close paren works fine as NESTC/NET if you treat the starttag 
as a procedure which, when evaluated, produces a procedure 
that will evaluate the element's contents. You can define
a procedure named "!ELEMENT" which will create those starttag
procedures when the DTD is evaluated.

I played around with this idea a bit.  You can see a working example 
with the SGML declarations, DTD (which also uses Scheme syntax), 
and Scheme bootstrap code (or the rules for evaluating *x-expressions*)



xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list