Okay. LISTSERV@DEARN seems to be completely kaputt and forwarded a DIST job
to LISTSERV@FRECP11 with GERMAN recipients but *NOT* with ERIC@FRECP11 on it.
Then to PSUVM with same german recipients list. So, I'm sending this out as
mail, let's see what happens.
Eric
Temporary helpfile on the LISTSERV DATABASE facility - 21 Sep 1987
A- Scope of the LISTSERV database functions
The LISTSERV database functions are general-purpose, document-oriented
search-and-display facilities. They are quite different from "usual"
commercial database systems.
1. Definitions
A LISTSERV "database" is a set of physical CMS files, each of which
contains one or more "documents" of homogeneous "type". To each database
"type" is associated a database "driver", which is responsible for
analyzing the contents of the various documents and building a database
"index".
This structure is transparent to the user, who sees the database as being
a collection of "documents". Each document is assigned a unique "item
number" and a "date/time" field (which will usually be either the
creation or last modification date/time, depending on the database type).
Depending on the type of database, one or more "keywords" and "document
portions" may have been defined for each entry. A "keyword" is a
name/value pair, such as "REFCODE 2562783". It is external to the
document contents. A "document portion" is a name identifying a portion
of the document, such as "DESCR" or "HEADER". There is a built-in
document portion, "ALL", which is common to all the database types and
corresponds to the complete document.
2. NOTEBOOK databases
Most LISTSERV databases will be of the "NOTEBOOK" type. These correspond
to the list logs being optionally kept on disk. The NOTEBOOK database
driver provides two additional document portions, "HEADER" and "BODY",
and two keywords: "SENDER" and "SUBJECT". Abbreviations and synonym are
also provided for these keywords:
Header HDR
Body Text
Subject
SEnder From
The minimum abbreviations are capitalized. Please note that "FROM" is a
reserved database keyword (when not abbreviated) and it must therefore be
quoted if it appears in a search sequence (see below).
B. Sending search requests to LISTSERV
A search requests consists in a series of "rules" or "database
subcommands" which must be sent to LISTSERV as a CJLI job. The following
job skeleton can be used in the majority of cases:
//DB JOB Echo=NO
DATABASE SEARCH DD=Rules
//Rules DD *
rule 1
rule 2
...
/*
Each line in the RULES dataset is a search subcommand. Subcommands can be
continued in the next line by appending a dash to all but the last
physical line in the command. This dash is replaced with a blank when the
concatenation process occurs. Example:
//Rules DD *
Search 'a very long string that takes a lot of space' and not -
'another very long string that will fill up another input line' -
in sampledb from 8 may 1986 to june 87
/*
C. Syntax
1. The SEARCH/SELECT command
The first command in your set of rules will probably be a SEARCH command.
You must establish a "list of hits" by means of that command before being
allowed to display any information. The syntax of this command is quite
complex, and its description has been split into several paragraphs.
a. General syntax
Search search-rules <date-rules> <keyword-rules> <db-list>
SELect
b. Database list specification
For each SEARCH command, you may specify a list of databases to be
searched. The default is to narrow the search, ie use the result of the
previous search as input. This is of course possible only if the previous
SEARCH command yielded one or more hits.
The syntax of the "db-list" specification is the following:
IN <(> dbspec1 <dbspec2<...>> <)>
The parenthesis are optional. If they are omitted, database names may not
be reserved keywords like SINCE or WHERE.
The syntax of "dbspec" is the following:
db-name<.<(>range1<,><range2<,><...>><)>>
where "db-name" is the name of the database to be searched, and "range"
are optional parameters restricting the search to a sub-list of entries
in this database. Each "range" may be either a single entry number like
"1274", or a range of numbers like "12-17", "827-" or "-40". They are
separated by either commas or blanks, and may optionally be enclosed in
parenthesis (this is required only if the separator is a blank).
Example:
IN REXXLIST.200-,12-13 REXXGRP VMSHARE.(61 80-100 12)
b. Date rules specification
You may optionally restrict the search to only those entries that lay
within a given interval of time. This is accomplished by specifying one
of the following date rules:
SINCE date-spec
FROM date-spec1 TO date-spec2
UNTIL date-spec
The format of a "date-spec" is quite complex because of the number of
ways a date/time format may be expressed:
TODAY <hh:mm<:ss>>
year
day monthno
<day><->monthname<-><year>
mm/yy
mm-yy
yy/mm/dd
yy-mm-dd
A date specification might therefore be:
FROM 14 JULY TO OCT 87
SINCE 86
UNTIL 06-23-87
c. Keyword rules specification
You may request the actual document search to take place only for those
entries which match a set of "keyword comparisons" rules. The syntax is
the following:
WHERE kwd-expression
WITH
"kwd-expression" is, generally speaking, an arithmetical expression of
keyword/value comparisons bound by logical operators. Comparison
operators have a higher precedence than logical operators. The available
comparison operators are:
= IS
^= <> IS NOT
>
<
>=
<=
CONTAINS
DOES NOT CONTAIN
The latter two allow you to search for a substring in a keyword string.
Available logical operators are:
^ NOT
& AND
| / OR
Finally, if no valid comparison operator is specified between two
arguments, "IS" is assumed.
Thus, the following expressions are possible:
WHERE SENDER IS ARTHUR@DENT AND SUBJECT DOES NOT CONTAIN LOST
WITH (QTY > 100 | VALUE > 1000) & MAT = COPPER
WITH SENDER ATIARAN@LAND AND SUBJECT CONTAINS 'BE TRUE'
d. Search rules specification
Finally, you must specify what is to be searched inside the document. If
you do not want anything to be sought at all (eg if you are only
selecting known items from the database), you can specify an asterisk as
placeholder to waive the search. Otherwise you must specify an
arithmetical expression where arguments are a search strings, bound by
logical operators (see above for complete list). The default operator is
"AND", so that a search for "INTERPRET STEM PROBLEM" will select all
entries where "INTERPRET", "STEM" and "PROBLEM" can be found (but not
necessarily in the same line).
e. Reserved words and quoting
Document and keyword search arguments need not be quoted unless they are
also a reserved keyword. Any non-quoted word will be stripped of leading
and trailing blanks and converted to uppercase before the search. If you
want to search for a string containing blanks, or if the search argument
is also a reserved word like UNTIL, you must quote it using either single
or double quotes. If quotes are to appear inside the string, they must be
doubled.
Strings quoted in single-quotes are upcased and result in a case-ignored
search, whereas double-quotes cause the case to be respected during the
search. Thus, a search for "TEXT" would not find a hit on "text", whereas
'TEXT' would.
2. The FORMAT command
The FORMAT command allows you to define formats for displaying
information about selected items. The FORMAT command itself does not
cause any information to be displayed; rather, it prepares a display
format specification which may be used later on in LIST/INDEX commands.
The syntax of the FORMAT command is:
Format fmtname<:> fmtspec1 <fmtspec2<...>>
Each "fmtspec" defines a column in the output chart, using the following
syntax:
fieldname<(<start><,end>)><.cols<just>> <"heading"<hd-just>>
This will create a column in the table, under the specified heading
(which defaults to the - uppercase - field name if omitted), where a
substring (start,end) of the specified field will be displayed. The
default for "start" and "end" are 1 and 255, respectively. The width of
the columns is controlled by the "cols" specification, which defaults to
12 columns. Finally, the data in the column will be justified according
to the "just" specification, which defaults to "L", whilst the header is
is justified as indicated by "hd-just", which defaults to "L" too. The
possible values for these justification types are as follows:
L -- Left justification
R -- Right justification
C -- Centered
R0 -- Right justification with leading zeroes (for numerics)
Note that the "R0" justification type is invalid for headings.
Each fieldname must be a valid "keyword" name for the database against
which the format will be used. In addition, some common keywords are
provided irrespective of the database type:
DATABASE -- Name of the database (1-8 characters)
DATE -- Date of the database entry (yy/mm/dd)
TIME -- Time of the database entry (hh:mm:ss)
#RECS -- Number of records in the database entry
# -- Reference number of the database entry
Example:
Format listing: #.4R0 date(,5).5 "Date" partno.5R0 "Part no"c -
database.8 "Type"
3. The LIST/INDEX command
The LIST/INDEX command allows you to list information about selected
items in the database. Its format is:
List <fmt1 <fmt2 <...>>>
Index
Where each of the "fmt" specifications is either the name of a predefined
FORMAT or an individual "fmtspec" (see definition above). For each
database, there exists a predefined format called "INDEX", which is used
if no "fmt" specification is given in the parameters. It may also be
invoked explicitly.
Example:
List sender.17 "Sender"l index
4. The PRINT command
The PRINT command allows you to display "portions" or "keywords" of the
selected documents. However, it should be noted that it was primarily
intended to display "document portions", not "keywords" which ought to be
displayed by means of the LIST command. The syntax of the PRINT command
is:
Print <part1 <part2 <...>>> <OF> <range1 <range2 <...>>> <, part1 ...>
Each "part" must be a valid "document portion" or "keyword" for the
database against which the PRINT command is issued. "ALL" is the default
and is always valid, regardless of the database type. You may optionally
specify "ranges" (xxxx, xxxx-yyyy, xxxx- or -yyyy) to further restrict
the list of database items to be displayed. However, this does NOT allow
you to display a document that has not been previously selected by means
of a SEARCH/SELECT command.
Finally, you may place more than one set of print specifications on the
command line, provided you separate them with commas.
Example:
Select copper wire (1/100 or 1/20) since june where qty < 100
Print description of 113 120-123, price_history of 144
|