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