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