processes, interprets and redirects requests from IR clients using
standard protocols such as the binary
<ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink>
processes, interprets and redirects requests from IR clients using
standard protocols such as the binary
<ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink>
<para>
<ulink url="&url.metaproxy;">Metaproxy</ulink>
is a stand alone program that acts as a universal router, proxy and
<para>
<ulink url="&url.metaproxy;">Metaproxy</ulink>
is a stand alone program that acts as a universal router, proxy and
as <ulink url="&url.z39.50;">Z39.50</ulink> and
<ulink url="&url.sru;">SRU</ulink>.
To clients, it acts as a server of these protocols: it can be searched,
as <ulink url="&url.z39.50;">Z39.50</ulink> and
<ulink url="&url.sru;">SRU</ulink>.
To clients, it acts as a server of these protocols: it can be searched,
To servers, it acts as a client: it searches in them,
retrieves records from them, etc. it satisfies its clients'
requests by transforming them, multiplexing them, forwarding them
To servers, it acts as a client: it searches in them,
retrieves records from them, etc. it satisfies its clients'
requests by transforming them, multiplexing them, forwarding them
<ulink url="&url.libxml2;">Libxml2</ulink>. Both Libxml2 and
Libxslt must be installed with the development components
(header files, etc.) as well as the run-time libraries.
<ulink url="&url.libxml2;">Libxml2</ulink>. Both Libxml2 and
Libxslt must be installed with the development components
(header files, etc.) as well as the run-time libraries.
apt-get install libboost-dev
apt-get install libboost-thread-dev
apt-get install libboost-test-dev
apt-get install libboost-dev
apt-get install libboost-thread-dev
apt-get install libboost-test-dev
- All external dependencies for Metaproxy are available as
- RPM packages, either from your distribution site, or from the
+ All external dependencies for Metaproxy are available as
+ RPM packages, either from your distribution site, or from the
wget ftp://fr.rpmfind.net/wlinux/fedora/core/updates/testing/4/SRPMS/boost-1.33.0-3.fc4.src.rpm
sudo rpmbuild --buildroot src/ --rebuild -p fc4/boost-1.33.0-3.fc4.src.rpm
sudo rpm -U /usr/src/redhat/RPMS/i386/boost-*rpm
wget ftp://fr.rpmfind.net/wlinux/fedora/core/updates/testing/4/SRPMS/boost-1.33.0-3.fc4.src.rpm
sudo rpmbuild --buildroot src/ --rebuild -p fc4/boost-1.33.0-3.fc4.src.rpm
sudo rpm -U /usr/src/redhat/RPMS/i386/boost-*rpm
others are sinks: they consume packages and return a result
(<literal>backend_test</literal>,
<literal>bounce</literal>,
others are sinks: they consume packages and return a result
(<literal>backend_test</literal>,
<literal>bounce</literal>,
<literal>z3950_client</literal>);
the others are true filters, that read, process and pass on the
packages they are fed
<literal>z3950_client</literal>);
the others are true filters, that read, process and pass on the
packages they are fed
<section id="backend_test">
<title><literal>backend_test</literal>
(mp::filter::Backend_test)</title>
<section id="backend_test">
<title><literal>backend_test</literal>
(mp::filter::Backend_test)</title>
and returns them almost unprocessed.
It never sends any package of any type further down the row, but
sets Z39.50 packages to Z_Close, and HTTP_Request packages to
HTTP_Response err code 400 packages, and adds a suitable bounce
and returns them almost unprocessed.
It never sends any package of any type further down the row, but
sets Z39.50 packages to Z_Close, and HTTP_Request packages to
HTTP_Response err code 400 packages, and adds a suitable bounce
The bounce filter is usually added at end of each filter chain route
to prevent infinite hanging of for example HTTP
The bounce filter is usually added at end of each filter chain route
to prevent infinite hanging of for example HTTP
<literal>searchRequest</literal>
packages containing <literal>CQL</literal> queries, transforms
those to <literal>RPN</literal> queries,
and sends the <literal>searchRequests</literal> on to the next
<literal>searchRequest</literal>
packages containing <literal>CQL</literal> queries, transforms
those to <literal>RPN</literal> queries,
and sends the <literal>searchRequests</literal> on to the next
<section id="frontend_net">
<title><literal>frontend_net</literal>
(mp::filter::FrontendNet)</title>
<section id="frontend_net">
<title><literal>frontend_net</literal>
(mp::filter::FrontendNet)</title>
- A partial sink which swallows only
- <literal>HTTP_Request</literal> packages, and
+ A partial sink which swallows only
+ <literal>HTTP_Request</literal> packages, and
(Yes, Virginia, this
does mean that Metaproxy is also a Web-server in its spare time. So
far it does not contain either an email-reader or a Lisp
interpreter, but that day is surely coming.)
</para>
</section>
(Yes, Virginia, this
does mean that Metaproxy is also a Web-server in its spare time. So
far it does not contain either an email-reader or a Lisp
interpreter, but that day is surely coming.)
</para>
</section>
<section id="load_balance">
<title><literal>load_balance</literal>
(mp::filter::LoadBalance)</title>
<section id="load_balance">
<title><literal>load_balance</literal>
(mp::filter::LoadBalance)</title>
Performs load balancing for incoming Z39.50 init requests.
It is used together with the <literal>virt_db</literal> filter,
but unlike the <literal>multi</literal> filter it does send an
Performs load balancing for incoming Z39.50 init requests.
It is used together with the <literal>virt_db</literal> filter,
but unlike the <literal>multi</literal> filter it does send an
<literal>load_balance</literal> filter is assuming that
all backend targets have equal content, and chooses the backend
with least load cost for a new session.
<literal>load_balance</literal> filter is assuming that
all backend targets have equal content, and chooses the backend
with least load cost for a new session.
<section id="query_rewrite">
<title><literal>query_rewrite</literal>
(mp::filter::QueryRewrite)</title>
<para>
<section id="query_rewrite">
<title><literal>query_rewrite</literal>
(mp::filter::QueryRewrite)</title>
<para>
- Rewrites Z39.50 <literal>Type-1</literal>
- and <literal>Type-101</literal> (``<literal>RPN</literal>'')
+ Rewrites Z39.50 <literal>Type-1</literal>
+ and <literal>Type-101</literal> (``<literal>RPN</literal>'')
queries by a
three-step process: the query is transliterated from Z39.50
packet structures into an XML representation; that XML
queries by a
three-step process: the query is transliterated from Z39.50
packet structures into an XML representation; that XML
<section id="record_transform">
<title><literal>record_transform</literal>
(mp::filter::RecordTransform)</title>
<section id="record_transform">
<title><literal>record_transform</literal>
(mp::filter::RecordTransform)</title>
This filter implements global sharing of
result sets (i.e. between threads and therefore between
clients), yielding performance improvements by clever resource
This filter implements global sharing of
result sets (i.e. between threads and therefore between
clients), yielding performance improvements by clever resource
messages.
The <literal>sru_z3950</literal> filter processes also SRU
GET/POST/SOAP explain requests, returning
messages.
The <literal>sru_z3950</literal> filter processes also SRU
GET/POST/SOAP explain requests, returning
<ulink url="&url.sru.explain;">SRU Explain</ulink> pages
for more information on the correct explain syntax.
SRU scan requests are not supported yet.
</para>
</section>
<ulink url="&url.sru.explain;">SRU Explain</ulink> pages
for more information on the correct explain syntax.
SRU scan requests are not supported yet.
</para>
</section>
<section id="z3950_client">
<title><literal>z3950_client</literal>
(mp::filter::Z3950Client)</title>
<section id="z3950_client">
<title><literal>z3950_client</literal>
(mp::filter::Z3950Client)</title>
the route. Subsequent requests are sent to the same address,
which is remembered at Init time in a Session object.
HTTP_Request packages and all other forthcoming package types
the route. Subsequent requests are sent to the same address,
which is remembered at Init time in a Session object.
HTTP_Request packages and all other forthcoming package types
Z39.50 explain requests, returning a static ZeeReX
Explain XML record from the config section. All other packages
are passed through.
Z39.50 explain requests, returning a static ZeeReX
Explain XML record from the config section. All other packages
are passed through.
<ulink url="&url.zeerex.explain;">ZeeReX Explain</ulink>
standard pages
for more information on the correct explain syntax.
<ulink url="&url.zeerex.explain;">ZeeReX Explain</ulink>
standard pages
for more information on the correct explain syntax.
specifies the location of filter modules. This is only needed
if Metaproxy must load 3rd party filters (most filters with Metaproxy
are built into the Metaproxy application).
specifies the location of filter modules. This is only needed
if Metaproxy must load 3rd party filters (most filters with Metaproxy
are built into the Metaproxy application).
mutton, beef and trout packages.
When the response arrives, it is handed
back to the <literal>log</literal> filter, which emits another
mutton, beef and trout packages.
When the response arrives, it is handed
back to the <literal>log</literal> filter, which emits another
<para>
Metaproxy XML configuration snippets can be reused by other
filters using the <literal>XInclude</literal> standard, as seen in
<para>
Metaproxy XML configuration snippets can be reused by other
filters using the <literal>XInclude</literal> standard, as seen in
<para>
The distribution contains RelaxNG Compact and XML syntax checking
files, as well as XML Schema files. These are found in the
<para>
The distribution contains RelaxNG Compact and XML syntax checking
files, as well as XML Schema files. These are found in the
configuration files. For example, using the utility
<filename>xmllint</filename>, syntax checking is done like this:
<screen>
configuration files. For example, using the utility
<filename>xmllint</filename>, syntax checking is done like this:
<screen>
- xmllint --noout --schema xml/schema/metaproxy.xsd etc/config-local.xml
- xmllint --noout --relaxng xml/schema/metaproxy.rng etc/config-local.xml
+ xmllint --noout --schema xml/schema/metaproxy.xsd etc/config-local.xml
+ xmllint --noout --relaxng xml/schema/metaproxy.rng etc/config-local.xml
</screen>
(A recent version of <literal>libxml2</literal> is required, as
support for XML Schemas is a relatively recent addition.)
</screen>
(A recent version of <literal>libxml2</literal> is required, as
support for XML Schemas is a relatively recent addition.)
- Metaproxy can act as
- <ulink url="&url.sru;">SRU</ulink> and
- web service server, which translates web service requests to
+ Metaproxy can act as
+ <ulink url="&url.sru;">SRU</ulink> and
+ web service server, which translates web service requests to
<ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink> packages and
sends them off to common available targets.
</para>
<para>
A typical setup for this operation needs a filter route including the
<ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink> packages and
sends them off to common available targets.
</para>
<para>
A typical setup for this operation needs a filter route including the
<table id="sru-server-table-config" frame="top">
<title>SRU/Z39.50 Server Filter Route Configuration</title>
<tgroup cols="3">
<table id="sru-server-table-config" frame="top">
<title>SRU/Z39.50 Server Filter Route Configuration</title>
<tgroup cols="3">
- SRU server solution, including, but not limited to, load balancing,
- multiple target querying
- (see <xref linkend="multidb"/>), and complex RPN query rewrites.
+ SRU server solution, including, but not limited to, load balancing,
+ multiple target querying
+ (see <xref linkend="multidb"/>), and complex RPN query rewrites.
<para>
You should have received a copy of the GNU General Public License
along with Metaproxy; see the file LICENSE. If not, write to the
<para>
You should have received a copy of the GNU General Public License
along with Metaproxy; see the file LICENSE. If not, write to the
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</para>
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</para>