2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3 elementFormDefault="qualified" attributeFormDefault="unqualified">
5 <xs:element name="info">
8 <xs:element name="id" type="id" minOccurs="1" maxOccurs="1"/>
9 <xs:element name="name" type="l10n-string" minOccurs="1"
10 maxOccurs="unbounded"/>
11 <xs:element name="summary" type="l10n-string" minOccurs="1"
12 maxOccurs="unbounded"/>
13 <xs:element name="description" type="l10n-text" minOccurs="1"
14 maxOccurs="unbounded"/>
15 <xs:element name="version" type="semver"
16 minOccurs="1" maxOccurs="1"/>
17 <xs:element name="licence" type="licence" minOccurs="1"
18 maxOccurs="unbounded"/>
19 <xs:element name="author" type="author" minOccurs="1"
20 maxOccurs="unbounded"/>
21 <xs:element name="namespace" type="limited-string"
22 minOccurs="0" maxOccurs="1"/>
23 <xs:element name="types" type="types" minOccurs="0"
25 <xs:element name="documentation" type="documentation"
26 minOccurs="0" maxOccurs="1"/>
27 <xs:element name="category" type="category" minOccurs="1"
28 maxOccurs="unbounded"/>
29 <xs:element name="website" type="url" minOccurs="0"
31 <xs:element name="discussion" type="url" minOccurs="0"
33 <xs:element name="bugs" type="url" minOccurs="1"
35 <xs:element name="repository" type="repository" minOccurs="0"
37 <xs:element name="screenshot" type="screenshot" minOccurs="0"
39 <xs:element name="dependencies" type="dependencies"
40 minOccurs="1" maxOccurs="1"/>
41 <xs:element name="background-jobs" type="jobs"
42 minOccurs="0" maxOccurs="1"/>
43 <xs:element name="repair-steps" type="repair-steps"
44 minOccurs="0" maxOccurs="1"/>
45 <xs:element name="two-factor-providers"
46 type="two-factor-providers"
47 minOccurs="0" maxOccurs="1"/>
48 <xs:element name="commands" type="commands"
49 minOccurs="0" maxOccurs="1"/>
50 <xs:element name="settings" type="settings" minOccurs="0"
52 <xs:element name="activity" type="activity" minOccurs="0"
54 <xs:element name="navigations" type="navigations" minOccurs="0"
56 <xs:element name="contactsmenu" type="contactsmenu" minOccurs="0"
58 <xs:element name="collaboration" type="collaboration" minOccurs="0"
60 <xs:element name="sabre" type="sabre" minOccurs="0"
64 <xs:unique name="uniqueNameL10n">
65 <xs:selector xpath="name"/>
66 <xs:field xpath="@lang"/>
68 <xs:unique name="uniqueSummaryL10n">
69 <xs:selector xpath="summary"/>
70 <xs:field xpath="@lang"/>
72 <xs:unique name="uniqueDescriptionL10n">
73 <xs:selector xpath="description"/>
74 <xs:field xpath="@lang"/>
76 <xs:unique name="uniqueLicense">
77 <xs:selector xpath="licence"/>
80 <xs:unique name="uniqueTypes">
81 <xs:selector xpath="types/type"/>
84 <xs:unique name="uniqueCategory">
85 <xs:selector xpath="category"/>
88 <xs:unique name="uniqueDatabase">
89 <xs:selector xpath="dependencies/database"/>
92 <xs:unique name="uniqueLib">
93 <xs:selector xpath="dependencies/lib"/>
96 <xs:unique name="uniqueCommand">
97 <xs:selector xpath="dependencies/command"/>
103 <xs:simpleType name="empty-string">
104 <xs:restriction base="xs:string">
105 <xs:maxLength value="0"/>
108 <xs:simpleType name="non-empty-string">
109 <xs:restriction base="xs:string">
110 <xs:minLength value="1"/>
113 <xs:simpleType name="limited-string">
114 <xs:restriction base="non-empty-string">
115 <xs:maxLength value="256"/>
119 <xs:complexType name="l10n-text">
121 <xs:extension base="non-empty-string">
122 <xs:attribute name="lang" type="l10n-code" default="en"
127 <xs:complexType name="l10n-string">
129 <xs:restriction base="l10n-text">
130 <xs:maxLength value="128"/>
136 <xs:simpleType name="l10n-code">
137 <xs:restriction base="xs:string">
138 <xs:enumeration value="af"/>
139 <xs:enumeration value="ar"/>
140 <xs:enumeration value="ast"/>
141 <xs:enumeration value="az"/>
142 <xs:enumeration value="bg"/>
143 <xs:enumeration value="be"/>
144 <xs:enumeration value="bn"/>
145 <xs:enumeration value="br"/>
146 <xs:enumeration value="bs"/>
147 <xs:enumeration value="ca"/>
148 <xs:enumeration value="cs"/>
149 <xs:enumeration value="cy"/>
150 <xs:enumeration value="da"/>
151 <xs:enumeration value="de"/>
152 <xs:enumeration value="el"/>
153 <xs:enumeration value="en"/>
154 <xs:enumeration value="eo"/>
155 <xs:enumeration value="es"/>
156 <xs:enumeration value="es-ar"/>
157 <xs:enumeration value="es-co"/>
158 <xs:enumeration value="es-mx"/>
159 <xs:enumeration value="es-ni"/>
160 <xs:enumeration value="es-ve"/>
161 <xs:enumeration value="et"/>
162 <xs:enumeration value="eu"/>
163 <xs:enumeration value="fa"/>
164 <xs:enumeration value="fi"/>
165 <xs:enumeration value="fr"/>
166 <xs:enumeration value="fy"/>
167 <xs:enumeration value="ga"/>
168 <xs:enumeration value="gd"/>
169 <xs:enumeration value="gl"/>
170 <xs:enumeration value="he"/>
171 <xs:enumeration value="hi"/>
172 <xs:enumeration value="hr"/>
173 <xs:enumeration value="hu"/>
174 <xs:enumeration value="ia"/>
175 <xs:enumeration value="id"/>
176 <xs:enumeration value="io"/>
177 <xs:enumeration value="is"/>
178 <xs:enumeration value="it"/>
179 <xs:enumeration value="ja"/>
180 <xs:enumeration value="ka"/>
181 <xs:enumeration value="kk"/>
182 <xs:enumeration value="km"/>
183 <xs:enumeration value="kn"/>
184 <xs:enumeration value="ko"/>
185 <xs:enumeration value="lb"/>
186 <xs:enumeration value="lt"/>
187 <xs:enumeration value="lv"/>
188 <xs:enumeration value="mk"/>
189 <xs:enumeration value="ml"/>
190 <xs:enumeration value="mn"/>
191 <xs:enumeration value="mr"/>
192 <xs:enumeration value="my"/>
193 <xs:enumeration value="nb"/>
194 <xs:enumeration value="ne"/>
195 <xs:enumeration value="nl"/>
196 <xs:enumeration value="nn"/>
197 <xs:enumeration value="os"/>
198 <xs:enumeration value="pa"/>
199 <xs:enumeration value="pl"/>
200 <xs:enumeration value="pt"/>
201 <xs:enumeration value="pt-br"/>
202 <xs:enumeration value="ro"/>
203 <xs:enumeration value="ru"/>
204 <xs:enumeration value="sk"/>
205 <xs:enumeration value="sl"/>
206 <xs:enumeration value="sq"/>
207 <xs:enumeration value="sr"/>
208 <xs:enumeration value="sr-latn"/>
209 <xs:enumeration value="sv"/>
210 <xs:enumeration value="sw"/>
211 <xs:enumeration value="ta"/>
212 <xs:enumeration value="te"/>
213 <xs:enumeration value="th"/>
214 <xs:enumeration value="tr"/>
215 <xs:enumeration value="tt"/>
216 <xs:enumeration value="udm"/>
217 <xs:enumeration value="uk"/>
218 <xs:enumeration value="ur"/>
219 <xs:enumeration value="vi"/>
220 <xs:enumeration value="zh-hans"/>
221 <xs:enumeration value="zh-hant"/>
225 <xs:simpleType name="semver">
226 <xs:restriction base="limited-string">
228 value="(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?"/>
232 <xs:simpleType name="version">
233 <xs:restriction base="limited-string">
234 <xs:pattern value="[0-9]+(\.[0-9]+){0,2}"/>
238 <xs:simpleType name="url">
239 <xs:restriction base="xs:anyURI">
240 <xs:pattern value="https?://.+"/>
241 <xs:maxLength value="256"/>
245 <xs:simpleType name="secure-url">
246 <xs:restriction base="xs:anyURI">
247 <xs:pattern value="https://.+"/>
248 <xs:maxLength value="256"/>
252 <xs:simpleType name="email">
253 <xs:restriction base="limited-string">
254 <xs:pattern value="[^@]+@[^\.]+\..+"/>
258 <!-- first level elements -->
259 <xs:complexType name="screenshot">
261 <xs:extension base="secure-url">
262 <xs:attribute name="small-thumbnail" use="optional"
268 <xs:simpleType name="id">
269 <xs:restriction base="limited-string">
270 <xs:pattern value="[a-z]+[a-z0-9_]*[a-z0-9]+"/>
274 <xs:complexType name="author">
276 <xs:extension base="limited-string">
277 <xs:attribute name="mail" type="email" use="optional"/>
278 <xs:attribute name="homepage" type="url" use="optional"/>
283 <xs:complexType name="repository">
285 <xs:extension base="url">
286 <xs:attribute name="type" type="vcs" use="optional"
292 <xs:simpleType name="vcs">
293 <xs:restriction base="xs:string">
294 <xs:enumeration value="git"/>
295 <xs:enumeration value="mercurial"/>
296 <xs:enumeration value="subversion"/>
297 <xs:enumeration value="bzr"/>
301 <xs:complexType name="types">
303 <xs:element name="prelogin" minOccurs="0" maxOccurs="1"/>
304 <xs:element name="filesystem" minOccurs="0" maxOccurs="1"/>
305 <xs:element name="authentication" minOccurs="0" maxOccurs="1"/>
306 <xs:element name="logging" minOccurs="0" maxOccurs="1"/>
307 <xs:element name="dav" minOccurs="0" maxOccurs="1"/>
308 <xs:element name="prevent_group_restriction" minOccurs="0"
313 <xs:simpleType name="category">
314 <xs:restriction base="xs:string">
315 <xs:enumeration value="security"/>
316 <xs:enumeration value="customization"/>
317 <xs:enumeration value="files"/>
318 <xs:enumeration value="integration"/>
319 <xs:enumeration value="monitoring"/>
320 <xs:enumeration value="multimedia"/>
321 <xs:enumeration value="office"/>
322 <xs:enumeration value="organization"/>
323 <xs:enumeration value="social"/>
324 <xs:enumeration value="tools"/>
325 <xs:enumeration value="games"/>
329 <xs:simpleType name="licence">
330 <xs:restriction base="xs:string">
331 <xs:enumeration value="agpl"/>
332 <xs:enumeration value="mpl"/>
333 <xs:enumeration value="apache"/>
337 <xs:simpleType name="databases">
338 <xs:restriction base="xs:string">
339 <xs:enumeration value="sqlite"/>
340 <xs:enumeration value="mysql"/>
341 <xs:enumeration value="pgsql"/>
345 <xs:complexType name="documentation">
347 <xs:element name="user" type="url" minOccurs="0" maxOccurs="1"/>
348 <xs:element name="admin" type="url" minOccurs="0" maxOccurs="1"/>
349 <xs:element name="developer" type="url" minOccurs="0"
354 <xs:complexType name="settings">
356 <xs:element name="admin" type="php-class" minOccurs="0"
357 maxOccurs="unbounded"/>
358 <xs:element name="admin-section" type="php-class" minOccurs="0"
359 maxOccurs="unbounded"/>
363 <xs:complexType name="activity">
365 <xs:element name="settings" type="activity-settings" minOccurs="0"
367 <xs:element name="filters" type="activity-filters" minOccurs="0" maxOccurs="1"/>
368 <xs:element name="providers" type="activity-providers" minOccurs="0"
373 <xs:complexType name="activity-settings">
375 <xs:element name="setting" type="php-class" minOccurs="1"
376 maxOccurs="unbounded"/>
380 <xs:complexType name="activity-filters">
382 <xs:element name="filter" type="php-class" minOccurs="1"
383 maxOccurs="unbounded"/>
387 <xs:complexType name="activity-providers">
389 <xs:element name="provider" type="php-class" minOccurs="1"
390 maxOccurs="unbounded"/>
394 <xs:complexType name="navigations">
396 <xs:element name="navigation" type="navigation" minOccurs="1"
397 maxOccurs="unbounded"/>
401 <xs:complexType name="navigation">
403 <xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/>
404 <xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/>
405 <xs:element name="route" type="route" minOccurs="1" maxOccurs="1"/>
406 <xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
407 <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/>
408 <xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/>
410 <xs:attribute name="role" type="navigation-role" default="all" use="optional"/>
413 <xs:simpleType name="navigation-role">
414 <xs:restriction base="xs:string">
415 <xs:enumeration value="all"/>
416 <xs:enumeration value="admin"/>
420 <xs:simpleType name="navigation-type">
421 <xs:restriction base="xs:string">
422 <xs:enumeration value="link"/>
423 <xs:enumeration value="settings"/>
427 <xs:simpleType name="route">
428 <xs:restriction base="non-empty-string">
429 <xs:pattern value="[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){2}"/>
433 <xs:complexType name="contactsmenu">
435 <xs:element name="provider" type="php-class" minOccurs="1"
440 <xs:complexType name="collaboration">
442 <xs:element name="plugins" type="collaboration-plugins" minOccurs="0" maxOccurs="1">
447 <xs:complexType name="collaboration-plugins">
449 <xs:element name="plugin" type="collaboration-plugins-plugin" minOccurs="1" maxOccurs="unbounded">
454 <xs:complexType name="collaboration-plugins-plugin">
456 <xs:extension base="php-class">
457 <xs:attribute name="type" type="collaboration-plugin-type" use="required"/>
458 <xs:attribute name="share-type" type="share-type" />
463 <xs:simpleType name="collaboration-plugin-type">
464 <xs:restriction base="xs:string">
465 <xs:enumeration value="collaborator-search"/>
466 <xs:enumeration value="autocomplete-sort"/>
470 <xs:complexType name="sabre">
472 <xs:element name="collections" type="sabre-collections" minOccurs="0" maxOccurs="1"/>
473 <xs:element name="plugins" type="sabre-plugins" minOccurs="0" maxOccurs="1"/>
477 <xs:complexType name="sabre-collections">
479 <xs:element name="collection" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
483 <xs:complexType name="sabre-plugins">
485 <xs:element name="plugin" type="php-class" minOccurs="1" maxOccurs="unbounded"/>
489 <xs:simpleType name="share-type">
490 <xs:restriction base="xs:string">
491 <xs:enumeration value="SHARE_TYPE_USER"/>
492 <xs:enumeration value="SHARE_TYPE_GROUP"/>
493 <xs:enumeration value="SHARE_TYPE_LINK"/>
494 <xs:enumeration value="SHARE_TYPE_EMAIL"/>
495 <xs:enumeration value="SHARE_TYPE_CONTACT"/>
496 <xs:enumeration value="SHARE_TYPE_REMOTE"/>
497 <xs:enumeration value="SHARE_TYPE_CIRCLE"/>
498 <xs:enumeration value="SHARE_TYPE_GUEST"/>
502 <!-- dependencies -->
503 <xs:complexType name="dependencies">
505 <xs:element name="php" type="php" minOccurs="0" maxOccurs="1"/>
506 <xs:element name="database" type="database" minOccurs="0"
507 maxOccurs="unbounded"/>
508 <xs:element name="command" type="shell-command" minOccurs="0"
509 maxOccurs="unbounded"/>
510 <xs:element name="lib" type="min-max-version" minOccurs="0"
511 maxOccurs="unbounded"/>
512 <xs:element name="owncloud" type="owncloud" minOccurs="0"
514 <xs:element name="nextcloud" type="nextcloud" minOccurs="1"
519 <xs:complexType name="owncloud">
520 <xs:attribute name="min-version" type="version" use="required"/>
521 <xs:attribute name="max-version" type="version" use="optional"/>
524 <xs:complexType name="nextcloud">
525 <xs:attribute name="min-version" type="version" use="required"/>
526 <xs:attribute name="max-version" type="version" use="required"/>
529 <xs:simpleType name="shell-command">
530 <xs:restriction base="limited-string">
531 <xs:pattern value="[a-zA-Z\-_]+"/>
535 <xs:complexType name="min-max-version">
537 <xs:extension base="limited-string">
538 <xs:attribute name="min-version" type="version"
540 <xs:attribute name="max-version" type="version"
546 <xs:complexType name="database">
548 <xs:extension base="databases">
549 <xs:attribute name="min-version" type="version"
551 <xs:attribute name="max-version" type="version"
557 <xs:complexType name="php">
559 <xs:extension base="empty-string">
560 <xs:attribute name="min-int-size" type="bits" use="optional"
562 <xs:attribute name="min-version" type="version"
564 <xs:attribute name="max-version" type="version"
570 <xs:simpleType name="bits">
571 <xs:restriction base="xs:int">
572 <xs:enumeration value="32"/>
573 <xs:enumeration value="64"/>
577 <xs:complexType name="repair-steps">
579 <xs:element name="pre-migration" type="steps" minOccurs="0"
581 <xs:element name="post-migration" type="steps" minOccurs="0"
583 <xs:element name="live-migration" type="steps" minOccurs="0"
585 <xs:element name="install" type="steps" minOccurs="0"
587 <xs:element name="uninstall" type="steps" minOccurs="0"
592 <xs:complexType name="jobs">
594 <xs:element name="job" type="php-class" minOccurs="1"
595 maxOccurs="unbounded"/>
599 <xs:complexType name="steps">
601 <xs:element name="step" type="php-class" minOccurs="1"
602 maxOccurs="unbounded"/>
606 <xs:complexType name="two-factor-providers">
608 <xs:element name="provider" type="php-class" minOccurs="1"
609 maxOccurs="unbounded"/>
613 <xs:complexType name="commands">
615 <xs:element name="command" type="php-class" minOccurs="1"
616 maxOccurs="unbounded"/>
620 <xs:simpleType name="php-class">
621 <xs:restriction base="xs:string">
623 value="[a-zA-Z_][0-9a-zA-Z_]*(\\[a-zA-Z_][0-9a-zA-Z_]*)*"/>