もっと単純にしようよ。

HTML文書 ::= (ノード...)
ノード ::= (タグ 属性リスト ノード...) | 文字列
タグ ::= シンボル
属性リスト ::= ((属性名 . 属性値) ...)
属性名 ::= シンボル
属性値 ::= 文字列

(define source
 '(html ((lang . "ja"))
   (head ()
    (meta ((http-equiv . "Content-Type")
       (content . "text/html; charset=Shift_JIS""))
     (link ((rev . "made") (href . "mailto:[email protected]")))
     (title () "更新履歴")))
    (body ()
     (h1 () "更新履歴")
     (hr ())
     (p () "2002/05/11 Version 1.00")
     (ul () (li "新規作成") (li "公開")))))