Net::Z3950::DBIServer::Spec - The zSQLgate Configuration File Format
zSQLgate
configuration files are free-form and treat all whitespace
equivalently, with the sole exception of comments. Related directives
are grouped together with braces, with sections of detailed
information nested within more general sections.
Apart from a few top-level declarations such as the data-source and authentication credentials to use, the bulk of a typical configuration file consists of a set of one or more per-database sections, each describing a single Z39.50 database (corresponding to a single table of the relational database). Each such per-database section has a subsection specifying how searching should be handled and another about retrieval, which in turn is broken into stanzas describing each of the record formats to be supported.
Comments are introduced by a hash character (#
), and run to the end
of the line. They are ignored. Comments are the only part of the
configuration file syntax that treats lines specially: otherwise the
syntax is totally free-form.
The contents of the file must follow this BNF grammar, where config
is the start production.
config = chunk*
chunk = DATASOURCE '=' STRING | USERNAME '=' STRING | PASSWORD '=' STRING | perDb
perDB = DATABASE DBNAME '{' section* '}'
section = TABLE '=' TABLENAME | AUXILIARY TABLENAME WITH CONDITION | RESTRICTION '=' STRING | searchSpec | dataSpec
searchSpec = SEARCH attrsetSpec | SEARCH '{' attrsetSpec* '}'
attrsetSpec = ATTRSET oidSpec '{' accessSpec* '}' | DEFAULTATTRS attrs
attrs = attr | attr ',' attrs
attr = NUMBER '=' NUMBER
oidSpec = oid | SYMBOL | STRING
oid = NUMBER | NUMBER '.' oid
accessSpec = ACCESS NUMBER '=' FULLTEXT? COLUMNNAME
dataSpec = DATA formatSpec | DATA '{' formatSpec* '}'
formatSpec = CACHESIZE NUMBER | FORMAT GRS1 grsFormatSpec | FORMAT XML xmlFormatSpec | FORMAT MARC xmlFormatSpec | FORMAT SUTRS xmlFormatSpec
grsFormatSpec = '{' grs1ElementSpec* '}'
grs1ElementSpec = FIELD tagPath '=' COLUMNNAME | COLUMN COLUMNNAME '=' tagPath # DEPRECATED
tagPath = tag+
tag = '(' NUMBER ',' tag-val ')'
tag-val = NUMBER | STRING
xmlFormatSpec = '{' xmlElementSpec* '}'
xmlElementSpec = RECORD '=' STRING | ATTRS '=' STRING | TRANSFORM '=' FILENAME | SCHEMA '=' IDENTIFIER | FIELD TAGNAME '=' COLUMNNAME | COLUMN COLUMNNAME '=' TAGNAME # DEPRECATED
DBNAME = STRING TABLENAME = STRING CONDITION = STRING COLUMNNAME = STRING FILENAME = STRING TAGNAME = STRING
I didn't initially write prose describing what the various sections mean, because I thought this format was likely to change a fair bit before it stabilised enough for that to be worthwhile. Now, though (April 2005) the format is stable, and descriptive prose should follow. However, work on the tutorial takes precedence.
Mike Taylor <mike@miketaylor.org.uk>
First version Sunday 24th February 2002.