|
Meta
|
NOTE: this document describes traditional ISIS and early OpenIsis proposals.
For updated information please refer to the simplified
Malete structures
traditional field definition and OpenIsis data definition metadata.
| the traditional FDT |
According to the CDS/ISIS manual,
the field definition table is displayed like
44 Serie 300 X R vz
and contains for each field tag:
- a field description (up to 30 characters)
- maximum length (1 to 1650)
- field type:
X for alphanum, A for strictly alpha (not including space),
N for numeric (decimal digits), P for pattern (see below).
- repeatability indicator
R meaning field is repeatable, N else
- format (subfield list or pattern)
For a P field, this gives a COBOL-PIC-style pattern
consisting of X (alnum), A (alpha), 9 (num) and literal letters,
e.g. 99-999/AA to allow for input like 35-674/XE.
For other field types, this is a list of legal subfields,
e.g. vz to allow for input like foo^vbar^zbaz.
Patterns are not supported by winisis as of Version 1.4.
The actual file format looks like
Series vz 44 300 0 1
which is 30 characters name, 20 characters subfield/pattern,
the field tag, maximum length, a number encoding the type
(0 alphanum, 1 alpha, 2 numeric, 3 pattern),
and a number 1 for repeatable / 0 for non repeatable fields.
Moreover, the FDT defines the available
worksheets W (.fmt), printformats F (.pft) and field selections S (.fst).
Each such definition is on a line starting with the
key letter and a colon, and followed by (blank padded)
6 character fields of file basenames.
F:THES THES1 THES2
| principles of OpenIsis metadata |
Definition of data is done in the database's
Options
record, rather than in a separate file.
Data definition is aimed at being quite general,
supporting a wide range of formats according to different application needs.
It includes several features that are also found in IsisMARC's FDT21
by Ernesto Spinak, but uses substructures rather than a separate database.
Data definition does not only define fields, but also subfields,
subrecords, code values (enums) and types in a uniform approach.
Basically, for every data element,
there is one (heavily structured) field describing the element,
which may, however, refer to or be referred to by other fields.
It has the following subfields, separated by TAB:
- i id
numerical tag of the field or type described
- s sub
subfield identifier of the element defined (repeatable).
Not present in a (top level) field definition.
Number base 36 (i.e. 0..9,a=10,b=11..z=35).
If the subid does not start with a number base 36,
the element can be referred to by it's position among the subfield
declarations for the same parent (in base 36, starting from 0).
If there is a number, not followed by any characters,
the subfield is identified by this number.
If subid is empty, or the number is followed by a ')',
the field is unidentified in it's parent.
If any other character like '=', the field is identified by it's name,
delimited by this character (or any single non-id char).
- e end
end of this element (i.e., for a toplevel field, the initial part).
Consists of a leading delimiter char and some optional flags.
If empty, is the standard subfield delimiter (a TAB).
If absent, and the field has fixed length (type 3 or 4), it has
no delimiting character, but just stops after it's length.
Else a subfield inherits it's parents end (defaulting to TAB),
and for a toplevel there are no subfields (you may still define
subfields, but the field value itself will include them).
Traditional ISIS data should use e^.
An initial numerical value (decimal digits) is interpreted as ASCII code
of the delimiter char (TAB is 9).
If end contains a (literal) blank, any blanks after the delimiter
are consumed.
If end contains a quote ("), the delimiter is not recognized within quotes.
If end contains a backslash (\), the backslash character can be used
to escape the delimiter, a quote (if spec) and itself.
- n name
technical name of the element, preferrably in english.
Must be a lowercase identifier (matching regular expression [a-z_][a-z_0-9]*)
unique throughout this data definition.
- b base
basetype. tag or name of element to copy definitions from.
- t type
numerical primary type of data, describing the initial part of the element
(up to the first subfield delimiter, if any). default is 0.
- l length
numerical (max) length. Absent = ~ = any.
Note that 0 does NOT mean any, but empty, i.e. the element is a flag.
For fixed subrecords, this gives the number of childs.
For other types, it is the length in characters (not bytes!).
For types 3 and 4, this is a fixed length.
- f format
format pattern, highly dependent on type.
if empty, indicates fixed length as given by l.
for type 3, if the format is shorter than l,
the last character is repeated to fill length l.
if nonempty, can be used to imply type 3 and a fixed length.
f is repeatable, allowing alternative formats.
for subrecord( header)s, this gives a legal child as
tag_or_name[,[min][,max]],
where min defaults to 0 and max to unlimited.
for most other types, this is the traditional pattern format (see above).
- m min
Minimum # of occurences. Absent = 0. Empty = 1.
- r repeat
Maximum # of occurences. Absent = 1. Empty = ~ = any.
Use r0 for fields that should not directly be included in their parent,
but are referenced as basetypes or childs.
- v value
default value, code for enums
- x xref
crossreference for field (see below) (repeatable)
- d description
descriptive text in the database's lead language.
translations are maintained separatly.
| types of fields |
code | C-name | name | description |
0 | FTX | any | actually any characters |
1 | FTA | alpha | STRICTLY alpha |
2 | FTN | numeric | only digits or signs (+-) |
3 | FTP | pattern | given by COBOL-style pattern |
4 | FTB | boolean | 0 or 1 (was 13) |
5 | FTE | enum | one of the codes listed for this field (was 12) |
8 | FTI | iso | alphanum using delimiter ASCII 31 (obsolete, was 10) |
9 | FTT | table | alphanum using delimiter ASCII 9 (TAB) (obsolete, was 14) |
13 | FTO | operator | fixed subrecord |
14 | FTR | record | embraced subrecord (structure) |
15 | FTS | sequence | counted subrecord (array) |
16 | FTV | value | an enum value |
| field names |
It is common practice to use long field descriptions
like "Corporate Bodies" or "Govt. Publications No.",
which may be nice looking but are not well suited for technical use.
Therefore the OpenIsis metadata contains an extra field name
in it's metadata record.
When sourcing metadata from an FDT file,
OpenIsis will derive field names by lowercasing the descriptions
and replacing all runs of non-alphanums by a single '_',
yielding "govt_publications_no".
| subrecords |
subrecords
are introduced by one of the types 13 to 15.
All those introducing fields may contain any subfields.
Type 14 records may (after the leading + or -) also contain an
initial any string, whose length may be restricted to the given length.
(Typically used to hold an initial textnode's contents).
| crossreferences |
Crossreferences can be used for several purposes, including
- specifying referential integrity constraints
- especially authority, coding and terminology relations
- specifying inheritance relations in the
PatchWork
However, all these purposes are more or less the same,
depending just on how you look at it. Any flavour of reference may be used
- on data entry,
to ensure that a reference can be resolved according to a given cardinality
- on data retrieval,
to enrich the data of a refering record by it's refered-to records
Basically, the contents of an element for which a crossref is defined,
may, should or must be either an MFN (row number) of a record or,
after slight modification, a (prefix of a) valid index entry,
in both cases usually in another database (table).
The crossref for a field specifies, separated by semicolon ';',
- database of reference
- cardinality as used in regular expressions
'*' for any, '+' for at least one, '?' at most one, or min,max.
Empty means exactly one.
- prefix for index lookup
Anything after the second ';'
If a value found in the index is delimited by the same delimiter
as the item in question (TAB strongly recommended),
it is considered a match and the whole index entry
considered the field of reference.
Else, the index entry's record is looked up and whatever is the entry's
tag is the field of reference.
Thus, resolving the reference, is largely governed by the index
(and you can do all sort of tricks there), not by the referer.
$Id: Meta.txt,v 1.9 2004/06/10 12:52:29 kripke Exp $
|
|