anchor.diff:                ,@class-args))))
   
   
  -(def-ensembl-view dna-sequence ()
  +(defmacro def-ensembl-class (class-name slots &rest class-args)
  +  (flet ((pop-class-arg-keyword (keyword)
  +           (prog1
  +               (cadr (find keyword class-args :key #'car))
  +             (setf class-args (remove keyword class-args :key #'car)))))
  +    (let ((stable-id-char (pop-class-arg-keyword :stable-id-char))
  +          (dna-sequence   (pop-class-arg-keyword :dna-sequence)))
  +      (with-symbol-prefixing-function (table-concat class-name)
  +        `(progn
  +           ,(when stable-id-char
  +                  `(progn
  +                     (def-ensembl-stable-id-view ,class-name)
  +                     (def-fetch-by-stable-id-method ,class-name)
  +                     (push (cons ,stable-id-char ',class-name)
  +                           *char-class-alist*)))
  +           (def-ensembl-view ,class-name (,@(when dna-sequence '(dna-sequence)))
  +             ,(append ;; If the object has a stable id, we need to link
  +               ;; to the appropriate table.
  +               (when stable-id-char
  +                 `((stable-id
  +                    :db-kind :join
  +                    :db-info (:join-class ,(table-concat "-STABLE-ID")
  +                              :home-key ,(table-concat "-ID")
  +                              :foreign-key ,(table-concat "-ID")
  +                              :set nil))))
  +               ;; The slot definitions for the table.
  +               slots)
  +             ,@class-args))))))
  +
  +
  +
  +;;;; -------------------------------------------------------------------------
  +;;;; Class definitions
  +;;;; -------------------------------------------------------------------------
  +
  +;;; Coordinate Systems and Sequences
  +;;; --------------------------------
  +(def-ensembl-class dna-sequence
     ((seq-region-id :type integer
                     :db-constraints :not-null
                     :initarg :seq-region-id)
  
positive.code: ;;; --------------------------------------------------------------------------
  ;;; Proteins and Protein Features
  ;;; --------------------------------------------------------------------------
  (def-ensembl-view protein-feature ()
    ((protein-feature-id :type integer :db-constraints (:not-null :primary-key)
                         :db-kind :key)
     (translation-id :type integer     :db-constraints (:not-null))
  
negative.code:                           :set nil)))
    (:documentation "Description of a segment of a protein."))
  
  (def-ensembl-class analysis
    ((analysis-id     :type integer 
                      :db-constraints (:not-null :primary-key)
                      :db-kind :key)
  