anchor.diff:    (let* ((name (html5-parser:node-name node)))
       (if (not (nc-name-p name))
           (html5-parser:element-map-children #'serialize node)
  -        (flet ((serialize ()
  +        (flet ((serialize (&aux (base *base*))
                    (cxml:with-element name
                      (html5-parser:element-map-attributes
                       (lambda (name ns value)
                         (cond ((equal name "lang")
                                (cxml:attribute* "xml" "lang" value))
  +                            ((and base (equal name "href"))
  +                             (ignoring puri:uri-parse-error
  +                               (let ((value
  +                                       (~> value
  +                                           puri:parse-uri
  +                                           (puri:merge-uris base)
  +                                           (write-to-string :pretty nil
  +                                                            :escape nil)
  +                                           (escape-text t))))
  +                                 (cxml:attribute name value))))
                               ((string^= "xmlns" name))
                               ((nc-name-p name)
                                (if (no ns)
  
positive.code:                    (html5-parser:element-map-children #'serialize node))))
            (declare (dynamic-extent #'serialize))
            (string-case name
              ("math" (cxml:with-namespace ("" mathml-ns)
                        (cxml:with-namespace ("xlink" xlink-ns)
                          (serialize))))
  
negative.code: 
  (defconst xmlns-ns "http://www.w3.org/2000/xmlns/")
  
  (defvar *base*)
  (setf (documentation '*base* 'variable)
        "The current base URL.")
  
  (defgeneric serialize-node (type node)
    (:documentation "Serialize NODE, of TYPE, to the current handler."))
  