1 <?xml version="1.0" encoding="UTF-8"?>
2 <rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
3 xmlns:a="http://relaxng.org/ns/annotation/1.0"
4 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
5 <!-- Handling of element overloading when inheriting from a base
8 <rng:define name="overload">
11 Alter matched element with content
14 <rng:attribute name="position">
16 <!-- Insert content before first child -->
17 <rng:value>before</rng:value>
18 <!-- Insert content after last child -->
19 <rng:value>after</rng:value>
20 <!-- Replace all children with content -->
21 <rng:value>inside</rng:value>
22 <!-- Replace matched element itself with content -->
23 <rng:value>replace</rng:value>
27 <rng:attribute name="position">
28 <!-- Edit element attributes -->
29 <rng:value>attributes</rng:value>
32 <rng:element name="attribute">
33 <rng:attribute name="name"><rng:text/></rng:attribute>
42 <rng:define name="access_rights">
44 <rng:attribute name="groups"/>
48 <rng:define name="dashboard-column">
49 <rng:element name="column">
51 <rng:element name="action">
52 <!-- Action identifier, used by clients to get the
53 actual action from db -->
54 <rng:attribute name="name"/>
55 <!-- Displayed name of dashboard item (above idem) -->
56 <rng:optional><rng:attribute name="string"/></rng:optional>
57 <!-- Merged into the action descriptor's own
58 context before executing the action -->
59 <rng:optional><rng:attribute name="context"/></rng:optional>
60 <!-- Added to the action descriptor's own domain
61 before executing the action -->
62 <rng:optional><rng:attribute name="domain"/></rng:optional>
63 <!-- In case the action is an act_window,
64 overrides its own @views. -->
65 <rng:optional><rng:attribute name="view_mode"/></rng:optional>
66 <!-- Add a 'Create' button in order to create a new resource of the action's model
67 values : [true|false|<ID of specific action view>]. -->
68 <rng:optional><rng:attribute name="creatable"/></rng:optional>
73 <rng:define name="dashboard">
75 <rng:element name="board">
77 New-style (6.1) dashboard definition
82 Single-column dashboard style
84 <rng:attribute name="style">
85 <rng:value>1</rng:value>
87 <rng:ref name="dashboard-column"/>
91 Three different 2-column dashboard styles:
92 50|50, 33|66 and 66|33.
94 <rng:attribute name="style">
96 <rng:value>1-1</rng:value>
97 <rng:value>1-2</rng:value>
98 <rng:value>2-1</rng:value>
101 <rng:ref name="dashboard-column"/>
102 <rng:ref name="dashboard-column"/>
106 Three-column dashboard style: 33|33|33
108 <rng:attribute name="style">
109 <rng:value>1-1-1</rng:value>
111 <rng:ref name="dashboard-column"/>
112 <rng:ref name="dashboard-column"/>
113 <rng:ref name="dashboard-column"/>
118 DEPRECATED old-style dashboards
122 <rng:name>hpaned</rng:name>
123 <rng:name>vpaned</rng:name>
126 <rng:attribute name="position">
127 <rng:data type="int"/>
131 <rng:optional><rng:ref name="any"/></rng:optional>
132 <rng:optional><rng:ref name="html"/></rng:optional>
138 <rng:define name="container">
139 <rng:optional><rng:attribute name="col"/></rng:optional>
142 <rng:ref name="notebook"/>
143 <rng:ref name="field"/>
144 <rng:ref name="group"/>
145 <rng:ref name="button"/>
146 <rng:ref name="label" />
147 <rng:ref name="separator"/>
148 <rng:ref name="image"/>
149 <rng:ref name="form"/>
150 <rng:ref name="dashboard"/>
151 <rng:ref name="filter"/>
152 <rng:ref name="html"/>
153 <rng:element name="newline"><rng:empty/></rng:element>
154 <rng:element name="properties"><rng:empty/></rng:element>
159 <rng:define name="form">
160 <rng:element name="form">
161 <rng:ref name="overload"/>
162 <rng:optional><rng:attribute name="string"/></rng:optional>
163 <rng:optional><rng:attribute name="type"/></rng:optional>
164 <rng:optional><rng:attribute name="link"/></rng:optional>
165 <rng:ref name="container"/>
169 <rng:define name="diagram">
170 <rng:element name="diagram">
171 <rng:optional><rng:attribute name="string"/></rng:optional>
172 <rng:ref name="node"/>
173 <rng:ref name="arrow"/>
177 <rng:define name="node">
178 <rng:element name="node">
179 <rng:attribute name="object"/>
180 <rng:optional><rng:attribute name="shape"/></rng:optional>
181 <rng:optional><rng:attribute name="bgcolor"/></rng:optional>
182 <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
184 <rng:ref name="field"/>
189 <rng:define name="arrow">
190 <rng:element name="arrow">
191 <rng:attribute name="object" />
192 <rng:attribute name="source" />
193 <rng:attribute name="destination" />
194 <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
195 <rng:optional><rng:attribute name="label"/></rng:optional>
197 <rng:ref name="field"/>
202 <rng:define name="kanban">
203 <rng:element name="kanban">
205 <!-- group-by field to apply in the kanban view when no other
206 grouping is selected in the search view -->
207 <rng:attribute name="default_group_by" />
210 <rng:ref name="field"/>
212 <rng:element name="templates">
214 <rng:ref name="any"/>
220 <rng:define name="tree">
221 <rng:element name="tree">
222 <rng:ref name="overload"/>
223 <rng:optional><rng:attribute name="string"/></rng:optional>
224 <rng:optional><rng:attribute name="colors"/></rng:optional>
225 <rng:optional><rng:attribute name="color"/></rng:optional>
227 <rng:attribute name="editable">
229 <rng:value>top</rng:value>
230 <rng:value>bottom</rng:value>
234 <rng:optional><rng:attribute name="toolbar"/></rng:optional>
235 <rng:optional><rng:attribute name="link"/></rng:optional>
236 <rng:optional><rng:attribute name="type"/></rng:optional>
237 <rng:optional><rng:attribute name="limit"/></rng:optional>
238 <rng:optional><rng:attribute name="min_rows"/></rng:optional>
239 <rng:optional><rng:attribute name="on_write"/></rng:optional>
242 <rng:ref name="field"/>
243 <rng:ref name="separator"/>
244 <rng:ref name="tree"/>
245 <rng:ref name="group"/>
246 <rng:ref name="button"/>
247 <rng:ref name="filter"/>
248 <rng:ref name="html"/>
249 <rng:element name="newline"><rng:empty/></rng:element>
255 <rng:define name="search">
256 <rng:element name="search">
257 <rng:ref name="overload"/>
258 <rng:optional><rng:attribute name="string"/></rng:optional>
259 <rng:optional><rng:attribute name="col"/></rng:optional>
260 <rng:optional><rng:attribute name="type"/></rng:optional>
261 <rng:optional><rng:attribute name="link"/></rng:optional>
264 <rng:ref name="field"/>
265 <rng:ref name="group"/>
266 <rng:ref name="separator"/>
267 <rng:ref name="filter"/>
268 <rng:ref name="search"/>
269 <rng:element name="newline"><rng:empty/></rng:element>
270 <rng:element name="properties"><rng:empty/></rng:element>
276 <rng:define name="image">
277 <rng:element name="image">
278 <rng:attribute name="name"/>
282 <rng:define name="html">
283 <rng:element name="html">
286 <rng:ref name="any"/>
291 <rng:define name="label">
292 <rng:element name="label">
293 <rng:ref name="overload"/>
294 <rng:optional><rng:attribute name="align"/></rng:optional>
295 <rng:optional><rng:attribute name="nolabel"/></rng:optional>
296 <rng:optional><rng:attribute name="colspan"/></rng:optional>
297 <rng:optional><rng:attribute name="string"/></rng:optional>
298 <rng:optional><rng:attribute name="angle"/></rng:optional>
299 <rng:optional><rng:attribute name="fill"/></rng:optional>
300 <rng:optional><rng:attribute name="help"/></rng:optional>
301 <rng:optional><rng:attribute name="width"/></rng:optional>
302 <rng:optional><rng:attribute name="wrap"/></rng:optional>
303 <rng:optional><rng:attribute name="name"/></rng:optional>
306 <rng:ref name="notebook"/>
307 <rng:ref name="field"/>
308 <rng:ref name="group"/>
309 <rng:ref name="button"/>
310 <rng:ref name="label" />
311 <rng:ref name="separator"/>
312 <rng:ref name="image"/>
313 <rng:ref name="form"/>
314 <rng:ref name="dashboard"/>
315 <rng:ref name="filter"/>
316 <rng:ref name="html"/>
317 <rng:element name="newline"><rng:empty/></rng:element>
318 <rng:element name="properties"><rng:empty/></rng:element>
324 <rng:define name="level">
325 <rng:element name="level">
326 <rng:optional><rng:attribute name="object"/></rng:optional>
327 <rng:optional><rng:attribute name="link"/></rng:optional>
328 <rng:optional><rng:attribute name="domain"/></rng:optional>
330 <rng:ref name="field"/>
333 <rng:ref name="html"/>
338 <rng:define name="gantt">
339 <rng:element name="gantt">
340 <rng:optional><rng:attribute name="mode">
342 <rng:value>day</rng:value>
343 <rng:value>3days</rng:value>
344 <rng:value>week</rng:value>
345 <rng:value>3weeks</rng:value>
346 <rng:value>month</rng:value>
347 <rng:value>3months</rng:value>
348 <rng:value>year</rng:value>
349 <rng:value>3years</rng:value>
350 <rng:value>5years</rng:value>
351 </rng:choice></rng:attribute>
353 <rng:optional><rng:attribute name="color"/></rng:optional>
354 <rng:optional><rng:attribute name="date_delay"/></rng:optional>
355 <rng:optional><rng:attribute name="day_length"/></rng:optional>
356 <rng:optional><rng:attribute name="date_start"/></rng:optional>
357 <rng:optional><rng:attribute name="date_stop"/></rng:optional>
358 <rng:optional><rng:attribute name="date_string"/></rng:optional>
359 <rng:optional><rng:attribute name="string"/></rng:optional>
360 <rng:optional><rng:attribute name="default_group_by"/></rng:optional>
362 <rng:optional><rng:ref name="level"/></rng:optional>
363 <rng:optional><rng:ref name="field"/></rng:optional>
364 <rng:optional><rng:ref name="html"/></rng:optional>
369 <rng:define name="any">
378 <rng:ref name="any"/>
384 <rng:define name="page">
385 <rng:element name="page">
386 <rng:ref name="overload"/>
387 <rng:ref name="access_rights"/>
388 <rng:optional><rng:attribute name="string"/></rng:optional>
389 <rng:optional><rng:attribute name="name"/></rng:optional>
390 <rng:optional><rng:attribute name="attrs"/></rng:optional>
391 <rng:optional><rng:attribute name="invisible"/></rng:optional>
394 <rng:element name="newline"><rng:empty/></rng:element>
395 <rng:element name="properties"><rng:empty/></rng:element>
396 <rng:ref name="label" />
397 <rng:ref name="field"/>
398 <rng:ref name="group"/>
399 <rng:ref name="separator"/>
400 <rng:ref name="button"/>
401 <rng:ref name="form" />
402 <rng:ref name="page" />
403 <rng:ref name="notebook"/>
404 <rng:ref name="dashboard"/>
405 <rng:ref name="filter"/>
406 <rng:ref name="html"/>
412 <rng:define name="notebook">
413 <rng:element name="notebook">
414 <rng:ref name="overload"/>
415 <rng:optional><rng:attribute name="colspan"/></rng:optional>
417 <rng:attribute name="tabpos">
418 <!-- position of the notebook's tabs bar, support is
419 optional and implementation-dependent -->
421 <rng:value>up</rng:value>
422 <rng:value>down</rng:value>
423 <rng:value>left</rng:value>
424 <rng:value>right</rng:value>
429 <rng:ref name="page"/>
434 <rng:define name="separator">
435 <rng:element name="separator">
436 <rng:ref name="overload"/>
437 <rng:ref name="access_rights"/>
438 <rng:optional><rng:attribute name="name"/></rng:optional>
439 <rng:optional><rng:attribute name="colspan"/></rng:optional>
440 <rng:optional><rng:attribute name="rowspan"/></rng:optional>
441 <rng:optional><rng:attribute name="string"/></rng:optional>
442 <rng:optional><rng:attribute name="col"/></rng:optional>
443 <rng:optional><rng:attribute name="select"/></rng:optional>
444 <rng:optional><rng:attribute name="orientation"/></rng:optional>
447 <rng:ref name="separator"/>
448 <rng:ref name="button"/>
449 <rng:ref name="field"/>
450 <rng:ref name="label" />
451 <rng:ref name="group" />
452 <rng:ref name="filter"/>
453 <rng:ref name="html"/>
454 <rng:element name="properties"><rng:empty/></rng:element>
455 <rng:element name="newline"><rng:empty/></rng:element>
461 <rng:define name="xpath">
462 <rng:element name="xpath">
463 <rng:optional><rng:attribute name="expr"/></rng:optional>
464 <rng:ref name="overload"/>
467 <rng:ref name="any"/>
468 <rng:ref name="button"/>
469 <rng:ref name="html"/>
475 <rng:define name="data">
476 <rng:element name="data">
479 <rng:ref name="form"/>
480 <rng:ref name="tree"/>
481 <rng:ref name="field"/>
482 <rng:ref name="label"/>
483 <rng:ref name="separator"/>
484 <rng:ref name="notebook"/>
485 <rng:ref name="page"/>
486 <rng:ref name="xpath"/>
487 <rng:ref name="button"/>
488 <rng:ref name="group"/>
489 <rng:ref name="filter"/>
490 <rng:ref name="graph"/>
491 <rng:ref name="html"/>
492 <rng:element name="newline"><rng:empty/></rng:element>
498 <rng:define name="field">
499 <rng:element name="field">
500 <rng:attribute name="name" />
501 <rng:ref name="overload"/>
502 <rng:ref name="access_rights"/>
503 <rng:optional><rng:attribute name="domain_filter"/></rng:optional>
504 <rng:optional><rng:attribute name="attrs"/></rng:optional>
505 <rng:optional><rng:attribute name="string"/></rng:optional>
506 <rng:optional><rng:attribute name="completion"/></rng:optional>
507 <rng:optional><rng:attribute name="width"/></rng:optional>
508 <rng:optional><rng:attribute name="type"/></rng:optional>
509 <rng:optional><rng:attribute name="ref"/></rng:optional>
510 <rng:optional><rng:attribute name="eval"/></rng:optional>
511 <rng:optional><rng:attribute name="search"/></rng:optional>
512 <rng:optional><rng:attribute name="model"/></rng:optional>
513 <rng:optional><rng:attribute name="use"/></rng:optional>
514 <rng:optional><rng:attribute name="on_change"/></rng:optional>
515 <rng:optional><rng:attribute name="domain"/></rng:optional>
516 <rng:optional><rng:attribute name="filter_domain"/></rng:optional>
517 <rng:optional><rng:attribute name="invisible"/></rng:optional>
518 <rng:optional><rng:attribute name="password"/></rng:optional>
519 <rng:optional><rng:attribute name="comparator"/></rng:optional>
520 <rng:optional><rng:attribute name="sum"/></rng:optional>
521 <rng:optional><rng:attribute name="bold"/></rng:optional>
522 <rng:optional><rng:attribute name="avg"/></rng:optional>
523 <rng:optional><rng:attribute name="select"/></rng:optional>
524 <rng:optional><rng:attribute name="group"/></rng:optional>
525 <rng:optional><rng:attribute name="operator"/></rng:optional>
526 <rng:optional><rng:attribute name="colspan"/></rng:optional>
527 <rng:optional><rng:attribute name="nolabel"/></rng:optional>
528 <rng:optional><rng:attribute name="default_get"/></rng:optional>
529 <rng:optional><rng:attribute name="required"/></rng:optional>
530 <rng:optional><rng:attribute name="readonly"/></rng:optional>
531 <rng:optional><rng:attribute name="view_mode"/></rng:optional>
532 <rng:optional><rng:attribute name="widget"/></rng:optional>
533 <rng:optional><rng:attribute name="context"/></rng:optional>
534 <rng:optional><rng:attribute name="states"/></rng:optional>
535 <rng:optional><rng:attribute name="digits"/></rng:optional>
536 <rng:optional><rng:attribute name="icon"/></rng:optional>
537 <rng:optional><rng:attribute name="mode"/></rng:optional>
538 <rng:optional><rng:attribute name="img_width"/></rng:optional>
539 <rng:optional><rng:attribute name="img_height"/></rng:optional>
540 <rng:optional><rng:attribute name="size"/></rng:optional>
541 <rng:optional><rng:attribute name="filename"/></rng:optional>
542 <rng:optional><rng:attribute name="height"/></rng:optional>
543 <rng:optional><rng:attribute name="rowspan"/></rng:optional>
544 <rng:optional><rng:attribute name="align"/></rng:optional>
545 <rng:optional><rng:attribute name="selection"/></rng:optional>
546 <rng:optional><rng:attribute name="default_focus"/></rng:optional>
547 <rng:optional><rng:attribute name="filters"/></rng:optional>
548 <rng:optional><rng:attribute name="statusbar_visible"/></rng:optional>
549 <rng:optional><rng:attribute name="statusbar_colors"/></rng:optional>
550 <!-- Widget *static* options defined as an arbitrary JSON dict, with
551 widget-dependent parameters. To be ignored if widget/client does
552 not support them. -->
553 <rng:optional><rng:attribute name="options"/></rng:optional>
556 <rng:ref name="diagram"/>
557 <rng:ref name="kanban"/>
558 <rng:ref name="form"/>
559 <rng:ref name="data"/>
560 <rng:ref name="tree"/>
561 <rng:ref name="field"/>
562 <rng:ref name="label"/>
563 <rng:ref name="separator"/>
564 <rng:ref name="xpath"/>
565 <rng:ref name="button"/>
566 <rng:ref name="group"/>
567 <rng:ref name="graph"/>
568 <rng:ref name="filter"/>
569 <rng:ref name="notebook"/>
570 <rng:ref name="html"/>
571 <rng:element name="newline"><rng:empty/></rng:element>
577 <rng:define name="group">
578 <rng:element name="group">
579 <rng:ref name="overload"/>
580 <rng:ref name="access_rights"/>
581 <rng:optional><rng:attribute name="attrs"/></rng:optional>
582 <rng:optional><rng:attribute name="colspan"/></rng:optional>
583 <rng:optional><rng:attribute name="rowspan"/></rng:optional>
584 <rng:optional><rng:attribute name="expand"/></rng:optional>
585 <rng:optional><rng:attribute name="states"/></rng:optional>
586 <rng:optional><rng:attribute name="string"/></rng:optional>
587 <rng:optional><rng:attribute name="fill"/></rng:optional>
588 <rng:optional><rng:attribute name="height"/></rng:optional>
589 <rng:optional><rng:attribute name="width"/></rng:optional>
590 <rng:optional><rng:attribute name="name"/></rng:optional>
591 <rng:optional><rng:attribute name="color" /></rng:optional>
592 <rng:ref name="container"/>
596 <rng:define name="calendar">
597 <rng:element name="calendar">
598 <rng:optional><rng:attribute name="string" /></rng:optional>
599 <rng:optional><rng:attribute name="color" /></rng:optional>
600 <rng:optional><rng:attribute name="date_start" /></rng:optional>
601 <rng:optional><rng:attribute name="date_stop" /></rng:optional>
602 <rng:optional><rng:attribute name="day_length" /></rng:optional>
603 <rng:optional><rng:attribute name="date_delay" /></rng:optional>
604 <rng:optional><rng:attribute name="type" /></rng:optional>
605 <rng:optional><rng:attribute name="mode" /></rng:optional>
607 <rng:ref name="field"/>
610 <rng:ref name="html"/>
615 <rng:define name="graph">
616 <rng:element name="graph">
617 <rng:optional><rng:attribute name="string" /></rng:optional>
618 <rng:optional><rng:attribute name="orientation" /></rng:optional>
619 <rng:optional><rng:attribute name="type" /></rng:optional>
620 <rng:optional><rng:attribute name="color"/></rng:optional>
622 <rng:ref name="field"/>
625 <rng:ref name="html"/>
630 <rng:define name="button">
631 <rng:element name="button">
632 <rng:ref name="overload"/>
633 <rng:ref name="access_rights"/>
634 <rng:optional><rng:attribute name="attrs"/></rng:optional>
635 <rng:optional><rng:attribute name="invisible"/></rng:optional>
636 <rng:optional><rng:attribute name="name" /></rng:optional>
637 <rng:optional><rng:attribute name="icon" /></rng:optional>
638 <rng:optional><rng:attribute name="string" /></rng:optional>
639 <rng:optional><rng:attribute name="states" /></rng:optional>
640 <rng:optional><rng:attribute name="type" /></rng:optional>
641 <rng:optional><rng:attribute name="special" /></rng:optional>
642 <rng:optional><rng:attribute name="align" /></rng:optional>
643 <rng:optional><rng:attribute name="colspan"/></rng:optional>
644 <rng:optional><rng:attribute name="target"/></rng:optional>
645 <rng:optional><rng:attribute name="readonly"/></rng:optional>
646 <rng:optional><rng:attribute name="context"/></rng:optional>
647 <rng:optional><rng:attribute name="confirm"/></rng:optional>
648 <rng:optional><rng:attribute name="help"/></rng:optional>
649 <rng:optional><rng:attribute name="default_focus"/></rng:optional>
652 <rng:ref name="form" />
653 <rng:ref name="field" />
654 <rng:ref name="tree" />
655 <rng:ref name="notebook" />
656 <rng:ref name="graph" />
657 <rng:ref name="calendar" />
658 <rng:ref name="gantt" />
659 <rng:ref name="xpath" />
660 <rng:ref name="page" />
661 <rng:ref name="separator"/>
662 <rng:ref name="button"/>
663 <rng:ref name="group"/>
664 <rng:ref name="filter"/>
665 <rng:ref name="html"/>
666 <rng:element name="properties"><rng:empty/></rng:element>
667 <rng:element name="newline"><rng:empty/></rng:element>
674 <rng:define name="filter">
675 <rng:element name="filter">
676 <rng:ref name="overload"/>
677 <rng:ref name="access_rights"/>
678 <rng:optional><rng:attribute name="attrs"/></rng:optional>
679 <rng:optional><rng:attribute name="name" /></rng:optional>
680 <rng:optional><rng:attribute name="separator" /></rng:optional>
681 <rng:optional><rng:attribute name="icon" /></rng:optional>
682 <rng:optional><rng:attribute name="string" /></rng:optional>
683 <rng:optional><rng:attribute name="type" /></rng:optional>
684 <rng:optional><rng:attribute name="align" /></rng:optional>
685 <rng:optional><rng:attribute name="colspan"/></rng:optional>
686 <rng:optional><rng:attribute name="readonly"/></rng:optional>
687 <rng:optional><rng:attribute name="context"/></rng:optional>
688 <rng:optional><rng:attribute name="help"/></rng:optional>
689 <rng:optional><rng:attribute name="domain"/></rng:optional>
692 <rng:ref name="form" />
693 <rng:ref name="field" />
694 <rng:ref name="tree" />
695 <rng:ref name="notebook" />
696 <rng:ref name="graph" />
697 <rng:ref name="calendar" />
698 <rng:ref name="gantt" />
699 <rng:ref name="xpath" />
700 <rng:ref name="page" />
701 <rng:ref name="separator"/>
702 <rng:ref name="button"/>
703 <rng:ref name="filter"/>
704 <rng:ref name="html"/>
705 <rng:element name="properties"><rng:empty/></rng:element>
706 <rng:element name="newline"><rng:empty/></rng:element>
715 <rng:ref name="diagram" />
716 <rng:ref name="kanban" />
717 <rng:ref name="form" />
718 <rng:ref name="search" />
719 <rng:ref name="group" />
720 <rng:ref name="field" />
721 <rng:ref name="tree" />
722 <rng:ref name="notebook" />
723 <rng:ref name="graph" />
724 <rng:ref name="calendar" />
725 <rng:ref name="data" />
726 <rng:ref name="gantt" />
727 <rng:ref name="xpath" />
728 <rng:ref name="page" />
729 <rng:ref name="separator"/>
730 <rng:ref name="button"/>
731 <rng:ref name="filter"/>
732 <rng:ref name="label" />
733 <rng:ref name="html"/>