Implement limit filter (bug #2697, bug #2698)
[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:sequence>
189   </xs:group>
190   <xs:element name="threads" type="xs:integer"/>
191   <xs:element name="port" type="xs:string"/>
192   <xs:element name="timeout" type="xs:integer"/>
193   <xs:attributeGroup name="filter_frontend_net">
194     <xs:attribute name="type" use="required">
195       <xs:simpleType>
196         <xs:restriction base="xs:token">
197           <xs:enumeration value="frontend_net"/>
198         </xs:restriction>
199       </xs:simpleType>
200     </xs:attribute>
201     <xs:attribute name="id" type="xs:NCName"/>
202     <xs:attribute name="name" type="xs:NCName"/>
203   </xs:attributeGroup>
204   <xs:group name="filter_http_file">
205     <xs:sequence>
206       <xs:element ref="mp:mimetypes"/>
207       <xs:element ref="mp:area"/>
208     </xs:sequence>
209   </xs:group>
210   <xs:element name="mimetypes" type="xs:string"/>
211   <xs:element name="area">
212     <xs:complexType>
213       <xs:sequence>
214         <xs:element ref="mp:documentroot"/>
215         <xs:element ref="mp:prefix"/>
216       </xs:sequence>
217     </xs:complexType>
218   </xs:element>
219   <xs:element name="documentroot" type="xs:string"/>
220   <xs:element name="prefix" type="xs:string"/>
221   <xs:attributeGroup name="filter_http_file">
222     <xs:attribute name="type" use="required">
223       <xs:simpleType>
224         <xs:restriction base="xs:token">
225           <xs:enumeration value="http_file"/>
226         </xs:restriction>
227       </xs:simpleType>
228     </xs:attribute>
229     <xs:attribute name="id" type="xs:NCName"/>
230     <xs:attribute name="name" type="xs:NCName"/>
231   </xs:attributeGroup>
232   <xs:attributeGroup name="filter_load_balance">
233     <xs:attribute name="type" use="required">
234       <xs:simpleType>
235         <xs:restriction base="xs:token">
236           <xs:enumeration value="load_balance"/>
237         </xs:restriction>
238       </xs:simpleType>
239     </xs:attribute>
240     <xs:attribute name="id" type="xs:NCName"/>
241     <xs:attribute name="name" type="xs:NCName"/>
242   </xs:attributeGroup>
243   <xs:group name="filter_log">
244     <xs:sequence>
245       <xs:element minOccurs="0" ref="mp:message"/>
246       <xs:element minOccurs="0" ref="mp:time-format"/>
247       <xs:element minOccurs="0" ref="mp:filename"/>
248       <xs:element minOccurs="0" ref="mp:category"/>
249     </xs:sequence>
250   </xs:group>
251   <xs:element name="message" type="xs:string"/>
252   <xs:element name="time-format" type="xs:string"/>
253   <xs:element name="filename" type="xs:string"/>
254   <xs:element name="category">
255     <xs:complexType>
256       <xs:attribute name="user-access" type="xs:boolean"/>
257       <xs:attribute name="access" type="xs:boolean"/>
258       <xs:attribute name="init-options" type="xs:boolean"/>
259       <xs:attribute name="request-session" type="xs:boolean"/>
260       <xs:attribute name="response-session" type="xs:boolean"/>
261       <xs:attribute name="apdu" type="xs:boolean"/>
262       <xs:attribute name="request-apdu" type="xs:boolean"/>
263       <xs:attribute name="response-apdu" type="xs:boolean"/>
264     </xs:complexType>
265   </xs:element>
266   <xs:attributeGroup name="filter_log">
267     <xs:attribute name="type" use="required">
268       <xs:simpleType>
269         <xs:restriction base="xs:token">
270           <xs:enumeration value="log"/>
271         </xs:restriction>
272       </xs:simpleType>
273     </xs:attribute>
274     <xs:attribute name="id" type="xs:NCName"/>
275     <xs:attribute name="name" type="xs:NCName"/>
276   </xs:attributeGroup>
277   <xs:group name="filter_multi">
278     <xs:sequence>
279       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:target"/>
280       <xs:element minOccurs="0" ref="mp:hideunavailable"/>
281       <xs:element minOccurs="0" ref="mp:mergetype"/>
282     </xs:sequence>
283   </xs:group>
284   <xs:element name="target">
285     <xs:complexType>
286       <xs:simpleContent>
287         <xs:extension base="xs:string">
288           <xs:attribute name="route" use="required" type="xs:string"/>
289         </xs:extension>
290       </xs:simpleContent>
291     </xs:complexType>
292   </xs:element>
293   <xs:element name="hideunavailable">
294     <xs:complexType/>
295   </xs:element>
296   <xs:element name="mergetype" type="xs:string"/>
297   <xs:attributeGroup name="filter_multi">
298     <xs:attribute name="type" use="required">
299       <xs:simpleType>
300         <xs:restriction base="xs:token">
301           <xs:enumeration value="multi"/>
302         </xs:restriction>
303       </xs:simpleType>
304     </xs:attribute>
305     <xs:attribute name="id" type="xs:NCName"/>
306     <xs:attribute name="name" type="xs:NCName"/>
307   </xs:attributeGroup>
308   <xs:element name="xslt">
309     <xs:complexType>
310       <xs:attribute name="stylesheet" use="required" type="xs:string"/>
311     </xs:complexType>
312   </xs:element>
313   <xs:attributeGroup name="filter_query_rewrite">
314     <xs:attribute name="type" use="required">
315       <xs:simpleType>
316         <xs:restriction base="xs:token">
317           <xs:enumeration value="query_rewrite"/>
318         </xs:restriction>
319       </xs:simpleType>
320     </xs:attribute>
321     <xs:attribute name="id" type="xs:NCName"/>
322     <xs:attribute name="name" type="xs:NCName"/>
323   </xs:attributeGroup>
324   <xs:element name="filter_record_transform" abstract="true">
325     <xs:complexType>
326       <xs:sequence>
327         <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
328       </xs:sequence>
329       <xs:attribute name="version" use="required">
330         <xs:simpleType>
331           <xs:restriction base="xs:token">
332             <xs:enumeration value="1.0"/>
333           </xs:restriction>
334         </xs:simpleType>
335       </xs:attribute>
336     </xs:complexType>
337   </xs:element>
338   <xs:attributeGroup name="filter_record_transform">
339     <xs:attribute name="type" use="required">
340       <xs:simpleType>
341         <xs:restriction base="xs:token">
342           <xs:enumeration value="record_transform"/>
343         </xs:restriction>
344       </xs:simpleType>
345     </xs:attribute>
346     <xs:attribute name="id" type="xs:NCName"/>
347     <xs:attribute name="name" type="xs:NCName"/>
348   </xs:attributeGroup>
349   <xs:group name="filter_session_shared">
350     <xs:sequence>
351       <xs:element minOccurs="0" ref="mp:resultset"/>
352       <xs:element minOccurs="0" ref="mp:session"/>
353     </xs:sequence>
354   </xs:group>
355   <xs:element name="resultset">
356     <xs:complexType>
357       <xs:attribute name="max" use="required" type="xs:integer"/>
358       <xs:attribute name="ttl" use="required" type="xs:integer"/>
359     </xs:complexType>
360   </xs:element>
361   <xs:element name="session">
362     <xs:complexType>
363       <xs:attribute name="ttl" use="required" type="xs:integer"/>
364     </xs:complexType>
365   </xs:element>
366   <xs:attributeGroup name="filter_session_shared">
367     <xs:attribute name="type" use="required">
368       <xs:simpleType>
369         <xs:restriction base="xs:token">
370           <xs:enumeration value="session_shared"/>
371         </xs:restriction>
372       </xs:simpleType>
373     </xs:attribute>
374     <xs:attribute name="id" type="xs:NCName"/>
375     <xs:attribute name="name" type="xs:NCName"/>
376   </xs:attributeGroup>
377   <xs:group name="filter_sru_z3950">
378     <xs:sequence>
379       <xs:element maxOccurs="unbounded" ref="mp:database"/>
380     </xs:sequence>
381   </xs:group>
382   <xs:element name="database">
383     <xs:complexType>
384       <xs:complexContent>
385         <xs:extension base="mp:any">
386           <xs:attribute name="name" use="required" type="xs:NCName"/>
387         </xs:extension>
388       </xs:complexContent>
389     </xs:complexType>
390   </xs:element>
391   <xs:attributeGroup name="filter_sru_z3950">
392     <xs:attribute name="type" use="required">
393       <xs:simpleType>
394         <xs:restriction base="xs:token">
395           <xs:enumeration value="sru_z3950"/>
396         </xs:restriction>
397       </xs:simpleType>
398     </xs:attribute>
399     <xs:attribute name="id" type="xs:NCName"/>
400     <xs:attribute name="name" type="xs:NCName"/>
401   </xs:attributeGroup>
402   <xs:group name="filter_virt_db">
403     <xs:sequence>
404       <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
405     </xs:sequence>
406   </xs:group>
407   <xs:element name="virtual">
408     <xs:complexType>
409       <xs:sequence>
410         <xs:element name="database" type="xs:NCName"/>
411         <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
412       </xs:sequence>
413       <xs:attribute name="route" type="xs:NCName"/>
414     </xs:complexType>
415   </xs:element>
416   <xs:attributeGroup name="filter_virt_db">
417     <xs:attribute name="type" use="required">
418       <xs:simpleType>
419         <xs:restriction base="xs:token">
420           <xs:enumeration value="virt_db"/>
421         </xs:restriction>
422       </xs:simpleType>
423     </xs:attribute>
424     <xs:attribute name="id" type="xs:NCName"/>
425     <xs:attribute name="name" type="xs:NCName"/>
426   </xs:attributeGroup>
427   <xs:group name="filter_z3950_client">
428     <xs:sequence>
429       <xs:element minOccurs="0" ref="mp:timeout"/>
430       <xs:element minOccurs="0" ref="mp:default_target"/>
431       <xs:element minOccurs="0" ref="mp:force_target"/>
432     </xs:sequence>
433   </xs:group>
434   <xs:element name="default_target" type="xs:string"/>
435   <xs:element name="force_target" type="xs:string"/>
436   <xs:attributeGroup name="filter_z3950_client">
437     <xs:attribute name="type" use="required">
438       <xs:simpleType>
439         <xs:restriction base="xs:token">
440           <xs:enumeration value="z3950_client"/>
441         </xs:restriction>
442       </xs:simpleType>
443     </xs:attribute>
444     <xs:attribute name="id" type="xs:NCName"/>
445     <xs:attribute name="name" type="xs:NCName"/>
446   </xs:attributeGroup>
447   <xs:group name="filter_limit">
448     <xs:sequence>
449       <xs:element minOccurs="0" ref="mp:limit"/>
450     </xs:sequence>
451   </xs:group>
452   <xs:element name="limit">
453     <xs:complexType>
454       <xs:attribute name="bandwidth" type="xs:integer"/>
455       <xs:attribute name="pdu" type="xs:integer"/>
456       <xs:attribute name="search" type="xs:integer"/>
457       <xs:attribute name="retrieve" type="xs:integer"/>
458     </xs:complexType>
459   </xs:element>
460   <xs:attributeGroup name="filter_limit">
461     <xs:attribute name="type" use="required">
462       <xs:simpleType>
463         <xs:restriction base="xs:token">
464           <xs:enumeration value="limit"/>
465         </xs:restriction>
466       </xs:simpleType>
467     </xs:attribute>
468   </xs:attributeGroup>
469 </xs:schema>
470 <!--
471   filter_zeerex_explain =
472    attribute type { "zeerex_explain" },
473    attribute id { xsd:NCName }?,
474    attribute name { xsd:NCName }?,
475    element mp:database {  
476       attribute name { xsd:NCName },
477       any        
478    }+
479 -->