session_shared: resultset optimizesearch flag.
[metaproxy-moved-to-github.git] / xml / schema / metaproxy.xsd
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3   Metaproxy XML config file schemas
4   
5     Copyright (c) 2005-2008 Index Data.
6   
7     See the LICENSE file for details
8   
9   
10   The RelaxNG Compact Syntax file 'metaproxy.rnc' is the master copy.
11   
12   The RelaxNG XML Syntax and XML Schema are generated using 'trang':
13   trang metaproxy.rnc metaproxy.rng 
14   trang metaproxy.rnc metaproxy.xsd 
15   
16   Config file validation is done using 'xmllint':
17   xmllint -/-relaxng metaproxy.rng ../../../etc/config1.xml 
18   xmllint -/-schema metaproxy.xsd config-bytarget.xml
19   
20   For information on RelaxNG see http://relaxng.org 
21   see also http://books.xmlschemata.org/relaxng/
22 -->
23 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://indexdata.com/metaproxy" xmlns:mp="http://indexdata.com/metaproxy" xmlns:y="http://indexdata.com/yaz">
24   <xs:import namespace="http://indexdata.com/yaz" schemaLocation="retrievalinfo.xsd"/>
25   <xs:complexType name="any" mixed="true">
26     <xs:sequence>
27       <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
28     </xs:sequence>
29   </xs:complexType>
30   <xs:element name="metaproxy">
31     <xs:complexType>
32       <xs:sequence>
33         <xs:element minOccurs="0" ref="mp:dlpath"/>
34         <xs:element ref="mp:start"/>
35         <xs:element minOccurs="0" ref="mp:filters"/>
36         <xs:element ref="mp:routes"/>
37       </xs:sequence>
38       <xs:attribute name="version" use="required">
39         <xs:simpleType>
40           <xs:restriction base="xs:token">
41             <xs:enumeration value="1.0"/>
42           </xs:restriction>
43         </xs:simpleType>
44       </xs:attribute>
45     </xs:complexType>
46   </xs:element>
47   <xs:element name="dlpath" type="xs:string"/>
48   <xs:element name="start">
49     <xs:complexType>
50       <xs:attribute name="route" use="required" type="xs:NCName"/>
51     </xs:complexType>
52   </xs:element>
53   <xs:element name="filters">
54     <xs:complexType>
55       <xs:sequence>
56         <xs:element maxOccurs="unbounded" ref="mp:filter"/>
57       </xs:sequence>
58     </xs:complexType>
59   </xs:element>
60   <xs:element name="routes">
61     <xs:complexType>
62       <xs:sequence>
63         <xs:element maxOccurs="unbounded" ref="mp:route"/>
64       </xs:sequence>
65     </xs:complexType>
66   </xs:element>
67   <xs:element name="route">
68     <xs:complexType>
69       <xs:sequence>
70         <xs:element maxOccurs="unbounded" ref="mp:filter"/>
71       </xs:sequence>
72       <xs:attribute name="id" use="required" type="xs:NCName"/>
73     </xs:complexType>
74   </xs:element>
75   <xs:element name="filter">
76     <xs:complexType>
77       <xs:choice minOccurs="0">
78         <xs:group ref="mp:filter_auth_simple"/>
79         <xs:group ref="mp:filter_cgi"/>
80         <xs:element ref="mp:conversion"/>
81         <xs:group ref="mp:filter_frontend_net"/>
82         <xs:group ref="mp:filter_http_file"/>
83         <xs:group ref="mp:filter_limit"/>
84         <xs:group ref="mp:filter_log"/>
85         <xs:group ref="mp:filter_multi"/>
86         <xs:element ref="mp:xslt"/>
87         <xs:element ref="mp:filter_record_transform"/>
88         <xs:group ref="mp:filter_session_shared"/>
89         <xs:group ref="mp:filter_sru_z3950"/>
90         <xs:group ref="mp:filter_virt_db"/>
91         <xs:group ref="mp:filter_z3950_client"/>
92       </xs:choice>
93       <xs:attribute name="type">
94         <xs:simpleType>
95           <xs:restriction base="xs:token">
96             <xs:enumeration value="auth_simple"/>
97             <xs:enumeration value="backend_test"/>
98             <xs:enumeration value="bounce"/>
99             <xs:enumeration value="cgi"/>
100             <xs:enumeration value="cql_rpn"/>
101             <xs:enumeration value="frontend_net"/>
102             <xs:enumeration value="http_file"/>
103             <xs:enumeration value="limit"/>
104             <xs:enumeration value="load_balance"/>
105             <xs:enumeration value="log"/>
106             <xs:enumeration value="multi"/>
107             <xs:enumeration value="query_rewrite"/>
108             <xs:enumeration value="record_transform"/>
109             <xs:enumeration value="session_shared"/>
110             <xs:enumeration value="sru_z3950"/>
111             <xs:enumeration value="virt_db"/>
112             <xs:enumeration value="z3950_client"/>
113           </xs:restriction>
114         </xs:simpleType>
115       </xs:attribute>
116       <xs:attribute name="refid" type="xs:NCName"/>
117       <xs:attribute name="id" type="xs:NCName"/>
118       <xs:attribute name="name" type="xs:NCName"/>
119     </xs:complexType>
120   </xs:element>
121   <xs:attributeGroup name="filter_refid">
122     <xs:attribute name="refid" use="required" type="xs:NCName"/>
123   </xs:attributeGroup>
124   <xs:group name="filter_auth_simple">
125     <xs:sequence>
126       <xs:element minOccurs="0" ref="mp:userRegister"/>
127       <xs:element minOccurs="0" ref="mp:targetRegister"/>
128       <xs:element minOccurs="0" ref="mp:discardUnauthorisedTargets"/>
129     </xs:sequence>
130   </xs:group>
131   <xs:element name="userRegister" type="xs:string"/>
132   <xs:element name="targetRegister" type="xs:string"/>
133   <xs:element name="discardUnauthorisedTargets">
134     <xs:complexType/>
135   </xs:element>
136   <xs:attributeGroup name="filter_auth_simple">
137     <xs:attribute name="type" use="required">
138       <xs:simpleType>
139         <xs:restriction base="xs:token">
140           <xs:enumeration value="auth_simple"/>
141         </xs:restriction>
142       </xs:simpleType>
143     </xs:attribute>
144     <xs:attribute name="id" type="xs:NCName"/>
145     <xs:attribute name="name" type="xs:NCName"/>
146   </xs:attributeGroup>
147   <xs:attributeGroup name="filter_backend_test">
148     <xs:attribute name="type" use="required">
149       <xs:simpleType>
150         <xs:restriction base="xs:token">
151           <xs:enumeration value="backend_test"/>
152         </xs:restriction>
153       </xs:simpleType>
154     </xs:attribute>
155     <xs:attribute name="id" type="xs:NCName"/>
156     <xs:attribute name="name" type="xs:NCName"/>
157   </xs:attributeGroup>
158   <xs:attributeGroup name="filter_bounce">
159     <xs:attribute name="type" use="required">
160       <xs:simpleType>
161         <xs:restriction base="xs:token">
162           <xs:enumeration value="bounce"/>
163         </xs:restriction>
164       </xs:simpleType>
165     </xs:attribute>
166     <xs:attribute name="id" type="xs:NCName"/>
167     <xs:attribute name="name" type="xs:NCName"/>
168   </xs:attributeGroup>
169   <xs:element name="conversion">
170     <xs:complexType>
171       <xs:attribute name="file" use="required" type="xs:string"/>
172     </xs:complexType>
173   </xs:element>
174   <xs:attributeGroup name="filter_cql_rpn">
175     <xs:attribute name="type" use="required">
176       <xs:simpleType>
177         <xs:restriction base="xs:token">
178           <xs:enumeration value="cql_rpn"/>
179         </xs:restriction>
180       </xs:simpleType>
181     </xs:attribute>
182     <xs:attribute name="id" type="xs:NCName"/>
183     <xs:attribute name="name" type="xs:NCName"/>
184   </xs:attributeGroup>
185   <xs:group name="filter_frontend_net">
186     <xs:sequence>
187       <xs:element minOccurs="0" ref="mp:threads"/>
188       <xs:element maxOccurs="unbounded" ref="mp:port"/>
189       <xs:element minOccurs="0" ref="mp:timeout"/>
190       <xs:element minOccurs="0" ref="mp:connect-max"/>
191     </xs:sequence>
192   </xs:group>
193   <xs:element name="threads" type="xs:integer"/>
194   <xs:element name="port" type="xs:string"/>
195   <xs:element name="timeout" type="xs:integer"/>
196   <xs:element name="connect-max" type="xs:integer"/>
197   <xs:attributeGroup name="filter_frontend_net">
198     <xs:attribute name="type" use="required">
199       <xs:simpleType>
200         <xs:restriction base="xs:token">
201           <xs:enumeration value="frontend_net"/>
202         </xs:restriction>
203       </xs:simpleType>
204     </xs:attribute>
205     <xs:attribute name="id" type="xs:NCName"/>
206     <xs:attribute name="name" type="xs:NCName"/>
207   </xs:attributeGroup>
208   <xs:group name="filter_http_file">
209     <xs:sequence>
210       <xs:element ref="mp:mimetypes"/>
211       <xs:element ref="mp:area"/>
212     </xs:sequence>
213   </xs:group>
214   <xs:element name="mimetypes" type="xs:string"/>
215   <xs:element name="area">
216     <xs:complexType>
217       <xs:sequence>
218         <xs:element ref="mp:documentroot"/>
219         <xs:element ref="mp:prefix"/>
220       </xs:sequence>
221     </xs:complexType>
222   </xs:element>
223   <xs:element name="documentroot" type="xs:string"/>
224   <xs:element name="prefix" type="xs:string"/>
225   <xs:attributeGroup name="filter_http_file">
226     <xs:attribute name="type" use="required">
227       <xs:simpleType>
228         <xs:restriction base="xs:token">
229           <xs:enumeration value="http_file"/>
230         </xs:restriction>
231       </xs:simpleType>
232     </xs:attribute>
233     <xs:attribute name="id" type="xs:NCName"/>
234     <xs:attribute name="name" type="xs:NCName"/>
235   </xs:attributeGroup>
236   <xs:attributeGroup name="filter_load_balance">
237     <xs:attribute name="type" use="required">
238       <xs:simpleType>
239         <xs:restriction base="xs:token">
240           <xs:enumeration value="load_balance"/>
241         </xs:restriction>
242       </xs:simpleType>
243     </xs:attribute>
244     <xs:attribute name="id" type="xs:NCName"/>
245     <xs:attribute name="name" type="xs:NCName"/>
246   </xs:attributeGroup>
247   <xs:group name="filter_log">
248     <xs:sequence>
249       <xs:element minOccurs="0" ref="mp:message"/>
250       <xs:element minOccurs="0" ref="mp:time-format"/>
251       <xs:element minOccurs="0" ref="mp:filename"/>
252       <xs:element minOccurs="0" ref="mp:category"/>
253     </xs:sequence>
254   </xs:group>
255   <xs:element name="message" type="xs:string"/>
256   <xs:element name="time-format" type="xs:string"/>
257   <xs:element name="filename" type="xs:string"/>
258   <xs:element name="category">
259     <xs:complexType>
260       <xs:attribute name="user-access" type="xs:boolean"/>
261       <xs:attribute name="access" type="xs:boolean"/>
262       <xs:attribute name="init-options" type="xs:boolean"/>
263       <xs:attribute name="request-session" type="xs:boolean"/>
264       <xs:attribute name="response-session" type="xs:boolean"/>
265       <xs:attribute name="apdu" type="xs:boolean"/>
266       <xs:attribute name="request-apdu" type="xs:boolean"/>
267       <xs:attribute name="response-apdu" type="xs:boolean"/>
268     </xs:complexType>
269   </xs:element>
270   <xs:attributeGroup name="filter_log">
271     <xs:attribute name="type" use="required">
272       <xs:simpleType>
273         <xs:restriction base="xs:token">
274           <xs:enumeration value="log"/>
275         </xs:restriction>
276       </xs:simpleType>
277     </xs:attribute>
278     <xs:attribute name="id" type="xs:NCName"/>
279     <xs:attribute name="name" type="xs:NCName"/>
280   </xs:attributeGroup>
281   <xs:group name="filter_multi">
282     <xs:sequence>
283       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:target"/>
284       <xs:element minOccurs="0" ref="mp:hideunavailable"/>
285       <xs:element minOccurs="0" ref="mp:mergetype"/>
286     </xs:sequence>
287   </xs:group>
288   <xs:element name="target">
289     <xs:complexType>
290       <xs:simpleContent>
291         <xs:extension base="xs:string">
292           <xs:attribute name="route" use="required" type="xs:string"/>
293         </xs:extension>
294       </xs:simpleContent>
295     </xs:complexType>
296   </xs:element>
297   <xs:element name="hideunavailable">
298     <xs:complexType/>
299   </xs:element>
300   <xs:element name="mergetype" type="xs:string"/>
301   <xs:attributeGroup name="filter_multi">
302     <xs:attribute name="type" use="required">
303       <xs:simpleType>
304         <xs:restriction base="xs:token">
305           <xs:enumeration value="multi"/>
306         </xs:restriction>
307       </xs:simpleType>
308     </xs:attribute>
309     <xs:attribute name="id" type="xs:NCName"/>
310     <xs:attribute name="name" type="xs:NCName"/>
311   </xs:attributeGroup>
312   <xs:element name="xslt">
313     <xs:complexType>
314       <xs:attribute name="stylesheet" use="required" type="xs:string"/>
315     </xs:complexType>
316   </xs:element>
317   <xs:attributeGroup name="filter_query_rewrite">
318     <xs:attribute name="type" use="required">
319       <xs:simpleType>
320         <xs:restriction base="xs:token">
321           <xs:enumeration value="query_rewrite"/>
322         </xs:restriction>
323       </xs:simpleType>
324     </xs:attribute>
325     <xs:attribute name="id" type="xs:NCName"/>
326     <xs:attribute name="name" type="xs:NCName"/>
327   </xs:attributeGroup>
328   <xs:element name="filter_record_transform" abstract="true">
329     <xs:complexType>
330       <xs:sequence>
331         <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
332       </xs:sequence>
333       <xs:attribute name="version" use="required">
334         <xs:simpleType>
335           <xs:restriction base="xs:token">
336             <xs:enumeration value="1.0"/>
337           </xs:restriction>
338         </xs:simpleType>
339       </xs:attribute>
340     </xs:complexType>
341   </xs:element>
342   <xs:attributeGroup name="filter_record_transform">
343     <xs:attribute name="type" use="required">
344       <xs:simpleType>
345         <xs:restriction base="xs:token">
346           <xs:enumeration value="record_transform"/>
347         </xs:restriction>
348       </xs:simpleType>
349     </xs:attribute>
350     <xs:attribute name="id" type="xs:NCName"/>
351     <xs:attribute name="name" type="xs:NCName"/>
352   </xs:attributeGroup>
353   <xs:group name="filter_session_shared">
354     <xs:sequence>
355       <xs:element minOccurs="0" ref="mp:resultset"/>
356       <xs:element minOccurs="0" ref="mp:session"/>
357     </xs:sequence>
358   </xs:group>
359   <xs:element name="resultset">
360     <xs:complexType>
361       <xs:attribute name="max" use="required" type="xs:integer"/>
362       <xs:attribute name="ttl" use="required" type="xs:integer"/>
363       <xs:attribute name="optimizesearch" use="required" type="xs:boolean"/>
364     </xs:complexType>
365   </xs:element>
366   <xs:element name="session">
367     <xs:complexType>
368       <xs:attribute name="ttl" use="required" type="xs:integer"/>
369     </xs:complexType>
370   </xs:element>
371   <xs:attributeGroup name="filter_session_shared">
372     <xs:attribute name="type" use="required">
373       <xs:simpleType>
374         <xs:restriction base="xs:token">
375           <xs:enumeration value="session_shared"/>
376         </xs:restriction>
377       </xs:simpleType>
378     </xs:attribute>
379     <xs:attribute name="id" type="xs:NCName"/>
380     <xs:attribute name="name" type="xs:NCName"/>
381   </xs:attributeGroup>
382   <xs:group name="filter_sru_z3950">
383     <xs:sequence>
384       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:database"/>
385     </xs:sequence>
386   </xs:group>
387   <xs:element name="database">
388     <xs:complexType>
389       <xs:complexContent>
390         <xs:extension base="mp:any">
391           <xs:attribute name="name" use="required" type="xs:NCName"/>
392         </xs:extension>
393       </xs:complexContent>
394     </xs:complexType>
395   </xs:element>
396   <xs:attributeGroup name="filter_sru_z3950">
397     <xs:attribute name="type" use="required">
398       <xs:simpleType>
399         <xs:restriction base="xs:token">
400           <xs:enumeration value="sru_z3950"/>
401         </xs:restriction>
402       </xs:simpleType>
403     </xs:attribute>
404     <xs:attribute name="id" type="xs:NCName"/>
405     <xs:attribute name="name" type="xs:NCName"/>
406   </xs:attributeGroup>
407   <xs:group name="filter_virt_db">
408     <xs:sequence>
409       <xs:element minOccurs="0" ref="mp:pass-vhosts"/>
410       <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
411     </xs:sequence>
412   </xs:group>
413   <xs:element name="pass-vhosts" type="xs:boolean"/>
414   <xs:element name="virtual">
415     <xs:complexType>
416       <xs:sequence>
417         <xs:element name="database" type="xs:string"/>
418         <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
419       </xs:sequence>
420       <xs:attribute name="route" type="xs:NCName"/>
421     </xs:complexType>
422   </xs:element>
423   <xs:attributeGroup name="filter_virt_db">
424     <xs:attribute name="type" use="required">
425       <xs:simpleType>
426         <xs:restriction base="xs:token">
427           <xs:enumeration value="virt_db"/>
428         </xs:restriction>
429       </xs:simpleType>
430     </xs:attribute>
431     <xs:attribute name="id" type="xs:NCName"/>
432     <xs:attribute name="name" type="xs:NCName"/>
433   </xs:attributeGroup>
434   <xs:group name="filter_z3950_client">
435     <xs:sequence>
436       <xs:element minOccurs="0" ref="mp:timeout"/>
437       <xs:element minOccurs="0" ref="mp:default_target"/>
438       <xs:element minOccurs="0" ref="mp:force_target"/>
439     </xs:sequence>
440   </xs:group>
441   <xs:element name="default_target" type="xs:string"/>
442   <xs:element name="force_target" type="xs:string"/>
443   <xs:attributeGroup name="filter_z3950_client">
444     <xs:attribute name="type" use="required">
445       <xs:simpleType>
446         <xs:restriction base="xs:token">
447           <xs:enumeration value="z3950_client"/>
448         </xs:restriction>
449       </xs:simpleType>
450     </xs:attribute>
451     <xs:attribute name="id" type="xs:NCName"/>
452     <xs:attribute name="name" type="xs:NCName"/>
453   </xs:attributeGroup>
454   <xs:group name="filter_limit">
455     <xs:sequence>
456       <xs:element minOccurs="0" ref="mp:limit"/>
457     </xs:sequence>
458   </xs:group>
459   <xs:element name="limit">
460     <xs:complexType>
461       <xs:attribute name="bandwidth" type="xs:integer"/>
462       <xs:attribute name="pdu" type="xs:integer"/>
463       <xs:attribute name="search" type="xs:integer"/>
464       <xs:attribute name="retrieve" type="xs:integer"/>
465     </xs:complexType>
466   </xs:element>
467   <xs:attributeGroup name="filter_limit">
468     <xs:attribute name="type" use="required">
469       <xs:simpleType>
470         <xs:restriction base="xs:token">
471           <xs:enumeration value="limit"/>
472         </xs:restriction>
473       </xs:simpleType>
474     </xs:attribute>
475   </xs:attributeGroup>
476   <xs:group name="filter_cgi">
477     <xs:sequence>
478       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:map"/>
479     </xs:sequence>
480   </xs:group>
481   <xs:element name="map">
482     <xs:complexType>
483       <xs:attribute name="path" use="required" type="xs:string"/>
484       <xs:attribute name="exec" use="required" type="xs:string"/>
485     </xs:complexType>
486   </xs:element>
487   <xs:attributeGroup name="filter_cgi">
488     <xs:attribute name="type" use="required">
489       <xs:simpleType>
490         <xs:restriction base="xs:token">
491           <xs:enumeration value="cgi"/>
492         </xs:restriction>
493       </xs:simpleType>
494     </xs:attribute>
495   </xs:attributeGroup>
496 </xs:schema>
497 <!--
498   filter_zeerex_explain =
499    attribute type { "zeerex_explain" },
500    attribute id { xsd:NCName }?,
501    attribute name { xsd:NCName }?,
502    element mp:database {  
503       attribute name { xsd:NCName },
504       any        
505    }+
506 -->