1 <?xml version="1.0" encoding="UTF-8"?>
3 Metaproxy XML config file schemas
5 Copyright (c) 2005-2008 Index Data.
7 See the LICENSE file for details
10 The RelaxNG Compact Syntax file 'metaproxy.rnc' is the master copy.
12 The RelaxNG XML Syntax and XML Schema are generated using 'trang':
13 trang metaproxy.rnc metaproxy.rng
14 trang metaproxy.rnc metaproxy.xsd
16 Config file validation is done using 'xmllint':
17 xmllint -/-relaxng metaproxy.rng ../../../etc/config1.xml
18 xmllint -/-schema metaproxy.xsd config-bytarget.xml
20 For information on RelaxNG see http://relaxng.org
21 see also http://books.xmlschemata.org/relaxng/
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">
27 <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
30 <xs:element name="metaproxy">
33 <xs:element ref="mp:start"/>
34 <xs:element minOccurs="0" ref="mp:filters"/>
35 <xs:element ref="mp:routes"/>
37 <xs:attribute name="version" use="required">
39 <xs:restriction base="xs:token">
40 <xs:enumeration value="1.0"/>
46 <xs:element name="start">
48 <xs:attribute name="route" use="required" type="xs:NCName"/>
51 <xs:element name="filters">
54 <xs:element maxOccurs="unbounded" ref="mp:filter"/>
58 <xs:element name="routes">
61 <xs:element maxOccurs="unbounded" ref="mp:route"/>
65 <xs:element name="route">
68 <xs:element maxOccurs="unbounded" ref="mp:filter"/>
70 <xs:attribute name="id" use="required" type="xs:NCName"/>
73 <xs:element name="filter">
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"/>
89 <xs:attribute name="type">
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"/>
110 <xs:attribute name="refid" type="xs:NCName"/>
111 <xs:attribute name="id" type="xs:NCName"/>
112 <xs:attribute name="name" type="xs:NCName"/>
115 <xs:attributeGroup name="filter_refid">
116 <xs:attribute name="refid" use="required" type="xs:NCName"/>
118 <xs:group name="filter_auth_simple">
120 <xs:element minOccurs="0" ref="mp:userRegister"/>
121 <xs:element minOccurs="0" ref="mp:targetRegister"/>
122 <xs:element minOccurs="0" ref="mp:discardUnauthorisedTargets"/>
125 <xs:element name="userRegister" type="xs:string"/>
126 <xs:element name="targetRegister" type="xs:string"/>
127 <xs:element name="discardUnauthorisedTargets">
130 <xs:attributeGroup name="filter_auth_simple">
131 <xs:attribute name="type" use="required">
133 <xs:restriction base="xs:token">
134 <xs:enumeration value="auth_simple"/>
138 <xs:attribute name="id" type="xs:NCName"/>
139 <xs:attribute name="name" type="xs:NCName"/>
141 <xs:attributeGroup name="filter_backend_test">
142 <xs:attribute name="type" use="required">
144 <xs:restriction base="xs:token">
145 <xs:enumeration value="backend_test"/>
149 <xs:attribute name="id" type="xs:NCName"/>
150 <xs:attribute name="name" type="xs:NCName"/>
152 <xs:attributeGroup name="filter_bounce">
153 <xs:attribute name="type" use="required">
155 <xs:restriction base="xs:token">
156 <xs:enumeration value="bounce"/>
160 <xs:attribute name="id" type="xs:NCName"/>
161 <xs:attribute name="name" type="xs:NCName"/>
163 <xs:element name="conversion">
165 <xs:attribute name="file" use="required" type="xs:string"/>
168 <xs:attributeGroup name="filter_cql_rpn">
169 <xs:attribute name="type" use="required">
171 <xs:restriction base="xs:token">
172 <xs:enumeration value="cql_rpn"/>
176 <xs:attribute name="id" type="xs:NCName"/>
177 <xs:attribute name="name" type="xs:NCName"/>
179 <xs:group name="filter_frontend_net">
181 <xs:element minOccurs="0" ref="mp:threads"/>
182 <xs:element maxOccurs="unbounded" ref="mp:port"/>
183 <xs:element minOccurs="0" ref="mp:timeout"/>
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">
192 <xs:restriction base="xs:token">
193 <xs:enumeration value="frontend_net"/>
197 <xs:attribute name="id" type="xs:NCName"/>
198 <xs:attribute name="name" type="xs:NCName"/>
200 <xs:group name="filter_http_file">
202 <xs:element ref="mp:mimetypes"/>
203 <xs:element ref="mp:area"/>
206 <xs:element name="mimetypes" type="xs:string"/>
207 <xs:element name="area">
210 <xs:element ref="mp:documentroot"/>
211 <xs:element ref="mp:prefix"/>
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">
220 <xs:restriction base="xs:token">
221 <xs:enumeration value="http_file"/>
225 <xs:attribute name="id" type="xs:NCName"/>
226 <xs:attribute name="name" type="xs:NCName"/>
228 <xs:attributeGroup name="filter_load_balance">
229 <xs:attribute name="type" use="required">
231 <xs:restriction base="xs:token">
232 <xs:enumeration value="load_balance"/>
236 <xs:attribute name="id" type="xs:NCName"/>
237 <xs:attribute name="name" type="xs:NCName"/>
239 <xs:group name="filter_log">
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"/>
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">
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"/>
262 <xs:attributeGroup name="filter_log">
263 <xs:attribute name="type" use="required">
265 <xs:restriction base="xs:token">
266 <xs:enumeration value="log"/>
270 <xs:attribute name="id" type="xs:NCName"/>
271 <xs:attribute name="name" type="xs:NCName"/>
273 <xs:group name="filter_multi">
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"/>
280 <xs:element name="target">
283 <xs:extension base="xs:string">
284 <xs:attribute name="route" use="required" type="xs:string"/>
289 <xs:element name="hideunavailable">
292 <xs:element name="mergetype" type="xs:string"/>
293 <xs:attributeGroup name="filter_multi">
294 <xs:attribute name="type" use="required">
296 <xs:restriction base="xs:token">
297 <xs:enumeration value="multi"/>
301 <xs:attribute name="id" type="xs:NCName"/>
302 <xs:attribute name="name" type="xs:NCName"/>
304 <xs:element name="xslt">
306 <xs:attribute name="stylesheet" use="required" type="xs:string"/>
309 <xs:attributeGroup name="filter_query_rewrite">
310 <xs:attribute name="type" use="required">
312 <xs:restriction base="xs:token">
313 <xs:enumeration value="query_rewrite"/>
317 <xs:attribute name="id" type="xs:NCName"/>
318 <xs:attribute name="name" type="xs:NCName"/>
320 <xs:element name="filter_record_transform" abstract="true">
323 <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
325 <xs:attribute name="version" use="required">
327 <xs:restriction base="xs:token">
328 <xs:enumeration value="1.0"/>
334 <xs:attributeGroup name="filter_record_transform">
335 <xs:attribute name="type" use="required">
337 <xs:restriction base="xs:token">
338 <xs:enumeration value="record_transform"/>
342 <xs:attribute name="id" type="xs:NCName"/>
343 <xs:attribute name="name" type="xs:NCName"/>
345 <xs:group name="filter_session_shared">
347 <xs:element minOccurs="0" ref="mp:resultset"/>
348 <xs:element minOccurs="0" ref="mp:session"/>
351 <xs:element name="resultset">
353 <xs:attribute name="max" use="required" type="xs:integer"/>
354 <xs:attribute name="ttl" use="required" type="xs:integer"/>
357 <xs:element name="session">
359 <xs:attribute name="ttl" use="required" type="xs:integer"/>
362 <xs:attributeGroup name="filter_session_shared">
363 <xs:attribute name="type" use="required">
365 <xs:restriction base="xs:token">
366 <xs:enumeration value="session_shared"/>
370 <xs:attribute name="id" type="xs:NCName"/>
371 <xs:attribute name="name" type="xs:NCName"/>
373 <xs:group name="filter_sru_z3950">
375 <xs:element maxOccurs="unbounded" ref="mp:database"/>
378 <xs:element name="database">
381 <xs:extension base="mp:any">
382 <xs:attribute name="name" use="required" type="xs:NCName"/>
387 <xs:attributeGroup name="filter_sru_z3950">
388 <xs:attribute name="type" use="required">
390 <xs:restriction base="xs:token">
391 <xs:enumeration value="sru_z3950"/>
395 <xs:attribute name="id" type="xs:NCName"/>
396 <xs:attribute name="name" type="xs:NCName"/>
398 <xs:group name="filter_virt_db">
400 <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
403 <xs:element name="virtual">
406 <xs:element name="database" type="xs:NCName"/>
407 <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
409 <xs:attribute name="route" type="xs:NCName"/>
412 <xs:attributeGroup name="filter_virt_db">
413 <xs:attribute name="type" use="required">
415 <xs:restriction base="xs:token">
416 <xs:enumeration value="virt_db"/>
420 <xs:attribute name="id" type="xs:NCName"/>
421 <xs:attribute name="name" type="xs:NCName"/>
423 <xs:group name="filter_z3950_client">
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"/>
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">
435 <xs:restriction base="xs:token">
436 <xs:enumeration value="z3950_client"/>
440 <xs:attribute name="id" type="xs:NCName"/>
441 <xs:attribute name="name" type="xs:NCName"/>
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 },