ebb819f60527406df8e6363e60edc02fb47a8293
[metaproxy-moved-to-github.git] / xml / schema / metaproxy.rnc
1 # Metaproxy XML config file schemas
2
3 #   Copyright (c) 2005-2008 Index Data.
4
5 #   See the LICENSE file for details
6
7
8 # The RelaxNG Compact Syntax file 'metaproxy.rnc' is the master copy.
9
10 # The RelaxNG XML Syntax and XML Schema are generated using 'trang':
11 # trang metaproxy.rnc metaproxy.rng 
12 # trang metaproxy.rnc metaproxy.xsd 
13
14 # Config file validation is done using 'xmllint':
15 # xmllint -/-relaxng metaproxy.rng ../../../etc/config1.xml 
16 # xmllint -/-schema metaproxy.xsd config-bytarget.xml
17
18 # For information on RelaxNG see http://relaxng.org 
19 # see also http://books.xmlschemata.org/relaxng/
20
21
22 namespace mp = "http://indexdata.com/metaproxy"
23
24 start |= metaproxy
25
26 include "retrievalinfo.rnc"
27
28 any = (text | element * { attribute * { text }*, any })*
29
30 metaproxy =
31   element mp:metaproxy {
32     attribute version { "1.0" },
33     element mp:dlpath { xsd:string }?,
34     element mp:start {
35             attribute route { xsd:NCName }
36     },
37     element mp:filters { filter+ }?,
38     element mp:routes { route+ }
39   }
40
41 route =
42   element mp:route {
43     attribute id { xsd:NCName },
44     filter+
45   }
46
47 filter =
48   element mp:filter {
49     filter_refid
50     | filter_auth_simple
51     | filter_backend_test
52     | filter_bounce
53     | filter_cql_rpn
54     | filter_frontend_net
55     | filter_http_file
56     | filter_load_balance
57     | filter_log
58     | filter_multi
59     | filter_query_rewrite
60     | filter_record_transform
61     | filter_session_shared
62     | filter_sru_z3950
63     | filter_virt_db
64     | filter_z3950_client
65     | filter_limit
66 #    | filter_zeerex_explain
67   }
68
69 filter_refid = attribute refid { xsd:NCName }
70
71 filter_auth_simple =
72   attribute type { "auth_simple" },
73   attribute id { xsd:NCName }?,
74   attribute name { xsd:NCName }?,
75   element mp:userRegister { xsd:string }?,
76   element mp:targetRegister { xsd:string }?,
77   element mp:discardUnauthorisedTargets { empty }?
78
79 filter_backend_test =
80   attribute type { "backend_test" },
81   attribute id { xsd:NCName }?,
82   attribute name { xsd:NCName }?
83
84 filter_bounce =
85   attribute type { "bounce" },
86   attribute id { xsd:NCName }?,
87   attribute name { xsd:NCName }?
88
89 filter_cql_rpn =
90   attribute type { "cql_rpn" },
91   attribute id { xsd:NCName }?,
92   attribute name { xsd:NCName }?,
93   element mp:conversion {
94     attribute  file { xsd:string }
95   }
96
97 filter_frontend_net =
98   attribute type { "frontend_net" },
99   attribute id { xsd:NCName }?,
100   attribute name { xsd:NCName }?,
101   element mp:threads { xsd:integer }?,
102   element mp:port { xsd:string }+,
103   element mp:timeout { xsd:integer }?
104
105 filter_http_file =
106   attribute type { "http_file" },
107   attribute id { xsd:NCName }?,
108   attribute name { xsd:NCName }?,
109   element mp:mimetypes { xsd:string },
110   element mp:area {
111     element mp:documentroot { xsd:string },
112     element mp:prefix { xsd:string }
113   }
114
115 filter_load_balance =
116   attribute type { "load_balance" },
117   attribute id { xsd:NCName }?,
118   attribute name { xsd:NCName }?
119
120 filter_log =
121   attribute type { "log" },
122   attribute id { xsd:NCName }?,
123   attribute name { xsd:NCName }?,
124   element mp:message { xsd:string }?,
125   element mp:time-format { xsd:string }?,
126   element mp:filename { xsd:string }?,
127   element mp:category {
128     attribute user-access { xsd:boolean }?,
129     attribute access { xsd:boolean }?,
130     attribute init-options { xsd:boolean }?,
131     attribute request-session { xsd:boolean }?,
132     attribute response-session { xsd:boolean }?,
133     attribute apdu { xsd:boolean }?,
134     attribute request-apdu { xsd:boolean }?,
135     attribute response-apdu { xsd:boolean }?
136   }?
137
138 filter_multi =
139   attribute type { "multi" },
140   attribute id { xsd:NCName }?,
141   attribute name { xsd:NCName }?,
142   element mp:target {
143     attribute route { xsd:string },
144     xsd:string
145   }*,
146   element mp:hideunavailable { empty }?,
147   element mp:mergetype { xsd:string }?
148
149 filter_query_rewrite =
150   attribute type { "query_rewrite" },
151   attribute id { xsd:NCName }?,
152   attribute name { xsd:NCName }?,
153   element mp:xslt { 
154         attribute stylesheet { xsd:string }
155   }
156
157 filter_record_transform =
158   attribute type { "record_transform" },
159   attribute id { xsd:NCName }?,
160   attribute name { xsd:NCName }?,
161   retrievalinfo 
162
163 filter_session_shared =
164   attribute type { "session_shared" },
165   attribute id { xsd:NCName }?,
166   attribute name { xsd:NCName }?,
167   element mp:resultset {
168     attribute max { xsd:integer },
169     attribute ttl { xsd:integer }
170   }?,
171   element mp:session {
172     attribute ttl { xsd:integer }
173   }?
174
175 filter_sru_z3950 =
176   attribute type { "sru_z3950" },
177   attribute id { xsd:NCName }?,
178   attribute name { xsd:NCName }?,
179   element mp:database {  
180      attribute name { xsd:NCName },
181      any        
182   }+
183
184 filter_virt_db =
185   attribute type { "virt_db" },
186   attribute id { xsd:NCName }?,
187   attribute name { xsd:NCName }?,
188   element mp:virtual {
189     attribute route { xsd:NCName }?,
190     element mp:database { xsd:NCName },
191     element mp:target { xsd:string }+
192   }+
193
194 filter_z3950_client =
195   attribute type { "z3950_client" },
196   attribute id { xsd:NCName }?,
197   attribute name { xsd:NCName }?,
198   element mp:timeout { xsd:integer }?,
199   element mp:default_target { xsd:string }?,
200   element mp:force_target { xsd:string }?
201
202 filter_limit =
203   attribute type { "limit" },
204   element mp:limit {
205     attribute bandwidth { xsd:integer }?,
206     attribute pdu { xsd:integer }?,
207     attribute search { xsd:integer }?,
208     attribute retrieve { xsd:integer }?
209   }?
210
211 #filter_zeerex_explain =
212 #  attribute type { "zeerex_explain" },
213 #  attribute id { xsd:NCName }?,
214 #  attribute name { xsd:NCName }?,
215 #  element mp:database {  
216 #     attribute name { xsd:NCName },
217 #     any        
218 #  }+
219
220