1--$Revision: 6.6 $
2--**********************************************************************
3--
4--  NCBI General Data elements
5--  by James Ostell, 1990
6--  Version 3.0 - June 1994
7--
8--**********************************************************************
9
10NCBI-General DEFINITIONS ::=
11BEGIN
12
13EXPORTS Date, Person-id, Object-id, Dbtag, Int-fuzz, User-object, User-field;
14
15-- StringStore is really a VisibleString.  It is used to define very
16--   long strings which may need to be stored by the receiving program
17--   in special structures, such as a ByteStore, but it's just a hint.
18--   AsnTool stores StringStores in ByteStore structures.
19-- OCTET STRINGs are also stored in ByteStores by AsnTool
20--
21-- typedef struct bsunit {             /* for building multiline strings */
22   -- Nlm_Handle str;            /* the string piece */
23   -- Nlm_Int2 len_avail,
24       -- len;
25   -- struct bsunit PNTR next; }       /* the next one */
26-- Nlm_BSUnit, PNTR Nlm_BSUnitPtr;
27--
28-- typedef struct bytestore {
29   -- Nlm_Int4 seekptr,       /* current position */
30      -- totlen,             /* total stored data length in bytes */
31      -- chain_offset;       /* offset in ByteStore of first byte in curchain */
32   -- Nlm_BSUnitPtr chain,       /* chain of elements */
33      -- curchain;           /* the BSUnit containing seekptr */
34-- } Nlm_ByteStore, PNTR Nlm_ByteStorePtr;
35--
36-- AsnTool incorporates this as a primitive type, so the definition
37--   is here just for completeness
38--
39--  StringStore ::= [APPLICATION 1] IMPLICIT OCTET STRING
40--
41
42-- BigInt is really an INTEGER. It is used to warn the receiving code to expect
43--   a value bigger than Int4 (actually Int8). It will be stored in DataVal.bigintvalue
44--
45--   Like StringStore, AsnTool incorporates it as a primitive. The definition would be:
46--   BigInt ::= [APPLICATION 2] IMPLICIT INTEGER
47--
48
49-- Date is used to replace the (overly complex) UTCTtime, GeneralizedTime
50--  of ASN.1
51--  It stores only a date
52--
53
54Date ::= CHOICE {
55    str VisibleString ,        -- for those unparsed dates
56    std Date-std }             -- use this if you can
57
58Date-std ::= SEQUENCE {        -- NOTE: this is NOT a unix tm struct
59    year INTEGER ,             -- full year (including 1900)
60    month INTEGER OPTIONAL ,   -- month (1-12)
61    day INTEGER OPTIONAL ,     -- day of month (1-31)
62    season VisibleString OPTIONAL ,  -- for "spring", "may-june", etc
63    hour INTEGER OPTIONAL ,    -- hour of day (0-23)
64    minute INTEGER OPTIONAL ,  -- minute of hour (0-59)
65    second INTEGER OPTIONAL }  -- second of minute (0-59)
66
67-- Dbtag is generalized for tagging
68-- eg. { "Social Security", str "023-79-8841" }
69-- or  { "member", id 8882224 }
70
71Dbtag ::= SEQUENCE {
72    db VisibleString ,          -- name of database or system
73    tag Object-id }         -- appropriate tag
74
75-- Object-id can tag or name anything
76--
77
78Object-id ::= CHOICE {
79    id INTEGER ,
80    str VisibleString }
81
82-- Person-id is to define a std element for people
83--
84
85Person-id ::= CHOICE {
86    dbtag Dbtag ,               -- any defined database tag
87    name Name-std ,             -- structured name
88    ml VisibleString ,          -- MEDLINE name (semi-structured)
89                                --    eg. "Jones RM"
90    str VisibleString,          -- unstructured name
91    consortium VisibleString }  -- consortium name
92
93Name-std ::= SEQUENCE { -- Structured names
94    last VisibleString ,
95    first VisibleString OPTIONAL ,
96    middle VisibleString OPTIONAL ,
97    full VisibleString OPTIONAL ,    -- full name eg. "J. John Smith, Esq"
98    initials VisibleString OPTIONAL,  -- first + middle initials
99    suffix VisibleString OPTIONAL ,   -- Jr, Sr, III
100    title VisibleString OPTIONAL }    -- Dr., Sister, etc
101
102--**** Int-fuzz **********************************************
103--*
104--*   uncertainties in integer values
105
106Int-fuzz ::= CHOICE {
107    p-m INTEGER ,                    -- plus or minus fixed amount
108    range SEQUENCE {                 -- max to min
109        max INTEGER ,
110        min INTEGER } ,
111    pct INTEGER ,                    -- % plus or minus (x10) 0-1000
112    lim ENUMERATED {                 -- some limit value
113        unk (0) ,                    -- unknown
114        gt (1) ,                     -- greater than
115        lt (2) ,                     -- less than
116        tr (3) ,                     -- space to right of position
117        tl (4) ,                     -- space to left of position
118        circle (5) ,                 -- artificial break at origin of circle
119        other (255) } ,              -- something else
120    alt SET OF INTEGER }             -- set of alternatives for the integer
121
122
123--**** User-object **********************************************
124--*
125--*   a general object for a user defined structured data item
126--*    used by Seq-feat and Seq-descr
127
128User-object ::= SEQUENCE {
129    class VisibleString OPTIONAL ,   -- endeavor which designed this object
130    type Object-id ,                 -- type of object within class
131    data SEQUENCE OF User-field }    -- the object itself
132
133User-field ::= SEQUENCE {
134    label Object-id ,                -- field label
135    num INTEGER OPTIONAL ,           -- required for strs, ints, reals, oss
136    data CHOICE {                    -- field contents
137        str UTF8String ,
138        int INTEGER ,
139        real REAL ,
140        bool BOOLEAN ,
141        os OCTET STRING ,
142        object User-object ,         -- for using other definitions
143        strs SEQUENCE OF UTF8String ,
144        ints SEQUENCE OF INTEGER ,
145        reals SEQUENCE OF REAL ,
146        oss SEQUENCE OF OCTET STRING ,
147        fields SEQUENCE OF User-field ,
148        objects SEQUENCE OF User-object } }
149
150
151
152END
153
154