.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
.    if \nF \{
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "STAG-DB 1"
.TH STAG-DB 1 "2009-12-14" "perl v5.18.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
stag\-db \- persistent storage and retrieval for stag data (xml, sxpr, itext)
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 2
\&  stag\-db \-r person \-k social_security_no \-i ./person\-idx myrecords.xml
\&  stag\-db \-i ./person\-idx \-q 999\-9999\-9999 \-q 888\-8888\-8888
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Builds a simple file-based database for persistent storage and
retrieval of nodes from a stag compatible document.
.PP
Imagine you have a very large file of data, in a stag compatible
format such as \s-1XML.\s0 You want to index all the elements of type
\&\fBperson\fR; each person can be uniquely identified by
\&\fBsocial_security_no\fR, which is a direct subnode of \fBperson\fR
.PP
The first thing to do is to build an index file, which will be stored
in your current directory:
.PP
.Vb 1
\&  stag\-db \-r person \-k social_security_no \-i ./person\-idx myrecords.xml
.Ve
.PP
You can then use the index \*(L"person-idx\*(R" to retrieve \fBperson\fR nodes by
their social security number
.PP
.Vb 1
\&  stag\-db \-i ./person\-idx \-q 999\-9999\-9999 > some\-person.xml
.Ve
.PP
You can export using different stag formats
.PP
.Vb 1
\&  stag\-db \-i ./person\-idx \-q 999\-9999\-9999 \-w sxpr > some\-person.xml
.Ve
.PP
You can retrieve multiple nodes (although these need to be rooted to
make a valid file)
.PP
.Vb 1
\&  stag\-db \-i ./person\-idx \-q 999\-9999\-9999 \-q 888\-8888\-8888 \-top personset
.Ve
.PP
Or you can use a list of IDs from a file (newline delimited)
.PP
.Vb 1
\&  stag\-db \-i ./person\-idx \-qf my_ss_nmbrs.txt \-top personset
.Ve
.SS "\s-1ARGUMENTS\s0"
.IX Subsection "ARGUMENTS"
\fI\-i \s-1INDEXFILE\s0\fR
.IX Subsection "-i INDEXFILE"
.PP
This file will be used as the persistent index for storage/retrieval
.PP
\fI\-r RELATION-NAME\fR
.IX Subsection "-r RELATION-NAME"
.PP
This is the name of the stag node (\s-1XML\s0 element) that will be stored in
the index; for example, with the \s-1XML\s0 below you may want to use the
node name \fBperson\fR and the unique key \fBid\fR
.PP
.Vb 9
\&  <person_set>
\&    <person>
\&      <id>...</id>
\&    </person>
\&    <person>
\&      <id>...</id>
\&    </person>
\&    ...
\&  </person_set>
.Ve
.PP
This flag should only be used when you want to store data
.PP
\fI\-k UNIQUE-KEY\fR
.IX Subsection "-k UNIQUE-KEY"
.PP
This node will be used as the unique/primary key for the data
.PP
This node should be nested directly below the node that is being
stored in the index \- if it is more that one below, specify a path
.PP
This flag should only be used when you want to store data
.PP
\fI\-u UNIQUE-KEY\fR
.IX Subsection "-u UNIQUE-KEY"
.PP
Synonym for \fB\-k\fR
.PP
\fI\-p \s-1PARSER\s0\fR
.IX Subsection "-p PARSER"
.PP
This can be the name of a stag supported format (xml, sxpr, itext) \-
\&\s-1XML\s0 is assumed by default
.PP
It can also be a module name \- this module is used to parse the input
file into a stag stream; see Data::Stag::BaseGenerator for details
on writing your own parsers/event generators
.PP
This flag should only be used when you want to store data
.PP
\fI\-q QUERY-ID\fR
.IX Subsection "-q QUERY-ID"
.PP
Fetches the relation/node with unique key value equal to query-id
.PP
Multiple arguments can be passed by specifying \-q multple times
.PP
This flag should only be used when you want to query data
.PP
\fI\-top NODE-NAME\fR
.IX Subsection "-top NODE-NAME"
.PP
If this is specified in conjunction with \fB\-q\fR or \fB\-qf\fR then all the
query result nodes will be nested inside a node with this name (ie
this provides a root for the resulting document tree)
.PP
\fI\-qf QUERY-FILE\fR
.IX Subsection "-qf QUERY-FILE"
.PP
This is a file of newline-seperated IDs; this is useful for querying
the index in batch
.PP
\fI\-keys\fR
.IX Subsection "-keys"
.PP
This will write a list of all primary keys in the index
.PP
\fI\-w \s-1WRITER\s0\fR
.IX Subsection "-w WRITER"
.PP
This format will be used to write the data; can be any stag format
(xml, sxpr, itext) \- default \s-1XML.\s0
.PP
Can also be a module that catches the incoming stag event stream and
does something with it (for example, this could be a module you write
yourself that transforms the stag events into \s-1HTML\s0)
.SH "SEE ALSO"
.IX Header "SEE ALSO"
Data::Stag
.PP
For more complex stag to database mapping, see DBIx::DBStag and the
scripts
.PP
stag-storenode
.PP
selectall_xml
