Implement basic configuration of session_shared.
[metaproxy-moved-to-github.git] / etc / config.xsd
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- $Id: config.xsd,v 1.20 2006-06-21 09:16:53 adam Exp $ -->
3 <!--
4         This Schema prescribes the format of YP2 configuration files.
5         Invoke it like this:
6                 xmllint -noout -schema config.xsd config1.xml
7         But use double-dashes for the option names instead of single.
8         (I couldn't include them literally, as, believe it or not,
9         it's an error to include a double dash in an XML comment.
10 -->
11 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
12            elementFormDefault="qualified"
13            targetNamespace="http://indexdata.dk/yp2/config/1"
14            xmlns:config="http://indexdata.dk/yp2/config/1">
15
16   <xs:element name="yp2">
17     <xs:complexType>
18       <xs:sequence>
19         <xs:element ref="config:start"/>
20         <xs:element minOccurs="0" ref="config:filters"/>
21         <xs:element ref="config:routes"/>
22       </xs:sequence>
23     </xs:complexType>
24   </xs:element>
25
26
27   <xs:element name="start">
28     <xs:complexType>
29       <!-- Absence of elements listed here mandates that <start> is empty -->
30       <xs:attribute name="route" use="required" type="xs:NCName"/>
31     </xs:complexType>
32   </xs:element>
33
34
35   <xs:element name="filters">
36     <xs:complexType>
37       <xs:sequence>
38         <xs:element maxOccurs="unbounded" ref="config:filter"/>
39       </xs:sequence>
40     </xs:complexType>
41   </xs:element>
42
43   <xs:element name="filter">
44     <xs:complexType>
45       <xs:choice>
46         <!-- In general, the content depends on the "type" attribute.
47              Perhaps the various filter-types' configuration
48              structures should each be described by their own little
49              subschemas? -->
50
51         <!-- type="frontend_net" -->
52         <xs:sequence>
53           <xs:element minOccurs="0" ref="config:threads"/>
54           <xs:element ref="config:port"/>
55         </xs:sequence>
56
57         <!-- type="z3950_client" -->
58         <xs:element ref="config:timeout"/>
59
60         <!-- type="log" -->
61         <xs:sequence>
62          <xs:element minOccurs="0" ref="config:message"/>
63          <xs:element minOccurs="0" ref="config:filename"/>
64          <xs:element minOccurs="0" name="category">
65            <xs:complexType>
66             <xs:attribute name="request-session" type="xs:boolean"/>
67             <xs:attribute name="response-session" type="xs:boolean"/>
68             <xs:attribute name="session" type="xs:boolean"/>
69             <xs:attribute name="request-apdu" type="xs:boolean"/>
70             <xs:attribute name="response-apdu" type="xs:boolean"/>
71             <xs:attribute name="apdu" type="xs:boolean"/>
72             <xs:attribute name="init-options" type="xs:boolean"/>
73            </xs:complexType>
74          </xs:element>
75         </xs:sequence>
76
77         <!-- type="virt_db" or type="multi" -->
78         <xs:sequence>
79           <xs:element minOccurs="0" maxOccurs="unbounded" ref="config:virtual"/>
80           <xs:element minOccurs="0" maxOccurs="1" name="hideunavailable">
81             <xs:complexType/>
82           </xs:element>
83         </xs:sequence>
84
85         <!-- type="auth_simple" -->
86         <xs:sequence>
87           <xs:element minOccurs="0" ref="config:userRegister"/>
88           <xs:element minOccurs="0" ref="config:targetRegister"/>
89           <xs:element minOccurs="0" name="discardUnauthorisedTargets">
90             <xs:complexType/>
91           </xs:element>
92         </xs:sequence>
93
94         <!-- type="backend_test" -->
95         <!-- No elements included -->
96
97         <!-- type="session_shared" -->
98         <xs:sequence>
99           <xs:element minOccurs="0" name="resultset">
100            <xs:complexType>
101             <xs:attribute name="ttl" type="xs:integer"/>
102             <xs:attribute name="max" type="xs:integer"/>
103            </xs:complexType>
104           </xs:element>
105           <xs:element minOccurs="0" name="session">
106            <xs:complexType>
107             <xs:attribute name="ttl" type="xs:integer"/>
108            </xs:complexType>
109           </xs:element>
110         </xs:sequence>
111
112         <!-- type="template" -->
113         <!-- No example configuration to deduce from yet -->
114
115         <!-- type="http_file" -->
116         <xs:sequence>
117           <xs:element ref="config:mimetypes"/>
118           <xs:element name="area">
119             <xs:complexType>
120               <xs:sequence>
121                 <xs:element ref="config:documentroot"/>
122                 <xs:element ref="config:prefix"/>
123               </xs:sequence>
124             </xs:complexType>
125           </xs:element>
126         </xs:sequence>
127
128         <!-- type="query_rewrite" -->
129         <xs:element ref="config:xslt"/>
130
131       </xs:choice>
132       <xs:attribute name="id" type="xs:NCName"/>
133       <xs:attribute name="refid" type="xs:NCName"/>
134       <xs:attribute name="type">
135         <xs:simpleType>
136           <xs:restriction base="xs:NCName">
137             <xs:enumeration value="frontend_net"/>
138             <xs:enumeration value="z3950_client"/>
139             <xs:enumeration value="log"/>
140             <xs:enumeration value="virt_db"/>
141             <xs:enumeration value="auth_simple"/>
142             <xs:enumeration value="backend_test"/>
143             <xs:enumeration value="multi"/>
144             <xs:enumeration value="session_shared"/>
145             <xs:enumeration value="template"/>
146             <xs:enumeration value="http_file"/>
147             <xs:enumeration value="query_rewrite"/>
148           </xs:restriction>
149         </xs:simpleType>
150       </xs:attribute>
151     </xs:complexType>
152   </xs:element>
153
154   <xs:element name="threads" type="xs:integer"/>
155   <xs:element name="port" type="xs:string"/>
156   <xs:element name="timeout" type="xs:integer"/>
157   <xs:element name="message" type="xs:NCName"/>
158   <xs:element name="filename" type="xs:string"/>
159   <xs:element name="userRegister" type="xs:string"/>
160   <xs:element name="targetRegister" type="xs:string"/>
161   <xs:element name="discardUnauthorisedTargets" type="xs:string"/>
162   <xs:element name="mimetypes" type="xs:string"/>
163   <xs:element name="documentroot" type="xs:string"/>
164   <xs:element name="prefix" type="xs:string"/>
165   <xs:element name="xslt" type="xs:string"/>
166
167   <!-- ### This is used differently depending on whether it occurs
168        within a "virt_db" or "multi" filter: for the former, it
169        contains one database and one target; for the latter, it
170        contains an optional vhost and one or more targets.  This
171        schema should be tweaked to enforce this. -->
172   <xs:element name="virtual">
173     <xs:complexType>
174       <xs:sequence>
175         <xs:element minOccurs="0" ref="config:database"/>
176         <xs:element minOccurs="0" ref="config:vhost"/>
177         <xs:element maxOccurs="unbounded" ref="config:target"/>
178       </xs:sequence>
179       <xs:attribute name="route" type="xs:NCName"/>
180     </xs:complexType>
181   </xs:element>
182
183   <xs:element name="database" type="xs:NCName"/>
184   <xs:element name="vhost" type="xs:NCName"/>
185   <xs:element name="target" type="xs:anyURI"/>
186
187
188   <xs:element name="routes">
189     <xs:complexType>
190       <xs:sequence>
191         <xs:element minOccurs="1" maxOccurs="unbounded" ref="config:route"/>
192       </xs:sequence>
193     </xs:complexType>
194   </xs:element>
195
196   <xs:element name="route">
197     <xs:complexType>
198       <xs:sequence>
199         <xs:element maxOccurs="unbounded" ref="config:filter"/>
200       </xs:sequence>
201       <xs:attribute name="id" use="required" type="xs:NCName"/>
202     </xs:complexType>
203   </xs:element>
204 </xs:schema>