added specific validating instructions for the filter types
[metaproxy-moved-to-github.git] / xml / schema / metaproxy.rnc
1 # The RelaxNG Compact Syntax file is the master copy
2 # trang metaproxy.rnc metaproxy.rng 
3 # xmllint -/-relaxng metaproxy.rng ../../../etc/config1.xml 
4 # see also http://books.xmlschemata.org/relaxng/relax-CHP-16-SECT-2.html
5
6 default namespace = "http://indexdata.dk/yp2/config/1"
7
8 start = metaproxy
9
10 metaproxy = 
11   element yp2 {
12     element start {
13       attribute route { xsd:NCName }
14     },
15     element filters { filter+ }?,
16     element routes {
17         route+
18     }
19   }
20
21 route =  element route {
22     attribute id { xsd:NCName },
23     filter+
24 }
25
26 filter = 
27   element filter {
28    ( filter_refid
29    | filter_auth_simple
30    | filter_backend_test
31    | filter_bounce
32    | filter_frontend_net
33    | filter_http_file
34    | filter_log
35    | filter_multi
36    | filter_query_rewrite
37    | filter_virt_db
38    | filter_z3950_client
39    )
40 }
41
42 filter_refid = attribute refid { xsd:NCName }
43
44 filter_auth_simple = 
45     attribute type { "auth_simple" },
46     attribute id { xsd:NCName }?,
47     attribute name { xsd:NCName }?,
48     element userRegister { xsd:string }?,
49     element targetRegister { xsd:string }?,
50     element discardUnauthorisedTargets { empty }?
51
52 filter_backend_test = 
53     attribute type { "backend_test" },
54     attribute id { xsd:NCName }?,
55     attribute name { xsd:NCName }?
56
57 filter_bounce = 
58     attribute type { "bounce" },
59     attribute id { xsd:NCName }?,
60     attribute name { xsd:NCName }?
61
62 filter_frontend_net = 
63     attribute type { "frontend_net" },
64     attribute id { xsd:NCName }?,
65     attribute name { xsd:NCName }?,
66     element threads { xsd:integer }?,
67     element port { xsd:string }
68
69 filter_http_file = 
70     attribute type { "http_file" },
71     attribute id { xsd:NCName }?,
72     attribute name { xsd:NCName }?,
73     element mimetypes { xsd:string },
74     element area { 
75         element documentroot { xsd:string },
76         element prefix { xsd:string }
77     }
78
79 filter_log = 
80     attribute type { "log" },
81     attribute id { xsd:NCName }?,
82     attribute name { xsd:NCName }?,
83     element message { xsd:NCName },
84     element filename { xsd:string }?,
85     element category {
86         attribute request-session { xsd:boolean }?, 
87         attribute response-session { xsd:boolean }?, 
88         attribute request-apdu { xsd:boolean }?, 
89         attribute response-apdu { xsd:boolean }? 
90     }?
91
92 filter_multi = 
93     attribute type { "multi" },
94     attribute id { xsd:NCName }?,
95     attribute name { xsd:NCName }?,
96     element hideunavailable { empty }?
97
98 filter_query_rewrite = 
99     attribute type { "query_rewrite" },
100     attribute id { xsd:NCName }?,
101     attribute name { xsd:NCName }?,
102     element xslt { xsd:string }
103
104 filter_virt_db = 
105     attribute type { "virt_db" },
106     attribute id { xsd:NCName }?,
107     attribute name { xsd:NCName }?,
108     element virtual {
109        attribute route { xsd:NCName }?,
110        element database { xsd:NCName },
111        element target  { xsd:string }+
112     }+
113
114 filter_z3950_client = 
115     attribute type { "z3950_client" },
116     attribute id { xsd:NCName }?,
117     attribute name { xsd:NCName }?,
118     element timeout { xsd:integer }
119