anchor.diff:    (setf lname (or lname qname))
     ;; we can dispatch on lnames only because we validate against the DTD,
     ;; which disallows other namespaces.
  -  (push (string-or (get-attribute/lname "prefer" attrs) (prefer handler))
  +  (push (let ((new (get-attribute/lname "prefer" attrs)))
  +          (cond
  +            ((equal new "public") :public)
  +            ((equal new "system") :system)
  +            ((null new) (prefer handler))))
           (prefer-stack handler))
     (push (string-or (get-attribute/lname "base" attrs) (base handler))
           (base-stack handler))
  
positive.code: (defun parse-catalog-file (uri)
    (handler-case
        (parse-catalog-file/strict uri)
      (file-error () nil)
      (xml-parse-error () nil)))
  
  (defparameter *catalog-dtd*
      (let* ((cxml
  
negative.code:                                  :element-type '(unsigned-byte 8)
                                   :direction :input))
          (parse-stream s
                        (make-instance 'catalog-parser :uri uri)
                        :validate nil
                        :dtd (make-extid nil dtd-sysid)
                        :root #"catalog"
                        :entity-resolver #'entity-resolver)))))
  