Start work on Torus extension for virt_db
[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="session" type="xs:boolean"/>
266       <xs:attribute name="apdu" type="xs:boolean"/>
267       <xs:attribute name="request-apdu" type="xs:boolean"/>
268       <xs:attribute name="response-apdu" type="xs:boolean"/>
269     </xs:complexType>
270   </xs:element>
271   <xs:attributeGroup name="filter_log">
272     <xs:attribute name="type" use="required">
273       <xs:simpleType>
274         <xs:restriction base="xs:token">
275           <xs:enumeration value="log"/>
276         </xs:restriction>
277       </xs:simpleType>
278     </xs:attribute>
279     <xs:attribute name="id" type="xs:NCName"/>
280     <xs:attribute name="name" type="xs:NCName"/>
281   </xs:attributeGroup>
282   <xs:group name="filter_multi">
283     <xs:sequence>
284       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:target"/>
285       <xs:element minOccurs="0" ref="mp:hideunavailable"/>
286       <xs:element minOccurs="0" ref="mp:mergetype"/>
287     </xs:sequence>
288   </xs:group>
289   <xs:element name="target">
290     <xs:complexType>
291       <xs:simpleContent>
292         <xs:extension base="xs:string">
293           <xs:attribute name="route" use="required" type="xs:string"/>
294         </xs:extension>
295       </xs:simpleContent>
296     </xs:complexType>
297   </xs:element>
298   <xs:element name="hideunavailable">
299     <xs:complexType/>
300   </xs:element>
301   <xs:element name="mergetype" type="xs:string"/>
302   <xs:attributeGroup name="filter_multi">
303     <xs:attribute name="type" use="required">
304       <xs:simpleType>
305         <xs:restriction base="xs:token">
306           <xs:enumeration value="multi"/>
307         </xs:restriction>
308       </xs:simpleType>
309     </xs:attribute>
310     <xs:attribute name="id" type="xs:NCName"/>
311     <xs:attribute name="name" type="xs:NCName"/>
312   </xs:attributeGroup>
313   <xs:element name="xslt">
314     <xs:complexType>
315       <xs:attribute name="stylesheet" use="required" type="xs:string"/>
316     </xs:complexType>
317   </xs:element>
318   <xs:attributeGroup name="filter_query_rewrite">
319     <xs:attribute name="type" use="required">
320       <xs:simpleType>
321         <xs:restriction base="xs:token">
322           <xs:enumeration value="query_rewrite"/>
323         </xs:restriction>
324       </xs:simpleType>
325     </xs:attribute>
326     <xs:attribute name="id" type="xs:NCName"/>
327     <xs:attribute name="name" type="xs:NCName"/>
328   </xs:attributeGroup>
329   <xs:element name="filter_record_transform" abstract="true">
330     <xs:complexType>
331       <xs:sequence>
332         <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
333       </xs:sequence>
334       <xs:attribute name="version" use="required">
335         <xs:simpleType>
336           <xs:restriction base="xs:token">
337             <xs:enumeration value="1.0"/>
338           </xs:restriction>
339         </xs:simpleType>
340       </xs:attribute>
341     </xs:complexType>
342   </xs:element>
343   <xs:attributeGroup name="filter_record_transform">
344     <xs:attribute name="type" use="required">
345       <xs:simpleType>
346         <xs:restriction base="xs:token">
347           <xs:enumeration value="record_transform"/>
348         </xs:restriction>
349       </xs:simpleType>
350     </xs:attribute>
351     <xs:attribute name="id" type="xs:NCName"/>
352     <xs:attribute name="name" type="xs:NCName"/>
353   </xs:attributeGroup>
354   <xs:group name="filter_session_shared">
355     <xs:sequence>
356       <xs:element minOccurs="0" ref="mp:resultset"/>
357       <xs:element minOccurs="0" ref="mp:session"/>
358     </xs:sequence>
359   </xs:group>
360   <xs:element name="resultset">
361     <xs:complexType>
362       <xs:attribute name="max" use="required" type="xs:integer"/>
363       <xs:attribute name="ttl" use="required" type="xs:integer"/>
364       <xs:attribute name="optimizesearch" use="required" type="xs:boolean"/>
365     </xs:complexType>
366   </xs:element>
367   <xs:element name="session">
368     <xs:complexType>
369       <xs:attribute name="ttl" use="required" type="xs:integer"/>
370     </xs:complexType>
371   </xs:element>
372   <xs:attributeGroup name="filter_session_shared">
373     <xs:attribute name="type" use="required">
374       <xs:simpleType>
375         <xs:restriction base="xs:token">
376           <xs:enumeration value="session_shared"/>
377         </xs:restriction>
378       </xs:simpleType>
379     </xs:attribute>
380     <xs:attribute name="id" type="xs:NCName"/>
381     <xs:attribute name="name" type="xs:NCName"/>
382   </xs:attributeGroup>
383   <xs:group name="filter_sru_z3950">
384     <xs:sequence>
385       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:database"/>
386     </xs:sequence>
387   </xs:group>
388   <xs:element name="database">
389     <xs:complexType>
390       <xs:complexContent>
391         <xs:extension base="mp:any">
392           <xs:attribute name="name" use="required" type="xs:NCName"/>
393         </xs:extension>
394       </xs:complexContent>
395     </xs:complexType>
396   </xs:element>
397   <xs:attributeGroup name="filter_sru_z3950">
398     <xs:attribute name="type" use="required">
399       <xs:simpleType>
400         <xs:restriction base="xs:token">
401           <xs:enumeration value="sru_z3950"/>
402         </xs:restriction>
403       </xs:simpleType>
404     </xs:attribute>
405     <xs:attribute name="id" type="xs:NCName"/>
406     <xs:attribute name="name" type="xs:NCName"/>
407   </xs:attributeGroup>
408   <xs:group name="filter_virt_db">
409     <xs:sequence>
410       <xs:element minOccurs="0" ref="mp:pass-vhosts"/>
411       <xs:element minOccurs="0" ref="mp:torus"/>
412       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:virtual"/>
413     </xs:sequence>
414   </xs:group>
415   <xs:element name="pass-vhosts" type="xs:boolean"/>
416   <xs:element name="torus">
417     <xs:complexType>
418       <xs:attribute name="url" use="required" type="xs:string"/>
419     </xs:complexType>
420   </xs:element>
421   <xs:element name="virtual">
422     <xs:complexType>
423       <xs:sequence>
424         <xs:element name="database" type="xs:string"/>
425         <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
426       </xs:sequence>
427       <xs:attribute name="route" type="xs:NCName"/>
428     </xs:complexType>
429   </xs:element>
430   <xs:attributeGroup name="filter_virt_db">
431     <xs:attribute name="type" use="required">
432       <xs:simpleType>
433         <xs:restriction base="xs:token">
434           <xs:enumeration value="virt_db"/>
435         </xs:restriction>
436       </xs:simpleType>
437     </xs:attribute>
438     <xs:attribute name="id" type="xs:NCName"/>
439     <xs:attribute name="name" type="xs:NCName"/>
440   </xs:attributeGroup>
441   <xs:group name="filter_z3950_client">
442     <xs:sequence>
443       <xs:element minOccurs="0" ref="mp:timeout"/>
444       <xs:element minOccurs="0" ref="mp:default_target"/>
445       <xs:element minOccurs="0" ref="mp:force_target"/>
446       <xs:element minOccurs="0" ref="mp:force_close"/>
447     </xs:sequence>
448   </xs:group>
449   <xs:element name="default_target" type="xs:string"/>
450   <xs:element name="force_target" type="xs:string"/>
451   <xs:element name="force_close" type="xs:boolean"/>
452   <xs:attributeGroup name="filter_z3950_client">
453     <xs:attribute name="type" use="required">
454       <xs:simpleType>
455         <xs:restriction base="xs:token">
456           <xs:enumeration value="z3950_client"/>
457         </xs:restriction>
458       </xs:simpleType>
459     </xs:attribute>
460     <xs:attribute name="id" type="xs:NCName"/>
461     <xs:attribute name="name" type="xs:NCName"/>
462   </xs:attributeGroup>
463   <xs:group name="filter_limit">
464     <xs:sequence>
465       <xs:element minOccurs="0" ref="mp:limit"/>
466     </xs:sequence>
467   </xs:group>
468   <xs:element name="limit">
469     <xs:complexType>
470       <xs:attribute name="bandwidth" type="xs:integer"/>
471       <xs:attribute name="pdu" type="xs:integer"/>
472       <xs:attribute name="search" type="xs:integer"/>
473       <xs:attribute name="retrieve" type="xs:integer"/>
474     </xs:complexType>
475   </xs:element>
476   <xs:attributeGroup name="filter_limit">
477     <xs:attribute name="type" use="required">
478       <xs:simpleType>
479         <xs:restriction base="xs:token">
480           <xs:enumeration value="limit"/>
481         </xs:restriction>
482       </xs:simpleType>
483     </xs:attribute>
484   </xs:attributeGroup>
485   <xs:group name="filter_cgi">
486     <xs:sequence>
487       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:map"/>
488     </xs:sequence>
489   </xs:group>
490   <xs:element name="map">
491     <xs:complexType>
492       <xs:attribute name="path" use="required" type="xs:string"/>
493       <xs:attribute name="exec" use="required" type="xs:string"/>
494     </xs:complexType>
495   </xs:element>
496   <xs:attributeGroup name="filter_cgi">
497     <xs:attribute name="type" use="required">
498       <xs:simpleType>
499         <xs:restriction base="xs:token">
500           <xs:enumeration value="cgi"/>
501         </xs:restriction>
502       </xs:simpleType>
503     </xs:attribute>
504   </xs:attributeGroup>
505 </xs:schema>
506 <!--
507   filter_zeerex_explain =
508    attribute type { "zeerex_explain" },
509    attribute id { xsd:NCName }?,
510    attribute name { xsd:NCName }?,
511    element mp:database {  
512       attribute name { xsd:NCName },
513       any        
514    }+
515 -->