From: toms@fcs260c2.ncifcrf.gov (Tom Schneider)
Subject: Re: Beyond GenBank
Organization: Frederick Cancer Research and Development Center
Date: Tue, 22 Dec 1992 23:32:07 GMT

In article <1992Dec22.133702.20493@nlm.nih.gov>
ostell@object.nlm.nih.gov (Jim Ostell) writes:

|    However, we are building a database called ID, whose job it is to 
|impose stable IDs, called GI (GenInfo) numbers.  A GI is an arbitrary 
|unsigned integer which identifies a specific sequence.  If anything in 
|the sequence changes (a 1 bp change is enough) it is assigned a new GI.

I don't see how this differs from the ACCESSION numbers.  The primary label
keeps changing all the time.  Can your new system handle this kind of request:

    organism H. Sapiens;
    chromosome 4;
    gene Xbla3;              (* I made that one up! *)
    on spliced transcript get from gene begin -60 to gene begin +40;

That is, I don't care what piece of DNA it's on, I just need to get the
sequence data I need for my work!

This requires named sequence objects (features), in addition to named
sequences.

>    Bioseqs, in the ASN.1 definition, can have multiple ids.

Most of the time I don't want to have to deal with multiple id's.  I want the
latest correct version.  To allow someone else to create the same data set such
things would be useful, but the instructions for getting them could be created
and stored for me when I use the relative instructions given above.  Then I
could give somebody the relative instructions (as above) - in which case they
could do the analysis with any improved data.  I could alternatively specify
the original sequence id's if someone wanted to replicate my results exactly.

>    In addition to features, the ASN.1 specification supports alignments 
>and sequences constructed by assembly of other sequences.

Good.  Do the specs support gapped sequences (a--tttacg-gaaccagat)?
A set of these form an alignment of a different kind.
Do the specs support numbering of the sequences (coordinate system)?
(See below.)

>Tom Schnieder knows we have an open invitation to any who wish to 
     SchnEIder    :-)
>discuss the future of sequence related databases - all they need do
>is take us up on the offer.  Tom... are you listening?

Yes.

Questions based on the current definition:

    day INTEGER OPTIONAL ,     -- day of month (1-31)

the definition seems to use -- as a comment.  Can you force
the day to have the range 1-31 in ASN.1?

Seq-descr ::= SET OF CHOICE {
    mol-type GIBB-mol ,          -- type of molecule
    modif SET OF GIBB-mod ,      -- modifiers
    method GIBB-method ,         -- sequencing method
    name VisibleString ,         -- a name for this sequence
    title VisibleString ,        -- a title for this sequence
    org Org-ref ,                -- if all from one organism
    comment VisibleString ,      -- a more extensive comment
    num Numbering ,              -- a numbering system
    ...

Numbering ::= CHOICE {           -- any display numbering system
    cont Num-cont ,              -- continuous numbering
    enum Num-enum ,              -- enumerated names for residues
    ref Num-ref ,                -- by reference to another sequence
    real Num-real }              -- supports mapping to a float system

Ok, so sequences have various numbering schemes available.  Good.

Num-cont ::= SEQUENCE {          -- continuous display numbering system
    refnum INTEGER DEFAULT 1,         -- number assigned to first residue
    has-zero BOOLEAN DEFAULT FALSE ,  -- 0 used?
    ascending BOOLEAN DEFAULT TRUE }  -- ascending numbers?

You have the default to be FALSE for has-zero?  PLEASE PLEASE set it TRUE!
Not having a zero is silly (to put it mildly), and should be discouraged.

It's not clear to me that one can implement the L(3 40)(5 20)(100 2) method of
coordinates.  (See Philosophy of Genbank.)  You wouldn't have made "ascending"
if you had the general numbering method.  This method is required to be able to
express deletion and insertion mutations.  Perhaps the definition needs some
work here?

    maploc VisibleString OPTIONAL , -- map location reported in paper
Can one define the orientation of the sequence relative to the chromosome?

IUPACna ::= StringStore       -- IUPAC 1 letter codes, no spaces
IUPACaa ::= StringStore       -- IUPAC 1 letter codes, no spaces
NCBI2na ::= OCTET STRING      -- 00=A, 01=C, 10=G, 11=T
NCBI4na ::= OCTET STRING      -- 1 bit each for agct
                              -- 0001=A, 0010=C, 0100=G, 1000=T/U
                              -- 0101=Purine, 1010=Pyrimidine, etc

Again, can one force the ranges of these data objects so that
programs reading the sequence can detect an error?  This would
be especially important when people write their own code -
it would catch programming errors.

Dense-diag seems to be able to handle gaps, but the documentation
there is not clear.  (?)

Seq-feat ::= SEQUENCE {
    id Feat-id OPTIONAL ,

The id of a sequence feature should NOT be OPTIONAL!!!!!!!!!!!
PLEASE PLEASE PLEASE require an id - then I can write DelilaII!!
Without it I can't implement code to grab onto objects in the
database.  These should be the unique genetic names like "lacZ".

The restriction enzyme section needs more work so that it
can carry Rich Roberts' data.

Org-ref ::= SEQUENCE {
    taxname VisibleString OPTIONAL ,   -- scientific name
    common VisibleString OPTIONAL ,    -- common name
    mod SET OF VisibleString OPTIONAL , -- modifier for tissue/strain/line
    db SET OF Dbtag OPTIONAL ,         -- ids in other dbases
    syn SET OF VisibleString OPTIONAL }  -- synonyms for taxname or common
 
END

How about adding the list of chromosomes to the organism data type?  Then
create a Chr-ref data type for each one.  This would allow the "natural" view
point which I would like to use (ie, need) for Delila II.  Individual sequences
would then have a pointer to the organism and chromosome (or none to chromosome
if no chromosomal position is known yet).  There also have to be pointers from
the chromosome to the current set of sequences on that chromosome.  Maybe you
have some of this structure, but I haven't found it yet.

These things would allow instructions like:

   organism H.sapiens;
   chromosome Y;
   get all sequences;

which would give one all the known merged sequences from Y (without overlaps
and duplications of course!)

These comments are suggestions for improvement.  I have to commend you on the
current definition.  It has a nice organization!  At least a large chunk of the
definition is directly readable in the file asn.all, but clearly it is not
fully self-explanatory yet.

  Tom Schneider
  National Cancer Institute
  Laboratory of Mathematical Biology
  Frederick, Maryland  21702-1201
  toms@ncifcrf.gov