Update schema for CGI filter configuration
[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:complexType>
364   </xs:element>
365   <xs:element name="session">
366     <xs:complexType>
367       <xs:attribute name="ttl" use="required" type="xs:integer"/>
368     </xs:complexType>
369   </xs:element>
370   <xs:attributeGroup name="filter_session_shared">
371     <xs:attribute name="type" use="required">
372       <xs:simpleType>
373         <xs:restriction base="xs:token">
374           <xs:enumeration value="session_shared"/>
375         </xs:restriction>
376       </xs:simpleType>
377     </xs:attribute>
378     <xs:attribute name="id" type="xs:NCName"/>
379     <xs:attribute name="name" type="xs:NCName"/>
380   </xs:attributeGroup>
381   <xs:group name="filter_sru_z3950">
382     <xs:sequence>
383       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:database"/>
384     </xs:sequence>
385   </xs:group>
386   <xs:element name="database">
387     <xs:complexType>
388       <xs:complexContent>
389         <xs:extension base="mp:any">
390           <xs:attribute name="name" use="required" type="xs:NCName"/>
391         </xs:extension>
392       </xs:complexContent>
393     </xs:complexType>
394   </xs:element>
395   <xs:attributeGroup name="filter_sru_z3950">
396     <xs:attribute name="type" use="required">
397       <xs:simpleType>
398         <xs:restriction base="xs:token">
399           <xs:enumeration value="sru_z3950"/>
400         </xs:restriction>
401       </xs:simpleType>
402     </xs:attribute>
403     <xs:attribute name="id" type="xs:NCName"/>
404     <xs:attribute name="name" type="xs:NCName"/>
405   </xs:attributeGroup>
406   <xs:group name="filter_virt_db">
407     <xs:sequence>
408       <xs:element minOccurs="0" ref="mp:pass-vhosts"/>
409       <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
410     </xs:sequence>
411   </xs:group>
412   <xs:element name="pass-vhosts" type="xs:boolean"/>
413   <xs:element name="virtual">
414     <xs:complexType>
415       <xs:sequence>
416         <xs:element name="database" type="xs:string"/>
417         <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
418       </xs:sequence>
419       <xs:attribute name="route" type="xs:NCName"/>
420     </xs:complexType>
421   </xs:element>
422   <xs:attributeGroup name="filter_virt_db">
423     <xs:attribute name="type" use="required">
424       <xs:simpleType>
425         <xs:restriction base="xs:token">
426           <xs:enumeration value="virt_db"/>
427         </xs:restriction>
428       </xs:simpleType>
429     </xs:attribute>
430     <xs:attribute name="id" type="xs:NCName"/>
431     <xs:attribute name="name" type="xs:NCName"/>
432   </xs:attributeGroup>
433   <xs:group name="filter_z3950_client">
434     <xs:sequence>
435       <xs:element minOccurs="0" ref="mp:timeout"/>
436       <xs:element minOccurs="0" ref="mp:default_target"/>
437       <xs:element minOccurs="0" ref="mp:force_target"/>
438     </xs:sequence>
439   </xs:group>
440   <xs:element name="default_target" type="xs:string"/>
441   <xs:element name="force_target" type="xs:string"/>
442   <xs:attributeGroup name="filter_z3950_client">
443     <xs:attribute name="type" use="required">
444       <xs:simpleType>
445         <xs:restriction base="xs:token">
446           <xs:enumeration value="z3950_client"/>
447         </xs:restriction>
448       </xs:simpleType>
449     </xs:attribute>
450     <xs:attribute name="id" type="xs:NCName"/>
451     <xs:attribute name="name" type="xs:NCName"/>
452   </xs:attributeGroup>
453   <xs:group name="filter_limit">
454     <xs:sequence>
455       <xs:element minOccurs="0" ref="mp:limit"/>
456     </xs:sequence>
457   </xs:group>
458   <xs:element name="limit">
459     <xs:complexType>
460       <xs:attribute name="bandwidth" type="xs:integer"/>
461       <xs:attribute name="pdu" type="xs:integer"/>
462       <xs:attribute name="search" type="xs:integer"/>
463       <xs:attribute name="retrieve" type="xs:integer"/>
464     </xs:complexType>
465   </xs:element>
466   <xs:attributeGroup name="filter_limit">
467     <xs:attribute name="type" use="required">
468       <xs:simpleType>
469         <xs:restriction base="xs:token">
470           <xs:enumeration value="limit"/>
471         </xs:restriction>
472       </xs:simpleType>
473     </xs:attribute>
474   </xs:attributeGroup>
475   <xs:group name="filter_cgi">
476     <xs:sequence>
477       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:map"/>
478     </xs:sequence>
479   </xs:group>
480   <xs:element name="map">
481     <xs:complexType>
482       <xs:attribute name="path" use="required" type="xs:string"/>
483       <xs:attribute name="exec" use="required" type="xs:string"/>
484     </xs:complexType>
485   </xs:element>
486   <xs:attributeGroup name="filter_cgi">
487     <xs:attribute name="type" use="required">
488       <xs:simpleType>
489         <xs:restriction base="xs:token">
490           <xs:enumeration value="cgi"/>
491         </xs:restriction>
492       </xs:simpleType>
493     </xs:attribute>
494   </xs:attributeGroup>
495 </xs:schema>
496 <!--
497   filter_zeerex_explain =
498    attribute type { "zeerex_explain" },
499    attribute id { xsd:NCName }?,
500    attribute name { xsd:NCName }?,
501    element mp:database {  
502       attribute name { xsd:NCName },
503       any        
504    }+
505 -->