Filter frontend_net honors connect-max
[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:element ref="mp:conversion"/>
80         <xs:group ref="mp:filter_frontend_net"/>
81         <xs:group ref="mp:filter_http_file"/>
82         <xs:group ref="mp:filter_log"/>
83         <xs:group ref="mp:filter_multi"/>
84         <xs:element ref="mp:xslt"/>
85         <xs:element ref="mp:filter_record_transform"/>
86         <xs:group ref="mp:filter_session_shared"/>
87         <xs:group ref="mp:filter_sru_z3950"/>
88         <xs:group ref="mp:filter_virt_db"/>
89         <xs:group ref="mp:filter_z3950_client"/>
90         <xs:group ref="mp:filter_limit"/>
91       </xs:choice>
92       <xs:attribute name="type">
93         <xs:simpleType>
94           <xs:restriction base="xs:token">
95             <xs:enumeration value="auth_simple"/>
96             <xs:enumeration value="backend_test"/>
97             <xs:enumeration value="bounce"/>
98             <xs:enumeration value="cql_rpn"/>
99             <xs:enumeration value="frontend_net"/>
100             <xs:enumeration value="http_file"/>
101             <xs:enumeration value="load_balance"/>
102             <xs:enumeration value="log"/>
103             <xs:enumeration value="multi"/>
104             <xs:enumeration value="query_rewrite"/>
105             <xs:enumeration value="record_transform"/>
106             <xs:enumeration value="session_shared"/>
107             <xs:enumeration value="sru_z3950"/>
108             <xs:enumeration value="virt_db"/>
109             <xs:enumeration value="z3950_client"/>
110             <xs:enumeration value="limit"/>
111           </xs:restriction>
112         </xs:simpleType>
113       </xs:attribute>
114       <xs:attribute name="refid" type="xs:NCName"/>
115       <xs:attribute name="id" type="xs:NCName"/>
116       <xs:attribute name="name" type="xs:NCName"/>
117     </xs:complexType>
118   </xs:element>
119   <xs:attributeGroup name="filter_refid">
120     <xs:attribute name="refid" use="required" type="xs:NCName"/>
121   </xs:attributeGroup>
122   <xs:group name="filter_auth_simple">
123     <xs:sequence>
124       <xs:element minOccurs="0" ref="mp:userRegister"/>
125       <xs:element minOccurs="0" ref="mp:targetRegister"/>
126       <xs:element minOccurs="0" ref="mp:discardUnauthorisedTargets"/>
127     </xs:sequence>
128   </xs:group>
129   <xs:element name="userRegister" type="xs:string"/>
130   <xs:element name="targetRegister" type="xs:string"/>
131   <xs:element name="discardUnauthorisedTargets">
132     <xs:complexType/>
133   </xs:element>
134   <xs:attributeGroup name="filter_auth_simple">
135     <xs:attribute name="type" use="required">
136       <xs:simpleType>
137         <xs:restriction base="xs:token">
138           <xs:enumeration value="auth_simple"/>
139         </xs:restriction>
140       </xs:simpleType>
141     </xs:attribute>
142     <xs:attribute name="id" type="xs:NCName"/>
143     <xs:attribute name="name" type="xs:NCName"/>
144   </xs:attributeGroup>
145   <xs:attributeGroup name="filter_backend_test">
146     <xs:attribute name="type" use="required">
147       <xs:simpleType>
148         <xs:restriction base="xs:token">
149           <xs:enumeration value="backend_test"/>
150         </xs:restriction>
151       </xs:simpleType>
152     </xs:attribute>
153     <xs:attribute name="id" type="xs:NCName"/>
154     <xs:attribute name="name" type="xs:NCName"/>
155   </xs:attributeGroup>
156   <xs:attributeGroup name="filter_bounce">
157     <xs:attribute name="type" use="required">
158       <xs:simpleType>
159         <xs:restriction base="xs:token">
160           <xs:enumeration value="bounce"/>
161         </xs:restriction>
162       </xs:simpleType>
163     </xs:attribute>
164     <xs:attribute name="id" type="xs:NCName"/>
165     <xs:attribute name="name" type="xs:NCName"/>
166   </xs:attributeGroup>
167   <xs:element name="conversion">
168     <xs:complexType>
169       <xs:attribute name="file" use="required" type="xs:string"/>
170     </xs:complexType>
171   </xs:element>
172   <xs:attributeGroup name="filter_cql_rpn">
173     <xs:attribute name="type" use="required">
174       <xs:simpleType>
175         <xs:restriction base="xs:token">
176           <xs:enumeration value="cql_rpn"/>
177         </xs:restriction>
178       </xs:simpleType>
179     </xs:attribute>
180     <xs:attribute name="id" type="xs:NCName"/>
181     <xs:attribute name="name" type="xs:NCName"/>
182   </xs:attributeGroup>
183   <xs:group name="filter_frontend_net">
184     <xs:sequence>
185       <xs:element minOccurs="0" ref="mp:threads"/>
186       <xs:element maxOccurs="unbounded" ref="mp:port"/>
187       <xs:element minOccurs="0" ref="mp:timeout"/>
188       <xs:element minOccurs="0" ref="mp:connect-max"/>
189     </xs:sequence>
190   </xs:group>
191   <xs:element name="threads" type="xs:integer"/>
192   <xs:element name="port" type="xs:string"/>
193   <xs:element name="timeout" type="xs:integer"/>
194   <xs:element name="connect-max" type="xs:integer"/>
195   <xs:attributeGroup name="filter_frontend_net">
196     <xs:attribute name="type" use="required">
197       <xs:simpleType>
198         <xs:restriction base="xs:token">
199           <xs:enumeration value="frontend_net"/>
200         </xs:restriction>
201       </xs:simpleType>
202     </xs:attribute>
203     <xs:attribute name="id" type="xs:NCName"/>
204     <xs:attribute name="name" type="xs:NCName"/>
205   </xs:attributeGroup>
206   <xs:group name="filter_http_file">
207     <xs:sequence>
208       <xs:element ref="mp:mimetypes"/>
209       <xs:element ref="mp:area"/>
210     </xs:sequence>
211   </xs:group>
212   <xs:element name="mimetypes" type="xs:string"/>
213   <xs:element name="area">
214     <xs:complexType>
215       <xs:sequence>
216         <xs:element ref="mp:documentroot"/>
217         <xs:element ref="mp:prefix"/>
218       </xs:sequence>
219     </xs:complexType>
220   </xs:element>
221   <xs:element name="documentroot" type="xs:string"/>
222   <xs:element name="prefix" type="xs:string"/>
223   <xs:attributeGroup name="filter_http_file">
224     <xs:attribute name="type" use="required">
225       <xs:simpleType>
226         <xs:restriction base="xs:token">
227           <xs:enumeration value="http_file"/>
228         </xs:restriction>
229       </xs:simpleType>
230     </xs:attribute>
231     <xs:attribute name="id" type="xs:NCName"/>
232     <xs:attribute name="name" type="xs:NCName"/>
233   </xs:attributeGroup>
234   <xs:attributeGroup name="filter_load_balance">
235     <xs:attribute name="type" use="required">
236       <xs:simpleType>
237         <xs:restriction base="xs:token">
238           <xs:enumeration value="load_balance"/>
239         </xs:restriction>
240       </xs:simpleType>
241     </xs:attribute>
242     <xs:attribute name="id" type="xs:NCName"/>
243     <xs:attribute name="name" type="xs:NCName"/>
244   </xs:attributeGroup>
245   <xs:group name="filter_log">
246     <xs:sequence>
247       <xs:element minOccurs="0" ref="mp:message"/>
248       <xs:element minOccurs="0" ref="mp:time-format"/>
249       <xs:element minOccurs="0" ref="mp:filename"/>
250       <xs:element minOccurs="0" ref="mp:category"/>
251     </xs:sequence>
252   </xs:group>
253   <xs:element name="message" type="xs:string"/>
254   <xs:element name="time-format" type="xs:string"/>
255   <xs:element name="filename" type="xs:string"/>
256   <xs:element name="category">
257     <xs:complexType>
258       <xs:attribute name="user-access" type="xs:boolean"/>
259       <xs:attribute name="access" type="xs:boolean"/>
260       <xs:attribute name="init-options" type="xs:boolean"/>
261       <xs:attribute name="request-session" type="xs:boolean"/>
262       <xs:attribute name="response-session" type="xs:boolean"/>
263       <xs:attribute name="apdu" type="xs:boolean"/>
264       <xs:attribute name="request-apdu" type="xs:boolean"/>
265       <xs:attribute name="response-apdu" type="xs:boolean"/>
266     </xs:complexType>
267   </xs:element>
268   <xs:attributeGroup name="filter_log">
269     <xs:attribute name="type" use="required">
270       <xs:simpleType>
271         <xs:restriction base="xs:token">
272           <xs:enumeration value="log"/>
273         </xs:restriction>
274       </xs:simpleType>
275     </xs:attribute>
276     <xs:attribute name="id" type="xs:NCName"/>
277     <xs:attribute name="name" type="xs:NCName"/>
278   </xs:attributeGroup>
279   <xs:group name="filter_multi">
280     <xs:sequence>
281       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:target"/>
282       <xs:element minOccurs="0" ref="mp:hideunavailable"/>
283       <xs:element minOccurs="0" ref="mp:mergetype"/>
284     </xs:sequence>
285   </xs:group>
286   <xs:element name="target">
287     <xs:complexType>
288       <xs:simpleContent>
289         <xs:extension base="xs:string">
290           <xs:attribute name="route" use="required" type="xs:string"/>
291         </xs:extension>
292       </xs:simpleContent>
293     </xs:complexType>
294   </xs:element>
295   <xs:element name="hideunavailable">
296     <xs:complexType/>
297   </xs:element>
298   <xs:element name="mergetype" type="xs:string"/>
299   <xs:attributeGroup name="filter_multi">
300     <xs:attribute name="type" use="required">
301       <xs:simpleType>
302         <xs:restriction base="xs:token">
303           <xs:enumeration value="multi"/>
304         </xs:restriction>
305       </xs:simpleType>
306     </xs:attribute>
307     <xs:attribute name="id" type="xs:NCName"/>
308     <xs:attribute name="name" type="xs:NCName"/>
309   </xs:attributeGroup>
310   <xs:element name="xslt">
311     <xs:complexType>
312       <xs:attribute name="stylesheet" use="required" type="xs:string"/>
313     </xs:complexType>
314   </xs:element>
315   <xs:attributeGroup name="filter_query_rewrite">
316     <xs:attribute name="type" use="required">
317       <xs:simpleType>
318         <xs:restriction base="xs:token">
319           <xs:enumeration value="query_rewrite"/>
320         </xs:restriction>
321       </xs:simpleType>
322     </xs:attribute>
323     <xs:attribute name="id" type="xs:NCName"/>
324     <xs:attribute name="name" type="xs:NCName"/>
325   </xs:attributeGroup>
326   <xs:element name="filter_record_transform" abstract="true">
327     <xs:complexType>
328       <xs:sequence>
329         <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
330       </xs:sequence>
331       <xs:attribute name="version" use="required">
332         <xs:simpleType>
333           <xs:restriction base="xs:token">
334             <xs:enumeration value="1.0"/>
335           </xs:restriction>
336         </xs:simpleType>
337       </xs:attribute>
338     </xs:complexType>
339   </xs:element>
340   <xs:attributeGroup name="filter_record_transform">
341     <xs:attribute name="type" use="required">
342       <xs:simpleType>
343         <xs:restriction base="xs:token">
344           <xs:enumeration value="record_transform"/>
345         </xs:restriction>
346       </xs:simpleType>
347     </xs:attribute>
348     <xs:attribute name="id" type="xs:NCName"/>
349     <xs:attribute name="name" type="xs:NCName"/>
350   </xs:attributeGroup>
351   <xs:group name="filter_session_shared">
352     <xs:sequence>
353       <xs:element minOccurs="0" ref="mp:resultset"/>
354       <xs:element minOccurs="0" ref="mp:session"/>
355     </xs:sequence>
356   </xs:group>
357   <xs:element name="resultset">
358     <xs:complexType>
359       <xs:attribute name="max" use="required" type="xs:integer"/>
360       <xs:attribute name="ttl" use="required" type="xs:integer"/>
361     </xs:complexType>
362   </xs:element>
363   <xs:element name="session">
364     <xs:complexType>
365       <xs:attribute name="ttl" use="required" type="xs:integer"/>
366     </xs:complexType>
367   </xs:element>
368   <xs:attributeGroup name="filter_session_shared">
369     <xs:attribute name="type" use="required">
370       <xs:simpleType>
371         <xs:restriction base="xs:token">
372           <xs:enumeration value="session_shared"/>
373         </xs:restriction>
374       </xs:simpleType>
375     </xs:attribute>
376     <xs:attribute name="id" type="xs:NCName"/>
377     <xs:attribute name="name" type="xs:NCName"/>
378   </xs:attributeGroup>
379   <xs:group name="filter_sru_z3950">
380     <xs:sequence>
381       <xs:element maxOccurs="unbounded" ref="mp:database"/>
382     </xs:sequence>
383   </xs:group>
384   <xs:element name="database">
385     <xs:complexType>
386       <xs:complexContent>
387         <xs:extension base="mp:any">
388           <xs:attribute name="name" use="required" type="xs:NCName"/>
389         </xs:extension>
390       </xs:complexContent>
391     </xs:complexType>
392   </xs:element>
393   <xs:attributeGroup name="filter_sru_z3950">
394     <xs:attribute name="type" use="required">
395       <xs:simpleType>
396         <xs:restriction base="xs:token">
397           <xs:enumeration value="sru_z3950"/>
398         </xs:restriction>
399       </xs:simpleType>
400     </xs:attribute>
401     <xs:attribute name="id" type="xs:NCName"/>
402     <xs:attribute name="name" type="xs:NCName"/>
403   </xs:attributeGroup>
404   <xs:group name="filter_virt_db">
405     <xs:sequence>
406       <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
407     </xs:sequence>
408   </xs:group>
409   <xs:element name="virtual">
410     <xs:complexType>
411       <xs:sequence>
412         <xs:element name="database" type="xs:NCName"/>
413         <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
414       </xs:sequence>
415       <xs:attribute name="route" type="xs:NCName"/>
416     </xs:complexType>
417   </xs:element>
418   <xs:attributeGroup name="filter_virt_db">
419     <xs:attribute name="type" use="required">
420       <xs:simpleType>
421         <xs:restriction base="xs:token">
422           <xs:enumeration value="virt_db"/>
423         </xs:restriction>
424       </xs:simpleType>
425     </xs:attribute>
426     <xs:attribute name="id" type="xs:NCName"/>
427     <xs:attribute name="name" type="xs:NCName"/>
428   </xs:attributeGroup>
429   <xs:group name="filter_z3950_client">
430     <xs:sequence>
431       <xs:element minOccurs="0" ref="mp:timeout"/>
432       <xs:element minOccurs="0" ref="mp:default_target"/>
433       <xs:element minOccurs="0" ref="mp:force_target"/>
434     </xs:sequence>
435   </xs:group>
436   <xs:element name="default_target" type="xs:string"/>
437   <xs:element name="force_target" type="xs:string"/>
438   <xs:attributeGroup name="filter_z3950_client">
439     <xs:attribute name="type" use="required">
440       <xs:simpleType>
441         <xs:restriction base="xs:token">
442           <xs:enumeration value="z3950_client"/>
443         </xs:restriction>
444       </xs:simpleType>
445     </xs:attribute>
446     <xs:attribute name="id" type="xs:NCName"/>
447     <xs:attribute name="name" type="xs:NCName"/>
448   </xs:attributeGroup>
449   <xs:group name="filter_limit">
450     <xs:sequence>
451       <xs:element minOccurs="0" ref="mp:limit"/>
452     </xs:sequence>
453   </xs:group>
454   <xs:element name="limit">
455     <xs:complexType>
456       <xs:attribute name="bandwidth" type="xs:integer"/>
457       <xs:attribute name="pdu" type="xs:integer"/>
458       <xs:attribute name="search" type="xs:integer"/>
459       <xs:attribute name="retrieve" type="xs:integer"/>
460     </xs:complexType>
461   </xs:element>
462   <xs:attributeGroup name="filter_limit">
463     <xs:attribute name="type" use="required">
464       <xs:simpleType>
465         <xs:restriction base="xs:token">
466           <xs:enumeration value="limit"/>
467         </xs:restriction>
468       </xs:simpleType>
469     </xs:attribute>
470   </xs:attributeGroup>
471 </xs:schema>
472 <!--
473   filter_zeerex_explain =
474    attribute type { "zeerex_explain" },
475    attribute id { xsd:NCName }?,
476    attribute name { xsd:NCName }?,
477    element mp:database {  
478       attribute name { xsd:NCName },
479       any        
480    }+
481 -->