NAME

Net::Z3950::DBIServer::Spec - The zSQLgate Configuration File Format

SYNOPSIS

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.

DESCRIPTION

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.

AUTHOR

Mike Taylor <mike@miketaylor.org.uk>

First version Sunday 24th February 2002.