1 <chapter id="proxy-reference">
2 <title>Proxy Reference</title>
3 <section id="proxy-operation">
4 <title>Operating Environment</title>
6 The YAZ proxy is a console program. After startup it spawns
7 a child process (except on Windows or if option -X is given).
8 The child process is the core of the proxy and it handles all
9 communication with clients and servers. The parent process
10 will restart the child process if it dies unexpectedly and report
11 the reason. For options for YAZ proxy,
12 see <xref linkend="proxy-usage"/>.
15 As an option, the proxy may change user identity to a less privileged
19 <section id="proxy-target">
20 <title>Choosing the Backend Server</title>
22 When the proxy receives a Z39.50 Initialize Request from a Z39.50
23 client, it determines the backend server by the following rules:
26 <para>If the <literal>InitializeRequest</literal> PDU from the
28 <link linkend="otherinfo-encoding"><literal>otherInfo</literal></link>
30 <literal>1.2.840.10003.10.1000.81.1</literal>, then the
31 contents of that element specify the server to be used, in the
32 usual YAZ address format (typically
33 <literal>tcp:<parameter>hostname</parameter>:<parameter>port</parameter></literal>)
35 <ulink url="&url.yaz.comstack.addresses;"
36 >the Addresses section of the YAZ manual</ulink>.
41 <para>Otherwise, the Proxy uses the default server, if one was
42 specified in the proxy configuration file. See
43 <xref linkend="proxy-config-target"/>.
48 <para>Otherwise, the Proxy uses the default server, if one was
49 specified on the command-line with the <literal>-t</literal>
54 <para>Otherwise, the proxy closes the connection with
61 If the proxy receives an SRU request, the following rules are used.
64 <para>If default target has Explain information with a
65 <literal>database</literal> that matches the path of the
66 HTTP request of SRU that backend server is used for SRU operation.
71 Otherwise the service will return HTTP 404 (Not found).
77 <section id="proxy-keepalive">
78 <title>Keep-alive Facility</title>
80 The keep-alive is a facility where the proxy keeps the connection to the
81 backend server - even if the client closes the connection to the proxy.
84 If a new or another client connects to the proxy again and requests the
85 same backend it will be reassigned to this backend. In this case, the
86 proxy sends an initialize response directly to the client and an
87 initialize handshake with the backend is omitted.
90 When a client reconnects, query and record caching works better, if the
91 proxy assigns it to the same backend as before. And the result set
92 (if any) is re-used. To achieve this, Index Data defined a session
93 cookie which identifies the backend session.
96 The cookie is defined by the client and is sent as part of the
97 Initialize Request and passed in an
98 <link linkend="otherinfo-encoding"><literal>otherInfo</literal></link>
99 element with OID <literal>1.2.840.10003.10.1000.81.2</literal>.
102 Clients that do not send a cookie as part of the initialize request
103 may still better performance, since the init handshake is saved.
106 Refer to <xref linkend="proxy-config-keepalive"/> on how to setup
107 configuration parameters for keepalive.
112 <section id="query-cache">
113 <title>Query Caching</title>
115 Simple stateless clients often send identical Z39.50 searches
116 in a relatively short period of time (e.g. in order to produce a
117 results-list page, the next page,
118 a single full-record, etc). And for many targets, it's
119 much more expensive to produce a new result set than to
120 reuse an existing one.
123 The proxy tries to solve that by remembering the last query for each
124 backend target, so that if an identical query is received next, it
125 is turned into Present Requests rather than new Search Requests.
129 In a future we release will will probably allows for
130 an arbitrary-sized cache for targets supporting named result sets.
134 You can enable/disable query caching using option -o.
138 <section id="record-cache">
139 <title>Record Caching</title>
141 As an option, the proxy may also cache result set records for the
143 The proxy takes into account the Record Syntax and CompSpec.
144 The CompSpec includes simple element set names as well.
145 By default the cache is 200000 bytes per session.
149 <section id="query-validation">
150 <title>Query Validation</title>
152 The Proxy may also be configured to trap particular attributes in
153 Type-1 queries and send Bib-1 diagnostics back to the client without
154 even consulting the backend target. This facility may be useful if
155 a target does not properly issue diagnostics when unsupported attributes
160 <section id="record-validation">
161 <title>Record Syntax Validation</title>
163 The proxy may be configured to accept, reject or convert records.
164 When accepted, the target passes search/present requests to the
165 backend target under the assumption that the target can honor the
166 request (In fact it may not do that). When a record is rejected because
167 the record syntax is "unsupported" the proxy returns a diagnostic to the
168 client. Finally, the proxy may convert records.
171 The proxy can convert from MARC to MARCXML and thereby offer an
172 XML version of any MARC record as long as it is ISO2709 encoded.
173 If the proxy is compiled with libXSLT support it can also
178 <section id="other-optimizations">
179 <title>Other Optimizations</title>
181 We've had some plans to support global caching of result set records,
182 but this has not yet been implemented.
186 <section id="proxy-config-file">
187 <title>Proxy Configuration File</title>
189 The Proxy may read a configuration file using option
190 <literal>-c</literal> followed by the filename of a config file.
193 The config file is XML based. The YAZ proxy must be compiled
194 with <ulink url="&url.libxml2;">libxml2</ulink> and
195 <ulink url="&url.libxslt;">libXSLT</ulink> support in
196 order for the config file facility to be enabled.
199 See <xref linkend="yazproxy-schema"/> for an XML schema
200 for the configuration.
203 <para>To check for a config file to be well-formed, the yazproxy may
204 be invoked without specifying a listening port, i.e.
206 yazproxy -c myconfig.xml
208 If this does not produce errors, the file is well-formed.
211 <section id="proxy-config-header">
212 <title>Proxy Configuration Header</title>
214 The proxy config file must have a root element called
215 <literal>proxy</literal> and scoped within namespace
216 <literal> xmlns="http://indexdata.dk/yazproxy/schema/0.9/"</literal>.
217 All information except an optional XML header must be stored
218 within the <literal>proxy</literal> element.
221 <?xml version="1.0"?>
222 <proxy xmlns="http://indexdata.dk/yazproxy/schema/0.9/">
223 <!-- content here .. -->
227 <section id="proxy-config-target">
228 <title>target</title>
230 The element <literal>target</literal> which may be repeated zero
231 or more times with parent element <literal>proxy</literal> contains
232 information about each backend target.
233 The <literal>target</literal> element have two attributes:
234 <literal>name</literal> which holds the logical name of the backend
235 target (required) and <literal>default</literal> (optional) which
236 (when given) specifies that the backend target is the default target -
237 equivalent to command line option <literal>-t</literal>.
241 <?xml version="1.0"?>
242 <proxy xmlns="http://indexdata.dk/yazproxy/schema/0.9/">
243 <target name="server1" default="1">
244 <!-- description of server1 .. -->
246 <target name="server2">
247 <!-- description of server2 .. -->
254 <section id="proxy-config-url">
257 The <literal>url</literal> which may be repeated one or more times
258 should be the child of the <literal>target</literal> element.
259 The CDATA of <literal>url</literal> is the Z-URL of the backend.
262 Multiple <literal>url</literal> element may be used. In that case, then
263 a client initiates a session, the proxy chooses the URL with the lowest
264 number of active sessions, thereby distributing the load. It is
265 assumed that each URL represents the same database (data).
269 <section id="proxy-config-target-timeout">
270 <title>target-timeout</title>
272 The element <literal>target-timeout</literal> is the child of element
273 <literal>target</literal> and specifies the amount in seconds before
274 a target session is shut down.
277 This can also be specified on the command line by using option
278 <literal>-T</literal>. Refer to OPTIONS in <xref linkend="proxy-usage"/>.
282 <section id="proxy-config-client-timeout">
283 <title>client-timeout</title>
285 The element <literal>client-timeout</literal> is the child of element
286 <literal>target</literal> and specifies the amount in seconds before
287 a client session is shut down.
290 This can also be specified on the command line by using option
291 <literal>-i</literal>. Refer to OPTIONS in <xref linkend="proxy-usage"/>.
295 <section id="proxy-config-max-sockets">
296 <title>max-sockets</title>
298 The element <literal>max-sockets</literal> is the child of element
299 <literal>target</literal> and specifies the maximum number of sockets
300 to use for the target for all sessions using it. In other words: maximum
301 number of Z39.50 session to the target.
305 <section id="proxy-config-keepalive">
306 <title>keepalive</title>
307 <para>The <literal>keepalive</literal> element holds information about
308 the keepalive Z39.50 sessions. Keepalive sessions are proxy-to-backend
309 sessions that is no longer associated with a client session.
311 <para>The <literal>keepalive</literal> element which is the child of
312 the <literal>target</literal>holds two elements:
313 <literal>bandwidth</literal> and <literal>pdu</literal>.
314 The <literal>bandwidth</literal> is the maximum total bytes
315 transferred to/from the target. If a target session exceeds this
316 limit, it is shut down (and no longer kept alive).
317 The <literal>pdu</literal> is the maximum number of requests sent
318 to the target. If a target session exceeds this limit, it is
319 shut down. The idea of these two limits is that avoid very long
320 sessions that use resources in a backend (that leaks!).
323 The following sets maximum number of bytes transferred in a
324 target session to 1 MB and maximum of requests to 400.
327 <bandwidth>1048576</bandwidth>
333 <section id="proxy-config-limit">
336 The <literal>limit</literal> section specifies bandwidth/pdu requests
337 limits for an active session.
338 The proxy records bandwidth/pdu requests during the last 60 seconds
339 (1 minute). The <literal>limit</literal> may include the
340 elements <literal>bandwidth</literal>, <literal>pdu</literal>,
341 <literal>retrieve</literal> and <literal>search</literal>.
342 The <literal>bandwidth</literal>
343 measures the number of bytes transferred within the last minute.
344 The <literal>pdu</literal> is the number of requests in the last
345 minute. The <literal>retrieve</literal> holds the maximum records to
346 which may be retrieved in one Present Request.
347 The <literal>search</literal> is the maximum number of searches
348 within the last minute.
351 If a bandwidth/pdu/search limit is reached the proxy will postpone the
352 requests to the target and wait one or more seconds. The idea of the
353 limit is to ensure that clients that downloads hundreds or thousands of
354 records do not hurt other users.
357 The following sets maximum number of bytes transferred per minute to
358 500Kbytes, maximum number of records retrievals to 40
359 and maximum number of searches to 20.
362 <bandwidth>524288</bandwidth>
363 <retrieve>40</retrieve>
364 <search>20</search>
370 Typically the values in the keepalive section are mugh higher
371 than their equivalent limit counterparts (bandwidth, pdu).
376 <section id="proxy-config-attribute">
377 <title>attribute</title>
379 The <literal>attribute</literal> element specifies accept or reject
380 or a particular attribute type, value pair.
381 Well-behaving targets will reject unsupported attributes on their
382 own. This feature is useful for targets that do not gracefully
383 handle unsupported attributes.
386 Attribute elements may be repeated. The proxy inspects the attribute
387 specifications in the order as specified in the configuration file.
388 When a given attribute specification matches a given attribute list
389 in a query, the proxy takes appropriate action (reject, accept).
392 If no attribute specifications matches the attribute list in a query,
396 The <literal>attribute</literal> element has two required attributes:
397 <literal>type</literal> which is the Attribute Type-1 type, and
398 <literal>value</literal> which is the Attribute Type-1 value.
399 The special value/type <literal>*</literal> matches any attribute
400 type/value. A value may also be specified as a list with each
401 value separated by comma, a value may also be specified as a
402 list: low value - dash - high value.
405 If attribute <literal>error</literal> is given, that holds a
406 Bib-1 diagnostic which is sent to the client if the particular
407 type, value is part of a query.
410 If attribute <literal>error</literal> is not given, the attribute
411 type, value is accepted and passed to the backend target.
414 A target that supports use attributes 1,4, 1000 through 1003 and
415 no other use attributes, could use the following rules:
417 <attribute type="1" value="1,4,1000-1003"/>
418 <attribute type="1" value="*" error="114"/>
422 <section id="proxy-config-syntax">
423 <title>syntax</title>
425 The <literal>syntax</literal> element specifies accept or reject
426 or a particular record syntax request from the client. It also
427 allows record conversion of XML records via XSLT.
430 The <literal>syntax</literal> has one required attribute:
431 <literal>type</literal> which is the Preferred Record Syntax.
434 If attribute <literal>error</literal> is given, that holds a
435 Bib-1 diagnostic which is sent to the client if the particular
436 record syntax is part of a present - or search request.
439 If attribute <literal>error</literal> is not given, the record syntax
440 is accepted and passed to the backend target.
443 If attribute <literal>marcxml</literal> is given, the proxy will
444 perform MARC21 to MARCXML conversion. In this case the
445 <literal>type</literal> should be XML. The proxy will use
446 preferred record syntax USMARC/MARC21 or <literal>backendtype</literal>
447 (if given) against the backend target.
448 For the special case where <literal>backendtype</literal> is
449 <literal>opac</literal> the proxy will convert the OPAC
453 When <literal>marcxml</literal> is used, yazproxy assumes
454 that records retrieved from the backend are encoded in the
455 <ulink url="&url.marc8;">MARC-8</ulink> character set.
456 This is correct for most MARC21 based systems, but not for
457 other MARC variants or UTF-8 based MARC21 systems.
458 The <literal>backendcharset</literal> attribute specifies
459 the character set of the MARC records to be converted.
462 If attribute <literal>backendtype</literal> is given, that holds the
463 record syntax to be transmitted to backend.
466 If attribute <literal>backendelementset</literal> is given, that holds
467 elementset to be transmitted to backend. An empty value of
468 <literal>backendelementset</literal> has the effect of omitting
469 any Comp-Spec (and elementset) sent to backend.
471 <para>If <literal>backendelementset</literal> is omitted, the element
472 set from client is used, except if <literal>marcxml</literal> is used.
473 In that case (using <literal>marcxml</literal>), no Comp-Spec and no
474 elementset is sent to backend.
477 If attribute <literal>stylesheet</literal> is given, the proxy
478 will convert XML record from server via XSLT. It is important
479 that the content from server is XML. If used in conjunction with
480 attribute <literal>marcxml</literal>, the MARC to MARCXML/OPACXML
481 conversion takes place before the XSLT conversion takes place.
484 If attribute <literal>identifier</literal> is given that is the
485 SRU record schema identifier for the resulting output record (after
486 MARCXML and/or XSLT conversion).
489 If sub element <literal>title</literal> is given (as child element
490 of <literal>syntax</literal>, then that is the official SRU
491 name of the resulting record schema.
494 If sub element <literal>name</literal> is given that is an alias
495 for the record schema identifier. Multiple <literal>name</literal>s
499 <title>MARCXML conversion</title>
500 <para>To accept USMARC and offer MARCXML XML plus Dublin Core (via
501 XSLT conversion) but the following configuration could be used:
504 <target name="mytarget">
506 <syntax type="usmarc"/>
507 <syntax type="xml" marcxml="1"
508 identifier="info:srw/schema/1/marcxml-v1.1"
509 <title>MARCXML<title>
510 <name>marcxml<name>
512 <syntax type="xml" marcxml="1" stylesheet="MARC21slim2SRWDC.xsl"
513 identifier="info:srw/schema/1/dc-v1.1">
514 <title>Dublin Core<title>
517 <syntax type="*" error="238"/>
527 <section id="proxy-config-explain">
528 <title>explain</title>
530 The <literal>explain</literal> element includes Explain information
531 for SRU about the server in the target section. This
532 information must have a <literal>serverInfo</literal> element
533 with a database that this target must be available as (URL path).
536 <explain xmlns="http://explain.z3950.org/dtd/2.0/">
538 <host>myhost.org</host>
540 <database>mydatabase</database>
542 <!-- remaining Explain stuff -->
546 In the above case, the SRU service is available as
547 <literal>http://myhost.org:8000/mydatabase</literal>.
552 <section id="proxy-config-cql2rpn">
553 <title>cql2rpn</title>
555 The content of the <literal>cql2rpn</literal> element specifies
556 the path from the working directory to a CQL-to-RPN conversion
557 file for the server in the target section. This element
558 is required for SRU searches to operate against Z39.50
559 servers that don't support CQL. Most Z39.50 servers only support
560 Type-1/RPN so this is usually required.
563 See YAZ documentation for more information about the
564 <ulink url="&url.yaz.cql2pqf;">CQL to PQF</ulink> conversion.
566 <filename>pqf.properties</filename> in the <filename>etc</filename>
567 (or <replaceable>prefix/share/yazproxy</replaceable>)
568 directory of the YAZ proxy distribution.
572 <section id="proxy-config-preinit">
573 <title>preinit</title>
575 The element <literal>preinit</literal> is the child of element
576 <literal>target</literal> and specifies the number of spare
577 connection to a target. By default no spare connection are
578 created by the proxy. If the proxy uses a target exclusive or
579 a lot, the preinit session will ensure that target sessions
580 have been made before the client makes a connection and will therefore
581 reduce the connect-init handshake dramatically. Never set this to
586 <section id="proxy-config-target-authentication">
587 <title>target-authentication</title>
589 The element <literal>target-authentication</literal> specifies
590 fixed authentication information to be sent to the backend target.
593 This element takes a an attribute <literal>type</literal> which is
594 the authenticatin type to be used..
597 <varlistentry><term><literal>none</literal></term>
600 No authentication. There is no CDATA associated with this.
605 <varlistentry><term><literal>anonymous</literal></term>
608 Anonymous authentication. There is no CDATA associated with this.
613 <varlistentry><term><literal>open</literal></term>
616 Open authentication. The CDATA consists of the
617 open authentication string.
622 <varlistentry><term><literal>idPass</literal></term>
625 IdPass authentication. The CDATA consists of
626 three terms: user, group and password.
633 <section id="proxy-config-target-charset">
634 <title>target-charset</title>
636 The element <literal>target-charset</literal> specifies the
637 native character set that the target uses for queries.
640 If this is specified the proxy will act as a Z39.50 server
641 supporting character set negotiation. And in SRU mode
642 it will convert from UTF-8 (UNICODE) to this native character
647 <section id="proxy-config-max-clients">
648 <title>max-clients</title>
650 The element <literal>max-clients</literal> is the child of element
651 <literal>proxy</literal> and specifies the total number of
652 allowed connections to targets (all targets). If this limit
653 is reached the proxy will close the least recently used connection.
656 Note, that many Unix systems impose a system on the number of
657 open files allowed in a single process, typically in the
658 range 256 (Solaris) to 1024 (Linux).
659 The proxy uses 2 sockets per session + a few files
660 for logging. As a rule of thumb, ensure that 2*max-clients + 5
661 can be opened by the proxy process.
665 Using the <ulink url="&url.bash;">bash</ulink> shell, you can set
667 <literal>ulimit -n</literal><replaceable>no</replaceable>.
668 Use <literal>ulimit -a</literal> to display limits.
673 <section id="proxy-config-log">
676 The element <literal>log</literal> is the child of element
677 <literal>proxy</literal> and specifies what to be logged by the
681 Specify the log file with command-line option <literal>-l</literal>.
684 The text of the <literal>log</literal> element is a sequence of
685 options separated by white space. See the table below:
686 <table frame="top"><title>Logging options</title>
688 <colspec colwidth="1*"/>
689 <colspec colwidth="2*"/><thead>
691 <entry>Option</entry>
692 <entry>Description</entry>
697 <entry><literal>client-apdu</literal></entry>
699 Log APDUs as reported by YAZ for the
700 communication between the client and the proxy.
701 This facility is equivalent to the APDU logging that
702 happens when using option <literal>-a</literal>, however
703 this tells the proxy to log in the same file as given
704 by <literal>-l</literal>.
708 <entry><literal>server-apdu</literal></entry>
710 Log APDUs as reported by YAZ for the
711 communication between the proxy and the server (backend).
715 <entry><literal>clients-requests</literal></entry>
717 Log a brief description about requests transferred between
718 the client and the proxy. The name of the request and the size
719 of the APDU is logged.
723 <entry><literal>server-requests</literal></entry>
725 Log a brief description about requests transferred between
726 the proxy and the server (backend). The name of the request
727 and the size of the APDU is logged.
731 <entry><literal>client-ip</literal></entry>
733 Log the client IP for each log entry. By default, the client IP
734 is only logged when a new session starts.
742 To log communication in details between the proxy and the backend, th
743 following configuration could be used:
745 <target name="mytarget">
746 <log>server-apdu server-requests</log>
753 <section id="proxy-max-connect">
754 <title>max-connect</title>
756 The element <literal>max-connect</literal> is a child of element
757 <literal>proxy</literal> and specifies the maximum number
758 of connections to be initiated within the last minute (or
759 value of <link linkend="proxy-period-connect">period-connect</link>.
762 If the maximum number is reached the proxy will terminate the
763 just initiated session (connection terminated).
767 <section id="proxy-limit-connect">
768 <title>limit-connect</title>
770 The element <literal>max-connect</literal> is a child of element
771 <literal>proxy</literal> and specifies the limit of number
772 of connections to be initiated within the last minute (or
773 value of <link linkend="proxy-period-connect">period-connect</link>.
776 If the maximum number is reached the proxy delays the first operation
777 in the session by one second.
781 <section id="proxy-period-connect">
782 <title>period-connect</title>
784 The element <literal>period-connect</literal> is a child of element
785 <literal>proxy</literal> and specifies period - in the number of seconds
786 that <link linkend="proxy-limit-connect">limit-connect</link> and
787 <link linkend="proxy-max-connect">max-connect</link>
788 should measure connections.
791 If <literal>period-connect</literal> is omitted, 60 seconds is used.
795 <section id="proxy-docpath">
796 <title>docpath</title>
798 The element <literal>docpath</literal> is a child of element
799 <literal>proxy</literal> and specifies an allowed HTTP path
800 for local file access. Using <literal>docpath</literal> the
801 proxy may return static file content.
804 The value of docpath both serves as a HTTP path prefix
805 <emphasis>and</emphasis> as a local file prefix.
806 If a value of <literal>etc</literal> is used only URLs with the
807 prefix <literal>/etc/</literal> results in a local file access to the
808 directory <literal>etc</literal> within the working directory
813 Care has been taken to ensure that hostile URLs are rejected - including
814 strings such as <literal>..</literal> and <literal>/</literal> (absolute
821 <section id="proxy-usage">
822 <title>Proxy Manual Pages</title>
823 <refentry id="yazproxy-man">
828 <section id="otherinfo-encoding">
829 <title>OtherInformation Encoding</title>
831 The proxy uses the OtherInformation definition to carry
832 information about the target address and cookie.
835 OtherInformation ::= [201] IMPLICIT SEQUENCE OF SEQUENCE{
836 category [1] IMPLICIT InfoCategory OPTIONAL,
838 characterInfo [2] IMPLICIT InternationalString,
839 binaryInfo [3] IMPLICIT OCTET STRING,
840 externallyDefinedInfo [4] IMPLICIT EXTERNAL,
841 oid [5] IMPLICIT OBJECT IDENTIFIER}}
843 InfoCategory ::= SEQUENCE{
844 categoryTypeId [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
845 categoryValue [2] IMPLICIT INTEGER}
848 The <literal>categoryTypeId</literal> is either
849 OID 1.2.840.10003.10.1000.81.1, 1.2.840.10003.10.1000.81.2
850 for proxy target and proxy cookie respectively. The
851 <literal>categoryValue</literal> is set to 1.
852 The value proxy and cookie is stored in element
853 <literal>characterInfo</literal> of the <literal>information</literal>
857 <section id="yazproxy-schema">
858 <title>YAZ Proxy Configuration Schema</title>
860 Here an XML Schema for the YAZ proxy configuration file.
861 The schema, <filename>yazproxy.xsd</filename> is located in sub
862 directory <filename>etc</filename> of the distribution.
865 <?xml version="1.0"?>
866 <!-- XML Schema for YAZ proxy config file.
869 xmlns:xs="http://www.w3.org/2001/XMLSchema"
870 xmlns:exp="http://explain.z3950.org/dtd/2.0/"
871 xmlns="http://indexdata.dk/yazproxy/schema/0.9/"
872 targetNamespace="http://indexdata.dk/yazproxy/schema/0.9/"
874 <xs:import namespace="http://explain.z3950.org/dtd/2.0/"
875 schemaLocation="zeerex-2.0.xsd"/>
876 <xs:element name="proxy">
879 <xs:element ref="target" minOccurs="0" maxOccurs="unbounded"/>
880 <xs:element ref="max-clients" minOccurs="0"/>
881 <xs:element ref="log" minOccurs="0"/>
882 <xs:element ref="module" minOccurs="0"/>
887 <xs:element name="target">
890 <xs:element ref="url" minOccurs="0" maxOccurs="unbounded"/>
891 <xs:element ref="target-timeout" minOccurs="0"/>
892 <xs:element ref="client-timeout" minOccurs="0"/>
893 <xs:element ref="max-sockets" minOccurs="0"/>
894 <xs:element ref="keepalive" minOccurs="0"/>
895 <xs:element ref="limit" minOccurs="0"/>
896 <xs:element ref="attribute" minOccurs="0" maxOccurs="unbounded"/>
897 <xs:element ref="syntax" minOccurs="0" maxOccurs="unbounded"/>
898 <xs:element ref="preinit" minOccurs="0"/>
899 <xs:element ref="exp:explain" minOccurs="0"/>
900 <xs:element ref="cql2rpn" minOccurs="0"/>
901 <xs:element ref="target-authentication" minOccurs="0"/>
902 <xs:element ref="client-authentication" minOccurs="0"/>
903 <xs:element ref="negotiation-charset" minOccurs="0"/>
904 <xs:element ref="negotiation-lang" minOccurs="0"/>
906 <xs:attribute name="default" type="xs:string" use="optional"/>
907 <xs:attribute name="name" type="xs:string"/>
908 <xs:attribute name="database" type="xs:string"/>
912 <xs:element name="url" type="xs:string"/>
913 <xs:element name="target-timeout" type="xs:integer"/>
914 <xs:element name="client-timeout" type="xs:integer"/>
915 <xs:element name="max-sockets" type="xs:integer"/>
916 <xs:element name="bandwidth" type="xs:integer"/>
917 <xs:element name="pdu" type="xs:integer"/>
918 <xs:element name="retrieve" type="xs:integer"/>
919 <xs:element name="preinit" type="xs:integer"/>
920 <xs:element name="cql2rpn" type="xs:string"/>
921 <xs:element name="target-authentication">
924 <xs:extension base="xs:string">
925 <xs:attribute name="type" type="xs:string"/>
931 <xs:element name="client-authentication">
934 <xs:extension base="xs:string">
935 <xs:attribute name="module" type="xs:string"/>
936 <xs:attribute name="args" type="xs:string"/>
942 <xs:element name="negotiation-charset" type="xs:string"/>
943 <xs:element name="negotiation-lang" type="xs:string"/>
945 <xs:element name="keepalive">
948 <xs:element ref="bandwidth" minOccurs="0"/>
949 <xs:element ref="pdu" minOccurs="0"/>
953 <xs:element name="limit">
956 <xs:element ref="bandwidth" minOccurs="0"/>
957 <xs:element ref="pdu" minOccurs="0"/>
958 <xs:element ref="retrieve" minOccurs="0"/>
963 <xs:element name="attribute">
965 <xs:attribute name="type" type="xs:string"/>
966 <xs:attribute name="value" type="xs:string"/>
967 <xs:attribute name="error" type="xs:integer"/>
971 <xs:element name="syntax">
974 <xs:element ref="title" minOccurs="0"/>
975 <xs:element ref="name" minOccurs="0" maxOccurs="unbounded"/>
977 <xs:attribute name="error" type="xs:string" />
978 <xs:attribute name="type" type="xs:string" />
979 <xs:attribute name="marcxml" type="xs:string" />
980 <xs:attribute name="identifier" type="xs:string" />
981 <xs:attribute name="stylesheet" type="xs:string" />
982 <xs:attribute name="backendtype" type="xs:string" />
983 <xs:attribute name="backendcharset" type="xs:string" />
984 <xs:attribute name="usemarconstage1" type="xs:string" />
985 <xs:attribute name="usemarconstage2" type="xs:string" />
986 <xs:attribute name="backendelementset" type="xs:string" />
990 <xs:element name="title" type="xs:string"/>
991 <xs:element name="name" type="xs:string"/>
993 <xs:element name="max-clients" type="xs:integer"/>
994 <xs:element name="log" type="xs:string"/>
995 <xs:element name="module" type="xs:string"/>
1003 <!-- Keep this comment at the end of the file
1008 sgml-minimize-attributes:nil
1009 sgml-always-quote-attributes:t
1012 sgml-parent-document: "yazproxy.xml"
1013 sgml-local-catalogs: nil
1014 sgml-namecase-general:t