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
		| OPTION STRING '=' string_or_num
		| perDb

string_or_num	= STRING
		| NUMBER

perDB		= DATABASE DBNAME '{' section* '}'

section		= TABLE '=' TABLENAME
		| AUXILIARY TABLENAME WITH CONDITION
		| RESTRICTION '=' STRING
		| JOIN '=' STRING # "implicit" or "outer"
		| 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 '=' modifier* COLUMNNAME

modifier	= FULLTEXT
		| UPPERCASE

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.