more info, some SRU examples, etc ..
[idzebra-moved-to-github.git] / doc / architecture.xml
1  <chapter id="architecture">
2   <!-- $Id: architecture.xml,v 1.5 2006-02-16 16:50:18 marc Exp $ -->
3   <title>Overview of Zebra Architecture</title>
4   
5
6   <sect1 id="architecture-representation">
7    <title>Local Representation</title>
8
9    <para>
10     As mentioned earlier, Zebra places few restrictions on the type of
11     data that you can index and manage. Generally, whatever the form of
12     the data, it is parsed by an input filter specific to that format, and
13     turned into an internal structure that Zebra knows how to handle. This
14     process takes place whenever the record is accessed - for indexing and
15     retrieval.
16    </para>
17
18    <para>
19     The RecordType parameter in the <literal>zebra.cfg</literal> file, or
20     the <literal>-t</literal> option to the indexer tells Zebra how to
21     process input records.
22     Two basic types of processing are available - raw text and structured
23     data. Raw text is just that, and it is selected by providing the
24     argument <emphasis>text</emphasis> to Zebra. Structured records are
25     all handled internally using the basic mechanisms described in the
26     subsequent sections.
27     Zebra can read structured records in many different formats.
28     <!--
29     How this is done is governed by additional parameters after the
30     "grs" keyword, separated by "." characters.
31     -->
32    </para>
33   </sect1>
34
35   <sect1 id="architecture-maincomponents">
36    <title>Main Components</title>
37    <para>
38     The Zebra system is designed to support a wide range of data management
39     applications. The system can be configured to handle virtually any
40     kind of structured data. Each record in the system is associated with
41     a <emphasis>record schema</emphasis> which lends context to the data
42     elements of the record.
43     Any number of record schemas can coexist in the system.
44     Although it may be wise to use only a single schema within
45     one database, the system poses no such restrictions.
46    </para>
47    <para>
48     The Zebra indexer and information retrieval server consists of the
49     following main applications: the <literal>zebraidx</literal>
50     indexing maintenance utility, and the <literal>zebrasrv</literal>
51     information query and retireval server. Both are using some of the
52     same main components, which are presented here.
53    </para>    
54    <para>    
55     This virtual package installs all the necessary packages to start
56     working with Zebra - including utility programs, development libraries,
57     documentation and modules.
58      <literal>idzebra1.4</literal>
59   </para>    
60    
61    <sect2 id="componentcore">
62     <title>Core Zebra Module Containing Common Functionality</title>
63     <para>
64      - loads external filter modules used for presenting
65      the recods in a search response.
66      - executes search requests in PQF/RPN, which are handed over from
67      the YAZ server frontend API   
68      - calls resorting/reranking algorithms on the hit sets
69      - returns - possibly ranked - result sets, hit
70      numbers, and the like internal data to the YAZ server backend API.
71     </para>
72     <para> 
73      This package contains all run-time libraries for Zebra.
74      <literal>libidzebra1.4</literal> 
75      This package includes documentation for Zebra in PDF and HTML.
76      <literal>idzebra1.4-doc</literal> 
77      This package includes common essential Zebra configuration files
78      <literal>idzebra1.4-common</literal>
79     </para>
80    </sect2>
81    
82
83    <sect2 id="componentindexer">
84     <title>Zebra Indexer</title>
85     <para>
86      the core Zebra indexer which
87      - loads external filter modules used for indexing data records of
88      different type. 
89      - creates, updates and drops databases and indexes
90     </para>    
91     <para>    
92      This package contains Zebra utilities such as the zebraidx indexer
93      utility and the zebrasrv server.
94      <literal>idzebra1.4-utils</literal>
95     </para>
96    </sect2>
97
98    <sect2 id="componentsearcher">
99     <title>Zebra Searcher/Retriever</title>
100     <para>
101      the core Zebra searcher/retriever which
102     </para>    
103     <para>    
104      This package contains Zebra utilities such as the zebraidx indexer
105      utility and the zebrasrv server, and their associated man pages.
106      <literal>idzebra1.4-utils</literal>
107     </para>
108    </sect2>
109
110    <sect2 id="componentyazserver">
111     <title>YAZ Server Frontend</title>
112     <para>
113      The YAZ server frontend is 
114      a full fledged stateful Z39.50 server taking client
115      connections, and forwarding search and scan requests to the 
116      Zebra core indexer.
117     </para>
118     <para>
119      In addition to Z39.50 requests, the YAZ server frontend acts
120      as HTTP server, honouring
121       <ulink url="http://www.loc.gov/standards/sru/srw/">SRW</ulink> SOAP requests, and  <ulink url="http://www.loc.gov/standards/sru/">SRU</ulink> REST requests. Moreover, it can
122      translate inco ming <ulink url="http://www.loc.gov/standards/sru/cql/">CQL</ulink> queries to PQF/RPN queries, if
123      correctly configured. 
124     </para>
125     <para>
126     YAZ is a toolkit that allows you to develop software using the
127     ANSI Z39.50/ISO23950 standard for information retrieval.
128      <ulink url="http://www.loc.gov/standards/sru/srw/">SRW</ulink>/ <ulink url="http://www.loc.gov/standards/sru/">SRU</ulink>
129     <literal>libyazthread.so</literal>
130     <literal>libyaz.so</literal>
131     <literal>libyaz</literal>
132     </para>
133    </sect2>
134    
135    <sect2 id="componentmodules">
136     <title>Record Models and Filter Modules</title>
137     <para>
138       all filter modules which do indexing and record display filtering:
139 This virtual package contains all base IDZebra filter modules. EMPTY ???
140      <literal>libidzebra1.4-modules</literal>
141     </para>
142
143    <sect3 id="componentmodulestext">
144     <title>TEXT Record Model and Filter Module</title>
145     <para>
146       Plain ASCII text filter
147      <!--
148      <literal>text module missing as deb file<literal>
149      -->
150     </para>
151    </sect3>
152
153    <sect3 id="componentmodulesgrs">
154     <title>GRS Record Model and Filter Modules</title>
155     <para>
156     <xref linkend="record-model-grs"/>
157
158      - grs.danbib     GRS filters of various kind (*.abs files)
159 IDZebra filter grs.danbib (DBC DanBib records)
160   This package includes grs.danbib filter which parses DanBib records.
161   DanBib is the Danish Union Catalogue hosted by DBC
162   (Danish Bibliographic Centre).
163      <literal>libidzebra1.4-mod-grs-danbib</literal>
164
165
166      - grs.marc
167      - grs.marcxml
168   This package includes the grs.marc and grs.marcxml filters that allows
169   IDZebra to read MARC records based on ISO2709.
170
171      <literal>libidzebra1.4-mod-grs-marc</literal>
172
173      - grs.regx
174      - grs.tcl        GRS TCL scriptable filter
175   This package includes the grs.regx and grs.tcl filters.
176      <literal>libidzebra1.4-mod-grs-regx</literal>
177
178
179      - grs.sgml
180      <literal>libidzebra1.4-mod-grs-sgml not packaged yet ??</literal>
181
182      - grs.xml
183   This package includes the grs.xml filter which uses <ulink url="http://expat.sourceforge.net/">Expat</ulink> to
184   parse records in XML and turn them into IDZebra's internal grs node.
185      <literal>libidzebra1.4-mod-grs-xml</literal>
186     </para>
187    </sect3>
188
189    <sect3 id="componentmodulesalvis">
190     <title>ALVIS Record Model and Filter Module</title>
191      <para>
192       <xref linkend="record-model-alvisxslt"/>
193       - alvis          Experimental Alvis XSLT filter
194       <literal>mod-alvis.so</literal>
195       <literal>libidzebra1.4-mod-alvis</literal>
196      </para>
197     </sect3>
198
199    <sect3 id="componentmodulessafari">
200     <title>SAFARI Record Model and Filter Module</title>
201     <para>
202      - safari
203      <!--
204      <literal>safari module missing as deb file<literal>
205      -->
206     </para>
207    </sect3>
208
209    </sect2>
210
211   </sect1>
212
213
214   <sect1 id="architecture-workflow">
215    <title>Indexing and Retrieval Workflow</title>
216
217   <para>
218    Records pass through three different states during processing in the
219    system.
220   </para>
221
222   <para>
223
224    <itemizedlist>
225     <listitem>
226      
227      <para>
228       When records are accessed by the system, they are represented
229       in their local, or native format. This might be SGML or HTML files,
230       News or Mail archives, MARC records. If the system doesn't already
231       know how to read the type of data you need to store, you can set up an
232       input filter by preparing conversion rules based on regular
233       expressions and possibly augmented by a flexible scripting language
234       (Tcl).
235       The input filter produces as output an internal representation,
236       a tree structure.
237
238      </para>
239     </listitem>
240     <listitem>
241
242      <para>
243       When records are processed by the system, they are represented
244       in a tree-structure, constructed by tagged data elements hanging off a
245       root node. The tagged elements may contain data or yet more tagged
246       elements in a recursive structure. The system performs various
247       actions on this tree structure (indexing, element selection, schema
248       mapping, etc.),
249
250      </para>
251     </listitem>
252     <listitem>
253
254      <para>
255       Before transmitting records to the client, they are first
256       converted from the internal structure to a form suitable for exchange
257       over the network - according to the Z39.50 standard.
258      </para>
259     </listitem>
260
261    </itemizedlist>
262
263   </para>
264   </sect1>
265
266
267  </chapter> 
268
269  <!-- Keep this comment at the end of the file
270  Local variables:
271  mode: sgml
272  sgml-omittag:t
273  sgml-shorttag:t
274  sgml-minimize-attributes:nil
275  sgml-always-quote-attributes:t
276  sgml-indent-step:1
277  sgml-indent-data:t
278  sgml-parent-document: "zebra.xml"
279  sgml-local-catalogs: nil
280  sgml-namecase-general:t
281  End:
282  -->