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 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"/>
38 <xs:attribute name="version" use="required">
40 <xs:restriction base="xs:token">
41 <xs:enumeration value="1.0"/>
47 <xs:element name="dlpath" type="xs:string"/>
48 <xs:element name="start">
50 <xs:attribute name="route" use="required" type="xs:NCName"/>
53 <xs:element name="filters">
56 <xs:element maxOccurs="unbounded" ref="mp:filter"/>
60 <xs:element name="routes">
63 <xs:element maxOccurs="unbounded" ref="mp:route"/>
67 <xs:element name="route">
70 <xs:element maxOccurs="unbounded" ref="mp:filter"/>
72 <xs:attribute name="id" use="required" type="xs:NCName"/>
75 <xs:element name="filter">
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"/>
93 <xs:attribute name="type">
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"/>
116 <xs:attribute name="refid" type="xs:NCName"/>
117 <xs:attribute name="id" type="xs:NCName"/>
118 <xs:attribute name="name" type="xs:NCName"/>
121 <xs:attributeGroup name="filter_refid">
122 <xs:attribute name="refid" use="required" type="xs:NCName"/>
124 <xs:group name="filter_auth_simple">
126 <xs:element minOccurs="0" ref="mp:userRegister"/>
127 <xs:element minOccurs="0" ref="mp:targetRegister"/>
128 <xs:element minOccurs="0" ref="mp:discardUnauthorisedTargets"/>
131 <xs:element name="userRegister" type="xs:string"/>
132 <xs:element name="targetRegister" type="xs:string"/>
133 <xs:element name="discardUnauthorisedTargets">
136 <xs:attributeGroup name="filter_auth_simple">
137 <xs:attribute name="type" use="required">
139 <xs:restriction base="xs:token">
140 <xs:enumeration value="auth_simple"/>
144 <xs:attribute name="id" type="xs:NCName"/>
145 <xs:attribute name="name" type="xs:NCName"/>
147 <xs:attributeGroup name="filter_backend_test">
148 <xs:attribute name="type" use="required">
150 <xs:restriction base="xs:token">
151 <xs:enumeration value="backend_test"/>
155 <xs:attribute name="id" type="xs:NCName"/>
156 <xs:attribute name="name" type="xs:NCName"/>
158 <xs:attributeGroup name="filter_bounce">
159 <xs:attribute name="type" use="required">
161 <xs:restriction base="xs:token">
162 <xs:enumeration value="bounce"/>
166 <xs:attribute name="id" type="xs:NCName"/>
167 <xs:attribute name="name" type="xs:NCName"/>
169 <xs:element name="conversion">
171 <xs:attribute name="file" use="required" type="xs:string"/>
174 <xs:attributeGroup name="filter_cql_rpn">
175 <xs:attribute name="type" use="required">
177 <xs:restriction base="xs:token">
178 <xs:enumeration value="cql_rpn"/>
182 <xs:attribute name="id" type="xs:NCName"/>
183 <xs:attribute name="name" type="xs:NCName"/>
185 <xs:group name="filter_frontend_net">
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"/>
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">
200 <xs:restriction base="xs:token">
201 <xs:enumeration value="frontend_net"/>
205 <xs:attribute name="id" type="xs:NCName"/>
206 <xs:attribute name="name" type="xs:NCName"/>
208 <xs:group name="filter_http_file">
210 <xs:element ref="mp:mimetypes"/>
211 <xs:element ref="mp:area"/>
214 <xs:element name="mimetypes" type="xs:string"/>
215 <xs:element name="area">
218 <xs:element ref="mp:documentroot"/>
219 <xs:element ref="mp:prefix"/>
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">
228 <xs:restriction base="xs:token">
229 <xs:enumeration value="http_file"/>
233 <xs:attribute name="id" type="xs:NCName"/>
234 <xs:attribute name="name" type="xs:NCName"/>
236 <xs:attributeGroup name="filter_load_balance">
237 <xs:attribute name="type" use="required">
239 <xs:restriction base="xs:token">
240 <xs:enumeration value="load_balance"/>
244 <xs:attribute name="id" type="xs:NCName"/>
245 <xs:attribute name="name" type="xs:NCName"/>
247 <xs:group name="filter_log">
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"/>
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">
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"/>
271 <xs:attributeGroup name="filter_log">
272 <xs:attribute name="type" use="required">
274 <xs:restriction base="xs:token">
275 <xs:enumeration value="log"/>
279 <xs:attribute name="id" type="xs:NCName"/>
280 <xs:attribute name="name" type="xs:NCName"/>
282 <xs:group name="filter_multi">
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"/>
289 <xs:element name="target">
292 <xs:extension base="xs:string">
293 <xs:attribute name="route" use="required" type="xs:string"/>
298 <xs:element name="hideunavailable">
301 <xs:element name="mergetype" type="xs:string"/>
302 <xs:attributeGroup name="filter_multi">
303 <xs:attribute name="type" use="required">
305 <xs:restriction base="xs:token">
306 <xs:enumeration value="multi"/>
310 <xs:attribute name="id" type="xs:NCName"/>
311 <xs:attribute name="name" type="xs:NCName"/>
313 <xs:element name="xslt">
315 <xs:attribute name="stylesheet" use="required" type="xs:string"/>
318 <xs:attributeGroup name="filter_query_rewrite">
319 <xs:attribute name="type" use="required">
321 <xs:restriction base="xs:token">
322 <xs:enumeration value="query_rewrite"/>
326 <xs:attribute name="id" type="xs:NCName"/>
327 <xs:attribute name="name" type="xs:NCName"/>
329 <xs:element name="filter_record_transform" abstract="true">
332 <xs:element maxOccurs="unbounded" ref="y:retrieval"/>
334 <xs:attribute name="version" use="required">
336 <xs:restriction base="xs:token">
337 <xs:enumeration value="1.0"/>
343 <xs:attributeGroup name="filter_record_transform">
344 <xs:attribute name="type" use="required">
346 <xs:restriction base="xs:token">
347 <xs:enumeration value="record_transform"/>
351 <xs:attribute name="id" type="xs:NCName"/>
352 <xs:attribute name="name" type="xs:NCName"/>
354 <xs:group name="filter_session_shared">
356 <xs:element minOccurs="0" ref="mp:resultset"/>
357 <xs:element minOccurs="0" ref="mp:session"/>
360 <xs:element name="resultset">
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"/>
367 <xs:element name="session">
369 <xs:attribute name="ttl" use="required" type="xs:integer"/>
372 <xs:attributeGroup name="filter_session_shared">
373 <xs:attribute name="type" use="required">
375 <xs:restriction base="xs:token">
376 <xs:enumeration value="session_shared"/>
380 <xs:attribute name="id" type="xs:NCName"/>
381 <xs:attribute name="name" type="xs:NCName"/>
383 <xs:group name="filter_sru_z3950">
385 <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:database"/>
388 <xs:element name="database">
391 <xs:extension base="mp:any">
392 <xs:attribute name="name" use="required" type="xs:NCName"/>
397 <xs:attributeGroup name="filter_sru_z3950">
398 <xs:attribute name="type" use="required">
400 <xs:restriction base="xs:token">
401 <xs:enumeration value="sru_z3950"/>
405 <xs:attribute name="id" type="xs:NCName"/>
406 <xs:attribute name="name" type="xs:NCName"/>
408 <xs:group name="filter_virt_db">
410 <xs:element minOccurs="0" ref="mp:pass-vhosts"/>
411 <xs:element maxOccurs="unbounded" ref="mp:virtual"/>
414 <xs:element name="pass-vhosts" type="xs:boolean"/>
415 <xs:element name="virtual">
418 <xs:element name="database" type="xs:string"/>
419 <xs:element maxOccurs="unbounded" name="target" type="xs:string"/>
421 <xs:attribute name="route" type="xs:NCName"/>
424 <xs:attributeGroup name="filter_virt_db">
425 <xs:attribute name="type" use="required">
427 <xs:restriction base="xs:token">
428 <xs:enumeration value="virt_db"/>
432 <xs:attribute name="id" type="xs:NCName"/>
433 <xs:attribute name="name" type="xs:NCName"/>
435 <xs:group name="filter_z3950_client">
437 <xs:element minOccurs="0" ref="mp:timeout"/>
438 <xs:element minOccurs="0" ref="mp:default_target"/>
439 <xs:element minOccurs="0" ref="mp:force_target"/>
440 <xs:element minOccurs="0" ref="mp:force_close"/>
443 <xs:element name="default_target" type="xs:string"/>
444 <xs:element name="force_target" type="xs:string"/>
445 <xs:element name="force_close" type="xs:boolean"/>
446 <xs:attributeGroup name="filter_z3950_client">
447 <xs:attribute name="type" use="required">
449 <xs:restriction base="xs:token">
450 <xs:enumeration value="z3950_client"/>
454 <xs:attribute name="id" type="xs:NCName"/>
455 <xs:attribute name="name" type="xs:NCName"/>
457 <xs:group name="filter_limit">
459 <xs:element minOccurs="0" ref="mp:limit"/>
462 <xs:element name="limit">
464 <xs:attribute name="bandwidth" type="xs:integer"/>
465 <xs:attribute name="pdu" type="xs:integer"/>
466 <xs:attribute name="search" type="xs:integer"/>
467 <xs:attribute name="retrieve" type="xs:integer"/>
470 <xs:attributeGroup name="filter_limit">
471 <xs:attribute name="type" use="required">
473 <xs:restriction base="xs:token">
474 <xs:enumeration value="limit"/>
479 <xs:group name="filter_cgi">
481 <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:map"/>
484 <xs:element name="map">
486 <xs:attribute name="path" use="required" type="xs:string"/>
487 <xs:attribute name="exec" use="required" type="xs:string"/>
490 <xs:attributeGroup name="filter_cgi">
491 <xs:attribute name="type" use="required">
493 <xs:restriction base="xs:token">
494 <xs:enumeration value="cgi"/>
501 filter_zeerex_explain =
502 attribute type { "zeerex_explain" },
503 attribute id { xsd:NCName }?,
504 attribute name { xsd:NCName }?,
505 element mp:database {
506 attribute name { xsd:NCName },