Upstream patches for integrating org-lprint and org-odt.
[org-mode/org-jambu.git] / contrib / odt / od-schema-v1.1.rnc
blob1edeb406de3289db20fa8a40c15c304d580f5b7c
1 # OASIS OpenDocument v1.1
2 # OASIS Standard, 1 Feb 2007
3 # Relax-NG Schema
4
5 # $Id$
6
7 # © 2002-2007 OASIS Open
8 # © 1999-2007 Sun Microsystems, Inc.
10 namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
11 namespace anim = "urn:oasis:names:tc:opendocument:xmlns:animation:1.0"
12 namespace chart = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
13 namespace config = "urn:oasis:names:tc:opendocument:xmlns:config:1.0"
14 namespace dc = "http://purl.org/dc/elements/1.1/"
15 namespace dr3d = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
16 namespace draw = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
17 namespace fo =
18   "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
19 namespace form = "urn:oasis:names:tc:opendocument:xmlns:form:1.0"
20 namespace math = "http://www.w3.org/1998/Math/MathML"
21 namespace meta = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
22 namespace number = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
23 namespace office = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"
24 namespace presentation =
25   "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
26 namespace script = "urn:oasis:names:tc:opendocument:xmlns:script:1.0"
27 namespace smil =
28   "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"
29 namespace style = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"
30 namespace svg =
31   "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
32 namespace table = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"
33 namespace text = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"
34 namespace xforms = "http://www.w3.org/2002/xforms"
35 namespace xlink = "http://www.w3.org/1999/xlink"
37 office-process-content =
38   [ a:defaultValue = "true" ]
39   attribute office:process-content { boolean }?
40 start =
41   office-document
42   | office-document-content
43   | office-document-styles
44   | office-document-meta
45   | office-document-settings
46 office-document =
47   element office:document {
48     office-document-attrs,
49     office-document-common-attrs,
50     office-meta,
51     office-settings,
52     office-scripts,
53     office-font-face-decls,
54     office-styles,
55     office-automatic-styles,
56     office-master-styles,
57     office-body
58   }
59 office-document-content =
60   element office:document-content {
61     office-document-common-attrs,
62     office-scripts,
63     office-font-face-decls,
64     office-automatic-styles,
65     office-body
66   }
67 office-document-styles =
68   element office:document-styles {
69     office-document-common-attrs,
70     office-font-face-decls,
71     office-styles,
72     office-automatic-styles,
73     office-master-styles
74   }
75 office-document-meta =
76   element office:document-meta {
77     office-document-common-attrs, office-meta
78   }
79 office-document-settings =
80   element office:document-settings {
81     office-document-common-attrs, office-settings
82   }
83 office-document-common-attrs &= attribute office:version { \string }?
84 office-document-attrs &= attribute office:mimetype { \string }
85 office-meta = element office:meta { office-meta-content }?
86 office-meta-content = anyElements
87 office-meta-content-strict = office-meta-data*
88 office-body = element office:body { office-body-content }
89 office-body-content |=
90   element office:text {
91     office-text-attlist,
92     office-text-content-prelude,
93     office-text-content-main*,
94     office-text-content-epilogue
95   }
96 office-text-content-prelude =
97   office-forms, text-tracked-changes, text-decls, table-decls
98 office-text-content-main =
99   text-content*
100   | (text-page-sequence, (draw-a | shape)*)
101 text-content =
102   text-h
103   | text-p
104   | text-list
105   | text-numbered-paragraph
106   | table-table
107   | draw-a
108   | text-section
109   | text-soft-page-break
110   | text-table-of-content
111   | text-illustration-index
112   | text-table-index
113   | text-object-index
114   | text-user-index
115   | text-alphabetical-index
116   | text-bibliography
117   | shape
118   | change-marks
119 office-text-content-epilogue = table-functions
120 office-text-attlist &=
121   [ a:defaultValue = "false" ] attribute text:global { boolean }?
122 office-text-attlist &=
123   [ a:defaultValue = "false" ]
124   attribute text:use-soft-page-breaks { boolean }?
125 office-body-content |=
126   element office:drawing {
127     office-drawing-attlist,
128     office-drawing-content-prelude,
129     office-drawing-content-main,
130     office-drawing-content-epilogue
131   }
132 office-drawing-attlist = empty
133 office-drawing-content-prelude = text-decls, table-decls
134 office-drawing-content-main = draw-page*
135 office-drawing-content-epilogue = table-functions
136 office-body-content |=
137   element office:presentation {
138     office-presentation-attlist,
139     office-presentation-content-prelude,
140     office-presentation-content-main,
141     office-presentation-content-epilogue
142   }
143 office-presentation-attlist = empty
144 office-presentation-content-prelude =
145   text-decls, table-decls, presentation-decls
146 office-presentation-content-main = draw-page*
147 office-presentation-content-epilogue =
148   presentation-settings, table-functions
149 office-body-content |=
150   element office:spreadsheet {
151     office-spreadsheet-attlist,
152     office-spreadsheet-content-prelude,
153     office-spreadsheet-content-main,
154     office-spreadsheet-content-epilogue
155   }
156 office-spreadsheet-content-prelude =
157   table-tracked-changes?, text-decls, table-decls
158 table-decls =
159   table-calculation-settings?,
160   table-content-validations?,
161   table-label-ranges?
162 office-spreadsheet-content-main = table-table*
163 office-spreadsheet-content-epilogue = table-functions
164 table-functions =
165   table-named-expressions?,
166   table-database-ranges?,
167   table-data-pilot-tables?,
168   table-consolidation?,
169   table-dde-links?
170 office-body-content |=
171   element office:chart {
172     office-chart-attlist,
173     office-chart-content-prelude,
174     office-chart-content-main,
175     office-chart-content-epilogue
176   }
177 office-chart-attlist = empty
178 office-chart-content-prelude = text-decls, table-decls
179 office-chart-content-main = chart-chart
180 office-chart-content-epilogue = table-functions
181 office-body-content |=
182   element office:image {
183     office-image-attlist,
184     office-image-content-prelude,
185     office-image-content-main,
186     office-image-content-epilogue
187   }
188 office-image-attlist = empty
189 office-image-content-prelude = empty
190 office-image-content-main = draw-frame
191 office-image-content-epilogue = empty
192 office-settings = element office:settings { config-config-item-set+ }?
193 config-config-item-set =
194   element config:config-item-set {
195     config-config-item-set-attlist, config-items
196   }
197 config-items =
198   (config-config-item
199    | config-config-item-set
200    | config-config-item-map-named
201    | config-config-item-map-indexed)+
202 config-config-item-set-attlist &= attribute config:name { \string }
203 config-config-item =
204   element config:config-item { config-config-item-attlist, text }
205 config-config-item-attlist &= attribute config:name { \string }
206 config-config-item-attlist &=
207   attribute config:type {
208     "boolean"
209     | "short"
210     | "int"
211     | "long"
212     | "double"
213     | "string"
214     | "datetime"
215     | "base64Binary"
216   }
217 config-config-item-map-indexed =
218   element config:config-item-map-indexed {
219     config-config-item-map-indexed-attlist,
220     config-config-item-map-entry+
221   }
222 config-config-item-map-indexed-attlist &=
223   attribute config:name { \string }
224 config-config-item-map-entry =
225   element config:config-item-map-entry {
226     config-config-item-map-entry-attlist, config-items
227   }
228 config-config-item-map-entry-attlist &=
229   attribute config:name { \string }?
230 config-config-item-map-named =
231   element config:config-item-map-named {
232     config-config-item-map-named-attlist, config-config-item-map-entry+
233   }
234 config-config-item-map-named-attlist &=
235   attribute config:name { \string }
236 office-scripts =
237   element office:scripts { office-script*, office-event-listeners? }?
238 office-script =
239   element office:script {
240     office-script-attlist,
241     mixed { anyElements }
242   }
243 office-script-attlist = attribute script:language { \string }
244 office-font-face-decls =
245   element office:font-face-decls { style-font-face* }?
246 office-styles =
247   element office:styles {
248     styles
249     & style-default-style*
250     & text-outline-style?
251     & text-notes-configuration*
252     & text-bibliography-configuration?
253     & text-linenumbering-configuration?
254     & draw-gradient*
255     & svg-linearGradient*
256     & svg-radialGradient*
257     & draw-hatch*
258     & draw-fill-image*
259     & draw-marker*
260     & draw-stroke-dash*
261     & draw-opacity*
262     & style-presentation-page-layout*
263   }?
264 office-automatic-styles =
265   element office:automatic-styles { styles & style-page-layout* }?
266 office-master-styles =
267   element office:master-styles {
268     style-master-page* & style-handout-master? & draw-layer-set?
269   }?
270 styles =
271   style-style*
272   & text-list-style*
273   & number-number-style*
274   & number-currency-style*
275   & number-percentage-style*
276   & number-date-style*
277   & number-time-style*
278   & number-boolean-style*
279   & number-text-style*
280 office-meta-data |= element meta:generator { \string }
281 office-meta-data |= element dc:title { \string }
282 office-meta-data |= element dc:description { \string }
283 office-meta-data |= element dc:subject { \string }
284 office-meta-data |= element meta:keyword { \string }
285 office-meta-data |= element meta:initial-creator { \string }
286 office-meta-data |= dc-creator
287 dc-creator = element dc:creator { \string }
288 office-meta-data |= element meta:printed-by { \string }
289 office-meta-data |= element meta:creation-date { dateTime }
290 office-meta-data |= dc-date
291 dc-date = element dc:date { dateTime }
292 office-meta-data |= element meta:print-date { dateTime }
293 office-meta-data |=
294   element meta:template {
295     attribute xlink:href { anyURI },
296     [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
297     [ a:defaultValue = "onRequest" ]
298     attribute xlink:actuate { "onRequest" }?,
299     attribute xlink:title { \string }?,
300     attribute meta:date { dateTime }?
301   }
302 office-meta-data |=
303   element meta:auto-reload {
304     [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
305     [ a:defaultValue = "replace" ] attribute xlink:show { "replace" }?,
306     [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?,
307     attribute xlink:href { anyURI }?,
308     attribute meta:delay { duration }?
309   }
310 office-meta-data |=
311   element meta:hyperlink-behaviour {
312     attribute office:target-frame-name { targetFrameName }?,
313     attribute xlink:show { "new" | "replace" }?
314   }
315 office-meta-data |= element dc:language { language }
316 office-meta-data |= element meta:editing-cycles { nonNegativeInteger }
317 office-meta-data |= element meta:editing-duration { duration }
318 office-meta-data |=
319   element meta:document-statistic {
320     attribute meta:page-count { nonNegativeInteger }?,
321     attribute meta:table-count { nonNegativeInteger }?,
322     attribute meta:draw-count { nonNegativeInteger }?,
323     attribute meta:image-count { nonNegativeInteger }?,
324     attribute meta:ole-object-count { nonNegativeInteger }?,
325     attribute meta:object-count { nonNegativeInteger }?,
326     attribute meta:paragraph-count { nonNegativeInteger }?,
327     attribute meta:word-count { nonNegativeInteger }?,
328     attribute meta:character-count { nonNegativeInteger }?,
329     attribute frame-count { nonNegativeInteger }?,
330     attribute sentence-count { nonNegativeInteger }?,
331     attribute syllable-count { nonNegativeInteger }?,
332     attribute non-whitespace-character-count { nonNegativeInteger }?,
333     attribute meta:row-count { nonNegativeInteger }?,
334     attribute meta:cell-count { nonNegativeInteger }?
335   }
336 office-meta-data |=
337   element meta:user-defined {
338     attribute meta:name { \string },
339     ((attribute meta:value-type { "float" },
340       double)
341      | (attribute meta:value-type { "date" },
342         dateOrDateTime)
343      | (attribute meta:value-type { "time" },
344         duration)
345      | (attribute meta:value-type { "boolean" },
346         boolean)
347      | (attribute meta:value-type { "string" },
348         \string)
349      | text)
350   }
351 text-h =
352   element text:h {
353     heading-attrs, paragraph-attrs, text-number?, paragraph-content*
354   }
355 heading-attrs &= attribute text:outline-level { positiveInteger }
356 heading-attrs &=
357   [ a:defaultValue = "false" ]
358   attribute text:restart-numbering { boolean }?
359 heading-attrs &= attribute text:start-value { nonNegativeInteger }?
360 heading-attrs &=
361   [ a:defaultValue = "false" ]
362   attribute text:is-list-header { boolean }?
363 text-number = element text:number { \string }
364 text-p = element text:p { paragraph-attrs, paragraph-content* }
365 paragraph-attrs =
366   attribute text:style-name { styleNameRef }?,
367   attribute text:class-names { styleNameRefs }?,
368   attribute text:cond-style-name { styleNameRef }?
369 paragraph-attrs &= text-id?
370 text-page-sequence = element text:page-sequence { text-page+ }
371 text-page = element text:page { text-page-attlist, empty }
372 text-page-attlist = attribute text:master-page-name { styleNameRef }
373 text-list =
374   element text:list {
375     text-list-attr, text-list-header?, text-list-item*
376   }
377 text-list-attr &= attribute text:style-name { styleNameRef }?
378 text-list-attr &= attribute text:continue-numbering { boolean }?
379 text-list-item =
380   element text:list-item { text-list-item-attr, text-list-item-content }
381 text-list-item-content =
382   text-number?, (text-p | text-h | text-list | text-soft-page-break)*
383 text-list-item-attr &=
384   attribute text:start-value { nonNegativeInteger }?
385 text-list-header = element text:list-header { text-list-item-content }
386 text-numbered-paragraph =
387   element text:numbered-paragraph {
388     text-numbered-paragraph-attr, text-number?, (text-p | text-h)
389   }
390 text-numbered-paragraph-attr &=
391   [ a:defaultValue = "1" ] attribute text:level { positiveInteger }?
392 text-numbered-paragraph-attr &= text-list-attr
393 text-numbered-paragraph-attr &= text-list-item-attr
394 text-section =
395   element text:section {
396     text-section-attr,
397     (text-section-source | text-section-source-dde | empty),
398     text-content*
399   }
400 text-section-attr &= sectionAttr
401 sectionAttr &= attribute text:style-name { styleNameRef }?
402 sectionAttr &= attribute text:name { \string }
403 sectionAttr &= attribute text:protected { boolean }?
404 sectionAttr &= attribute text:protection-key { \string }?
405 text-section-attr &=
406   attribute text:display { "true" | "none" }
407   | (attribute text:display { "condition" },
408      attribute text:condition { \string })
409   | empty
410 text-section-source =
411   element text:section-source { text-section-source-attr }
412 text-section-source-attr &=
413   (attribute xlink:href { anyURI },
414    [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
415    [ a:defaultValue = "embed" ] attribute xlink:show { "embed" }?)?
416 text-section-source-attr &= attribute text:section-name { \string }?
417 text-section-source-attr &= attribute text:filter-name { \string }?
418 text-section-source-dde = office-dde-source
419 text-tracked-changes =
420   element text:tracked-changes {
421     text-tracked-changes-attr, text-changed-region*
422   }?
423 text-tracked-changes-attr &=
424   [ a:defaultValue = "true" ] attribute text:track-changes { boolean }?
425 text-changed-region =
426   element text:changed-region {
427     text-changed-region-attr, text-changed-region-content
428   }
429 text-changed-region-attr &= attribute text:id { ID }
430 text-changed-region-content |=
431   element text:insertion { office-change-info }
432 text-changed-region-content |=
433   element text:deletion { office-change-info, text-content* }
434 text-changed-region-content |=
435   element text:format-change { office-change-info }
436 change-marks =
437   element text:change { change-mark-attr }
438   | element text:change-start { change-mark-attr }
439   | element text:change-end { change-mark-attr }
440 change-mark-attr = attribute text:change-id { IDREF }
441 text-soft-page-break = element text:soft-page-break { empty }
442 text-decls =
443   element text:variable-decls { text-variable-decl* }?,
444   element text:sequence-decls { text-sequence-decl* }?,
445   element text:user-field-decls { text-user-field-decl* }?,
446   element text:dde-connection-decls { text-dde-connection-decl* }?,
447   text-alphabetical-index-auto-mark-file?
448 paragraph-content |= text
449 paragraph-content |=
450   element text:s {
451     attribute text:c { nonNegativeInteger }?
452   }
453 paragraph-content |= element text:tab { text-tab-attr }
454 text-tab-attr = attribute text:tab-ref { nonNegativeInteger }?
455 paragraph-content |= element text:line-break { empty }
456 paragraph-content |= text-soft-page-break
457 paragraph-content |=
458   element text:span {
459     attribute text:style-name { styleNameRef }?,
460     attribute text:class-names { styleNameRefs }?,
461     paragraph-content*
462   }
463 paragraph-content |=
464   element text:a {
465     text-a-attlist, office-event-listeners?, paragraph-content*
466   }
467 text-a-attlist &= attribute office:name { \string }?
468 text-a-attlist &= attribute office:title { \string }?
469 text-a-attlist &=
470   attribute xlink:href { anyURI },
471   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
472   [ a:defaultValue = "onRequest" ]
473   attribute xlink:actuate { "onRequest" }?
474 text-a-attlist &=
475   attribute office:target-frame-name { targetFrameName }?,
476   attribute xlink:show { "new" | "replace" }?
477 text-a-attlist &=
478   attribute text:style-name { styleNameRef }?,
479   attribute text:visited-style-name { styleNameRef }?
480 paragraph-content |=
481   element text:bookmark {
482     attribute text:name { \string }
483   }
484   | element text:bookmark-start {
485       attribute text:name { \string }
486     }
487   | element text:bookmark-end {
488       attribute text:name { \string }
489     }
490 paragraph-content |=
491   element text:reference-mark {
492     attribute text:name { \string }
493   }
494 paragraph-content |=
495   element text:reference-mark-start {
496     attribute text:name { \string }
497   }
498   | element text:reference-mark-end {
499       attribute text:name { \string }
500     }
501 paragraph-content |=
502   element text:note {
503     text-note-class,
504     attribute text:id { \string }?,
505     element text:note-citation {
506       attribute text:label { \string }?,
507       text
508     },
509     element text:note-body { text-content* }
510   }
511 text-note-class = attribute text:note-class { "footnote" | "endnote" }
512 paragraph-content |=
513   element text:ruby {
514     attribute text:style-name { styleNameRef }?,
515     element text:ruby-base { paragraph-content },
516     element text:ruby-text {
517       attribute text:style-name { styleNameRef }?,
518       text
519     }
520   }
521 paragraph-content |= office-annotation
522 paragraph-content |= change-marks
523 paragraph-content |= shape | draw-a
524 paragraph-content |= element text:date { text-date-attlist, text }
525 text-date-attlist &=
526   common-field-fixed-attlist & common-field-data-style-name-attlist
527 text-date-attlist &= attribute text:date-value { dateOrDateTime }?
528 text-date-attlist &= attribute text:date-adjust { duration }?
529 paragraph-content |= element text:time { text-time-attlist, text }
530 text-time-attlist &=
531   common-field-fixed-attlist & common-field-data-style-name-attlist
532 text-time-attlist &= attribute text:time-value { timeOrDateTime }?
533 text-time-attlist &= attribute text:time-adjust { duration }?
534 paragraph-content |=
535   element text:page-number { text-page-number-attlist, text }
536 text-page-number-attlist &=
537   common-field-num-format-attlist & common-field-fixed-attlist
538 text-page-number-attlist &= attribute text:page-adjust { integer }?
539 text-page-number-attlist &=
540   attribute text:select-page { "previous" | "current" | "next" }?
541 paragraph-content |=
542   element text:page-continuation {
543     text-page-continuation-attlist, text
544   }
545 text-page-continuation-attlist &=
546   attribute text:select-page { "previous" | "next" }
547 text-page-continuation-attlist &=
548   attribute text:string-value { \string }?
549 paragraph-content |=
550   element text:sender-firstname { common-field-fixed-attlist, text }
551 paragraph-content |=
552   element text:sender-lastname { common-field-fixed-attlist, text }
553 paragraph-content |=
554   element text:sender-initials { common-field-fixed-attlist, text }
555 paragraph-content |=
556   element text:sender-title { common-field-fixed-attlist, text }
557 paragraph-content |=
558   element text:sender-position { common-field-fixed-attlist, text }
559 paragraph-content |=
560   element text:sender-email { common-field-fixed-attlist, text }
561 paragraph-content |=
562   element text:sender-phone-private { common-field-fixed-attlist, text }
563 paragraph-content |=
564   element text:sender-fax { common-field-fixed-attlist, text }
565 paragraph-content |=
566   element text:sender-company { common-field-fixed-attlist, text }
567 paragraph-content |=
568   element text:sender-phone-work { common-field-fixed-attlist, text }
569 paragraph-content |=
570   element text:sender-street { common-field-fixed-attlist, text }
571 paragraph-content |=
572   element text:sender-city { common-field-fixed-attlist, text }
573 paragraph-content |=
574   element text:sender-postal-code { common-field-fixed-attlist, text }
575 paragraph-content |=
576   element text:sender-country { common-field-fixed-attlist, text }
577 paragraph-content |=
578   element text:sender-state-or-province {
579     common-field-fixed-attlist, text
580   }
581 paragraph-content |=
582   element text:author-name { common-field-fixed-attlist, text }
583 paragraph-content |=
584   element text:author-initials { common-field-fixed-attlist, text }
585 paragraph-content |= element text:chapter { text-chapter-attlist, text }
586 text-chapter-attlist &=
587   attribute text:display {
588     "name"
589     | "number"
590     | "number-and-name"
591     | "plain-number-and-name"
592     | "plain-number"
593   }
594 text-chapter-attlist &=
595   attribute text:outline-level { nonNegativeInteger }
596 paragraph-content |=
597   element text:file-name { text-file-name-attlist, text }
598 text-file-name-attlist &=
599   attribute text:display {
600     "full" | "path" | "name" | "name-and-extension"
601   }?
602 text-file-name-attlist &= common-field-fixed-attlist
603 paragraph-content |=
604   element text:template-name { text-template-name-attlist, text }
605 text-template-name-attlist =
606   attribute text:display {
607     "full" | "path" | "name" | "name-and-extension" | "area" | "title"
608   }?
609 paragraph-content |= element text:sheet-name { text }
610 text-variable-decl =
611   element text:variable-decl {
612     common-field-name-attlist, common-value-type-attlist
613   }
614 paragraph-content |=
615   element text:variable-set {
616     (common-field-name-attlist
617      & common-field-formula-attlist
618      & common-value-and-type-attlist
619      & common-field-display-value-none-attlist
620      & common-field-data-style-name-attlist),
621     text
622   }
623 paragraph-content |=
624   element text:variable-get {
625     (common-field-name-attlist
626      & common-field-display-value-formula-attlist
627      & common-field-data-style-name-attlist),
628     text
629   }
630 paragraph-content |=
631   element text:variable-input {
632     (common-field-name-attlist
633      & common-field-description-attlist
634      & common-value-type-attlist
635      & common-field-display-value-none-attlist
636      & common-field-data-style-name-attlist),
637     text
638   }
639 text-user-field-decl =
640   element text:user-field-decl {
641     common-field-name-attlist,
642     common-field-formula-attlist?,
643     common-value-and-type-attlist
644   }
645 paragraph-content |=
646   element text:user-field-get {
647     (common-field-name-attlist
648      & common-field-display-value-formula-none-attlist
649      & common-field-data-style-name-attlist),
650     text
651   }
652 paragraph-content |=
653   element text:user-field-input {
654     (common-field-name-attlist
655      & common-field-description-attlist
656      & common-field-data-style-name-attlist),
657     text
658   }
659 text-sequence-decl =
660   element text:sequence-decl { text-sequence-decl-attlist }
661 text-sequence-decl-attlist &= common-field-name-attlist
662 text-sequence-decl-attlist &=
663   attribute text:display-outline-level { nonNegativeInteger }
664 text-sequence-decl-attlist &=
665   attribute text:separation-character { character }?
666 paragraph-content |=
667   element text:sequence {
668     (common-field-name-attlist
669      & common-field-formula-attlist
670      & common-field-num-format-attlist
671      & text-sequence-ref-name),
672     text
673   }
674 text-sequence-ref-name = attribute text:ref-name { \string }?
675 paragraph-content |=
676   element text:expression {
677     (common-field-formula-attlist
678      & common-value-and-type-attlist?
679      & common-field-display-value-formula-attlist
680      & common-field-data-style-name-attlist),
681     text
682   }
683 paragraph-content |=
684   element text:text-input { common-field-description-attlist, text }
685 paragraph-content |=
686   element text:initial-creator { common-field-fixed-attlist, text }
687 paragraph-content |=
688   element text:creation-date {
689     (common-field-fixed-attlist
690      & common-field-data-style-name-attlist
691      & attribute text:date-value { dateOrDateTime }?),
692     text
693   }
694 paragraph-content |=
695   element text:creation-time {
696     (common-field-fixed-attlist
697      & common-field-data-style-name-attlist
698      & attribute text:time-value { timeOrDateTime }?),
699     text
700   }
701 paragraph-content |=
702   element text:description { common-field-fixed-attlist, text }
703 paragraph-content |=
704   element text:user-defined {
705     (common-field-fixed-attlist
706      & attribute text:name { \string }
707      & common-field-data-style-name-attlist
708      & attribute office:value { double }?
709      & attribute office:date-value { dateOrDateTime }?
710      & attribute office:time-value { duration }?
711      & attribute office:boolean-value { boolean }?
712      & attribute office:string-value { \string }?),
713     text
714   }
715 paragraph-content |=
716   element text:print-time {
717     (common-field-fixed-attlist
718      & common-field-data-style-name-attlist
719      & attribute text:time-value { time }?),
720     text
721   }
722 paragraph-content |=
723   element text:print-date {
724     (common-field-fixed-attlist
725      & common-field-data-style-name-attlist
726      & attribute text:date-value { date }?),
727     text
728   }
729 paragraph-content |=
730   element text:printed-by { common-field-fixed-attlist, text }
731 paragraph-content |=
732   element text:title { common-field-fixed-attlist, text }
733 paragraph-content |=
734   element text:subject { common-field-fixed-attlist, text }
735 paragraph-content |=
736   element text:keywords { common-field-fixed-attlist, text }
737 paragraph-content |=
738   element text:editing-cycles { common-field-fixed-attlist, text }
739 paragraph-content |=
740   element text:editing-duration {
741     (common-field-fixed-attlist
742      & common-field-data-style-name-attlist
743      & attribute text:duration { duration }?),
744     text
745   }
746 paragraph-content |=
747   element text:modification-time {
748     (common-field-fixed-attlist
749      & common-field-data-style-name-attlist
750      & attribute text:time-value { time }?),
751     text
752   }
753 paragraph-content |=
754   element text:modification-date {
755     (common-field-fixed-attlist
756      & common-field-data-style-name-attlist
757      & attribute text:date-value { date }?),
758     text
759   }
760 paragraph-content |=
761   element text:creator { common-field-fixed-attlist, text }
762 paragraph-content |=
763   element text:page-count
764           | text:paragraph-count
765           | text:word-count
766           | text:character-count
767           | text:table-count
768           | text:image-count
769           | text:object-count { common-field-num-format-attlist, text }
770 common-field-database-table =
771   common-field-database-table-attlist, common-field-database-name
772 common-field-database-name |= attribute text:database-name { \string }?
773 common-field-database-name |= form-connection-resource
774 common-field-database-table-attlist &=
775   attribute text:table-name { \string }
776 common-field-database-table-attlist &=
777   attribute text:table-type { "table" | "query" | "command" }?
778 paragraph-content |=
779   element text:database-display { text-database-display-attlist, text }
780 text-database-display-attlist &= common-field-database-table
781 text-database-display-attlist &= common-field-data-style-name-attlist
782 text-database-display-attlist &= attribute text:column-name { \string }
783 paragraph-content |=
784   element text:database-next { text-database-next-attlist }
785 text-database-next-attlist &= common-field-database-table
786 text-database-next-attlist &= attribute text:condition { formula }?
787 paragraph-content |=
788   element text:database-row-select { text-database-row-select-attlist }
789 text-database-row-select-attlist &= common-field-database-table
790 text-database-row-select-attlist &=
791   attribute text:condition { formula }?
792 text-database-row-select-attlist &=
793   attribute text:row-number { nonNegativeInteger }?
794 paragraph-content |=
795   element text:database-row-number {
796     (common-field-database-table
797      & common-field-num-format-attlist
798      & attribute text:value { nonNegativeInteger }?),
799     text
800   }
801 paragraph-content |=
802   element text:database-name { common-field-database-table, text }
803 paragraph-content |=
804   element text:page-variable-set {
805     text-set-page-variable-attlist, text
806   }
807 text-set-page-variable-attlist &= attribute text:active { boolean }?
808 text-set-page-variable-attlist &=
809   attribute text:page-adjust { integer }?
810 paragraph-content |=
811   element text:page-variable-get {
812     text-get-page-variable-attlist, text
813   }
814 text-get-page-variable-attlist &= common-field-num-format-attlist
815 paragraph-content |=
816   element text:placeholder { text-placeholder-attlist, text }
817 text-placeholder-attlist &=
818   attribute text:placeholder-type {
819     "text" | "table" | "text-box" | "image" | "object"
820   }
821 text-placeholder-attlist &= common-field-description-attlist
822 paragraph-content |=
823   element text:conditional-text { text-conditional-text-attlist, text }
824 text-conditional-text-attlist &= attribute text:condition { formula }
825 text-conditional-text-attlist &=
826   attribute text:string-value-if-true { \string }
827 text-conditional-text-attlist &=
828   attribute text:string-value-if-false { \string }
829 text-conditional-text-attlist &=
830   attribute text:current-value { boolean }?
831 paragraph-content |=
832   element text:hidden-text { text-hidden-text-attlist, text }
833 text-hidden-text-attlist &= attribute text:condition { formula }
834 text-hidden-text-attlist &= attribute text:string-value { \string }
835 text-hidden-text-attlist &= attribute text:is-hidden { boolean }?
836 paragraph-content |=
837   element text:reference-ref | text:bookmark-ref {
838     text-common-ref-content & text-ref-content
839   }
840 paragraph-content |=
841   element text:note-ref {
842     text-common-ref-content & text-note-ref-content & text-ref-content
843   }
844 paragraph-content |=
845   element text:sequence-ref {
846     text-common-ref-content & text-sequence-ref-content
847   }
848 text-common-ref-content &= text
849 text-common-ref-content &= attribute text:ref-name { \string }?
850 text-note-ref-content &= text-note-class
851 text-ref-content &=
852   attribute text:reference-format {
853     "page" | "chapter" | "direction" | "text"
854   }?
855 text-sequence-ref-content &=
856   attribute text:reference-format {
857     "page"
858     | "chapter"
859     | "direction"
860     | "text"
861     | "category-and-value"
862     | "caption"
863     | "value"
864   }?
865 paragraph-content |=
866   element text:script {
867     ((attribute xlink:href { anyURI },
868       [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?)
869      | text)
870     & attribute script:language { \string }?
871   }
872 paragraph-content |=
873   element text:execute-macro {
874     attribute text:name { \string }?,
875     office-event-listeners?,
876     text
877   }
878 paragraph-content |=
879   element text:hidden-paragraph { text-hidden-paragraph-attlist, text }
880 text-hidden-paragraph-attlist &= attribute text:condition { formula }
881 text-hidden-paragraph-attlist &= attribute text:is-hidden { boolean }?
882 paragraph-content |=
883   element text:dde-connection {
884     attribute text:connection-name { \string },
885     text
886   }
887 paragraph-content |=
888   element text:measure {
889     attribute text:kind { "value" | "unit" | "gap" },
890     text
891   }
892 paragraph-content |=
893   element text:table-formula {
894     (common-field-formula-attlist
895      & common-field-display-value-formula-attlist
896      & common-field-data-style-name-attlist),
897     text
898   }
899 common-value-type-attlist = attribute office:value-type { valueType }
900 common-value-and-type-attlist =
901   (attribute office:value-type { "float" },
902    attribute office:value { double })
903   | (attribute office:value-type { "percentage" },
904      attribute office:value { double })
905   | (attribute office:value-type { "currency" },
906      attribute office:value { double },
907      attribute office:currency { \string }?)
908   | (attribute office:value-type { "date" },
909      attribute office:date-value { dateOrDateTime })
910   | (attribute office:value-type { "time" },
911      attribute office:time-value { duration })
912   | (attribute office:value-type { "boolean" },
913      attribute office:boolean-value { boolean })
914   | (attribute office:value-type { "string" },
915      attribute office:string-value { \string }?)
916 common-field-fixed-attlist = attribute text:fixed { boolean }?
917 common-field-name-attlist = attribute text:name { variableName }
918 common-field-description-attlist = attribute text:description { text }?
919 common-field-display-value-none-attlist =
920   attribute text:display { "value" | "none" }?
921 common-field-display-value-formula-none-attlist =
922   attribute text:display { "value" | "formula" | "none" }?
923 common-field-display-value-formula-attlist =
924   attribute text:display { "value" | "formula" }?
925 common-field-formula-attlist = attribute text:formula { formula }?
926 common-field-data-style-name-attlist =
927   attribute style:data-style-name { styleNameRef }?
928 common-field-num-format-attlist = common-num-format-attlist?
929 paragraph-content |=
930   element text:toc-mark-start { text-toc-mark-start-attrs }
931 text-toc-mark-start-attrs = text-id, text-outline-level
932 text-outline-level = attribute text:outline-level { positiveInteger }?
933 text-id = attribute text:id { \string }
934 paragraph-content |= element text:toc-mark-end { text-id }
935 paragraph-content |=
936   element text:toc-mark {
937     attribute text:string-value { \string },
938     text-outline-level
939   }
940 paragraph-content |=
941   element text:user-index-mark-start {
942     text-id, text-outline-level, text-index-name
943   }
944 paragraph-content |=
945   element text:user-index-mark-end { text-id, text-outline-level }
946 paragraph-content |=
947   element text:user-index-mark {
948     attribute text:string-value { \string },
949     text-outline-level,
950     text-index-name
951   }
952 text-index-name = attribute text:index-name { \string }
953 paragraph-content |=
954   element text:alphabetical-index-mark-start {
955     text-id, text-alphabetical-index-mark-attrs
956   }
957 paragraph-content |=
958   element text:alphabetical-index-mark-end { text-id }
959 paragraph-content |=
960   element text:alphabetical-index-mark {
961     attribute text:string-value { \string },
962     text-alphabetical-index-mark-attrs
963   }
964 text-alphabetical-index-mark-attrs &=
965   attribute text:key1 { \string }?,
966   attribute text:key2 { \string }?
967 text-alphabetical-index-mark-attrs &=
968   attribute text:string-value-phonetic { \string }?,
969   attribute text:key1-phonetic { \string }?,
970   attribute text:key2-phonetic { \string }?
971 text-alphabetical-index-mark-attrs &=
972   [ a:defaultValue = "false" ] attribute text:main-entry { boolean }?
973 paragraph-content |=
974   element text:bibliography-mark {
975     attribute text:bibliography-type { text-bibliography-types },
976     attribute text:identifier
977               | text:address
978               | text:annote
979               | text:author
980               | text:booktitle
981               | text:chapter
982               | text:edition
983               | text:editor
984               | text:howpublished
985               | text:institution
986               | text:journal
987               | text:month
988               | text:note
989               | text:number
990               | text:organizations
991               | text:pages
992               | text:publisher
993               | text:school
994               | text:series
995               | text:title
996               | text:report-type
997               | text:volume
998               | text:year
999               | text:url
1000               | text:custom1
1001               | text:custom2
1002               | text:custom3
1003               | text:custom4
1004               | text:custom5
1005               | text:isbn
1006               | text:issn { \string }*,
1007     text
1008   }
1009 text-bibliography-types =
1010   "article"
1011   | "book"
1012   | "booklet"
1013   | "conference"
1014   | "custom1"
1015   | "custom2"
1016   | "custom3"
1017   | "custom4"
1018   | "custom5"
1019   | "email"
1020   | "inbook"
1021   | "incollection"
1022   | "inproceedings"
1023   | "journal"
1024   | "manual"
1025   | "mastersthesis"
1026   | "misc"
1027   | "phdthesis"
1028   | "proceedings"
1029   | "techreport"
1030   | "unpublished"
1031   | "www"
1032 text-index-body = element text:index-body { index-content-main* }
1033 index-content-main = text-content | text-index-title
1034 text-index-title =
1035   element text:index-title { sectionAttr, index-content-main* }
1036 text-table-of-content =
1037   element text:table-of-content {
1038     sectionAttr, text-table-of-content-source, text-index-body
1039   }
1040 text-table-of-content-source =
1041   element text:table-of-content-source {
1042     text-table-of-content-source-attlist,
1043     text-index-title-template?,
1044     text-table-of-content-entry-template*,
1045     text-index-source-styles*
1046   }
1047 text-table-of-content-source-attlist &=
1048   attribute text:outline-level { positiveInteger }?
1049 text-table-of-content-source-attlist &=
1050   [ a:defaultValue = "true" ]
1051   attribute text:use-outline-level { boolean }?
1052 text-table-of-content-source-attlist &=
1053   attribute text:use-index-marks { boolean }?
1054 text-table-of-content-source-attlist &=
1055   attribute text:use-index-source-styles { boolean }?
1056 text-table-of-content-source-attlist &=
1057   attribute text:index-scope { "document" | "chapter" }?
1058 text-table-of-content-source-attlist &=
1059   attribute text:relative-tab-stop-position { boolean }?
1060 text-table-of-content-entry-template =
1061   element text:table-of-content-entry-template {
1062     text-table-of-content-entry-template-attlist,
1063     text-table-of-content-children*
1064   }
1065 text-table-of-content-children =
1066   text-index-entry-chapter
1067   | text-index-entry-page-number
1068   | text-index-entry-text
1069   | text-index-entry-span
1070   | text-index-entry-tab-stop
1071   | text-index-entry-link-start
1072   | text-index-entry-link-end
1073 text-table-of-content-entry-template-attlist &=
1074   attribute text:outline-level { positiveInteger }
1075 text-table-of-content-entry-template-attlist &=
1076   attribute text:style-name { styleNameRef }
1077 text-illustration-index =
1078   element text:illustration-index {
1079     sectionAttr, text-illustration-index-source, text-index-body
1080   }
1081 text-illustration-index-source =
1082   element text:illustration-index-source {
1083     text-illustration-index-source-attrs,
1084     text-index-title-template?,
1085     text-illustration-index-entry-template?
1086   }
1087 text-illustration-index-source-attrs &= text-index-scope-attr
1088 text-index-scope-attr =
1089   [ a:defaultValue = "document" ]
1090   attribute text:index-scope { "document" | "chapter" }?
1091 text-illustration-index-source-attrs &=
1092   text-relative-tab-stop-position-attr
1093 text-relative-tab-stop-position-attr =
1094   [ a:defaultValue = "true" ]
1095   attribute text:relative-tab-stop-position { boolean }?
1096 text-illustration-index-source-attrs &=
1097   [ a:defaultValue = "true" ] attribute text:use-caption { boolean }?
1098 text-illustration-index-source-attrs &=
1099   attribute text:caption-sequence-name { \string }?
1100 text-illustration-index-source-attrs &=
1101   attribute text:caption-sequence-format {
1102     "text" | "category-and-value" | "caption"
1103   }?
1104 text-illustration-index-entry-template =
1105   element text:illustration-index-entry-template {
1106     text-illustration-index-entry-content
1107   }
1108 text-illustration-index-entry-content =
1109   text-illustration-index-entry-template-attrs,
1110   (text-index-entry-page-number
1111    | text-index-entry-text
1112    | text-index-entry-span
1113    | text-index-entry-tab-stop)*
1114 text-illustration-index-entry-template-attrs =
1115   attribute text:style-name { styleNameRef }
1116 text-table-index =
1117   element text:table-index {
1118     sectionAttr, text-table-index-source, text-index-body
1119   }
1120 text-table-index-source =
1121   element text:table-index-source {
1122     text-illustration-index-source-attrs,
1123     text-index-title-template?,
1124     text-table-index-entry-template?
1125   }
1126 text-table-index-entry-template =
1127   element text:table-index-entry-template {
1128     text-illustration-index-entry-content
1129   }
1130 text-object-index =
1131   element text:object-index {
1132     sectionAttr, text-object-index-source, text-index-body
1133   }
1134 text-object-index-source =
1135   element text:object-index-source {
1136     text-object-index-source-attrs,
1137     text-index-title-template?,
1138     text-object-index-entry-template?
1139   }
1140 text-object-index-source-attrs &= text-index-scope-attr
1141 text-object-index-source-attrs &= text-relative-tab-stop-position-attr
1142 text-object-index-source-attrs &=
1143   [ a:defaultValue = "false" ]
1144   attribute text:use-spreadsheet-objects { boolean }?
1145 text-object-index-source-attrs &=
1146   [ a:defaultValue = "false" ]
1147   attribute text:use-math-objects { boolean }?
1148 text-object-index-source-attrs &=
1149   [ a:defaultValue = "false" ]
1150   attribute text:use-draw-objects { boolean }?
1151 text-object-index-source-attrs &=
1152   [ a:defaultValue = "false" ]
1153   attribute text:use-chart-objects { boolean }?
1154 text-object-index-source-attrs &=
1155   [ a:defaultValue = "false" ]
1156   attribute text:use-other-objects { boolean }?
1157 text-object-index-entry-template =
1158   element text:object-index-entry-template {
1159     text-illustration-index-entry-content
1160   }
1161 text-user-index =
1162   element text:user-index {
1163     sectionAttr, text-user-index-source, text-index-body
1164   }
1165 text-user-index-source =
1166   element text:user-index-source {
1167     text-user-index-source-attr,
1168     text-index-title-template?,
1169     text-user-index-entry-template*,
1170     text-index-source-styles*
1171   }
1172 text-user-index-source-attr &=
1173   text-index-scope-attr,
1174   text-relative-tab-stop-position-attr,
1175   attribute text:index-name { \string }
1176 text-user-index-source-attr &=
1177   [ a:defaultValue = "false" ]
1178   attribute text:use-index-marks { boolean }?,
1179   [ a:defaultValue = "false" ] attribute text:use-graphics { boolean }?,
1180   [ a:defaultValue = "false" ] attribute text:use-tables { boolean }?,
1181   [ a:defaultValue = "false" ]
1182   attribute text:use-floating-frames { boolean }?,
1183   [ a:defaultValue = "false" ] attribute text:use-objects { boolean }?
1184 text-user-index-source-attr &=
1185   [ a:defaultValue = "false" ]
1186   attribute text:copy-outline-levels { boolean }?
1187 text-user-index-entry-template =
1188   element text:user-index-entry-template {
1189     text-user-index-entry-template-attrs,
1190     (text-index-entry-chapter
1191      | text-index-entry-page-number
1192      | text-index-entry-text
1193      | text-index-entry-span
1194      | text-index-entry-tab-stop)*
1195   }
1196 text-user-index-entry-template-attrs &=
1197   attribute text:outline-level { positiveInteger }
1198 text-user-index-entry-template-attrs &=
1199   attribute text:style-name { styleNameRef }
1200 text-alphabetical-index =
1201   element text:alphabetical-index {
1202     sectionAttr, text-alphabetical-index-source, text-index-body
1203   }
1204 text-alphabetical-index-source =
1205   element text:alphabetical-index-source {
1206     text-alphabetical-index-source-attrs,
1207     text-index-title-template?,
1208     text-alphabetical-index-entry-template*
1209   }
1210 text-alphabetical-index-source-attrs &=
1211   text-index-scope-attr, text-relative-tab-stop-position-attr
1212 text-alphabetical-index-source-attrs &=
1213   [ a:defaultValue = "false" ] attribute text:ignore-case { boolean }?
1214 text-alphabetical-index-source-attrs &=
1215   attribute text:main-entry-style-name { styleNameRef }?
1216 text-alphabetical-index-source-attrs &=
1217   [ a:defaultValue = "false" ]
1218   attribute text:alphabetical-separators { boolean }?
1219 text-alphabetical-index-source-attrs &=
1220   [ a:defaultValue = "true" ]
1221   attribute text:combine-entries { boolean }?,
1222   [ a:defaultValue = "false" ]
1223   attribute text:combine-entries-with-dash { boolean }?,
1224   [ a:defaultValue = "true" ]
1225   attribute text:combine-entries-with-pp { boolean }?
1226 text-alphabetical-index-source-attrs &=
1227   [ a:defaultValue = "false" ]
1228   attribute text:use-keys-as-entries { boolean }?
1229 text-alphabetical-index-source-attrs &=
1230   [ a:defaultValue = "false" ]
1231   attribute text:capitalize-entries { boolean }?
1232 text-alphabetical-index-source-attrs &=
1233   [ a:defaultValue = "false" ]
1234   attribute text:comma-separated { boolean }?
1235 text-alphabetical-index-source-attrs &=
1236   attribute fo:language { languageCode }?
1237 text-alphabetical-index-source-attrs &=
1238   attribute fo:country { countryCode }?
1239 text-alphabetical-index-source-attrs &=
1240   attribute text:sort-algorithm { \string }?
1241 text-alphabetical-index-auto-mark-file =
1242   element text:alphabetical-index-auto-mark-file {
1243     attribute xlink:href { anyURI },
1244     [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?
1245   }
1246 text-alphabetical-index-entry-template =
1247   element text:alphabetical-index-entry-template {
1248     text-alphabetical-index-entry-template-attrs,
1249     (text-index-entry-chapter
1250      | text-index-entry-page-number
1251      | text-index-entry-text
1252      | text-index-entry-span
1253      | text-index-entry-tab-stop)*
1254   }
1255 text-alphabetical-index-entry-template-attrs &=
1256   attribute text:outline-level { "1" | "2" | "3" | "separator" }
1257 text-alphabetical-index-entry-template-attrs &=
1258   attribute text:style-name { styleNameRef }
1259 text-bibliography =
1260   element text:bibliography {
1261     sectionAttr, text-bibliography-source, text-index-body
1262   }
1263 text-bibliography-source =
1264   element text:bibliography-source {
1265     text-index-title-template?, text-bibliography-entry-template*
1266   }
1267 text-bibliography-entry-template =
1268   element text:bibliography-entry-template {
1269     text-bibliography-entry-template-attrs,
1270     (text-index-entry-span
1271      | text-index-entry-tab-stop
1272      | text-index-entry-bibliography)*
1273   }
1274 text-bibliography-entry-template-attrs &=
1275   attribute text:bibliography-type { text-bibliography-types }
1276 text-bibliography-entry-template-attrs &=
1277   attribute text:style-name { styleNameRef }
1278 text-index-source-styles =
1279   element text:index-source-styles {
1280     attribute text:outline-level { positiveInteger },
1281     text-index-source-style*
1282   }
1283 text-index-source-style =
1284   element text:index-source-style {
1285     attribute text:style-name { styleName },
1286     empty
1287   }
1288 text-index-title-template =
1289   element text:index-title-template {
1290     attribute text:style-name { styleNameRef }?,
1291     text
1292   }
1293 text-index-entry-chapter =
1294   element text:index-entry-chapter {
1295     attribute text:style-name { styleNameRef }?,
1296     text-index-entry-chapter-attrs
1297   }
1298 text-index-entry-chapter-attrs =
1299   [ a:defaultValue = "number" ]
1300   attribute text:display { "name" | "number" | "number-and-name" }?
1301 text-index-entry-text =
1302   element text:index-entry-text {
1303     attribute text:style-name { styleNameRef }?
1304   }
1305 text-index-entry-page-number =
1306   element text:index-entry-page-number {
1307     attribute text:style-name { styleNameRef }?
1308   }
1309 text-index-entry-span =
1310   element text:index-entry-span {
1311     attribute text:style-name { styleNameRef }?,
1312     text
1313   }
1314 text-index-entry-bibliography =
1315   element text:index-entry-bibliography {
1316     text-index-entry-bibliography-attrs
1317   }
1318 text-index-entry-bibliography-attrs &=
1319   attribute text:style-name { styleNameRef }?
1320 text-index-entry-bibliography-attrs &=
1321   attribute text:bibliography-data-field {
1322     "address"
1323     | "annote"
1324     | "author"
1325     | "bibliography-type"
1326     | "booktitle"
1327     | "chapter"
1328     | "custom1"
1329     | "custom2"
1330     | "custom3"
1331     | "custom4"
1332     | "custom5"
1333     | "edition"
1334     | "editor"
1335     | "howpublished"
1336     | "identifier"
1337     | "institution"
1338     | "isbn"
1339     | "issn"
1340     | "journal"
1341     | "month"
1342     | "note"
1343     | "number"
1344     | "organizations"
1345     | "pages"
1346     | "publisher"
1347     | "report-type"
1348     | "school"
1349     | "series"
1350     | "title"
1351     | "url"
1352     | "volume"
1353     | "year"
1354   }
1355 text-index-entry-tab-stop =
1356   element text:index-entry-tab-stop {
1357     attribute text:style-name { styleNameRef }?,
1358     text-index-entry-tab-stop-attrs
1359   }
1360 text-index-entry-tab-stop-attrs &=
1361   attribute style:leader-char { character }?
1362 text-index-entry-tab-stop-attrs &=
1363   attribute style:type { "right" }
1364   | (attribute style:type { "left" },
1365      attribute style:position { length })
1366 text-index-entry-link-start =
1367   element text:index-entry-link-start {
1368     attribute text:style-name { styleNameRef }?
1369   }
1370 text-index-entry-link-end =
1371   element text:index-entry-link-end {
1372     attribute text:style-name { styleNameRef }?
1373   }
1374 table-table =
1375   element table:table {
1376     table-table-attlist,
1377     table-table-source?,
1378     office-dde-source?,
1379     table-scenario?,
1380     office-forms?,
1381     table-shapes?,
1382     table-columns-and-groups,
1383     table-rows-and-groups
1384   }
1385 table-columns-and-groups =
1386   (table-table-column-group | table-columns-no-group)+
1387 table-columns-no-group =
1388   (table-columns, (table-table-header-columns, table-columns?)?)
1389   | (table-table-header-columns, table-columns?)
1390 table-columns = table-table-columns | table-table-column+
1391 table-rows-and-groups = (table-table-row-group | table-rows-no-group)+
1392 table-rows-no-group =
1393   (table-rows, (table-table-header-rows, table-rows?)?)
1394   | (table-table-header-rows, table-rows?)
1395 table-rows =
1396   table-table-rows | (text-soft-page-break?, table-table-row)+
1397 table-table-attlist &= attribute table:name { \string }?
1398 table-table-attlist &= attribute table:style-name { styleNameRef }?
1399 table-table-attlist &=
1400   [ a:defaultValue = "false" ] attribute table:protected { boolean }?,
1401   attribute table:protection-key { text }?
1402 table-table-attlist &=
1403   [ a:defaultValue = "true" ] attribute table:print { boolean }?
1404 table-table-attlist &=
1405   attribute table:print-ranges { cellRangeAddressList }?
1406 table-table-row =
1407   element table:table-row {
1408     table-table-row-attlist,
1409     (table-table-cell | table-covered-table-cell)+
1410   }
1411 table-table-row-attlist &=
1412   [ a:defaultValue = "1" ]
1413   attribute table:number-rows-repeated { positiveInteger }?
1414 table-table-row-attlist &= attribute table:style-name { styleNameRef }?
1415 table-table-row-attlist &=
1416   attribute table:default-cell-style-name { styleNameRef }?
1417 table-table-row-attlist &=
1418   [ a:defaultValue = "visible" ]
1419   attribute table:visibility { table-visibility-value }?
1420 table-visibility-value = "visible" | "collapse" | "filter"
1421 table-table-cell =
1422   element table:table-cell {
1423     table-table-cell-attlist,
1424     table-table-cell-attlist-extra,
1425     table-table-cell-content
1426   }
1427 table-covered-table-cell =
1428   element table:covered-table-cell {
1429     table-table-cell-attlist, table-table-cell-content
1430   }
1431 table-table-cell-content =
1432   table-cell-range-source?,
1433   office-annotation?,
1434   table-detective?,
1435   text-content*
1436 table-table-cell-attlist &=
1437   [ a:defaultValue = "1" ]
1438   attribute table:number-columns-repeated { positiveInteger }?
1439 table-table-cell-attlist-extra &=
1440   [ a:defaultValue = "1" ]
1441   attribute table:number-columns-spanned { positiveInteger }?,
1442   [ a:defaultValue = "1" ]
1443   attribute table:number-rows-spanned { positiveInteger }?
1444 table-table-cell-attlist &= attribute table:style-name { styleNameRef }?
1445 table-table-cell-attlist &=
1446   attribute table:content-validation-name { \string }?
1447 table-table-cell-attlist &= attribute table:formula { \string }?
1448 table-table-cell-attlist-extra &=
1449   attribute table:number-matrix-columns-spanned { positiveInteger }?,
1450   attribute table:number-matrix-rows-spanned { positiveInteger }?
1451 table-table-cell-attlist &= common-value-and-type-attlist?
1452 table-table-cell-attlist &=
1453   [ a:defaultValue = "false" ] attribute table:protect { boolean }?
1454 table-table-column =
1455   element table:table-column { table-table-column-attlist, empty }
1456 table-table-column-attlist &=
1457   [ a:defaultValue = "1" ]
1458   attribute table:number-columns-repeated { positiveInteger }?
1459 table-table-column-attlist &=
1460   attribute table:style-name { styleNameRef }?
1461 table-table-column-attlist &=
1462   [ a:defaultValue = "visible" ]
1463   attribute table:visibility { table-visibility-value }?
1464 table-table-column-attlist &=
1465   attribute table:default-cell-style-name { styleNameRef }?
1466 table-table-header-columns =
1467   element table:table-header-columns { table-table-column+ }
1468 table-table-columns =
1469   element table:table-columns { table-table-column+ }
1470 table-table-column-group =
1471   element table:table-column-group {
1472     table-table-column-group-attlist, table-columns-and-groups
1473   }
1474 table-table-column-group-attlist &=
1475   [ a:defaultValue = "true" ] attribute table:display { boolean }?
1476 table-table-header-rows =
1477   element table:table-header-rows {
1478     (text-soft-page-break?, table-table-row)+
1479   }
1480 table-table-rows =
1481   element table:table-rows { (text-soft-page-break?, table-table-row)+ }
1482 table-table-row-group =
1483   element table:table-row-group {
1484     table-table-row-group-attlist, table-rows-and-groups
1485   }
1486 table-table-row-group-attlist &=
1487   [ a:defaultValue = "true" ] attribute table:display { boolean }?
1488 table-table-attlist &=
1489   [ a:defaultValue = "false" ] attribute table:is-sub-table { boolean }?
1490 cellAddress =
1491   xsd:string {
1492     pattern = "($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+"
1493   }
1494 cellRangeAddress =
1495   xsd:string {
1496     pattern =
1497       "($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+(:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+)?"
1498   }
1499 cellRangeAddressList =
1500   # Value is a space separated list of "cellRangeAddress" patterns
1501   xsd:string
1502 table-table-source =
1503   element table:table-source {
1504     table-table-source-attlist, table-linked-source-attlist, empty
1505   }
1506 table-table-source-attlist &=
1507   [ a:defaultValue = "copy-all" ]
1508   attribute table:mode { "copy-all" | "copy-results-only" }?
1509 table-table-source-attlist &= attribute table:table-name { \string }?
1510 table-linked-source-attlist &=
1511   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
1512   [ a:defaultValue = "onRequest" ]
1513   attribute xlink:actuate { "onRequest" }?,
1514   attribute xlink:href { anyURI }
1515 table-linked-source-attlist &= attribute table:filter-name { \string }?
1516 table-linked-source-attlist &=
1517   attribute table:filter-options { \string }?
1518 table-linked-source-attlist &=
1519   attribute table:refresh-delay { duration }?
1520 table-scenario =
1521   element table:scenario { table-scenario-attlist, empty }
1522 table-scenario-attlist &=
1523   attribute table:scenario-ranges { cellRangeAddressList }
1524 table-scenario-attlist &= attribute table:is-active { boolean }
1525 table-scenario-attlist &=
1526   [ a:defaultValue = "true" ]
1527   attribute table:display-border { boolean }?
1528 table-scenario-attlist &= attribute table:border-color { color }?
1529 table-scenario-attlist &=
1530   [ a:defaultValue = "true" ] attribute table:copy-back { boolean }?
1531 table-scenario-attlist &=
1532   [ a:defaultValue = "true" ] attribute table:copy-styles { boolean }?
1533 table-scenario-attlist &=
1534   [ a:defaultValue = "true" ] attribute table:copy-formulas { boolean }?
1535 table-scenario-attlist &= attribute table:comment { \string }?
1536 table-scenario-attlist &= attribute table:protected { boolean }?
1537 table-shapes = element table:shapes { shape+ }
1538 table-cell-range-source =
1539   element table:cell-range-source {
1540     table-table-cell-range-source-attlist,
1541     table-linked-source-attlist,
1542     empty
1543   }
1544 table-table-cell-range-source-attlist &=
1545   attribute table:name { \string }
1546 table-table-cell-range-source-attlist &=
1547   attribute table:last-column-spanned { positiveInteger },
1548   attribute table:last-row-spanned { positiveInteger }
1549 table-detective =
1550   element table:detective { table-highlighted-range*, table-operation* }
1551 table-operation =
1552   element table:operation { table-operation-attlist, empty }
1553 table-operation-attlist &=
1554   attribute table:name {
1555     "trace-dependents"
1556     | "remove-dependents"
1557     | "trace-precedents"
1558     | "remove-precedents"
1559     | "trace-errors"
1560   }
1561 table-operation-attlist &= attribute table:index { nonNegativeInteger }
1562 table-highlighted-range =
1563   element table:highlighted-range {
1564     (table-highlighted-range-attlist
1565      | table-highlighted-range-attlist-invalid),
1566     empty
1567   }
1568 table-highlighted-range-attlist &=
1569   attribute table:cell-range-address { cellRangeAddress }?
1570 table-highlighted-range-attlist &=
1571   attribute table:direction {
1572     "from-another-table" | "to-another-table" | "from-same-table"
1573   }
1574 table-highlighted-range-attlist &=
1575   [ a:defaultValue = "false" ]
1576   attribute table:contains-error { boolean }?
1577 table-highlighted-range-attlist-invalid &=
1578   attribute table:marked-invalid { boolean }
1579 office-spreadsheet-attlist &=
1580   [ a:defaultValue = "false" ]
1581   attribute table:structure-protected { boolean }?,
1582   attribute table:protection-key { \string }?
1583 table-calculation-settings =
1584   element table:calculation-settings {
1585     table-calculation-setting-attlist,
1586     table-null-date?,
1587     table-iteration?
1588   }
1589 table-calculation-setting-attlist &=
1590   [ a:defaultValue = "true" ]
1591   attribute table:case-sensitive { boolean }?
1592 table-calculation-setting-attlist &=
1593   [ a:defaultValue = "false" ]
1594   attribute table:precision-as-shown { boolean }?
1595 table-calculation-setting-attlist &=
1596   [ a:defaultValue = "true" ]
1597   attribute table:search-criteria-must-apply-to-whole-cell { boolean }?
1598 table-calculation-setting-attlist &=
1599   [ a:defaultValue = "true" ]
1600   attribute table:automatic-find-labels { boolean }?
1601 table-calculation-setting-attlist &=
1602   [ a:defaultValue = "true" ]
1603   attribute table:use-regular-expressions { boolean }?
1604 table-calculation-setting-attlist &=
1605   [ a:defaultValue = "1930" ]
1606   attribute table:null-year { positiveInteger }?
1607 table-null-date =
1608   element table:null-date {
1609     [ a:defaultValue = "date" ]
1610     attribute table:value-type { valueType }?,
1611     [ a:defaultValue = "1899-12-30" ]
1612     attribute table:date-value { date }?,
1613     empty
1614   }
1615 table-iteration =
1616   element table:iteration {
1617     [ a:defaultValue = "disable" ]
1618     attribute table:status { "enable" | "disable" }?,
1619     [ a:defaultValue = "100" ]
1620     attribute table:steps { positiveInteger }?,
1621     [ a:defaultValue = "0.001" ]
1622     attribute table:maximum-difference { double }?,
1623     empty
1624   }
1625 table-content-validations =
1626   element table:content-validations { table-content-validation+ }
1627 table-content-validation =
1628   element table:content-validation {
1629     table-validation-attlist,
1630     table-help-message?,
1631     (table-error-message
1632      | (table-error-macro, office-event-listeners?))?
1633   }
1634 table-validation-attlist &= attribute table:name { \string }
1635 table-validation-attlist &= attribute table:condition { \string }?
1636 table-validation-attlist &=
1637   attribute table:base-cell-address { cellAddress }?
1638 table-validation-attlist &=
1639   [ a:defaultValue = "true" ]
1640   attribute table:allow-empty-cell { boolean }?
1641 table-validation-attlist &=
1642   [ a:defaultValue = "unsorted" ]
1643   attribute table:display-list {
1644     "none" | "unsorted" | "sort-ascending"
1645   }?
1646 table-help-message =
1647   element table:help-message {
1648     attribute table:title { \string }?,
1649     [ a:defaultValue = "false" ] attribute table:display { boolean }?,
1650     text-p*
1651   }
1652 table-error-message =
1653   element table:error-message {
1654     attribute table:title { \string }?,
1655     [ a:defaultValue = "false" ] attribute table:display { boolean }?,
1656     [ a:defaultValue = "stop" ]
1657     attribute table:message-type {
1658       "stop" | "warning" | "information"
1659     }?,
1660     text-p*
1661   }
1662 table-error-macro =
1663   element table:error-macro {
1664     [ a:defaultValue = "true" ] attribute table:execute { boolean }?
1665   }
1666 table-label-ranges = element table:label-ranges { table-label-range* }
1667 table-label-range =
1668   element table:label-range { table-label-range-attlist, empty }
1669 table-label-range-attlist &=
1670   attribute table:label-cell-range-address { cellRangeAddress }
1671 table-label-range-attlist &=
1672   attribute table:data-cell-range-address { cellRangeAddress }
1673 table-label-range-attlist &=
1674   attribute table:orientation { "column" | "row" }
1675 table-named-expressions =
1676   element table:named-expressions {
1677     (table-named-range | table-named-expression)*
1678   }
1679 table-named-range =
1680   element table:named-range { table-named-range-attlist, empty }
1681 table-named-range-attlist &=
1682   attribute table:name { \string },
1683   attribute table:cell-range-address { cellRangeAddress },
1684   attribute table:base-cell-address { cellAddress }?,
1685   [ a:defaultValue = "none" ]
1686   attribute table:range-usable-as {
1687     "none"
1688     | list {
1689         ("print-range" | "filter" | "repeat-row" | "repeat-column")+
1690       }
1691   }?
1692 table-named-expression =
1693   element table:named-expression {
1694     table-named-expression-attlist, empty
1695   }
1696 table-named-expression-attlist &=
1697   attribute table:name { \string },
1698   attribute table:expression { \string },
1699   attribute table:base-cell-address { cellAddress }?
1700 table-database-ranges =
1701   element table:database-ranges { table-database-range* }
1702 table-database-range =
1703   element table:database-range {
1704     table-database-range-attlist,
1705     (table-database-source-sql
1706      | table-database-source-table
1707      | table-database-source-query)?,
1708     table-filter?,
1709     table-sort?,
1710     table-subtotal-rules?
1711   }
1712 table-database-range-attlist &= attribute table:name { \string }?
1713 table-database-range-attlist &=
1714   [ a:defaultValue = "false" ] attribute table:is-selection { boolean }?
1715 table-database-range-attlist &=
1716   [ a:defaultValue = "false" ]
1717   attribute table:on-update-keep-styles { boolean }?
1718 table-database-range-attlist &=
1719   [ a:defaultValue = "true" ]
1720   attribute table:on-update-keep-size { boolean }?
1721 table-database-range-attlist &=
1722   [ a:defaultValue = "true" ]
1723   attribute table:has-persistent-data { boolean }?
1724 table-database-range-attlist &=
1725   [ a:defaultValue = "row" ]
1726   attribute table:orientation { "column" | "row" }?
1727 table-database-range-attlist &=
1728   [ a:defaultValue = "true" ]
1729   attribute table:contains-header { boolean }?
1730 table-database-range-attlist &=
1731   [ a:defaultValue = "false" ]
1732   attribute table:display-filter-buttons { boolean }?
1733 table-database-range-attlist &=
1734   attribute table:target-range-address { cellRangeAddress }
1735 table-database-range-attlist &=
1736   attribute table:refresh-delay { boolean }?
1737 table-database-source-sql =
1738   element table:database-source-sql {
1739     table-database-source-sql-attlist, empty
1740   }
1741 table-database-source-sql-attlist &=
1742   attribute table:database-name { \string }
1743 table-database-source-sql-attlist &=
1744   attribute table:sql-statement { \string }
1745 table-database-source-sql-attlist &=
1746   [ a:defaultValue = "false" ]
1747   attribute table:parse-sql-statement { boolean }?
1748 table-database-source-query =
1749   element table:database-source-table {
1750     table-database-source-table-attlist, empty
1751   }
1752 table-database-source-table-attlist &=
1753   attribute table:database-name { \string }
1754 table-database-source-table-attlist &=
1755   attribute table:database-table-name { \string }
1756 table-database-source-table =
1757   element table:database-source-query {
1758     table-database-source-query-attlist, empty
1759   }
1760 table-database-source-query-attlist &=
1761   attribute table:database-name { \string }
1762 table-database-source-query-attlist &=
1763   attribute table:query-name { \string }
1764 table-sort = element table:sort { table-sort-attlist, table-sort-by+ }
1765 table-sort-attlist &=
1766   [ a:defaultValue = "true" ]
1767   attribute table:bind-styles-to-content { boolean }?
1768 table-sort-attlist &=
1769   attribute table:target-range-address { cellRangeAddress }?
1770 table-sort-attlist &=
1771   [ a:defaultValue = "false" ]
1772   attribute table:case-sensitive { boolean }?
1773 table-sort-attlist &= attribute table:language { languageCode }?
1774 table-sort-attlist &= attribute table:country { countryCode }?
1775 table-sort-attlist &= attribute table:algorithm { \string }?
1776 table-sort-by = element table:sort-by { table-sort-by-attlist, empty }
1777 table-sort-by-attlist &=
1778   attribute table:field-number { nonNegativeInteger }
1779 table-sort-by-attlist &=
1780   [ a:defaultValue = "automatic" ]
1781   attribute table:data-type {
1782     "text" | "number" | "automatic" | \string
1783   }?
1784 table-sort-by-attlist &=
1785   [ a:defaultValue = "ascending" ]
1786   attribute table:order { "ascending" | "descending" }?
1787 table-subtotal-rules =
1788   element table:subtotal-rules {
1789     table-subtotal-rules-attlist,
1790     table-sort-groups?,
1791     table-subtotal-rule*
1792   }
1793 table-subtotal-rules-attlist &=
1794   [ a:defaultValue = "true" ]
1795   attribute table:bind-styles-to-content { boolean }?
1796 table-subtotal-rules-attlist &=
1797   [ a:defaultValue = "false" ]
1798   attribute table:case-sensitive { boolean }?
1799 table-subtotal-rules-attlist &=
1800   [ a:defaultValue = "false" ]
1801   attribute table:page-breaks-on-group-change { boolean }?
1802 table-sort-groups =
1803   element table:sort-groups { table-sort-groups-attlist, empty }
1804 table-sort-groups-attlist &=
1805   [ a:defaultValue = "automatic" ]
1806   attribute table:data-type {
1807     "text" | "number" | "automatic" | \string
1808   }?
1809 table-sort-groups-attlist &=
1810   [ a:defaultValue = "ascending" ]
1811   attribute table:order { "ascending" | "descending" }?
1812 table-subtotal-rule =
1813   element table:subtotal-rule {
1814     table-subtotal-rule-attlist, table-subtotal-field*
1815   }
1816 table-subtotal-rule-attlist &=
1817   attribute table:group-by-field-number { nonNegativeInteger }
1818 table-subtotal-field =
1819   element table:subtotal-field { table-subtotal-field-attlist, empty }
1820 table-subtotal-field-attlist &=
1821   attribute table:field-number { nonNegativeInteger }
1822 table-subtotal-field-attlist &=
1823   attribute table:function {
1824     "auto"
1825     | "average"
1826     | "count"
1827     | "countnums"
1828     | "max"
1829     | "min"
1830     | "product"
1831     | "stdev"
1832     | "stdevp"
1833     | "sum"
1834     | "var"
1835     | "varp"
1836     | \string
1837   }
1838 table-filter =
1839   element table:filter {
1840     table-filter-attlist,
1841     (table-filter-condition | table-filter-and | table-filter-or)
1842   }
1843 table-filter-attlist &=
1844   attribute table:target-range-address { cellRangeAddress }?
1845 table-filter-attlist &=
1846   [ a:defaultValue = "self" ]
1847   attribute table:condition-source { "self" | "cell-range" }?
1848 table-filter-attlist &=
1849   attribute table:condition-source-range-address { cellRangeAddress }?
1850 table-filter-attlist &=
1851   [ a:defaultValue = "true" ]
1852   attribute table:display-duplicates { boolean }?
1853 table-filter-and =
1854   element table:filter-and {
1855     (table-filter-or | table-filter-condition)+
1856   }
1857 table-filter-or =
1858   element table:filter-or {
1859     (table-filter-and | table-filter-condition)+
1860   }
1861 table-filter-condition =
1862   element table:filter-condition {
1863     table-filter-condition-attlist, empty
1864   }
1865 table-filter-condition-attlist &=
1866   attribute table:field-number { nonNegativeInteger }
1867 table-filter-condition-attlist &= attribute table:value { \string }
1868 table-filter-condition-attlist &= attribute table:operator { \string }
1869 table-filter-condition-attlist &=
1870   [ a:defaultValue = "false" ]
1871   attribute table:case-sensitive { \string }?
1872 table-filter-condition-attlist &=
1873   [ a:defaultValue = "text" ]
1874   attribute table:data-type { "text" | "number" }?
1875 table-data-pilot-tables =
1876   element table:data-pilot-tables { table-data-pilot-table* }
1877 table-data-pilot-table =
1878   element table:data-pilot-table {
1879     table-data-pilot-table-attlist,
1880     (table-database-source-sql
1881      | table-database-source-table
1882      | table-database-source-query
1883      | table-source-service
1884      | table-source-cell-range)?,
1885     table-data-pilot-field+
1886   }
1887 table-data-pilot-table-attlist &= attribute table:name { \string }
1888 table-data-pilot-table-attlist &=
1889   attribute table:application-data { \string }?
1890 table-data-pilot-table-attlist &=
1891   [ a:defaultValue = "both" ]
1892   attribute table:grand-total { "none" | "row" | "column" | "both" }?
1893 table-data-pilot-table-attlist &=
1894   [ a:defaultValue = "false" ]
1895   attribute table:ignore-empty-rows { boolean }?
1896 table-data-pilot-table-attlist &=
1897   [ a:defaultValue = "false" ]
1898   attribute table:identify-categories { boolean }?
1899 table-data-pilot-table-attlist &=
1900   attribute table:target-range-address { cellRangeAddress }
1901 table-data-pilot-table-attlist &=
1902   attribute table:buttons { cellRangeAddressList }?
1903 table-data-pilot-table-attlist &=
1904   [ a:defaultValue = "true" ]
1905   attribute table:show-filter-button { boolean }?
1906 table-data-pilot-table-attlist &=
1907   [ a:defaultValue = "true" ]
1908   attribute table:drill-down-on-double-click { boolean }?
1909 table-source-cell-range =
1910   element table:source-cell-range {
1911     table-source-cell-range-attlist, table-filter?
1912   }
1913 table-source-cell-range-attlist &=
1914   attribute table:cell-range-address { cellRangeAddress }
1915 table-source-service =
1916   element table:source-service { table-source-service-attlist, empty }
1917 table-source-service-attlist &= attribute table:name { \string }
1918 table-source-service-attlist &= attribute table:source-name { \string }
1919 table-source-service-attlist &= attribute table:object-name { \string }
1920 table-source-service-attlist &= attribute table:user-name { \string }?
1921 table-source-service-attlist &= attribute table:password { \string }?
1922 table-data-pilot-field =
1923   element table:data-pilot-field {
1924     table-data-pilot-field-attlist,
1925     table-data-pilot-level?,
1926     table-data-pilot-field-reference?,
1927     table-data-pilot-groups?
1928   }
1929 table-data-pilot-field-attlist &=
1930   attribute table:source-field-name { \string }
1931 table-data-pilot-field-attlist &=
1932   attribute table:orientation { "row" | "column" | "data" | "hidden" }
1933   | (attribute table:orientation { "page" },
1934      attribute table:selected-page { \string })
1935 table-data-pilot-field-attlist &=
1936   [ a:defaultValue = "false" ]
1937   attribute table:is-data-layout-field { \string }?
1938 table-data-pilot-field-attlist &=
1939   attribute table:function {
1940     "auto"
1941     | "average"
1942     | "count"
1943     | "countnums"
1944     | "max"
1945     | "min"
1946     | "product"
1947     | "stdev"
1948     | "stdevp"
1949     | "sum"
1950     | "var"
1951     | "varp"
1952     | \string
1953   }?
1954 table-data-pilot-field-attlist &=
1955   [ a:defaultValue = "-1" ] attribute table:used-hierarchy { integer }?
1956 table-data-pilot-level =
1957   element table:data-pilot-level {
1958     table-data-pilot-level-attlist,
1959     table-data-pilot-subtotals?,
1960     table-data-pilot-members?,
1961     table-data-pilot-display-info?,
1962     table-data-pilot-sort-info?,
1963     table-data-pilot-layout-info?
1964   }
1965 table-data-pilot-level-attlist &=
1966   attribute table:show-empty { boolean }?
1967 table-data-pilot-subtotals =
1968   element table:data-pilot-subtotals { table-data-pilot-subtotal* }
1969 table-data-pilot-subtotal =
1970   element table:data-pilot-subtotal {
1971     table-data-pilot-subtotal-attlist, empty
1972   }
1973 table-data-pilot-subtotal-attlist &=
1974   attribute table:function {
1975     "auto"
1976     | "average"
1977     | "count"
1978     | "countnums"
1979     | "max"
1980     | "min"
1981     | "product"
1982     | "stdev"
1983     | "stdevp"
1984     | "sum"
1985     | "var"
1986     | "varp"
1987     | \string
1988   }
1989 table-data-pilot-members =
1990   element table:data-pilot-members { table-data-pilot-member* }
1991 table-data-pilot-member =
1992   element table:data-pilot-member {
1993     table-data-pilot-member-attlist, empty
1994   }
1995 table-data-pilot-member-attlist &= attribute table:name { \string }
1996 table-data-pilot-member-attlist &= attribute table:display { boolean }?
1997 table-data-pilot-member-attlist &=
1998   attribute table:show-details { boolean }?
1999 table-data-pilot-display-info =
2000   element table:data-pilot-display-info {
2001     table-data-pilot-display-info-attlist, empty
2002   }
2003 table-data-pilot-display-info-attlist &=
2004   attribute table:enabled { boolean }
2005 table-data-pilot-display-info-attlist &=
2006   attribute table:data-field { \string }
2007 table-data-pilot-display-info-attlist &=
2008   attribute table:member-count { nonNegativeInteger }
2009 table-data-pilot-display-info-attlist &=
2010   attribute table:display-member-mode { "from-top" | "from-bottom" }
2011 table-data-pilot-sort-info =
2012   element table:data-pilot-sort-info {
2013     table-data-pilot-sort-info-attlist, empty
2014   }
2015 table-data-pilot-sort-info-attlist &=
2016   (attribute table:sort-mode { "data" },
2017    attribute table:data-field { \string })
2018   | attribute table:sort-mode { "none" | "manual" | "name" }
2019 table-data-pilot-sort-info-attlist &=
2020   attribute table:order { "ascending" | "descending" }
2021 table-data-pilot-layout-info =
2022   element table:data-pilot-layout-info {
2023     table-data-pilot-layout-info-attlist, empty
2024   }
2025 table-data-pilot-layout-info-attlist &=
2026   attribute table:layout-mode {
2027     "tabular-layout"
2028     | "outline-subtotals-top"
2029     | "outline-subtotals-bottom"
2030   }
2031 table-data-pilot-layout-info-attlist &=
2032   attribute table:add-empty-lines { boolean }
2033 table-data-pilot-field-reference =
2034   element table:data-pilot-field-reference {
2035     table-data-pilot-field-reference-attlist
2036   }
2037 table-data-pilot-field-reference-attlist &=
2038   attribute table:field-name { \string }
2039 table-data-pilot-field-reference-attlist &=
2040   (attribute table:member-type { "named" },
2041    attribute table:member-name { \string })
2042   | attribute table:member-type { "previous" | "next" }
2043 table-data-pilot-field-reference-attlist &=
2044   attribute table:type {
2045     "none"
2046     | "member-difference"
2047     | "member-percentage"
2048     | "member-percentage-difference"
2049     | "running-total"
2050     | "row-percentage"
2051     | "column-percentage"
2052     | "total-percentage"
2053     | "index"
2054   }
2055 table-data-pilot-groups =
2056   element table:data-pilot-groups {
2057     table-data-pilot-groups-attlist, table-data-pilot-group+
2058   }
2059 table-data-pilot-groups-attlist &=
2060   attribute table:source-field-name { \string }
2061 table-data-pilot-groups-attlist &=
2062   attribute table:date-start { dateOrDateTime | "auto" }
2063   | attribute table:start { double | "auto" }
2064 table-data-pilot-groups-attlist &=
2065   attribute table:date-end { dateOrDateTime | "auto" }
2066   | attribute table:end { double | "auto" }
2067 table-data-pilot-groups-attlist &= attribute table:step { double }
2068 table-data-pilot-groups-attlist &=
2069   attribute table:grouped-by {
2070     "seconds"
2071     | "minutes"
2072     | "hours"
2073     | "days"
2074     | "months"
2075     | "quarters"
2076     | "years"
2077   }
2078 table-data-pilot-group =
2079   element table:data-pilot-group {
2080     table-data-pilot-group-attlist, table-data-pilot-group-member+
2081   }
2082 table-data-pilot-group-attlist &= attribute table:name { \string }
2083 table-data-pilot-group-member =
2084   element table:data-pilot-group-member {
2085     table-data-pilot-group-member-attlist
2086   }
2087 table-data-pilot-group-member-attlist &=
2088   attribute table:name { \string }
2089 table-consolidation =
2090   element table:consolidation { table-consolidation-attlist, empty }
2091 table-consolidation-attlist &=
2092   attribute table:function {
2093     "auto"
2094     | "average"
2095     | "count"
2096     | "countnums"
2097     | "max"
2098     | "min"
2099     | "product"
2100     | "stdev"
2101     | "stdevp"
2102     | "sum"
2103     | "var"
2104     | "varp"
2105     | \string
2106   }
2107 table-consolidation-attlist &=
2108   attribute table:source-cell-range-addresses { cellRangeAddressList }
2109 table-consolidation-attlist &=
2110   attribute table:target-cell-address { cellAddress }
2111 table-consolidation-attlist &=
2112   [ a:defaultValue = "none" ]
2113   attribute table:use-labels { "none" | "row" | "column" | "both" }?
2114 table-consolidation-attlist &=
2115   [ a:defaultValue = "false" ]
2116   attribute table:link-to-source-data { boolean }?
2117 table-dde-links = element table:dde-links { table-dde-link+ }
2118 table-tracked-changes =
2119   element table:tracked-changes {
2120     table-tracked-changes-attlist,
2121     (table-cell-content-change
2122      | table-insertion
2123      | table-deletion
2124      | table-movement)*
2125   }
2126 table-tracked-changes-attlist &=
2127   [ a:defaultValue = "false" ]
2128   attribute table:track-changes { boolean }?
2129 table-insertion =
2130   element table:insertion {
2131     table-insertion-attlist,
2132     common-table-change-attlist,
2133     office-change-info,
2134     table-dependencies?,
2135     table-deletions?
2136   }
2137 table-insertion-attlist &=
2138   attribute table:type { "row" | "column" | "table" }
2139 table-insertion-attlist &= attribute table:position { integer }
2140 table-insertion-attlist &=
2141   [ a:defaultValue = "1" ] attribute table:count { positiveInteger }?
2142 table-insertion-attlist &= attribute table:table { integer }?
2143 table-dependencies = element table:dependencies { table-dependency+ }
2144 table-dependency =
2145   element table:dependency {
2146     attribute table:id { \string },
2147     empty
2148   }
2149 table-deletions =
2150   element table:deletions {
2151     (table-cell-content-deletion | table-change-deletion)+
2152   }
2153 table-cell-content-deletion =
2154   element table:cell-content-deletion {
2155     attribute table:id { \string }?,
2156     table-cell-address?,
2157     table-change-track-table-cell?
2158   }
2159 table-change-deletion =
2160   element table:change-deletion {
2161     attribute table:id { \string }?,
2162     empty
2163   }
2164 table-deletion =
2165   element table:deletion {
2166     table-deletion-attlist,
2167     common-table-change-attlist,
2168     office-change-info,
2169     table-dependencies?,
2170     table-deletions?,
2171     table-cut-offs?
2172   }
2173 table-deletion-attlist &=
2174   attribute table:type { "row" | "column" | "table" }
2175 table-deletion-attlist &= attribute table:position { integer }
2176 table-deletion-attlist &= attribute table:table { integer }?
2177 table-deletion-attlist &=
2178   attribute table:multi-deletion-spanned { integer }?
2179 table-cut-offs =
2180   element table:cut-offs {
2181     table-movement-cut-off+
2182     | (table-insertion-cut-off, table-movement-cut-off*)
2183   }
2184 table-insertion-cut-off =
2185   element table:insertion-cut-off {
2186     table-insertion-cut-off-attlist, empty
2187   }
2188 table-insertion-cut-off-attlist &= attribute table:id { \string }
2189 table-insertion-cut-off-attlist &= attribute table:position { integer }
2190 table-movement-cut-off =
2191   element table:movement-cut-off {
2192     table-movement-cut-off-attlist, empty
2193   }
2194 table-movement-cut-off-attlist &=
2195   attribute table:position { integer }
2196   | (attribute table:start-position { integer },
2197      attribute table:end-position { integer })
2198 table-movement =
2199   element table:movement {
2200     common-table-change-attlist,
2201     table-source-range-address,
2202     table-target-range-address,
2203     office-change-info,
2204     table-dependencies?,
2205     table-deletions?
2206   }
2207 table-source-range-address =
2208   element table:source-range-address {
2209     common-table-range-attlist, empty
2210   }
2211 table-target-range-address =
2212   element table:target-range-address {
2213     common-table-range-attlist, empty
2214   }
2215 common-table-range-attlist &=
2216   common-table-cell-address-attlist
2217   | common-table-cell-range-address-attlist
2218 common-table-cell-address-attlist &=
2219   attribute table:column { integer },
2220   attribute table:row { integer },
2221   attribute table:table { integer }
2222 common-table-cell-range-address-attlist &=
2223   attribute table:start-column { integer },
2224   attribute table:start-row { integer },
2225   attribute table:start-table { integer },
2226   attribute table:end-column { integer },
2227   attribute table:end-row { integer },
2228   attribute table:end-table { integer }
2229 table-change-track-table-cell &=
2230   element table:change-track-table-cell {
2231     table-change-track-table-cell-attlist, text-p*
2232   }
2233 table-change-track-table-cell-attlist &=
2234   attribute table:cell-address { cellAddress }?
2235 table-change-track-table-cell-attlist &=
2236   [ a:defaultValue = "false" ]
2237   attribute table:matrix-covered { boolean }?
2238 table-change-track-table-cell-attlist &=
2239   attribute table:formula { \string }?,
2240   attribute table:number-matrix-columns-spanned { positiveInteger }?,
2241   attribute table:number-matrix-rows-spanned { positiveInteger }?,
2242   common-value-and-type-attlist?
2243 table-cell-content-change =
2244   element table:cell-content-change {
2245     common-table-change-attlist,
2246     table-cell-address,
2247     office-change-info,
2248     table-dependencies?,
2249     table-deletions?,
2250     table-previous
2251   }
2252 table-cell-address =
2253   element table:cell-address {
2254     common-table-cell-address-attlist, empty
2255   }
2256 table-previous =
2257   element table:previous {
2258     attribute table:id { \string }?,
2259     table-change-track-table-cell
2260   }
2261 common-table-change-attlist &= attribute table:id { \string }
2262 common-table-change-attlist &=
2263   [ a:defaultValue = "pending" ]
2264   attribute table:acceptance-state {
2265     "accepted" | "rejected" | "pending"
2266   }?
2267 common-table-change-attlist &=
2268   attribute table:rejecting-change-id { \string }?
2269 style-handout-master =
2270   element style:handout-master {
2271     common-presentation-header-footer-attlist,
2272     style-handout-master-attlist,
2273     shape*
2274   }
2275 style-handout-master-attlist &=
2276   attribute presentation:presentation-page-layout-name { styleNameRef }?
2277 style-handout-master-attlist &=
2278   attribute style:page-layout-name { styleNameRef }
2279 style-handout-master-attlist &=
2280   attribute draw:style-name { styleNameRef }?
2281 draw-layer-set = element draw:layer-set { draw-layer* }
2282 draw-layer =
2283   element draw:layer { draw-layer-attlist, svg-title?, svg-desc? }
2284 draw-layer-attlist &= attribute draw:name { \string }
2285 draw-layer-attlist &=
2286   [ a:defaultValue = "false" ] attribute draw:protected { boolean }?
2287 draw-layer-attlist &=
2288   [ a:defaultValue = "always" ]
2289   attribute draw:display { "always" | "screen" | "printer" | "none" }?
2290 draw-page =
2291   element draw:page {
2292     common-presentation-header-footer-attlist,
2293     draw-page-attlist,
2294     office-forms?,
2295     shape*,
2296     (presentation-animations | animation-element)?,
2297     presentation-notes?
2298   }
2299 draw-page-attlist &= attribute draw:name { \string }?
2300 draw-page-attlist &= attribute draw:style-name { styleNameRef }?
2301 draw-page-attlist &= attribute draw:master-page-name { styleNameRef }
2302 draw-page-attlist &=
2303   attribute presentation:presentation-page-layout-name { styleNameRef }?
2304 common-presentation-header-footer-attlist &=
2305   attribute presentation:use-header-name { \string }?
2306 common-presentation-header-footer-attlist &=
2307   attribute presentation:use-footer-name { \string }?
2308 common-presentation-header-footer-attlist &=
2309   attribute presentation:use-date-time-name { \string }?
2310 draw-page-attlist &= attribute draw:id { ID }?
2311 draw-page-attlist &= attribute draw:nav-order { IDREFS }?
2312 shape =
2313   draw-rect
2314   | draw-line
2315   | draw-polyline
2316   | draw-polygon
2317   | draw-regular-polygon
2318   | draw-path
2319   | draw-circle
2320   | draw-ellipse
2321   | draw-g
2322   | draw-page-thumbnail
2323   | draw-frame
2324   | draw-measure
2325   | draw-caption
2326   | draw-connector
2327   | draw-control
2328   | dr3d-scene
2329   | draw-custom-shape
2330 draw-rect =
2331   element draw:rect {
2332     draw-rect-attlist,
2333     common-draw-position-attlist,
2334     common-draw-size-attlist,
2335     common-draw-shape-with-text-and-styles-attlist,
2336     common-draw-caption-id-attlist,
2337     svg-title?,
2338     svg-desc?,
2339     office-event-listeners?,
2340     draw-glue-point*,
2341     draw-text
2342   }
2343 draw-rect-attlist &= attribute draw:corner-radius { nonNegativeLength }?
2344 draw-line =
2345   element draw:line {
2346     draw-line-attlist,
2347     common-draw-shape-with-text-and-styles-attlist,
2348     common-draw-caption-id-attlist,
2349     svg-title?,
2350     svg-desc?,
2351     office-event-listeners?,
2352     draw-glue-point*,
2353     draw-text
2354   }
2355 draw-line-attlist &=
2356   attribute svg:x1 { coordinate },
2357   attribute svg:y1 { coordinate }
2358 draw-line-attlist &=
2359   attribute svg:x2 { coordinate },
2360   attribute svg:y2 { coordinate }
2361 draw-polyline =
2362   element draw:polyline {
2363     common-draw-points-attlist,
2364     common-draw-position-attlist,
2365     common-draw-size-attlist,
2366     common-draw-viewbox-attlist,
2367     common-draw-shape-with-text-and-styles-attlist,
2368     common-draw-caption-id-attlist,
2369     svg-title?,
2370     svg-desc?,
2371     office-event-listeners?,
2372     draw-glue-point*,
2373     draw-text
2374   }
2375 common-draw-points-attlist = attribute draw:points { points }
2376 draw-polygon =
2377   element draw:polygon {
2378     common-draw-points-attlist,
2379     common-draw-position-attlist,
2380     common-draw-size-attlist,
2381     common-draw-viewbox-attlist,
2382     common-draw-shape-with-text-and-styles-attlist,
2383     common-draw-caption-id-attlist,
2384     svg-title?,
2385     svg-desc?,
2386     office-event-listeners?,
2387     draw-glue-point*,
2388     draw-text
2389   }
2390 draw-regular-polygon =
2391   element draw:regular-polygon {
2392     draw-regular-polygon-attlist,
2393     common-draw-position-attlist,
2394     common-draw-size-attlist,
2395     common-draw-shape-with-text-and-styles-attlist,
2396     common-draw-caption-id-attlist,
2397     svg-title?,
2398     svg-desc?,
2399     office-event-listeners?,
2400     draw-glue-point*,
2401     draw-text
2402   }
2403 draw-regular-polygon-attlist &=
2404   attribute draw:concave { "false" }
2405   | (attribute draw:concave { "true" },
2406      draw-regular-polygon-sharpness-attlist)
2407 draw-regular-polygon-attlist &=
2408   attribute draw:corners { positiveInteger }
2409 draw-regular-polygon-sharpness-attlist =
2410   attribute draw:sharpness { percent }
2411 draw-path =
2412   element draw:path {
2413     common-draw-path-data-attlist,
2414     common-draw-position-attlist,
2415     common-draw-size-attlist,
2416     common-draw-viewbox-attlist,
2417     common-draw-shape-with-text-and-styles-attlist,
2418     common-draw-caption-id-attlist,
2419     svg-title?,
2420     svg-desc?,
2421     office-event-listeners?,
2422     draw-glue-point*,
2423     draw-text
2424   }
2425 common-draw-path-data-attlist = attribute svg:d { pathData }
2426 draw-circle =
2427   element draw:circle {
2428     draw-circle-attlist,
2429     common-draw-circle-ellipse-attlist,
2430     common-draw-position-attlist,
2431     common-draw-size-attlist,
2432     common-draw-shape-with-text-and-styles-attlist,
2433     common-draw-caption-id-attlist,
2434     svg-title?,
2435     svg-desc?,
2436     office-event-listeners?,
2437     draw-glue-point*,
2438     draw-text
2439   }
2440 common-draw-circle-ellipse-attlist &=
2441   (attribute svg:cx { coordinate },
2442    attribute svg:cy { coordinate })?
2443 draw-circle-attlist &= attribute svg:r { length }?
2444 common-draw-circle-ellipse-attlist &=
2445   [ a:defaultValue = "full" ]
2446   attribute draw:kind { "full" | "section" | "cut" | "arc" }?
2447 common-draw-circle-ellipse-attlist &=
2448   attribute draw:start-angle { double }?
2449 common-draw-circle-ellipse-attlist &=
2450   attribute draw:end-angle { double }?
2451 draw-ellipse =
2452   element draw:ellipse {
2453     common-draw-circle-ellipse-attlist,
2454     draw-ellipse-attlist,
2455     common-draw-position-attlist,
2456     common-draw-size-attlist,
2457     common-draw-shape-with-text-and-styles-attlist,
2458     common-draw-caption-id-attlist,
2459     svg-title?,
2460     svg-desc?,
2461     office-event-listeners?,
2462     draw-glue-point*,
2463     draw-text
2464   }
2465 draw-ellipse-attlist &=
2466   (attribute svg:rx { length },
2467    attribute svg:ry { length })?
2468 draw-connector =
2469   element draw:connector {
2470     draw-connector-attlist,
2471     common-draw-shape-with-text-and-styles-attlist,
2472     common-draw-caption-id-attlist,
2473     svg-title?,
2474     svg-desc?,
2475     office-event-listeners?,
2476     draw-glue-point*,
2477     draw-text
2478   }
2479 draw-connector-attlist &=
2480   [ a:defaultValue = "standard" ]
2481   attribute draw:type { "standard" | "lines" | "line" | "curve" }?
2482 draw-connector-attlist &=
2483   (attribute svg:x1 { coordinate },
2484    attribute svg:y1 { coordinate })?
2485 draw-connector-attlist &= attribute draw:start-shape { IDREF }?
2486 draw-connector-attlist &=
2487   attribute draw:start-glue-point { nonNegativeInteger }?
2488 draw-connector-attlist &=
2489   (attribute svg:x2 { coordinate },
2490    attribute svg:y2 { coordinate })?
2491 draw-connector-attlist &= attribute draw:end-shape { IDREF }?
2492 draw-connector-attlist &=
2493   attribute draw:end-glue-point { nonNegativeInteger }?
2494 draw-connector-attlist &=
2495   attribute draw:line-skew {
2496     list { length, (length, length?)? }
2497   }?
2498 draw-caption =
2499   element draw:caption {
2500     draw-caption-attlist,
2501     common-draw-position-attlist,
2502     common-draw-size-attlist,
2503     common-draw-shape-with-text-and-styles-attlist,
2504     common-draw-caption-id-attlist,
2505     svg-title?,
2506     svg-desc?,
2507     office-event-listeners?,
2508     draw-glue-point*,
2509     draw-text
2510   }
2511 draw-caption-attlist &=
2512   (attribute draw:caption-point-x { coordinate },
2513    attribute draw:caption-point-y { coordinate })?
2514 draw-caption-attlist &=
2515   attribute draw:corner-radius { nonNegativeLength }?
2516 draw-measure =
2517   element draw:measure {
2518     draw-measure-attlist,
2519     common-draw-shape-with-text-and-styles-attlist,
2520     common-draw-caption-id-attlist,
2521     svg-title?,
2522     svg-desc?,
2523     office-event-listeners?,
2524     draw-glue-point*,
2525     draw-text
2526   }
2527 draw-measure-attlist &=
2528   attribute svg:x1 { coordinate },
2529   attribute svg:y1 { coordinate }
2530 draw-measure-attlist &=
2531   attribute svg:x2 { coordinate },
2532   attribute svg:y2 { coordinate }
2533 draw-control =
2534   element draw:control {
2535     draw-control-attlist,
2536     common-draw-position-attlist,
2537     common-draw-size-attlist,
2538     common-draw-shape-with-text-and-styles-attlist,
2539     common-draw-caption-id-attlist,
2540     svg-title?,
2541     svg-desc?,
2542     draw-glue-point*
2543   }
2544 draw-control-attlist &= attribute draw:control { IDREF }
2545 draw-page-thumbnail =
2546   element draw:page-thumbnail {
2547     draw-page-thumbnail-attlist,
2548     common-draw-position-attlist,
2549     common-draw-size-attlist,
2550     presentation-shape-attlist,
2551     common-draw-shape-with-styles-attlist,
2552     common-draw-caption-id-attlist,
2553     svg-title?,
2554     svg-desc?
2555   }
2556 draw-page-thumbnail-attlist =
2557   attribute draw:page-number { positiveInteger }?
2558 draw-g =
2559   element draw:g {
2560     draw-g-attlist,
2561     common-draw-z-index-attlist,
2562     common-draw-name-attlist,
2563     common-draw-id-attlist,
2564     common-draw-style-name-attlist,
2565     common-text-spreadsheet-shape-attlist,
2566     common-draw-caption-id-attlist,
2567     svg-title?,
2568     svg-desc?,
2569     office-event-listeners?,
2570     draw-glue-point*,
2571     shape*
2572   }
2573 draw-g-attlist &= attribute svg:y { coordinate }?
2574 common-draw-name-attlist &= attribute draw:name { \string }?
2575 common-draw-caption-id-attlist &= attribute draw:caption-id { IDREF }?
2576 common-draw-position-attlist =
2577   attribute svg:x { coordinate }?,
2578   attribute svg:y { coordinate }?
2579 common-draw-size-attlist =
2580   attribute svg:width { length }?,
2581   attribute svg:height { length }?
2582 common-draw-transform-attlist = attribute draw:transform { \string }?
2583 common-draw-viewbox-attlist =
2584   attribute svg:viewBox {
2585     list { integer, integer, integer, integer }
2586   }
2587 common-draw-style-name-attlist =
2588   (attribute draw:style-name { styleNameRef }?,
2589    attribute draw:class-names { styleNameRefs }?)
2590   | (attribute presentation:style-name { styleNameRef }?,
2591      attribute presentation:class-names { styleNameRefs }?)
2592 common-draw-text-style-name-attlist =
2593   attribute draw:text-style-name { styleNameRef }?
2594 common-draw-layer-name-attlist = attribute draw:layer { xsd:string }?
2595 common-draw-id-attlist = attribute draw:id { ID }?
2596 common-draw-z-index-attlist =
2597   attribute draw:z-index { nonNegativeInteger }?
2598 common-text-spreadsheet-shape-attlist &=
2599   attribute table:end-cell-address { cellAddress }?,
2600   attribute table:end-x { coordinate }?,
2601   attribute table:end-y { coordinate }?
2602 common-text-spreadsheet-shape-attlist &=
2603   attribute table:table-background { boolean }?
2604 common-text-spreadsheet-shape-attlist &= common-text-anchor-attlist
2605 common-text-anchor-attlist &=
2606   attribute text:anchor-type {
2607     "page" | "frame" | "paragraph" | "char" | "as-char"
2608   }?
2609 common-text-anchor-attlist &=
2610   attribute text:anchor-page-number { positiveInteger }?
2611 draw-text = (text-p | text-list)*
2612 common-draw-shape-with-styles-attlist =
2613   common-draw-z-index-attlist,
2614   common-draw-id-attlist,
2615   common-draw-layer-name-attlist,
2616   common-draw-style-name-attlist,
2617   common-draw-transform-attlist,
2618   common-draw-name-attlist,
2619   common-text-spreadsheet-shape-attlist
2620 common-draw-shape-with-text-and-styles-attlist =
2621   common-draw-shape-with-styles-attlist,
2622   common-draw-text-style-name-attlist
2623 draw-glue-point =
2624   element draw:glue-point { draw-glue-point-attlist, empty }
2625 draw-glue-point-attlist &= attribute draw:id { nonNegativeInteger }
2626 draw-glue-point-attlist &=
2627   attribute svg:x { distance | percent },
2628   attribute svg:y { distance | percent }
2629 draw-glue-point-attlist &=
2630   attribute draw:align {
2631     "top-left"
2632     | "top"
2633     | "top-right"
2634     | "left"
2635     | "center"
2636     | "right"
2637     | "bottom-left"
2638     | "bottom-right"
2639   }?
2640 draw-glue-points-attlist &=
2641   attribute draw:escape-direction {
2642     "auto"
2643     | "left"
2644     | "right"
2645     | "up"
2646     | "down"
2647     | "horizontal"
2648     | "vertical"
2649   }
2650 svg-title = element svg:title { text }
2651 svg-desc = element svg:desc { text }
2652 draw-frame =
2653   element draw:frame {
2654     common-draw-shape-with-text-and-styles-attlist,
2655     common-draw-position-attlist,
2656     common-draw-rel-size-attlist,
2657     common-draw-caption-id-attlist,
2658     presentation-shape-attlist,
2659     draw-frame-attlist,
2660     (draw-text-box
2661      | draw-image
2662      | draw-object
2663      | draw-object-ole
2664      | draw-applet
2665      | draw-floating-frame
2666      | draw-plugin)*,
2667     office-event-listeners?,
2668     draw-glue-point*,
2669     draw-image-map?,
2670     svg-title?,
2671     svg-desc?,
2672     (draw-contour-polygon | draw-contour-path)?
2673   }
2674 common-draw-rel-size-attlist =
2675   common-draw-size-attlist,
2676   attribute style:rel-width { percent | "scale" | "scale-min" }?,
2677   attribute style:rel-height { percent | "scale" | "scale-min" }?
2678 draw-frame-attlist &= attribute draw:copy-of { \string }?
2679 draw-text-box =
2680   element draw:text-box { draw-text-box-attlist, text-content* }
2681 draw-text-box-attlist &= attribute draw:chain-next-name { \string }?
2682 draw-text-box-attlist &=
2683   attribute draw:corner-radius { nonNegativeLength }?
2684 draw-text-box-attlist &=
2685   attribute fo:min-height { length | percent }?,
2686   attribute fo:min-width { length | percent }?
2687 draw-text-box-attlist &=
2688   attribute fo:max-height { length | percent }?,
2689   attribute fo:max-width { length | percent }?
2690 draw-text-box-attlist &= text-id?
2691 draw-image =
2692   element draw:image {
2693     draw-image-attlist,
2694     (common-draw-data-attlist | office-binary-data),
2695     draw-text
2696   }
2697 common-draw-data-attlist &=
2698   attribute xlink:href { anyURI },
2699   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
2700   [ a:defaultValue = "embed" ] attribute xlink:show { "embed" }?,
2701   [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?
2702 office-binary-data = element office:binary-data { base64Binary }
2703 draw-image-attlist &= attribute draw:filter-name { \string }?
2704 draw-object =
2705   element draw:object {
2706     draw-object-attlist,
2707     (common-draw-data-attlist | office-document | math-math)
2708   }
2709 draw-object-ole =
2710   element draw:object-ole {
2711     draw-object-ole-attlist,
2712     (common-draw-data-attlist | office-binary-data)
2713   }
2714 draw-object-attlist &=
2715   attribute draw:notify-on-update-of-ranges { \string }?
2716 draw-object-ole-attlist &= attribute draw:class-id { text }?
2717 draw-applet =
2718   element draw:applet {
2719     draw-applet-attlist, common-draw-data-attlist?, draw-param*
2720   }
2721 draw-applet-attlist &= attribute draw:code { text }?
2722 draw-applet-attlist &= attribute draw:object { text }?
2723 draw-applet-attlist &= attribute draw:archive { text }?
2724 draw-applet-attlist &=
2725   [ a:defaultValue = "false" ] attribute draw:may-script { boolean }?
2726 draw-plugin =
2727   element draw:plugin {
2728     draw-plugin-attlist, common-draw-data-attlist, draw-param*
2729   }
2730 draw-plugin-attlist &= attribute draw:mime-type { text }?
2731 draw-param = element draw:param { draw-param-attlist, empty }
2732 draw-param-attlist &= attribute draw:name { text }?
2733 draw-param-attlist &= attribute draw:value { text }?
2734 draw-floating-frame =
2735   element draw:floating-frame {
2736     draw-floating-frame-attlist, common-draw-data-attlist
2737   }
2738 draw-floating-frame-attlist &= attribute draw:frame-name { \string }?
2739 draw-contour-polygon =
2740   element draw:contour-polygon {
2741     common-contour-attlist,
2742     common-draw-size-attlist,
2743     common-draw-viewbox-attlist,
2744     common-draw-points-attlist,
2745     empty
2746   }
2747 draw-contour-path =
2748   element draw:contour-path {
2749     common-contour-attlist,
2750     common-draw-size-attlist,
2751     common-draw-viewbox-attlist,
2752     common-draw-path-data-attlist,
2753     empty
2754   }
2755 common-contour-attlist &= attribute draw:recreate-on-edit { boolean }
2756 draw-a = element draw:a { draw-a-attlist, draw-frame }
2757 draw-a-attlist &=
2758   attribute xlink:href { anyURI },
2759   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
2760   [ a:defaultValue = "onRequest" ]
2761   attribute xlink:actuate { "onRequest" }?
2762 draw-a-attlist &=
2763   attribute office:target-frame-name { targetFrameName }?,
2764   attribute xlink:show { "new" | "replace" }?
2765 draw-a-attlist &= attribute office:name { \string }?
2766 draw-a-attlist &= attribute office:title { \string }?
2767 draw-a-attlist &=
2768   [ a:defaultValue = "false" ] attribute office:server-map { boolean }?
2769 draw-image-map =
2770   element draw:image-map {
2771     (draw-area-rectangle | draw-area-circle | draw-area-polygon)*
2772   }
2773 draw-area-rectangle =
2774   element draw:area-rectangle {
2775     common-draw-area-attlist,
2776     attribute svg:x { coordinate },
2777     attribute svg:y { coordinate },
2778     attribute svg:width { length },
2779     attribute svg:height { length },
2780     svg-title?,
2781     svg-desc?,
2782     office-event-listeners?
2783   }
2784 draw-area-circle =
2785   element draw:area-circle {
2786     common-draw-area-attlist,
2787     attribute svg:cx { coordinate },
2788     attribute svg:cy { coordinate },
2789     attribute svg:r { length },
2790     svg-title?,
2791     svg-desc?,
2792     office-event-listeners?
2793   }
2794 draw-area-polygon =
2795   element draw:area-polygon {
2796     common-draw-area-attlist,
2797     attribute svg:x { coordinate },
2798     attribute svg:y { coordinate },
2799     attribute svg:width { length },
2800     attribute svg:height { length },
2801     common-draw-viewbox-attlist,
2802     common-draw-points-attlist,
2803     svg-title?,
2804     svg-desc?,
2805     office-event-listeners?
2806   }
2807 common-draw-area-attlist &=
2808   attribute xlink:href { anyURI }?,
2809   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
2810   attribute office:target-frame-name { targetFrameName }?,
2811   attribute xlink:show { "new" | "replace" }?
2812 common-draw-area-attlist &= attribute office:name { \string }?
2813 common-draw-area-attlist &= attribute draw:nohref { "nohref" }?
2814 dr3d-scene =
2815   element dr3d:scene {
2816     dr3d-scene-attlist,
2817     common-draw-position-attlist,
2818     common-draw-size-attlist,
2819     common-draw-style-name-attlist,
2820     common-draw-z-index-attlist,
2821     common-draw-id-attlist,
2822     common-draw-layer-name-attlist,
2823     common-text-spreadsheet-shape-attlist,
2824     common-dr3d-transform-attlist,
2825     common-draw-caption-id-attlist,
2826     svg-title?,
2827     svg-desc?,
2828     dr3d-light*,
2829     shapes3d*
2830   }
2831 shapes3d =
2832   dr3d-scene | dr3d-extrude | dr3d-sphere | dr3d-rotate | dr3d-cube
2833 dr3d-scene-attlist &=
2834   attribute dr3d:vrp { vector3D }?,
2835   attribute dr3d:vpn { vector3D }?,
2836   attribute dr3d:vup { vector3D }?
2837 dr3d-scene-attlist &=
2838   attribute dr3d:projection { "parallel" | "perspective" }?
2839 dr3d-scene-attlist &= attribute dr3d:distance { length }?
2840 dr3d-scene-attlist &= attribute dr3d:focal-length { length }?
2841 dr3d-scene-attlist &=
2842   attribute dr3d:shadow-slant { nonNegativeInteger }?
2843 dr3d-scene-attlist &=
2844   attribute dr3d:shade-mode { "flat" | "phong" | "gouraud" | "draft" }?
2845 dr3d-scene-attlist &= attribute dr3d:ambient-color { color }?
2846 dr3d-scene-attlist &= attribute dr3d:lighting-mode { boolean }?
2847 common-dr3d-transform-attlist = attribute dr3d:transform { text }?
2848 dr3d-light = element dr3d:light { dr3d-light-attlist, empty }
2849 dr3d-light-attlist &= attribute dr3d:diffuse-color { color }?
2850 dr3d-light-attlist &= attribute dr3d:direction { vector3D }
2851 dr3d-light-attlist &= attribute dr3d:enabled { boolean }?
2852 dr3d-light-attlist &= attribute dr3d:specular { boolean }?
2853 dr3d-cube =
2854   element dr3d:cube {
2855     dr3d-cube-attlist,
2856     common-draw-z-index-attlist,
2857     common-draw-id-attlist,
2858     common-draw-layer-name-attlist,
2859     common-draw-style-name-attlist,
2860     common-dr3d-transform-attlist,
2861     empty
2862   }
2863 dr3d-cube-attlist &=
2864   attribute dr3d:min-edge { vector3D }?,
2865   attribute dr3d:max-edge { vector3D }?
2866 dr3d-sphere =
2867   element dr3d:sphere {
2868     dr3d-sphere-attlist,
2869     common-draw-z-index-attlist,
2870     common-draw-id-attlist,
2871     common-draw-layer-name-attlist,
2872     common-draw-style-name-attlist,
2873     common-dr3d-transform-attlist,
2874     empty
2875   }
2876 dr3d-sphere-attlist &= attribute dr3d:center { vector3D }?
2877 dr3d-sphere-attlist &= attribute dr3d:size { vector3D }?
2878 dr3d-extrude =
2879   element dr3d:extrude {
2880     common-draw-path-data-attlist,
2881     common-draw-viewbox-attlist,
2882     common-draw-id-attlist,
2883     common-draw-z-index-attlist,
2884     common-draw-layer-name-attlist,
2885     common-draw-style-name-attlist,
2886     common-dr3d-transform-attlist,
2887     empty
2888   }
2889 dr3d-rotate =
2890   element dr3d:rotate {
2891     common-draw-viewbox-attlist,
2892     common-draw-path-data-attlist,
2893     common-draw-z-index-attlist,
2894     common-draw-id-attlist,
2895     common-draw-layer-name-attlist,
2896     common-draw-style-name-attlist,
2897     common-dr3d-transform-attlist,
2898     empty
2899   }
2900 draw-custom-shape =
2901   element draw:custom-shape {
2902     draw-custom-shape-attlist,
2903     common-draw-position-attlist,
2904     common-draw-size-attlist,
2905     common-draw-shape-with-text-and-styles-attlist,
2906     common-draw-caption-id-attlist,
2907     svg-title?,
2908     svg-desc?,
2909     office-event-listeners?,
2910     draw-glue-point*,
2911     draw-text,
2912     draw-enhanced-geometry?
2913   }
2914 draw-custom-shape-attlist &= attribute draw:engine { namespacedToken }?
2915 draw-custom-shape-attlist &= attribute draw:data { \string }?
2916 draw-enhanced-geometry =
2917   element draw:enhanced-geometry {
2918     draw-enhanced-geometry-attlist, draw-equation*, draw-handle*
2919   }
2920 draw-enhanced-geometry-attlist &=
2921   [ a:defaultValue = "non-primitive" ]
2922   attribute draw:type { custom-shape-type }?
2923 custom-shape-type = "non-primitive" | \string
2924 draw-enhanced-geometry-attlist &=
2925   attribute svg:viewBox {
2926     list { integer, integer, integer, integer }
2927   }?
2928 draw-enhanced-geometry-attlist &=
2929   [ a:defaultValue = "false" ]
2930   attribute draw:mirror-vertical { boolean }?,
2931   [ a:defaultValue = "false" ]
2932   attribute draw:mirror-horizontal { boolean }?
2933 draw-enhanced-geometry-attlist &=
2934   [ a:defaultValue = "0" ] attribute draw:text-rotate-angle { double }?
2935 draw-enhanced-geometry-attlist &=
2936   [ a:defaultValue = "false" ]
2937   attribute draw:extrusion-allowed { boolean }?
2938 draw-enhanced-geometry-attlist &=
2939   [ a:defaultValue = "false" ]
2940   attribute draw:text-path-allowed { boolean }?
2941 draw-enhanced-geometry-attlist &=
2942   [ a:defaultValue = "false" ]
2943   attribute draw:concentric-gradient-fill-allowed { boolean }?
2944 draw-enhanced-geometry-attlist &=
2945   [ a:defaultValue = "false" ] attribute draw:extrusion { boolean }?
2946 draw-enhanced-geometry-attlist &=
2947   [ a:defaultValue = "33%" ]
2948   attribute draw:extrusion-brightness { percent }?
2949 draw-enhanced-geometry-attlist &=
2950   [ a:defaultValue = "36pt 0" ]
2951   attribute draw:extrusion-depth {
2952     list { length, double }
2953   }?
2954 draw-enhanced-geometry-attlist &=
2955   [ a:defaultValue = "0%" ]
2956   attribute draw:extrusion-diffusion { percent }?
2957 draw-enhanced-geometry-attlist &=
2958   [ a:defaultValue = "30" ]
2959   attribute draw:extrusion-number-of-line-segments { integer }?
2960 draw-enhanced-geometry-attlist &=
2961   [ a:defaultValue = "true" ]
2962   attribute draw:extrusion-light-face { boolean }?
2963 draw-enhanced-geometry-attlist &=
2964   [ a:defaultValue = "true" ]
2965   attribute draw:extrusion-first-light-harsh { boolean }?
2966 draw-enhanced-geometry-attlist &=
2967   [ a:defaultValue = "true" ]
2968   attribute draw:extrusion-second-light-harsh { boolean }?
2969 draw-enhanced-geometry-attlist &=
2970   [ a:defaultValue = "66%" ]
2971   attribute draw:extrusion-first-light-level { percent }?
2972 draw-enhanced-geometry-attlist &=
2973   [ a:defaultValue = "66%" ]
2974   attribute draw:extrusion-second-light-level { percent }?
2975 draw-enhanced-geometry-attlist &=
2976   [ a:defaultValue = "(5 0 1)" ]
2977   attribute draw:extrusion-first-light-direction { vector3D }?
2978 draw-enhanced-geometry-attlist &=
2979   [ a:defaultValue = "(-5 0 1)" ]
2980   attribute draw:extrusion-second-light-direction { vector3D }?
2981 draw-enhanced-geometry-attlist &=
2982   [ a:defaultValue = "false" ]
2983   attribute draw:extrusion-metal { boolean }?
2984 draw-enhanced-geometry-attlist &=
2985   [ a:defaultValue = "flat" ]
2986   attribute dr3d:shade-mode { "flat" | "phong" | "gouraud" | "draft" }?
2987 draw-enhanced-geometry-attlist &=
2988   [ a:defaultValue = "0 0" ]
2989   attribute draw:extrusion-rotation-angle {
2990     list { double, double }
2991   }?
2992 draw-enhanced-geometry-attlist &=
2993   attribute draw:extrusion-rotation-center { vector3D }?
2994 draw-enhanced-geometry-attlist &=
2995   [ a:defaultValue = "50%" ]
2996   attribute draw:extrusion-shininess { percent }?
2997 draw-enhanced-geometry-attlist &=
2998   [ a:defaultValue = "50 45" ]
2999   attribute draw:extrusion-skew {
3000     list { double, double }
3001   }?
3002 draw-enhanced-geometry-attlist &=
3003   [ a:defaultValue = "0%" ]
3004   attribute draw:extrusion-specularity { percent }?
3005 draw-enhanced-geometry-attlist &=
3006   [ a:defaultValue = "parallel" ]
3007   attribute dr3d:projection { "parallel" | "perspective" }?
3008 draw-enhanced-geometry-attlist &=
3009   [ a:defaultValue = "3.5cm -3.5cm 25cm" ]
3010   attribute draw:extrusion-viewpoint { point3D }?
3011 point3D = xsd:string
3012 draw-enhanced-geometry-attlist &=
3013   [ a:defaultValue = "0.5 -0.5" ]
3014   attribute draw:extrusion-origin {
3015     list { double, double }
3016   }?
3017 draw-enhanced-geometry-attlist &=
3018   [ a:defaultValue = "false" ]
3019   attribute draw:extrusion-color { boolean }?
3020 draw-enhanced-geometry-attlist &=
3021   attribute draw:enhanced-path { \string }?
3022 draw-enhanced-geometry-attlist &=
3023   [ a:defaultValue = "0" ]
3024   attribute draw:path-stretchpoint-x { double }?,
3025   [ a:defaultValue = "0" ]
3026   attribute draw:path-stretchpoint-y { double }?
3027 draw-enhanced-geometry-attlist &= attribute draw:text-areas { \string }?
3028 draw-enhanced-geometry-attlist &=
3029   attribute draw:glue-points { \string }?
3030 draw-enhanced-geometry-attlist &=
3031   [ a:defaultValue = "none" ]
3032   attribute draw:glue-point-type { "none" | "segments" | "rectangle" }?
3033 draw-enhanced-geometry-attlist &=
3034   attribute draw:glue-point-leaving-directions { text }?
3035 draw-enhanced-geometry-attlist &=
3036   [ a:defaultValue = "false" ] attribute draw:text-path { boolean }?
3037 draw-enhanced-geometry-attlist &=
3038   [ a:defaultValue = "normal" ]
3039   attribute draw:text-path-mode { "normal" | "path" | "shape" }?
3040 draw-enhanced-geometry-attlist &=
3041   [ a:defaultValue = "path" ]
3042   attribute draw:text-path-scale { "path" | "shape" }?
3043 draw-enhanced-geometry-attlist &=
3044   [ a:defaultValue = "false" ]
3045   attribute draw:text-path-same-letter-heights { boolean }?
3046 draw-enhanced-geometry-attlist &= attribute draw:modifiers { \string }?
3047 draw-equation = element draw:equation { draw-equation-attlist, empty }
3048 draw-equation-attlist &= attribute draw:name { \string }?
3049 draw-equation-attlist &= attribute draw:formula { \string }?
3050 draw-handle = element draw:handle { draw-handle-attlist, empty }
3051 draw-handle-attlist &=
3052   [ a:defaultValue = "false" ]
3053   attribute draw:handle-mirror-vertical { boolean }?
3054 draw-handle-attlist &=
3055   [ a:defaultValue = "false" ]
3056   attribute draw:handle-mirror-horizontal { boolean }?
3057 draw-handle-attlist &=
3058   [ a:defaultValue = "false" ]
3059   attribute draw:handle-switched { boolean }?
3060 draw-handle-attlist &= attribute draw:handle-position { \string }
3061 draw-handle-attlist &=
3062   attribute draw:handle-range-x-minimum { \string }?
3063 draw-handle-attlist &=
3064   attribute draw:handle-range-x-maximum { \string }?
3065 draw-handle-attlist &=
3066   attribute draw:handle-range-y-minimum { \string }?
3067 draw-handle-attlist &=
3068   attribute draw:handle-range-y-maximum { \string }?
3069 draw-handle-attlist &= attribute draw:handle-polar { \string }?
3070 draw-handle-attlist &=
3071   attribute draw:handle-radius-range-minimum { \string }?
3072 draw-handle-attlist &=
3073   attribute draw:handle-radius-range-maximum { \string }?
3074 presentation-shape-attlist &=
3075   attribute presentation:class { presentation-classes }?
3076 presentation-classes =
3077   "title"
3078   | "outline"
3079   | "subtitle"
3080   | "text"
3081   | "graphic"
3082   | "object"
3083   | "chart"
3084   | "table"
3085   | "orgchart"
3086   | "page"
3087   | "notes"
3088   | "handout"
3089   | "header"
3090   | "footer"
3091   | "date-time"
3092   | "page-number"
3093 presentation-shape-attlist &=
3094   attribute presentation:placeholder { boolean }?
3095 presentation-shape-attlist &=
3096   attribute presentation:user-transformed { boolean }?
3097 presentation-animations =
3098   element presentation:animations {
3099     (presentation-animation-elements | presentation-animation-group)*
3100   }
3101 presentation-animation-elements =
3102   presentation-show-shape
3103   | presentation-show-text
3104   | presentation-hide-shape
3105   | presentation-hide-text
3106   | presentation-dim
3107   | presentation-play
3108 presentation-sound =
3109   element presentation:sound {
3110     presentation-sound-attlist,
3111     attribute xlink:href { anyURI },
3112     [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
3113     [ a:defaultValue = "onRequest" ]
3114     attribute xlink:actuate { "onRequest" }?,
3115     attribute xlink:show { "new" | "replace" }?,
3116     empty
3117   }
3118 presentation-sound-attlist &=
3119   attribute presentation:play-full { boolean }?
3120 presentation-show-shape =
3121   element presentation:show-shape {
3122     common-presentation-effect-attlist, presentation-sound?
3123   }
3124 common-presentation-effect-attlist &= attribute draw:shape-id { IDREF }
3125 common-presentation-effect-attlist &=
3126   [ a:defaultValue = "none" ]
3127   attribute presentation:effect { presentationEffects }?
3128 presentationEffects =
3129   "none"
3130   | "fade"
3131   | "move"
3132   | "stripes"
3133   | "open"
3134   | "close"
3135   | "dissolve"
3136   | "wavyline"
3137   | "random"
3138   | "lines"
3139   | "laser"
3140   | "appear"
3141   | "hide"
3142   | "move-short"
3143   | "checkerboard"
3144   | "rotate"
3145   | "stretch"
3146 common-presentation-effect-attlist &=
3147   [ a:defaultValue = "none" ]
3148   attribute presentation:direction { presentationEffectDirections }?
3149 presentationEffectDirections =
3150   "none"
3151   | "from-left"
3152   | "from-top"
3153   | "from-right"
3154   | "from-bottom"
3155   | "from-center"
3156   | "from-upper-left"
3157   | "from-upper-right"
3158   | "from-lower-left"
3159   | "from-lower-right"
3160   | "to-left"
3161   | "to-top"
3162   | "to-right"
3163   | "to-bottom"
3164   | "to-upper-left"
3165   | "to-upper-right"
3166   | "to-lower-right"
3167   | "to-lower-left"
3168   | "path"
3169   | "spiral-inward-left"
3170   | "spiral-inward-right"
3171   | "spiral-outward-left"
3172   | "spiral-outward-right"
3173   | "vertical"
3174   | "horizontal"
3175   | "to-center"
3176   | "clockwise"
3177   | "counter-clockwise"
3178 common-presentation-effect-attlist &=
3179   [ a:defaultValue = "medium" ]
3180   attribute presentation:speed { presentationSpeeds }?
3181 presentationSpeeds = "slow" | "medium" | "fast"
3182 common-presentation-effect-attlist &=
3183   attribute presentation:delay { duration }?
3184 common-presentation-effect-attlist &=
3185   [ a:defaultValue = "100%" ]
3186   attribute presentation:start-scale { percent }?
3187 common-presentation-effect-attlist &=
3188   attribute presentation:path-id { text }?
3189 presentation-show-text =
3190   element presentation:show-text {
3191     common-presentation-effect-attlist, presentation-sound?
3192   }
3193 presentation-hide-shape =
3194   element presentation:hide-shape {
3195     common-presentation-effect-attlist, presentation-sound?
3196   }
3197 presentation-hide-text =
3198   element presentation:hide-text {
3199     common-presentation-effect-attlist, presentation-sound?
3200   }
3201 presentation-dim =
3202   element presentation:dim {
3203     presentation-dim-attlist, presentation-sound?
3204   }
3205 presentation-dim-attlist &= attribute draw:shape-id { IDREF }
3206 presentation-dim-attlist &= attribute draw:color { color }
3207 presentation-play =
3208   element presentation:play { presentation-play-attlist, empty }
3209 presentation-play-attlist &=
3210   attribute draw:shape-id { IDREF },
3211   [ a:defaultValue = "medium" ]
3212   attribute presentation:speed { presentationSpeeds }?
3213 presentation-animation-group =
3214   element presentation:animation-group {
3215     presentation-animation-elements*
3216   }
3217 common-anim-attlist &=
3218   [ a:defaultValue = "default" ]
3219   attribute presentation:node-type {
3220     "default"
3221     | "on-click"
3222     | "with-previous"
3223     | "after-previous"
3224     | "timing-root"
3225     | "main-sequence"
3226     | "interactive-sequence"
3227   }?
3228 common-anim-attlist &= attribute presentation:preset-id { \string }?
3229 common-anim-attlist &=
3230   attribute presentation:preset-sub-type { \string }?
3231 common-anim-attlist &=
3232   [ a:defaultValue = "custom" ]
3233   attribute presentation:preset-class {
3234     "custom"
3235     | "entrance"
3236     | "exit"
3237     | "emphasis"
3238     | "motion-path"
3239     | "ole-action"
3240     | "media-call"
3241   }?
3242 common-anim-attlist &= attribute presentation:master-element { IDREF }?
3243 common-anim-attlist &= attribute presentation:group-id { \string }?
3244 presentation-event-listener =
3245   element presentation:event-listener {
3246     presentation-event-listener-attlist, presentation-sound?
3247   }
3248 presentation-event-listener-attlist &=
3249   attribute script:event-name { \string }
3250 presentation-event-listener-attlist &=
3251   attribute presentation:action {
3252     "none"
3253     | "previous-page"
3254     | "next-page"
3255     | "first-page"
3256     | "last-page"
3257     | "hide"
3258     | "stop"
3259     | "execute"
3260     | "show"
3261     | "verb"
3262     | "fade-out"
3263     | "sound"
3264   }
3265 presentation-event-listener-attlist &=
3266   [ a:defaultValue = "none" ]
3267   attribute presentation:effect { presentationEffects }?
3268 presentation-event-listener-attlist &=
3269   [ a:defaultValue = "none" ]
3270   attribute presentation:direction { presentationEffectDirections }?
3271 presentation-event-listener-attlist &=
3272   [ a:defaultValue = "medium" ]
3273   attribute presentation:speed { presentationSpeeds }?
3274 presentation-event-listener-attlist &=
3275   [ a:defaultValue = "100%" ]
3276   attribute presentation:start-scale { percent }?
3277 presentation-event-listener-attlist &=
3278   attribute xlink:href { anyURI }?,
3279   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
3280   [ a:defaultValue = "embed" ] attribute xlink:show { "embed" }?,
3281   [ a:defaultValue = "onRequest" ]
3282   attribute xlink:actuate { "onRequest" }?
3283 presentation-event-listener-attlist &=
3284   attribute presentation:verb { nonNegativeInteger }?
3285 paragraph-content |= element presentation:header { empty }
3286 paragraph-content |= element presentation:footer { empty }
3287 paragraph-content |= element presentation:date-time { empty }
3288 presentation-decls = presentation-decl*
3289 presentation-decl |=
3290   element presentation:header-decl {
3291     presentation-header-decl-attlist, text
3292   }
3293 presentation-header-decl-attlist &=
3294   attribute presentation:name { \string }
3295 presentation-decl |=
3296   element presentation:footer-decl {
3297     presentation-footer-decl-attlist, text
3298   }
3299 presentation-footer-decl-attlist &=
3300   attribute presentation:name { \string }
3301 presentation-decl |=
3302   element presentation:date-time-decl {
3303     presentation-date-time-decl-attlist, text
3304   }
3305 presentation-date-time-decl-attlist &=
3306   attribute presentation:name { \string }
3307 presentation-date-time-decl-attlist &=
3308   attribute presentation:source { "fixed" | "current-date" }
3309 presentation-date-time-decl-attlist &=
3310   attribute style:data-style-name { styleNameRef }?
3311 presentation-settings =
3312   element presentation:settings {
3313     presentation-settings-attlist, presentation-show*
3314   }?
3315 presentation-settings-attlist &=
3316   attribute presentation:start-page { \string }?
3317 presentation-settings-attlist &=
3318   attribute presentation:show { \string }?
3319 presentation-settings-attlist &=
3320   [ a:defaultValue = "true" ]
3321   attribute presentation:full-screen { boolean }?
3322 presentation-settings-attlist &=
3323   [ a:defaultValue = "false" ]
3324   attribute presentation:endless { boolean }?
3325 presentation-settings-attlist &=
3326   attribute presentation:pause { duration }?
3327 presentation-settings-attlist &=
3328   [ a:defaultValue = "false" ]
3329   attribute presentation:show-logo { boolean }?
3330 presentation-settings-attlist &=
3331   [ a:defaultValue = "false" ]
3332   attribute presentation:force-manual { boolean }?
3333 presentation-settings-attlist &=
3334   [ a:defaultValue = "true" ]
3335   attribute presentation:mouse-visible { boolean }?
3336 presentation-settings-attlist &=
3337   [ a:defaultValue = "false" ]
3338   attribute presentation:mouse-as-pen { boolean }?
3339 presentation-settings-attlist &=
3340   [ a:defaultValue = "false" ]
3341   attribute presentation:start-with-navigator { boolean }?
3342 presentation-settings-attlist &=
3343   [ a:defaultValue = "enabled" ]
3344   attribute presentation:animations { "enabled" | "disabled" }?
3345 presentation-settings-attlist &=
3346   [ a:defaultValue = "enabled" ]
3347   attribute presentation:transition-on-click { "enabled" | "disabled" }?
3348 presentation-settings-attlist &=
3349   [ a:defaultValue = "false" ]
3350   attribute presentation:stay-on-top { boolean }?
3351 presentation-settings-attlist &=
3352   [ a:defaultValue = "true" ]
3353   attribute presentation:show-end-of-presentation-slide { boolean }?
3354 presentation-show =
3355   element presentation:show { presentation-show-attlist, empty }
3356 presentation-show-attlist &= attribute presentation:name { \string }
3357 presentation-show-attlist &= attribute presentation:pages { text }
3358 chart-chart =
3359   element chart:chart {
3360     chart-chart-attlist,
3361     chart-title?,
3362     chart-subtitle?,
3363     chart-footer?,
3364     chart-legend?,
3365     chart-plot-area,
3366     table-table?
3367   }
3368 chart-chart-attlist &= attribute chart:class { namespacedToken }
3369 chart-chart-attlist &= common-draw-size-attlist
3370 chart-chart-attlist &= attribute chart:column-mapping { \string }?
3371 chart-chart-attlist &= attribute chart:row-mapping { \string }?
3372 chart-chart-attlist &= attribute chart:style-name { styleNameRef }?
3373 chart-title = element chart:title { chart-title-attlist, text-p? }
3374 chart-title-attlist &= attribute table:cell-range { cellAddress }?
3375 chart-title-attlist &= common-draw-position-attlist
3376 chart-title-attlist &= attribute chart:style-name { styleNameRef }?
3377 chart-subtitle = element chart:subtitle { chart-title-attlist, text-p? }
3378 chart-footer = element chart:footer { chart-title-attlist, text-p? }
3379 chart-legend = element chart:legend { chart-legend-attlist, empty }
3380 chart-legend-attlist &=
3381   (attribute chart:legend-position {
3382      "start" | "end" | "top" | "bottom"
3383    },
3384    attribute chart:legend-align { "start" | "center" | "end" }?)
3385   | attribute chart:legend-position {
3386       "top-start" | "bottom-start" | "top-end" | "bottom-end"
3387     }
3388   | empty
3389 chart-legend-attlist &= common-draw-position-attlist
3390 chart-legend-attlist &=
3391   attribute style:legend-expansion { "wide" | "high" | "balanced" }
3392   | (attribute style:legend-expansion { "custom" },
3393      attribute style:legend-expansion-aspect-ratio { double })
3394   | empty
3395 chart-legend-attlist &= attribute chart:style-name { styleNameRef }?
3396 chart-plot-area =
3397   element chart:plot-area {
3398     chart-plot-area-attlist,
3399     dr3d-light*,
3400     chart-axis*,
3401     chart-series*,
3402     chart-stock-gain-marker?,
3403     chart-stock-loss-marker?,
3404     chart-stock-range-line?,
3405     chart-wall?,
3406     chart-floor?
3407   }
3408 chart-plot-area-attlist &=
3409   common-draw-position-attlist, common-draw-size-attlist
3410 chart-plot-area-attlist &= attribute chart:style-name { styleNameRef }?
3411 chart-plot-area-attlist &=
3412   attribute table:cell-range-address { cellRangeAddress }?
3413 chart-plot-area-attlist &=
3414   [ a:defaultValue = "none" ]
3415   attribute chart:data-source-has-labels {
3416     "none" | "row" | "column" | "both"
3417   }?
3418 chart-plot-area-attlist &=
3419   dr3d-scene-attlist, common-dr3d-transform-attlist
3420 chart-wall = element chart:wall { chart-wall-attlist, empty }
3421 chart-wall-attlist &= attribute svg:width { length }?
3422 chart-wall-attlist &= attribute chart:style-name { styleNameRef }?
3423 chart-floor = element chart:floor { chart-floor-attlist, empty }
3424 chart-floor-attlist &= attribute svg:width { length }?
3425 chart-floor-attlist &= attribute chart:style-name { styleNameRef }?
3426 chart-axis =
3427   element chart:axis {
3428     chart-axis-attlist, chart-title?, chart-categories?, chart-grid*
3429   }
3430 chart-axis-attlist &= attribute chart:dimension { "x" | "y" | "z" }
3431 chart-axis-attlist &= attribute chart:name { \string }?
3432 chart-axis-attlist &= attribute chart:style-name { styleNameRef }?
3433 chart-grid = element chart:grid { chart-grid-attlist }
3434 chart-grid-attlist &=
3435   [ a:defaultValue = "major" ]
3436   attribute chart:class { "major" | "minor" }?
3437 chart-grid-attlist &= attribute chart:style-name { styleNameRef }?
3438 chart-series =
3439   element chart:series {
3440     chart-series-attlist,
3441     chart-domain*,
3442     chart-mean-value?,
3443     chart-regression-curve?,
3444     chart-error-indicator?,
3445     chart-data-point*
3446   }
3447 chart-series-attlist &=
3448   attribute chart:values-cell-range-address { cellRangeAddress }?
3449 chart-series-attlist &=
3450   attribute chart:label-cell-address { cellAddress }?
3451 chart-series-attlist &= attribute chart:class { namespacedToken }?
3452 chart-series-attlist &= attribute chart:attached-axis { \string }?
3453 chart-series-attlist &= attribute chart:style-name { styleNameRef }?
3454 chart-domain =
3455   element chart:domain {
3456     attribute table:cell-range-address { cellRangeAddress }?
3457   }
3458 chart-categories =
3459   element chart:categories {
3460     attribute table:cell-range-address { cellRangeAddress }?
3461   }
3462 chart-data-point =
3463   element chart:data-point { chart-data-point-attlist, empty }
3464 chart-data-point-attlist &=
3465   attribute chart:repeated { nonNegativeInteger }?
3466 chart-data-point-attlist &= attribute chart:style-name { styleNameRef }?
3467 chart-mean-value =
3468   element chart:mean-value { chart-mean-value-attlist, empty }
3469 chart-mean-value-attlist &= attribute chart:style-name { styleNameRef }?
3470 chart-error-indicator =
3471   element chart:error-indicator { chart-error-indicator-attlist, empty }
3472 chart-error-indicator-attlist &=
3473   attribute chart:style-name { styleNameRef }?
3474 chart-regression-curve =
3475   element chart:regression-curve {
3476     chart-regression-curve-attlist, empty
3477   }
3478 chart-regression-curve-attlist &=
3479   attribute chart:style-name { styleNameRef }?
3480 chart-stock-gain-marker =
3481   element chart:stock-gain-marker { common-stock-marker-attlist }
3482 chart-stock-loss-marker =
3483   element chart:stock-loss-marker { common-stock-marker-attlist }
3484 chart-stock-range-line =
3485   element chart:stock-range-line { common-stock-marker-attlist }
3486 common-stock-marker-attlist =
3487   attribute chart:style-name { styleNameRef }?
3488 office-forms =
3489   element office:forms {
3490     office-forms-attlist, (form-form | xforms-model)*
3491   }?
3492 office-forms-attlist &=
3493   [ a:defaultValue = "false" ]
3494   attribute form:automatic-focus { boolean }?
3495 office-forms-attlist &=
3496   [ a:defaultValue = "true" ]
3497   attribute form:apply-design-mode { boolean }?
3498 form-form =
3499   element form:form {
3500     common-form-control-attlist,
3501     form-form-attlist,
3502     form-properties?,
3503     office-event-listeners?,
3504     (controls | form-form)*,
3505     form-connection-resource?
3506   }
3507 form-form-attlist &=
3508   (attribute xlink:href { anyURI },
3509    [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
3510    [ a:defaultValue = "onRequest" ]
3511    attribute xlink:actuate { "onRequest" }?)?
3512 form-form-attlist &=
3513   [ a:defaultValue = "_blank" ]
3514   attribute office:target-frame { targetFrameName }?
3515 form-form-attlist &=
3516   [ a:defaultValue = "get" ]
3517   attribute form:method { "get" | "post" | \string }?
3518 form-form-attlist &=
3519   [ a:defaultValue = "application/x-www-form-urlencoded" ]
3520   attribute form:enctype { \string }?
3521 form-form-attlist &=
3522   [ a:defaultValue = "true" ] attribute form:allow-deletes { boolean }?
3523 form-form-attlist &=
3524   [ a:defaultValue = "true" ] attribute form:allow-inserts { boolean }?
3525 form-form-attlist &=
3526   [ a:defaultValue = "true" ] attribute form:allow-updates { boolean }?
3527 form-form-attlist &=
3528   [ a:defaultValue = "false" ] attribute form:apply-filter { boolean }?
3529 form-form-attlist &=
3530   [ a:defaultValue = "command" ]
3531   attribute form:command-type { "table" | "query" | "command" }?
3532 form-form-attlist &= attribute form:command { text }?
3533 form-form-attlist &= attribute form:datasource { anyURI | \string }?
3534 form-form-attlist &= attribute form:master-fields { \string }?
3535 form-form-attlist &= attribute form:detail-fields { \string }?
3536 form-form-attlist &=
3537   [ a:defaultValue = "true" ]
3538   attribute form:escape-processing { boolean }?
3539 form-form-attlist &= attribute form:filter { \string }?
3540 form-form-attlist &=
3541   [ a:defaultValue = "false" ] attribute form:ignore-result { boolean }?
3542 form-form-attlist &= attribute form:navigation-mode { navigation }?
3543 navigation = "none" | "current" | "parent"
3544 form-form-attlist &= attribute form:order { \string }?
3545 form-form-attlist &= attribute form:tab-cycle { tab-cycles }?
3546 tab-cycles = "records" | "current" | "page"
3547 form-connection-resource =
3548   element form:connection-resource {
3549     attribute xlink:href { anyURI },
3550     empty
3551   }
3552 xforms-model = element xforms:model { anyAttListOrElements }
3553 column-controls |=
3554   element form:text { form-text-attlist, common-form-control-content }
3555 controls |= column-controls
3556 form-text-attlist =
3557   form-control-attlist,
3558   common-current-value-attlist,
3559   common-disabled-attlist,
3560   common-maxlength-attlist,
3561   common-printable-attlist,
3562   common-readonly-attlist,
3563   common-tab-attlist,
3564   common-title-attlist,
3565   common-value-attlist,
3566   common-convert-empty-attlist,
3567   common-data-field-attlist
3568 form-control-attlist =
3569   common-form-control-attlist,
3570   common-control-id-attlist,
3571   xforms-bind-attlist
3572 common-form-control-content = form-properties?, office-event-listeners?
3573 column-controls |=
3574   element form:textarea {
3575     form-textarea-attlist, common-form-control-content, text-p*
3576   }
3577 form-textarea-attlist =
3578   form-control-attlist,
3579   common-current-value-attlist,
3580   common-disabled-attlist,
3581   common-maxlength-attlist,
3582   common-printable-attlist,
3583   common-readonly-attlist,
3584   common-tab-attlist,
3585   common-title-attlist,
3586   common-value-attlist,
3587   common-convert-empty-attlist,
3588   common-data-field-attlist
3589 controls |=
3590   element form:password {
3591     form-password-attlist, common-form-control-content
3592   }
3593 form-password-attlist &=
3594   form-control-attlist,
3595   common-disabled-attlist,
3596   common-maxlength-attlist,
3597   common-printable-attlist,
3598   common-tab-attlist,
3599   common-title-attlist,
3600   common-value-attlist,
3601   common-convert-empty-attlist
3602 form-password-attlist &=
3603   [ a:defaultValue = "*" ] attribute form:echo-char { character }?
3604 controls |=
3605   element form:file { form-file-attlist, common-form-control-content }
3606 form-file-attlist &=
3607   form-control-attlist,
3608   common-current-value-attlist,
3609   common-disabled-attlist,
3610   common-maxlength-attlist,
3611   common-printable-attlist,
3612   common-readonly-attlist,
3613   common-tab-attlist,
3614   common-title-attlist,
3615   common-value-attlist
3616 column-controls |=
3617   element form:formatted-text {
3618     form-formatted-text-attlist, common-form-control-content
3619   }
3620 form-formatted-text-attlist &=
3621   form-control-attlist,
3622   common-current-value-attlist,
3623   common-disabled-attlist,
3624   common-maxlength-attlist,
3625   common-printable-attlist,
3626   common-readonly-attlist,
3627   common-tab-attlist,
3628   common-title-attlist,
3629   common-value-attlist,
3630   common-convert-empty-attlist,
3631   common-data-field-attlist
3632 form-formatted-text-attlist &= attribute form:max-value { \string }?
3633 form-formatted-text-attlist &= attribute form:min-value { \string }?
3634 form-formatted-text-attlist &=
3635   [ a:defaultValue = "false" ] attribute form:validation { boolean }?
3636 column-controls |=
3637   element form:number {
3638     form-number-attlist,
3639     common-numeric-control-attlist,
3640     common-form-control-content
3641   }
3642 common-numeric-control-attlist =
3643   form-control-attlist,
3644   common-disabled-attlist,
3645   common-maxlength-attlist,
3646   common-printable-attlist,
3647   common-readonly-attlist,
3648   common-tab-attlist,
3649   common-title-attlist,
3650   common-convert-empty-attlist,
3651   common-data-field-attlist
3652 form-number-attlist &= attribute form:value { double }?
3653 form-number-attlist &= attribute form:current-value { double }?
3654 form-number-attlist &= attribute form:min-value { double }?
3655 form-number-attlist &= attribute form:max-value { double }?
3656 column-controls |=
3657   element form:date {
3658     form-date-attlist,
3659     common-numeric-control-attlist,
3660     common-form-control-content
3661   }
3662 controls |=
3663   element form:time {
3664     form-time-attlist,
3665     common-numeric-control-attlist,
3666     common-form-control-content
3667   }
3668 form-date-attlist &= attribute form:value { date }?
3669 form-time-attlist &= attribute form:value { time }?
3670 form-date-attlist &= attribute form:current-value { date }?
3671 form-time-attlist &= attribute form:current-value { time }?
3672 form-date-attlist &= attribute form:min-value { date }?
3673 form-time-attlist &= attribute form:min-value { time }?
3674 form-date-attlist &= attribute form:max-value { date }?
3675 form-time-attlist &= attribute form:max-value { time }?
3676 controls |=
3677   element form:fixed-text {
3678     form-fixed-text-attlist, common-form-control-content
3679   }
3680 form-fixed-text-attlist &=
3681   form-control-attlist,
3682   for,
3683   common-disabled-attlist,
3684   label,
3685   common-printable-attlist,
3686   common-title-attlist
3687 form-fixed-text-attlist &=
3688   [ a:defaultValue = "false" ] attribute form:multi-line { boolean }?
3689 column-controls |=
3690   element form:combobox {
3691     form-combobox-attlist, common-form-control-content, form-item*
3692   }
3693 form-combobox-attlist &=
3694   form-control-attlist,
3695   common-current-value-attlist,
3696   common-disabled-attlist,
3697   dropdown,
3698   common-maxlength-attlist,
3699   common-printable-attlist,
3700   common-readonly-attlist,
3701   size,
3702   common-tab-attlist,
3703   common-title-attlist,
3704   common-value-attlist,
3705   common-convert-empty-attlist,
3706   common-data-field-attlist,
3707   list-source,
3708   list-source-type
3709 form-combobox-attlist &= attribute form:auto-complete { boolean }?
3710 form-item = element form:item { form-item-attlist, text }
3711 form-item-attlist &= label
3712 column-controls |=
3713   element form:listbox {
3714     form-listbox-attlist, common-form-control-content, form-option*
3715   }
3716 form-listbox-attlist &=
3717   form-control-attlist,
3718   common-disabled-attlist,
3719   dropdown,
3720   common-printable-attlist,
3721   size,
3722   common-tab-attlist,
3723   common-title-attlist,
3724   bound-column,
3725   common-data-field-attlist,
3726   list-source,
3727   list-source-type
3728 form-listbox-attlist &=
3729   [ a:defaultValue = "false" ] attribute form:multiple { boolean }?
3730 form-listbox-attlist &= attribute form:xforms-list-source { \string }?
3731 form-option = element form:option { form-option-attlist, text }
3732 form-option-attlist &=
3733   current-selected, selected, label, common-value-attlist
3734 controls |=
3735   element form:button {
3736     form-button-attlist, common-form-control-content
3737   }
3738 form-button-attlist &=
3739   form-control-attlist,
3740   button-type,
3741   common-disabled-attlist,
3742   label,
3743   image-data,
3744   common-printable-attlist,
3745   common-tab-attlist,
3746   target-frame,
3747   target-location,
3748   common-title-attlist,
3749   common-value-attlist,
3750   common-form-relative-image-position-attlist
3751 form-button-attlist &=
3752   [ a:defaultValue = "false" ]
3753   attribute form:default-button { boolean }?
3754 form-button-attlist &=
3755   [ a:default-value = "false" ] attribute form:toggle { boolean }?
3756 form-button-attlist &= attribute form:focus-on-click { boolean }?
3757 form-button-attlist &= attribute form:xforms-submission { \string }?
3758 controls |=
3759   element form:image { form-image-attlist, common-form-control-content }
3760 form-image-attlist &=
3761   form-control-attlist,
3762   button-type,
3763   common-disabled-attlist,
3764   image-data,
3765   common-printable-attlist,
3766   common-tab-attlist,
3767   target-frame,
3768   target-location,
3769   common-title-attlist,
3770   common-value-attlist
3771 column-controls |=
3772   element form:checkbox {
3773     form-checkbox-attlist, common-form-control-content
3774   }
3775 form-checkbox-attlist &=
3776   form-control-attlist,
3777   common-disabled-attlist,
3778   label,
3779   common-printable-attlist,
3780   common-tab-attlist,
3781   common-title-attlist,
3782   common-value-attlist,
3783   common-data-field-attlist,
3784   common-form-visual-effect-attlist,
3785   common-form-relative-image-position-attlist
3786 states = "unchecked" | "checked" | "unknown"
3787 form-checkbox-attlist &= attribute form:current-state { states }?
3788 form-checkbox-attlist &=
3789   [ a:defaultValue = "false" ] attribute form:is-tristate { boolean }?
3790 form-checkbox-attlist &=
3791   [ a:defaultValue = "unchecked" ] attribute form:state { states }?
3792 controls |=
3793   element form:radio { form-radio-attlist, common-form-control-content }
3794 form-radio-attlist &=
3795   form-control-attlist,
3796   current-selected,
3797   common-disabled-attlist,
3798   label,
3799   common-printable-attlist,
3800   selected,
3801   common-tab-attlist,
3802   common-title-attlist,
3803   common-value-attlist,
3804   common-data-field-attlist,
3805   common-form-visual-effect-attlist,
3806   common-form-relative-image-position-attlist
3807 controls |=
3808   element form:frame { form-frame-attlist, common-form-control-content }
3809 form-frame-attlist &=
3810   form-control-attlist,
3811   common-disabled-attlist,
3812   for,
3813   label,
3814   common-printable-attlist,
3815   common-title-attlist
3816 controls |=
3817   element form:image-frame {
3818     form-image-frame-attlist, common-form-control-content
3819   }
3820 form-image-frame-attlist &=
3821   form-control-attlist,
3822   common-disabled-attlist,
3823   image-data,
3824   common-printable-attlist,
3825   common-readonly-attlist,
3826   common-title-attlist,
3827   common-data-field-attlist
3828 controls |=
3829   element form:hidden {
3830     form-hidden-attlist, common-form-control-content
3831   }
3832 form-hidden-attlist &= form-control-attlist, common-value-attlist
3833 controls |=
3834   element form:grid {
3835     form-grid-attlist, common-form-control-content, form-column*
3836   }
3837 form-grid-attlist &=
3838   form-control-attlist,
3839   common-disabled-attlist,
3840   common-printable-attlist,
3841   common-tab-attlist,
3842   common-title-attlist
3843 form-column =
3844   element form:column { form-column-attlist, column-controls+ }
3845 form-column-attlist &=
3846   common-form-control-attlist, label, text-style-name
3847 text-style-name = attribute form:text-style-name { styleNameRef }?
3848 controls |=
3849   element form:value-range {
3850     form-value-range-attlist, common-form-control-content
3851   }
3852 form-value-range-attlist &=
3853   form-control-attlist,
3854   common-disabled-attlist,
3855   common-printable-attlist,
3856   common-tab-attlist,
3857   common-title-attlist,
3858   common-value-attlist
3859 form-value-range-attlist &= attribute form:max-value { \string }?
3860 form-value-range-attlist &= attribute form:min-value { \string }?
3861 form-value-range-attlist &=
3862   [ a:defaultName = "1" ] attribute form:step-size { positiveInteger }?
3863 form-value-range-attlist &=
3864   attribute form:page-step-size { positiveInteger }?
3865 form-value-range-attlist &=
3866   attribute form:delay-for-repeat { duration }?
3867 form-value-range-attlist &=
3868   attribute form:orientation { "horizontal" | "vertical" }?
3869 controls |=
3870   element form:generic-control {
3871     form-generic-control-attlist, common-form-control-content
3872   }
3873 form-generic-control-attlist &= form-control-attlist
3874 common-form-control-attlist &= attribute form:name { \string }?
3875 common-form-control-attlist &=
3876   attribute form:control-implementation { namespacedToken }?
3877 xforms-bind-attlist = attribute xforms:bind { \string }?
3878 types = "submit" | "reset" | "push" | "url"
3879 button-type =
3880   [ a:defaultValue = "push" ] attribute form:button-type { types }?
3881 common-control-id-attlist = attribute form:id { ID }
3882 current-selected =
3883   [ a:defaultValue = "false" ]
3884   attribute form:current-selected { boolean }?
3885 common-value-attlist = attribute form:value { \string }?
3886 common-current-value-attlist = attribute form:current-value { \string }?
3887 common-disabled-attlist =
3888   [ a:defaultValue = "false" ] attribute form:disabled { boolean }?
3889 dropdown =
3890   [ a:defaultValue = "false" ] attribute form:dropdown { boolean }?
3891 for = attribute form:for { \string }?
3892 image-data = attribute form:image-data { anyURI }?
3893 label = attribute form:label { \string }?
3894 common-maxlength-attlist =
3895   attribute form:max-length { nonNegativeInteger }?
3896 common-printable-attlist =
3897   [ a:defaultValue = "true" ] attribute form:printable { boolean }?
3898 common-readonly-attlist =
3899   [ a:defaultValue = "false" ] attribute form:readonly { boolean }?
3900 selected =
3901   [ a:defaultValue = "false" ] attribute form:selected { boolean }?
3902 size = attribute form:size { nonNegativeInteger }?
3903 common-tab-attlist &=
3904   [ a:defaultValue = "0" ]
3905   attribute form:tab-index { nonNegativeInteger }?
3906 common-tab-attlist &=
3907   [ a:defaultValue = "true" ] attribute form:tab-stop { boolean }?
3908 target-frame =
3909   [ a:defaultValue = "_blank" ]
3910   attribute office:target-frame { targetFrameName }?
3911 target-location = attribute xlink:href { anyURI }?
3912 common-title-attlist = attribute form:title { text }?
3913 common-form-visual-effect-attlist &=
3914   attribute form:visual-effect { "flat" | "3d" }?
3915 common-form-relative-image-position-attlist &=
3916   [ a:defaultValue = "center" ]
3917   attribute form:image-position { "center" }?
3918   | (attribute form:image-position {
3919        "start" | "end" | "top" | "bottom"
3920      },
3921      [ a:defaultValue = "center" ]
3922      attribute form:image-align { "start" | "center" | "end" }?)
3923 bound-column = attribute form:bound-column { \string }?
3924 common-convert-empty-attlist =
3925   [ a:defaultValue = "false" ]
3926   attribute form:convert-empty-to-null { boolean }?
3927 common-data-field-attlist = attribute form:data-field { \string }?
3928 list-source = attribute form:list-source { \string }?
3929 list-source-type =
3930   attribute form:list-source-type {
3931     "table"
3932     | "query"
3933     | "sql"
3934     | "sql-pass-through"
3935     | "value-list"
3936     | "table-fields"
3937   }?
3938 form-properties = element form:properties { form-property+ }
3939 form-property |=
3940   element form:property {
3941     form-property-name, form-property-value-and-type-attlist
3942   }
3943 form-property-name &= attribute form:property-name { \string }
3944 form-property-value-and-type-attlist &=
3945   common-value-and-type-attlist
3946   | attribute office:value-type { "void" }
3947 form-property |=
3948   element form:list-property {
3949     form-property-name, form-property-type-and-value-list
3950   }
3951 form-property-type-and-value-list =
3952   (attribute office:value-type { "float" },
3953    element form:list-value {
3954      attribute office:value { double }
3955    }*)
3956   | (attribute office:value-type { "percentage" },
3957      element form:list-value {
3958        attribute office:value { double }
3959      }*)
3960   | (attribute office:value-type { "currency" },
3961      element form:list-value {
3962        attribute office:value { double },
3963        attribute office:currency { \string }?
3964      }*)
3965   | (attribute office:value-type { "date" },
3966      element form:list-value {
3967        attribute office:date-value { dateOrDateTime }
3968      }*)
3969   | (attribute office:value-type { "time" },
3970      element form:list-value {
3971        attribute office:time-value { duration }
3972      }*)
3973   | (attribute office:value-type { "boolean" },
3974      element form:list-value {
3975        attribute office:boolean-value { boolean }
3976      }*)
3977   | (attribute office:value-type { "string" },
3978      element form:list-value {
3979        attribute office:string-value { \string }
3980      }*)
3981   | attribute office:value-type { "void" }
3982 office-annotation =
3983   element office:annotation {
3984     office-annotation-attlist,
3985     draw-caption-attlist,
3986     common-draw-position-attlist,
3987     common-draw-size-attlist,
3988     common-draw-shape-with-text-and-styles-attlist,
3989     dc-creator?,
3990     dc-date?,
3991     meta-date-string?,
3992     (text-p | text-list)*
3993   }
3994 office-annotation-attlist &= attribute office:display { boolean }?
3995 meta-date-string = element meta:date-string { \string }
3996 common-num-format-prefix-suffix-attlist &=
3997   attribute style:num-prefix { \string }?,
3998   attribute style:num-suffix { \string }?
3999 common-num-format-attlist &=
4000   attribute style:num-format { "1" | "i" | "I" | \string | empty }
4001   | (attribute style:num-format { "a" | "A" },
4002      style-num-letter-sync-attlist)
4003   | empty
4004 style-num-letter-sync-attlist &=
4005   attribute style:num-letter-sync { boolean }?
4006 office-change-info =
4007   element office:change-info { dc-creator, dc-date, text-p* }
4008 office-event-listeners =
4009   element office:event-listeners {
4010     (script-event-listener | presentation-event-listener)*
4011   }
4012 script-event-listener &=
4013   element script:event-listener { script-event-listener-attlist, empty }
4014 script-event-listener-attlist &= attribute script:event-name { \string }
4015 script-event-listener-attlist &= attribute script:language { \string }
4016 script-event-listener-attlist &=
4017   attribute script:macro-name { \string }
4018   | (attribute xlink:href { anyURI },
4019      [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
4020      [ a:defaultValue = "onRequest" ]
4021      attribute xlink:actuate { "onRequest" }?)
4022 math-math = element math:math { mathMarkup }
4023 # To avoid inclusion of the complete MathML schema, anything
4025 # is allowed within a math:math top-level element
4026 mathMarkup =
4027   (attribute * { text }
4028    | text
4029    | element * { mathMarkup })*
4030 text-dde-connection-decl =
4031   element text:dde-connection-decl {
4032     text-dde-connection-decl-attlist, common-dde-connection-decl-attlist
4033   }
4034 text-dde-connection-decl-attlist &= attribute office:name { \string }
4035 common-dde-connection-decl-attlist &=
4036   attribute office:dde-application { \string }
4037 common-dde-connection-decl-attlist &=
4038   attribute office:dde-topic { \string }
4039 common-dde-connection-decl-attlist &=
4040   attribute office:dde-item { \string }
4041 common-dde-connection-decl-attlist &=
4042   [ a:defaultValue = "true" ]
4043   attribute office:automatic-update { boolean }?
4044 table-dde-link =
4045   element table:dde-link { office-dde-source, table-table }
4046 office-dde-source =
4047   element office:dde-source {
4048     office-dde-source-attlist, common-dde-connection-decl-attlist
4049   }
4050 office-dde-source-attlist &= attribute office:name { \string }?
4051 office-dde-source-attlist &=
4052   [ a:defaultValue = "into-default-style-data-style" ]
4053   attribute office:conversion-mode {
4054     "into-default-style-data-style"
4055     | "into-english-number"
4056     | "keep-text"
4057   }?
4058 animation-element |=
4059   element anim:animate {
4060     common-anim-target-attlist,
4061     common-anim-named-target-attlist,
4062     common-anim-values-attlist,
4063     common-anim-spline-mode-attlist,
4064     common-spline-anim-value-attlist,
4065     common-timing-attlist,
4066     common-anim-add-accum-attlist
4067   }
4068 animation-element |=
4069   element anim:set {
4070     common-anim-target-attlist,
4071     common-anim-named-target-attlist,
4072     common-anim-set-values-attlist,
4073     common-timing-attlist,
4074     common-anim-add-accum-attlist
4075   }
4076 animation-element |=
4077   element anim:animateMotion {
4078     anim-animate-motion-attlist,
4079     common-anim-target-attlist,
4080     common-anim-named-target-attlist,
4081     common-anim-add-accum-attlist,
4082     common-anim-values-attlist,
4083     common-timing-attlist,
4084     common-spline-anim-value-attlist
4085   }
4086 anim-animate-motion-attlist &= attribute svg:path { pathData }?
4087 anim-animate-motion-attlist &= attribute svg:origin { \string }?
4088 anim-animate-motion-attlist &=
4089   [ a:defaultValue = "paced" ]
4090   attribute smil:calcMode {
4091     "discrete" | "linear" | "paced" | "spline"
4092   }?
4093 animation-element |=
4094   element anim:animateColor {
4095     common-anim-target-attlist,
4096     common-anim-named-target-attlist,
4097     common-anim-add-accum-attlist,
4098     common-anim-values-attlist,
4099     common-anim-spline-mode-attlist,
4100     common-spline-anim-value-attlist,
4101     anim-animate-color-attlist,
4102     common-timing-attlist
4103   }
4104 anim-animate-color-attlist &=
4105   [ a:defaultValue = "rgb" ]
4106   attribute anim:color-interpolation { "rgb" | "hsl" }?
4107 anim-animate-color-attlist &=
4108   [ a:defaultValue = "clockwise" ]
4109   attribute anim:color-interpolation-direction {
4110     "clockwise" | "counter-clockwise"
4111   }?
4112 animation-element |=
4113   element anim:animateTransform {
4114     common-anim-target-attlist,
4115     common-anim-named-target-attlist,
4116     common-anim-add-accum-attlist,
4117     common-anim-values-attlist,
4118     anim-animate-transform-attlist,
4119     common-timing-attlist
4120   }
4121 anim-animate-transform-attlist &=
4122   attribute svg:type {
4123     "translate" | "scale" | "rotate" | "skewX" | "skewY"
4124   }
4125 animation-element |=
4126   element anim:transitionFilter {
4127     common-anim-target-attlist,
4128     common-anim-add-accum-attlist,
4129     common-anim-values-attlist,
4130     common-anim-spline-mode-attlist,
4131     anim-transition-filter-attlist,
4132     common-timing-attlist
4133   }
4134 anim-transition-filter-attlist &= attribute smil:type { \string }
4135 anim-transition-filter-attlist &= attribute smil:subtype { \string }?
4136 anim-transition-filter-attlist &=
4137   [ a:defaultValue = "forward" ]
4138   attribute smil:direction { "forward" | "reverse" }?
4139 anim-transition-filter-attlist &=
4140   attribute smil:fadeColor { "forward" | "reverse" }?
4141 anim-transition-filter-attlist &=
4142   [ a:defaultValue = "in" ] attribute smil:mode { "in" | "out" }?
4143 common-anim-attlist &= attribute anim:id { ID }?
4144 common-anim-target-attlist &= attribute smil:targetElement { IDREF }?
4145 common-anim-named-target-attlist &=
4146   attribute smil:attributeName { \string }
4147 common-anim-target-attlist &= attribute anim:sub-item { \string }?
4148 common-anim-values-attlist &= attribute smil:values { \string }?
4149 common-anim-spline-mode-attlist &=
4150   [ a:defaultValue = "discrete" ]
4151   attribute smil:calcMode {
4152     "discrete" | "linear" | "paced" | "spline"
4153   }?
4154 common-spline-anim-value-attlist &= attribute smil:keyTimes { \string }?
4155 common-spline-anim-value-attlist &=
4156   attribute smil:keySplines { \string }?
4157 common-anim-add-accum-attlist &=
4158   attribute smil:accumulate { "none" | "sum" }?
4159 common-anim-add-accum-attlist &=
4160   attribute smil:additive { "replace" | "sum" }?
4161 common-anim-values-attlist &= attribute anim:formula { \string }?
4162 common-anim-set-values-attlist &= attribute smil:to { \string }?
4163 common-anim-values-attlist &=
4164   common-anim-set-values-attlist,
4165   attribute smil:from { \string }?,
4166   attribute smil:by { \string }?
4167 common-begin-end-timing-attlist &= attribute smil:begin { \string }?
4168 common-begin-end-timing-attlist &= attribute smil:end { \string }?
4169 common-dur-timing-attlist &= attribute smil:dur { \string }?
4170 common-endsync-timing-attlist &=
4171   attribute smil:endsync { "first" | "last" | "all" | "media" }?
4172 common-repeat-timing-attlist &=
4173   attribute smil:repeatDur { \string }?,
4174   attribute smil:repeatCount { nonNegativeInteger | "indefinite" }?
4175 common-fill-timing-attlist &=
4176   attribute smil:fill {
4177     "remove" | "freeze" | "hold" | "auto" | "default" | "transition"
4178   }?
4179 common-fill-default-attlist &=
4180   attribute smil:fillDefault {
4181     "remove" | "freeze" | "hold" | "transition" | "auto" | "inherit"
4182   }?
4183 common-restart-timing-attlist &=
4184   [ a:defaultValue = "default" ]
4185   attribute smil:restart {
4186     "never" | "always" | "whenNotActive" | "default"
4187   }?
4188 common-restart-default-attlist &=
4189   [ a:defaultValue = "inherit" ]
4190   attribute smil:restartDefault {
4191     "never" | "always" | "whenNotActive" | "inherit"
4192   }?
4193 common-time-manip-attlist &=
4194   [ a:defaultValue = "0.0" ] attribute smil:accelerate { double }?
4195 common-time-manip-attlist &=
4196   [ a:defaultValue = "0.0" ] attribute smil:decelerate { double }?
4197 common-time-manip-attlist &=
4198   [ a:defaultValue = "false" ] attribute smil:autoReverse { boolean }?
4199 animation-element |=
4200   element anim:par {
4201     common-anim-attlist,
4202     common-timing-attlist,
4203     common-endsync-timing-attlist,
4204     animation-element*
4205   }
4206 common-basic-timing-attlist &=
4207   common-begin-end-timing-attlist,
4208   common-dur-timing-attlist,
4209   common-repeat-timing-attlist
4210 common-timing-attlist &=
4211   common-basic-timing-attlist,
4212   common-restart-timing-attlist,
4213   common-restart-default-attlist,
4214   common-fill-timing-attlist,
4215   common-fill-default-attlist,
4216   common-time-manip-attlist
4217 animation-element |=
4218   element anim:seq {
4219     common-anim-attlist,
4220     common-endsync-timing-attlist,
4221     common-timing-attlist,
4222     animation-element*
4223   }
4224 animation-element |=
4225   element anim:iterate {
4226     common-anim-attlist,
4227     anim-iterate-attlist,
4228     common-timing-attlist,
4229     common-endsync-timing-attlist,
4230     animation-element*
4231   }
4232 anim-iterate-attlist &= common-anim-target-attlist
4233 anim-iterate-attlist &= attribute anim:iterate-type { \string }?
4234 anim-iterate-attlist &= attribute anim:iterate-interval { duration }?
4235 animation-element |=
4236   element anim:audio {
4237     common-anim-attlist, anim-audio-attlist, common-basic-timing-attlist
4238   }
4239 anim-audio-attlist &= attribute xlink:href { anyURI }?
4240 anim-audio-attlist &= attribute anim:audio-level { double }?
4241 animation-element |=
4242   element anim:command {
4243     common-anim-attlist,
4244     anim-command-attlist,
4245     common-begin-end-timing-attlist,
4246     common-anim-target-attlist,
4247     element anim:param {
4248       attribute anim:name { text },
4249       attribute anim:value { text }
4250     }*
4251   }
4252 anim-command-attlist &= attribute anim:command { \string }
4253 style-style =
4254   element style:style {
4255     style-style-attlist, style-style-content, style-map*
4256   }
4257 style-style-attlist &= attribute style:name { styleName }
4258 style-style-attlist &= attribute style:display-name { \string }?
4259 style-style-attlist &=
4260   attribute style:parent-style-name { styleNameRef }?
4261 style-style-attlist &= attribute style:next-style-name { styleNameRef }?
4262 style-style-attlist &=
4263   attribute style:list-style-name { styleName | empty }?
4264 style-style-attlist &=
4265   attribute style:master-page-name { styleNameRef }?
4266 style-style-attlist &=
4267   [ a:defaultValue = "false" ] attribute style:auto-update { boolean }?
4268 style-style-attlist &= attribute style:data-style-name { styleNameRef }?
4269 style-style-attlist &= attribute style:class { \string }?
4270 style-style-attlist &=
4271   attribute style:default-outline-level { positiveInteger }?
4272 style-map = element style:map { style-map-attlist, empty }
4273 style-map-attlist &= attribute style:condition { \string }
4274 style-map-attlist &= attribute style:apply-style-name { styleNameRef }
4275 style-map-attlist &= attribute style:base-cell-address { cellAddress }?
4276 style-default-style =
4277   element style:default-style { style-style-content }
4278 style-page-layout =
4279   element style:page-layout {
4280     style-page-layout-attlist,
4281     style-page-layout-properties?,
4282     style-header-style?,
4283     style-footer-style?
4284   }
4285 style-page-layout-attlist &= attribute style:name { styleName }
4286 style-page-layout-attlist &=
4287   [ a:defaultValue = "all" ]
4288   attribute style:page-usage { "all" | "left" | "right" | "mirrored" }?
4289 style-header-style =
4290   element style:header-style { style-header-footer-properties? }
4291 style-footer-style =
4292   element style:footer-style { style-header-footer-properties? }
4293 style-master-page =
4294   element style:master-page {
4295     style-master-page-attlist,
4296     (style-header, style-header-left?)?,
4297     (style-footer, style-footer-left?)?,
4298     office-forms?,
4299     style-style*,
4300     shape*,
4301     presentation-notes?
4302   }
4303 style-master-page-attlist &= attribute style:name { styleName }
4304 style-master-page-attlist &= attribute style:display-name { \string }?
4305 style-master-page-attlist &=
4306   attribute style:page-layout-name { styleNameRef }
4307 style-master-page-attlist &= attribute draw:style-name { styleNameRef }?
4308 style-master-page-attlist &=
4309   attribute style:next-style-name { styleNameRef }?
4310 style-header =
4311   element style:header {
4312     common-style-header-footer-attlist, header-footer-content
4313   }
4314 style-footer =
4315   element style:footer {
4316     common-style-header-footer-attlist, header-footer-content
4317   }
4318 style-header-left =
4319   element style:header-left {
4320     common-style-header-footer-attlist, header-footer-content
4321   }
4322 style-footer-left =
4323   element style:footer-left {
4324     common-style-header-footer-attlist, header-footer-content
4325   }
4326 header-footer-content =
4327   (text-tracked-changes,
4328    text-decls,
4329    (text-h
4330     | text-p
4331     | text-list
4332     | table-table
4333     | text-section
4334     | text-table-of-content
4335     | text-illustration-index
4336     | text-table-index
4337     | text-object-index
4338     | text-user-index
4339     | text-alphabetical-index
4340     | text-bibliography
4341     | text-index-title
4342     | change-marks)*)
4343   | (style-region-left?, style-region-center?, style-region-right?)
4344 common-style-header-footer-attlist &=
4345   [ a:defaultValue = "true" ] attribute style:display { boolean }?
4346 style-region-left = element style:region-left { region-content }
4347 style-region-center = element style:region-center { region-content }
4348 style-region-right = element style:region-right { region-content }
4349 region-content = text-p*
4350 presentation-notes =
4351   element presentation:notes {
4352     common-presentation-header-footer-attlist,
4353     presentation-notes-attlist,
4354     office-forms,
4355     shape*
4356   }
4357 presentation-notes-attlist &=
4358   attribute style:page-layout-name { styleNameRef }?
4359 presentation-notes-attlist &=
4360   attribute draw:style-name { styleNameRef }?
4361 table-table-template =
4362   element table:table-template {
4363     table-table-template-attlist,
4364     table-first-row?,
4365     table-last-row?,
4366     table-first-column?,
4367     table-last-column?,
4368     (table-body
4369      | (table-even-rows, table-odd-rows)
4370      | (table-even-columns, table-odd-columns))
4371   }
4372 table-table-template-attlist &= attribute text:name { \string }
4373 table-table-template-attlist &=
4374   attribute text:first-row-start-column { rowOrCol }
4375 table-table-template-attlist &=
4376   attribute text:first-row-end-column { rowOrCol }
4377 table-table-template-attlist &=
4378   attribute text:last-row-start-column { rowOrCol }
4379 table-table-template-attlist &=
4380   attribute text:last-row-end-column { rowOrCol }
4381 rowOrCol = "row" | "column"
4382 table-first-row =
4383   element table:first-row { common-table-template-attlist, empty }
4384 table-last-row =
4385   element table:last-row { common-table-template-attlist, empty }
4386 table-first-column =
4387   element table:first-column { common-table-template-attlist, empty }
4388 table-last-column =
4389   element table:last-column { common-table-template-attlist, empty }
4390 table-body = element table:body { common-table-template-attlist, empty }
4391 table-even-rows =
4392   element table:even-rows { common-table-template-attlist, empty }
4393 table-odd-rows =
4394   element table:odd-rows { common-table-template-attlist, empty }
4395 table-even-columns =
4396   element table:even-columns { common-table-template-attlist, empty }
4397 table-odd-columns =
4398   element table:odd-columns { common-table-template-attlist, empty }
4399 common-table-template-attlist &=
4400   attribute text:style-name { styleNameRef },
4401   attribute text:paragraph-style-name { styleNameRef? }
4402 style-font-face =
4403   element style:font-face {
4404     style-font-face-attlist, svg-font-face-src?, svg-definition-src?
4405   }
4406 style-font-face-attlist &=
4407   attribute svg:font-family { \string }?,
4408   attribute svg:font-style { fontStyle }?,
4409   attribute svg:font-variant { fontVariant }?,
4410   attribute svg:font-weight { fontWeight }?,
4411   attribute svg:font-stretch {
4412     "normal"
4413     | "ultra-condensed"
4414     | "extra-condensed"
4415     | "condensed"
4416     | "semi-condensed"
4417     | "semi-expanded"
4418     | "expanded"
4419     | "extra-expanded"
4420     | "ultra-expanded"
4421   }?,
4422   attribute svg:font-size { positiveLength }?,
4423   attribute svg:unicode-range { text }?,
4424   attribute svg:units-per-em { integer }?,
4425   attribute svg:panose-1 { text }?,
4426   attribute svg:stemv { integer }?,
4427   attribute svg:stemh { integer }?,
4428   attribute svg:slope { integer }?,
4429   attribute svg:cap-height { integer }?,
4430   attribute svg:x-height { integer }?,
4431   attribute svg:accent-height { integer }?,
4432   attribute svg:ascent { integer }?,
4433   attribute svg:descent { integer }?,
4434   attribute svg:widths { text }?,
4435   attribute svg:bbox { text }?,
4436   attribute svg:ideographic { integer }?,
4437   attribute svg:alphabetic { integer }?,
4438   attribute svg:mathematical { integer }?,
4439   attribute svg:hanging { integer }?,
4440   attribute svg:v-ideographic { integer }?,
4441   attribute svg:v-alphabetic { integer }?,
4442   attribute svg:v-mathematical { integer }?,
4443   attribute svg:v-hanging { integer }?,
4444   attribute svg:underline-position { integer }?,
4445   attribute svg:underline-thickness { integer }?,
4446   attribute svg:strikethrough-position { integer }?,
4447   attribute svg:strikethrough-thickness { integer }?,
4448   attribute svg:overline-position { integer }?,
4449   attribute svg:overline-thickness { integer }?
4450 svg-font-face-src =
4451   element svg:font-face-src {
4452     (svg-font-face-uri | svg-font-face-name)+
4453   }
4454 svg-font-face-uri =
4455   element svg:font-face-uri {
4456     common-svg-font-face-xlink-attlist, svg-font-face-format*
4457   }
4458 svg-font-face-format =
4459   element svg:font-face-format {
4460     attribute svg:string { text }?,
4461     empty
4462   }
4463 svg-font-face-name =
4464   element svg:font-face-name {
4465     attribute svg:name { text }?,
4466     empty
4467   }
4468 svg-definition-src =
4469   element svg:definition-src {
4470     common-svg-font-face-xlink-attlist, empty
4471   }
4472 common-svg-font-face-xlink-attlist &=
4473   attribute xlink:href { anyURI },
4474   [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
4475   [ a:defaultValue = "onRequest" ]
4476   attribute xlink:actuate { "onRequest" }?
4477 style-font-face-attlist &= attribute style:name { \string }
4478 style-font-face-attlist &= attribute style:font-adornments { \string }?
4479 style-font-face-attlist &=
4480   attribute style:font-family-generic { fontFamilyGeneric }?
4481 style-font-face-attlist &= attribute style:font-pitch { fontPitch }?
4482 style-font-face-attlist &=
4483   attribute style:font-charset { textEncoding }?
4484 number-number-style =
4485   element number:number-style {
4486     common-data-style-attlist,
4487     style-text-properties?,
4488     number-text?,
4489     (any-number, number-text?)?,
4490     style-map*
4491   }
4492 any-number = number-number | number-scientific-number | number-fraction
4493 number-number =
4494   element number:number {
4495     number-number-attlist,
4496     common-decimal-places-attlist,
4497     common-number-attlist,
4498     number-embedded-text*
4499   }
4500 number-number-attlist &= attribute number:decimal-replacement { text }?
4501 number-number-attlist &=
4502   [ a:defaultValue = "1" ] attribute number:display-factor { double }?
4503 number-embedded-text =
4504   element number:embedded-text { number-embedded-text-attlist, text }
4505 number-embedded-text-attlist &= attribute number:position { integer }
4506 number-scientific-number =
4507   element number:scientific-number {
4508     number-scientific-number-attlist,
4509     common-decimal-places-attlist,
4510     common-number-attlist,
4511     empty
4512   }
4513 number-scientific-number-attlist &=
4514   attribute number:min-exponent-digits { integer }?
4515 number-fraction =
4516   element number:fraction {
4517     number-fraction-attlist, common-number-attlist, empty
4518   }
4519 number-fraction-attlist &=
4520   attribute number:min-numerator-digits { integer }?
4521 number-fraction-attlist &=
4522   attribute number:min-denominator-digits { integer }?
4523 number-fraction-attlist &=
4524   attribute number:denominator-value { integer }?
4525 number-currency-style =
4526   element number:currency-style {
4527     common-data-style-attlist,
4528     common-auto-reorder-attlist,
4529     style-text-properties?,
4530     number-text?,
4531     ((number-and-text, currency-symbol-and-text?)
4532      | (currency-symbol-and-text, number-and-text?))?,
4533     style-map*
4534   }
4535 currency-symbol-and-text = number-currency-symbol, number-text?
4536 number-and-text = number-number, number-text?
4537 number-currency-symbol =
4538   element number:currency-symbol {
4539     number-currency-symbol-attlist, text
4540   }
4541 number-currency-symbol-attlist &=
4542   attribute number:language { languageCode }?,
4543   attribute number:country { countryCode }?
4544 number-percentage-style =
4545   element number:percentage-style {
4546     common-data-style-attlist,
4547     style-text-properties?,
4548     number-text?,
4549     number-and-text?,
4550     style-map*
4551   }
4552 number-date-style =
4553   element number:date-style {
4554     common-data-style-attlist,
4555     common-auto-reorder-attlist,
4556     common-format-source-attlist,
4557     style-text-properties?,
4558     # This DTD does not reflect the fact that some elements must not
4559     
4560     # occur more than once.
4561     number-text?,
4562     (any-date, number-text?)+,
4563     style-map*
4564   }
4565 any-date =
4566   number-day
4567   | number-month
4568   | number-year
4569   | number-era
4570   | number-day-of-week
4571   | number-week-of-year
4572   | number-quarter
4573   | number-hours
4574   | number-am-pm
4575   | number-minutes
4576   | number-seconds
4577 number-day =
4578   element number:day {
4579     number-day-attlist, common-calendar-attlist, empty
4580   }
4581 number-day-attlist &=
4582   [ a:defaultValue = "short" ]
4583   attribute number:style { "short" | "long" }?
4584 number-month =
4585   element number:month {
4586     number-month-attlist, common-calendar-attlist, empty
4587   }
4588 number-month-attlist &=
4589   [ a:defaultValue = "false" ] attribute number:textual { boolean }?
4590 number-month-attlist &=
4591   [ a:defaultValue = "false" ]
4592   attribute number:possessive-form { boolean }?
4593 number-month-attlist &=
4594   [ a:defaultValue = "short" ]
4595   attribute number:style { "short" | "long" }?
4596 number-year =
4597   element number:year {
4598     number-year-attlist, common-calendar-attlist, empty
4599   }
4600 number-year-attlist &=
4601   [ a:defaultValue = "short" ]
4602   attribute number:style { "short" | "long" }?
4603 number-era =
4604   element number:era {
4605     number-era-attlist, common-calendar-attlist, empty
4606   }
4607 number-era-attlist &=
4608   [ a:defaultValue = "short" ]
4609   attribute number:style { "short" | "long" }?
4610 number-day-of-week =
4611   element number:day-of-week {
4612     number-day-of-week-attlist, common-calendar-attlist, empty
4613   }
4614 number-day-of-week-attlist &=
4615   [ a:defaultValue = "short" ]
4616   attribute number:style { "short" | "long" }?
4617 number-week-of-year =
4618   element number:week-of-year { common-calendar-attlist, empty }
4619 number-quarter =
4620   element number:quarter {
4621     number-quarter-attlist, common-calendar-attlist, empty
4622   }
4623 number-quarter-attlist &=
4624   [ a:defaultValue = "short" ]
4625   attribute number:style { "short" | "long" }?
4626 number-time-style =
4627   element number:time-style {
4628     number-time-style-attlist,
4629     common-data-style-attlist,
4630     common-format-source-attlist,
4631     style-text-properties?,
4632     # This DTD does not reflect the fact that some elements must not
4633     
4634     # occur more than once.
4635     number-text?,
4636     (any-time, number-text?)+,
4637     style-map*
4638   }
4639 any-time = number-hours | number-am-pm | number-minutes | number-seconds
4640 number-time-style-attlist &=
4641   [ a:defaultValue = "true" ]
4642   attribute number:truncate-on-overflow { boolean }?
4643 number-hours = element number:hours { number-hours-attlist, empty }
4644 number-hours-attlist &=
4645   [ a:defaultValue = "short" ]
4646   attribute number:style { "short" | "long" }?
4647 number-minutes =
4648   element number:minutes { number-minutes-attlist, empty }
4649 number-minutes-attlist &=
4650   [ a:defaultValue = "short" ]
4651   attribute number:style { "short" | "long" }?
4652 number-seconds =
4653   element number:seconds { number-seconds-attlist, empty }
4654 number-seconds-attlist &=
4655   [ a:defaultValue = "short" ]
4656   attribute number:style { "short" | "long" }?
4657 number-seconds-attlist &=
4658   [ a:defaultValue = "0" ] attribute number:decimal-places { integer }?
4659 number-am-pm = element number:am-pm { empty }
4660 number-boolean-style =
4661   element number:boolean-style {
4662     common-data-style-attlist,
4663     style-text-properties?,
4664     number-text?,
4665     (number-boolean, number-text?)?,
4666     style-map*
4667   }
4668 number-boolean = element number:boolean { empty }
4669 number-text-style =
4670   element number:text-style {
4671     common-data-style-attlist,
4672     style-text-properties?,
4673     number-text?,
4674     (number-text-content, number-text?)*,
4675     style-map*
4676   }
4677 number-text = element number:text { text }
4678 number-text-content = element number:text-content { empty }
4679 common-data-style-attlist &= attribute style:name { styleName }
4680 style-data-style-attlist &= attribute style:display-name { \string }?
4681 common-data-style-attlist &= attribute number:language { languageCode }?
4682 common-data-style-attlist &= attribute number:country { countryCode }?
4683 common-data-style-attlist &= attribute number:title { text }?
4684 common-data-style-attlist &= attribute style:volatile { boolean }?
4685 common-auto-reorder-attlist &=
4686   [ a:defaultValue = "false" ]
4687   attribute number:automatic-order { boolean }?
4688 common-format-source-attlist =
4689   [ a:defaultValue = "fixed" ]
4690   attribute number:format-source { "fixed" | "language" }?
4691 common-data-style-attlist &=
4692   [ a:defaultValue = "1" ]
4693   attribute number:transliteration-format { \string }?
4694 common-data-style-attlist &=
4695   attribute number:transliteration-language { countryCode }?
4696 common-data-style-attlist &=
4697   attribute number:transliteration-country { countryCode }?
4698 common-data-style-attlist &=
4699   [ a:defaultValue = "short" ]
4700   attribute number:transliteration-style {
4701     "short" | "medium" | "long"
4702   }?
4703 common-decimal-places-attlist =
4704   attribute number:decimal-places { integer }?
4705 common-number-attlist &=
4706   attribute number:min-integer-digits { integer }?
4707 common-number-attlist &=
4708   [ a:defaultValue = "false" ] attribute number:grouping { boolean }?
4709 common-calendar-attlist &=
4710   attribute number:calendar {
4711     "gregorian"
4712     | "gengou"
4713     | "ROC"
4714     | "hanja_yoil"
4715     | "hanja"
4716     | "hijri"
4717     | "jewish"
4718     | "buddhist"
4719     | \string
4720   }?
4721 style-style-content |=
4722   attribute style:family { "text" },
4723   style-text-properties?
4724 style-style-content |=
4725   attribute style:family { "paragraph" },
4726   style-paragraph-properties?,
4727   style-text-properties?
4728 style-style-content |=
4729   attribute style:family { "section" },
4730   style-section-properties?
4731 style-style-content |=
4732   attribute style:family { "ruby" },
4733   style-ruby-properties?
4734 text-linenumbering-configuration =
4735   element text:linenumbering-configuration {
4736     text-linenumbering-configuration-attlist,
4737     text-linenumbering-separator?
4738   }
4739 text-linenumbering-configuration-attlist &=
4740   [ a:defaultValue = "true" ] attribute text:number-lines { boolean }?
4741 text-linenumbering-configuration-attlist &= common-num-format-attlist?
4742 text-linenumbering-configuration-attlist &=
4743   attribute text:style-name { styleNameRef }?
4744 text-linenumbering-configuration-attlist &=
4745   attribute text:increment { nonNegativeInteger }?
4746 text-linenumbering-configuration-attlist &=
4747   [ a:defaultValue = "left" ]
4748   attribute text:number-position {
4749     "left" | "right" | "inner" | "outer"
4750   }?
4751 text-linenumbering-configuration-attlist &=
4752   attribute text:offset { nonNegativeLength }?
4753 text-linenumbering-configuration-attlist &=
4754   [ a:defaultValue = "true" ]
4755   attribute text:count-empty-lines { boolean }?
4756 text-linenumbering-configuration-attlist &=
4757   [ a:defaultValue = "false" ]
4758   attribute text:count-in-text-boxes { boolean }?
4759 text-linenumbering-configuration-attlist &=
4760   [ a:defaultValue = "false" ]
4761   attribute text:restart-on-page { boolean }?
4762 text-linenumbering-separator =
4763   element text:linenumbering-separator {
4764     attribute text:increment { nonNegativeInteger }?,
4765     text
4766   }
4767 text-notes-configuration =
4768   element text:notes-configuration { text-notes-configuration-content }
4769 text-notes-configuration-content &= text-note-class
4770 text-notes-configuration-content &=
4771   attribute text:citation-style-name { styleNameRef }?
4772 text-notes-configuration-content &=
4773   attribute text:citation-body-style-name { styleNameRef }?
4774 text-notes-configuration-content &=
4775   attribute text:default-style-name { styleNameRef }?
4776 text-notes-configuration-content &=
4777   attribute text:master-page-name { styleNameRef }?
4778 text-notes-configuration-content &=
4779   attribute text:start-value { nonNegativeInteger }?
4780 text-notes-configuration-content &=
4781   common-num-format-prefix-suffix-attlist, common-num-format-attlist?
4782 text-notes-configuration-content &=
4783   attribute text:start-numbering-at { "document" | "chapter" | "page" }?
4784 text-notes-configuration-content &=
4785   attribute text:footnotes-position {
4786     "text" | "page" | "section" | "document"
4787   }?
4788 text-notes-configuration-content &=
4789   element text:note-continuation-notice-forward { text }?
4790 text-notes-configuration-content &=
4791   element text:note-continuation-notice-backward { text }?
4792 text-bibliography-configuration =
4793   element text:bibliography-configuration {
4794     text-bibliography-configuration-attlist, text-sort-key*
4795   }
4796 text-bibliography-configuration-attlist &=
4797   attribute text:prefix { \string }?,
4798   attribute text:suffix { \string }?
4799 text-bibliography-configuration-attlist &=
4800   [ a:defaultValue = "false" ]
4801   attribute text:numbered-entries { boolean }?
4802 text-bibliography-configuration-attlist &=
4803   [ a:defaultValue = "true" ]
4804   attribute text:sort-by-position { boolean }?,
4805   attribute fo:language { languageCode }?,
4806   attribute fo:country { countryCode }?,
4807   attribute text:sort-algorithm { \string }?
4808 text-sort-key = element text:sort-key { text-sort-key-attlist, empty }
4809 text-sort-key-attlist &=
4810   attribute text:key {
4811     "address"
4812     | "annote"
4813     | "author"
4814     | "bibliography-type"
4815     | "booktitle"
4816     | "chapter"
4817     | "custom1"
4818     | "custom2"
4819     | "custom3"
4820     | "custom4"
4821     | "custom5"
4822     | "edition"
4823     | "editor"
4824     | "howpublished"
4825     | "identifier"
4826     | "institution"
4827     | "isbn"
4828     | "issn"
4829     | "journal"
4830     | "month"
4831     | "note"
4832     | "number"
4833     | "organizations"
4834     | "pages"
4835     | "publisher"
4836     | "report-type"
4837     | "school"
4838     | "series"
4839     | "title"
4840     | "url"
4841     | "volume"
4842     | "year"
4843   },
4844   [ a:defaultValue = "true" ] attribute text:sort-ascending { boolean }?
4845 text-list-style =
4846   element text:list-style {
4847     text-list-style-attr, text-list-style-content*
4848   }
4849 text-list-style-attr &= attribute style:name { styleName }
4850 text-list-style-attr &= attribute style:display-name { \string }?
4851 text-list-style-attr &=
4852   [ a:defaultValue = "false" ]
4853   attribute text:consecutive-numbering { boolean }?
4854 text-list-level-style-attr = attribute text:level { positiveInteger }
4855 text-list-style-content |=
4856   element text:list-level-style-number {
4857     text-list-level-style-attr,
4858     text-list-level-style-number-attr,
4859     style-list-level-properties?,
4860     style-text-properties?
4861   }
4862 text-list-level-style-number-attr &=
4863   attribute text:style-name { styleNameRef }?
4864 text-list-level-style-number-attr &=
4865   common-num-format-attlist, common-num-format-prefix-suffix-attlist
4866 text-list-level-style-number-attr &=
4867   [ a:defaultValue = "1" ]
4868   attribute text:display-levels { positiveInteger }?
4869 text-list-level-style-number-attr &=
4870   [ a:defaultValue = "1" ]
4871   attribute text:start-value { positiveInteger }?
4872 text-list-style-content |=
4873   element text:list-level-style-bullet {
4874     text-list-level-style-attr,
4875     text-list-level-style-bullet-attr,
4876     style-list-level-properties?,
4877     style-text-properties?
4878   }
4879 text-list-level-style-bullet-attr &=
4880   attribute text:style-name { styleNameRef }?
4881 text-list-level-style-bullet-attr &=
4882   attribute text:bullet-char { character }
4883 text-list-level-style-bullet-attr &=
4884   common-num-format-prefix-suffix-attlist
4885 text-list-level-style-bullet-attr &=
4886   attribute text:bullet-relative-size { percent }?
4887 text-list-style-content |=
4888   element text:list-level-style-image {
4889     text-list-level-style-attr,
4890     text-list-level-style-image-attr,
4891     style-list-level-properties?
4892   }
4893 text-list-level-style-image-attr &=
4894   common-draw-data-attlist | office-binary-data
4895 text-outline-style =
4896   element text:outline-style { text-outline-level-style+ }
4897 text-outline-level-style =
4898   element text:outline-level-style {
4899     text-outline-level-style-attlist,
4900     style-list-level-properties?,
4901     style-text-properties?
4902   }
4903 text-outline-level-style-attlist &=
4904   attribute text:level { positiveInteger }
4905 text-outline-level-style-attlist &=
4906   attribute text:style-name { styleNameRef }?
4907 text-outline-level-style-attlist &=
4908   common-num-format-attlist, common-num-format-prefix-suffix-attlist
4909 text-outline-level-style-attlist &=
4910   [ a:defaultValue = "1" ]
4911   attribute text:display-levels { positiveInteger }?
4912 text-outline-level-style-attlist &=
4913   [ a:defaultValue = "1" ]
4914   attribute text:start-value { positiveInteger }?
4915 style-style-content |=
4916   attribute style:family { "table" },
4917   style-table-properties?
4918 style-style-content |=
4919   attribute style:family { "table-column" },
4920   style-table-column-properties?
4921 style-style-content |=
4922   attribute style:family { "table-row" },
4923   style-table-row-properties?
4924 style-style-content |=
4925   attribute style:family { "table-cell" },
4926   style-table-cell-properties?,
4927   style-paragraph-properties?,
4928   style-text-properties?
4929 style-style-content |=
4930   attribute style:family { "graphic" | "presentation" },
4931   style-graphic-properties?,
4932   style-paragraph-properties?,
4933   style-text-properties?
4934 style-graphic-properties =
4935   element style:graphic-properties { style-graphic-properties-content }
4936 style-graphic-properties-content = style-properties-content
4937 style-graphic-properties-content-strict =
4938   style-graphic-properties-attlist,
4939   style-graphic-fill-properties-attlist,
4940   style-graphic-properties-elements
4941 style-graphic-properties-elements = empty
4942 style-style-content |=
4943   attribute style:family { "drawing-page" },
4944   style-drawing-page-properties?
4945 style-drawing-page-properties =
4946   element style:drawing-page-properties {
4947     style-drawing-page-properties-content
4948   }
4949 style-drawing-page-properties-content = style-properties-content
4950 style-drawing-page-properties-content-strict =
4951   style-graphic-fill-properties-attlist,
4952   style-drawing-page-properties-attlist,
4953   style-drawing-page-properties-elements
4954 draw-gradient =
4955   element draw:gradient {
4956     common-draw-gradient-attlist, draw-gradient-attlist, empty
4957   }
4958 common-draw-gradient-attlist &= attribute draw:name { styleName }?
4959 common-draw-gradient-attlist &= attribute draw:display-name { \string }?
4960 common-draw-gradient-attlist &= attribute draw:style { gradient-style }
4961 gradient-style =
4962   "linear" | "axial" | "radial" | "ellipsoid" | "square" | "rectangular"
4963 common-draw-gradient-attlist &=
4964   attribute draw:cx { percent }?,
4965   attribute draw:cy { percent }?
4966 draw-gradient-attlist &=
4967   attribute draw:start-color { color }?,
4968   attribute draw:end-color { color }?
4969 draw-gradient-attlist &=
4970   attribute draw:start-intensity { percent }?,
4971   attribute draw:end-intensity { percent }?
4972 common-draw-gradient-attlist &= attribute draw:angle { integer }?
4973 common-draw-gradient-attlist &= attribute draw:border { percent }?
4974 svg-linearGradient =
4975   element svg:linearGradient {
4976     common-svg-gradient-attlist,
4977     [ a:defaultValue = "0%" ]
4978     attribute svg:x1 { coordinate | percent }?,
4979     [ a:defaultValue = "0%" ]
4980     attribute svg:y1 { coordinate | percent }?,
4981     [ a:defaultValue = "100%" ]
4982     attribute svg:x2 { coordinate | percent }?,
4983     [ a:defaultValue = "100%" ]
4984     attribute svg:y2 { coordinate | percent }?,
4985     svg-stop*
4986   }
4987 svg-radialGradient =
4988   element svg:radialGradient {
4989     common-svg-gradient-attlist,
4990     [ a:defaultValue = "50%" ]
4991     attribute svg:cx { coordinate | percent }?,
4992     [ a:defaultValue = "50%" ]
4993     attribute svg:cy { coordinate | percent }?,
4994     [ a:defaultValue = "50%" ]
4995     attribute svg:r { coordinate | percent }?,
4996     attribute svg:fx { coordinate | percent }?,
4997     attribute svg:fy { coordinate | percent }?,
4998     svg-stop*
4999   }
5000 svg-stop =
5001   element svg:stop {
5002     attribute svg:offset { double | percent },
5003     attribute svg:stop-color { color }?,
5004     attribute svg:stop-opacity { double }?
5005   }
5006 common-svg-gradient-attlist &=
5007   [ a:defaultValue = "objectBoundingBox" ]
5008   attribute svg:gradientUnits { "objectBoundingBox" }?,
5009   attribute svg:gradientTransform { \string }?,
5010   [ a:defaultValue = "pad" ]
5011   attribute svg:spreadMethod { "pad" | "reflect" | "repeat" }?
5012 common-svg-gradient-attlist &= attribute draw:name { styleName }
5013 common-svg-gradient-attlist &= attribute draw:display-name { \string }?
5014 draw-hatch = element draw:hatch { draw-hatch-attlist, empty }
5015 draw-hatch-attlist &= attribute draw:name { styleName }
5016 draw-hatch-attlist &= attribute draw:display-name { \string }?
5017 draw-hatch-attlist &=
5018   attribute draw:style { "single" | "double" | "triple" }
5019 draw-hatch-attlist &= attribute draw:color { color }?
5020 draw-hatch-attlist &= attribute draw:distance { length }?
5021 draw-hatch-attlist &= attribute draw:rotation { integer }?
5022 draw-fill-image =
5023   element draw:fill-image {
5024     draw-fill-image-attlist,
5025     attribute xlink:href { anyURI },
5026     [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
5027     [ a:defaultValue = "embed" ] attribute xlink:show { "embed" }?,
5028     [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?,
5029     empty
5030   }
5031 draw-fill-image-attlist &= attribute draw:name { styleName }
5032 draw-fill-image-attlist &= attribute draw:display-name { \string }?
5033 draw-fill-image-attlist &=
5034   attribute svg:width { length }?,
5035   attribute svg:height { length }?
5036 draw-opacity =
5037   element draw:opacity {
5038     common-draw-gradient-attlist, draw-opacity-attlist, empty
5039   }
5040 draw-opacity-attlist &=
5041   attribute draw:start { percent }?,
5042   attribute draw:end { percent }?
5043 draw-marker =
5044   element draw:marker {
5045     draw-marker-attlist,
5046     common-draw-viewbox-attlist,
5047     common-draw-path-data-attlist,
5048     empty
5049   }
5050 draw-marker-attlist &= attribute draw:name { styleName }
5051 draw-marker-attlist &= attribute draw:display-name { \string }?
5052 draw-stroke-dash =
5053   element draw:stroke-dash { draw-stroke-dash-attlist, empty }
5054 draw-stroke-dash-attlist &= attribute draw:name { styleName }
5055 draw-stroke-dash-attlist &= attribute draw:display-name { \string }?
5056 draw-stroke-dash-attlist &= attribute draw:style { "rect" | "round" }?
5057 draw-stroke-dash-attlist &=
5058   attribute draw:dots1 { integer }?,
5059   attribute draw:dots1-length { length }?,
5060   attribute draw:dots2 { integer }?,
5061   attribute draw:dots2-length { length }?
5062 draw-stroke-dash-attlist &= attribute draw:distance { length }?
5063 style-presentation-page-layout =
5064   element style:presentation-page-layout {
5065     attribute style:name { styleName },
5066     attribute style:display-name { \string }?,
5067     presentation-placeholder*
5068   }
5069 presentation-placeholder =
5070   element presentation:placeholder {
5071     attribute presentation:object { presentation-classes },
5072     attribute svg:x { coordinate | percent },
5073     attribute svg:y { coordinate | percent },
5074     attribute svg:width { length | percent },
5075     attribute svg:height { length | percent },
5076     empty
5077   }
5078 style-style-content |=
5079   attribute style:family { "chart" },
5080   style-chart-properties?,
5081   style-graphic-properties?,
5082   style-paragraph-properties?,
5083   style-text-properties?
5084 style-properties-content = anyAttListOrElements
5085 style-page-layout-properties =
5086   element style:page-layout-properties {
5087     style-page-layout-properties-content
5088   }
5089 style-page-layout-properties-content = style-properties-content
5090 style-page-layout-properties-content-strict =
5091   style-page-layout-properties-attlist,
5092   style-page-layout-properties-elements
5093 style-page-layout-properties-attlist &=
5094   attribute fo:page-width { length }?,
5095   attribute fo:page-height { length }?
5096 style-page-layout-properties-attlist &=
5097   common-num-format-attlist?, common-num-format-prefix-suffix-attlist
5098 style-page-layout-properties-attlist &=
5099   attribute style:paper-tray-name { "default" | \string }?
5100 style-page-layout-properties-attlist &=
5101   attribute style:print-orientation { "portrait" | "landscape" }?
5102 style-page-layout-properties-attlist &=
5103   common-horizontal-margin-attlist,
5104   common-vertical-margin-attlist,
5105   common-margin-attlist
5106 style-page-layout-properties-attlist &= common-border-attlist
5107 style-page-layout-properties-attlist &= common-border-line-width-attlist
5108 style-page-layout-properties-attlist &= common-padding-attlist
5109 style-page-layout-properties-attlist &= common-shadow-attlist
5110 style-page-layout-properties-attlist &= common-background-color-attlist
5111 style-page-layout-properties-elements &= style-background-image
5112 style-page-layout-properties-elements &= style-columns
5113 style-page-layout-properties-attlist &=
5114   attribute style:register-truth-ref-style-name { styleNameRef }?
5115 style-page-layout-properties-attlist &=
5116   attribute style:print {
5117     list {
5118       ("headers"
5119        | "grid"
5120        | "annotations"
5121        | "objects"
5122        | "charts"
5123        | "drawings"
5124        | "formulas"
5125        | "zero-values")*
5126     }
5127   }?
5128 style-page-layout-properties-attlist &=
5129   attribute style:print-page-order { "ttb" | "ltr" }?
5130 style-page-layout-properties-attlist &=
5131   attribute style:first-page-number { positiveInteger | "continue" }?
5132 style-page-layout-properties-attlist &=
5133   attribute style:scale-to { percent }?,
5134   attribute style:scale-to-pages { positiveInteger }?
5135 style-page-layout-properties-attlist &=
5136   attribute style:table-centering {
5137     "horizontal" | "vertical" | "both" | "none"
5138   }?
5139 style-page-layout-properties-attlist &=
5140   attribute style:footnote-max-height { length }?
5141 style-page-layout-properties-attlist &= common-writing-mode-attlist
5142 style-page-layout-properties-elements &= style-footnote-sep
5143 style-footnote-sep =
5144   element style:footnote-sep { style-footnote-sep-attlist, empty }?
5145 style-footnote-sep-attlist &=
5146   attribute style:width { length }?,
5147   attribute style:rel-width { percent }?,
5148   attribute style:color { color }?,
5149   attribute style:line-style { lineStyle }?,
5150   [ a:defaultValue = "left" ]
5151   attribute style:adjustment { "left" | "center" | "right" }?,
5152   attribute style:distance-before-sep { length }?,
5153   attribute style:distance-after-sep { length }?
5154 style-page-layout-properties-attlist &=
5155   attribute style:layout-grid-mode { "none" | "line" | "both" }?
5156 style-page-layout-properties-attlist &=
5157   attribute style:layout-grid-base-height { length }?
5158 style-page-layout-properties-attlist &=
5159   attribute style:layout-grid-ruby-height { length }?
5160 style-page-layout-properties-attlist &=
5161   attribute style:layout-grid-lines { positiveInteger }?
5162 style-page-layout-properties-attlist &=
5163   attribute style:layout-grid-color { color }?
5164 style-page-layout-properties-attlist &=
5165   attribute style:layout-grid-ruby-below { boolean }?
5166 style-page-layout-properties-attlist &=
5167   attribute style:layout-grid-print { boolean }?
5168 style-page-layout-properties-attlist &=
5169   attribute style:layout-grid-display { boolean }?
5170 style-header-footer-properties =
5171   element style:header-footer-properties {
5172     style-header-footer-properties-content
5173   }
5174 style-header-footer-properties-content = style-properties-content
5175 style-header-footer-properties-content-strict =
5176   style-header-footer-properties-attlist,
5177   style-header-footer-properties-elements
5178 style-header-footer-properties-attlist &=
5179   attribute svg:height { length }?,
5180   attribute fo:min-height { length }?
5181 style-header-footer-properties-attlist &=
5182   common-horizontal-margin-attlist,
5183   common-vertical-margin-attlist,
5184   common-margin-attlist
5185 style-header-footer-properties-attlist &= common-border-attlist
5186 style-header-footer-properties-attlist &=
5187   common-border-line-width-attlist
5188 style-header-footer-properties-attlist &= common-padding-attlist
5189 style-header-footer-properties-attlist &=
5190   common-background-color-attlist
5191 style-header-footer-properties-elements &= style-background-image
5192 style-header-footer-properties-attlist &= common-shadow-attlist
5193 style-header-footer-properties-attlist &=
5194   attribute style:dynamic-spacing { boolean }?
5195 style-text-properties =
5196   element style:text-properties { style-text-properties-content }
5197 style-text-properties-content = style-properties-content
5198 style-text-properties-content-strict =
5199   style-text-properties-attlist, style-text-properties-elements
5200 style-text-properties-elements = empty
5201 style-text-properties-attlist &=
5202   attribute fo:font-variant { fontVariant }?
5203 fontVariant = "normal" | "small-caps"
5204 style-text-properties-attlist &=
5205   attribute fo:text-transform {
5206     "none" | "lowercase" | "uppercase" | "capitalize"
5207   }?
5208 style-text-properties-attlist &= attribute fo:color { color }?
5209 style-text-properties-attlist &=
5210   attribute style:use-window-font-color { boolean }?
5211 style-text-properties-attlist &=
5212   attribute style:text-outline { boolean }?
5213 style-text-properties-attlist &=
5214   attribute style:text-line-through-type { lineType }?
5215 style-text-properties-attlist &=
5216   attribute style:text-line-through-style { lineStyle }?
5217 style-text-properties-attlist &=
5218   attribute style:text-line-through-width { lineWidth }?
5219 style-text-properties-attlist &=
5220   attribute style:text-line-through-color { "font-color" | color }?
5221 style-text-properties-attlist &=
5222   attribute style:text-line-through-text { \string }?
5223 style-text-properties-attlist &=
5224   attribute style:text-line-through-text-style { styleNameRef }?
5225 style-text-properties-attlist &=
5226   attribute style:text-position {
5227     list { (percent | "super" | "sub"), percent? }
5228   }?
5229 style-text-properties-attlist &=
5230   attribute style:font-name { \string }?,
5231   attribute style:font-name-asian { \string }?,
5232   attribute style:font-name-complex { \string }?
5233 style-text-properties-attlist &=
5234   attribute fo:font-family { \string }?,
5235   attribute style:font-family-asian { \string }?,
5236   attribute style:font-family-complex { \string }?
5237 style-text-properties-attlist &=
5238   attribute style:font-family-generic { fontFamilyGeneric }?,
5239   attribute style:font-family-generic-asian { fontFamilyGeneric }?,
5240   attribute style:font-family-generic-complex { fontFamilyGeneric }?
5241 fontFamilyGeneric =
5242   "roman" | "swiss" | "modern" | "decorative" | "script" | "system"
5243 style-text-properties-attlist &=
5244   attribute style:font-style-name { \string }?,
5245   attribute style:font-style-name-asian { \string }?,
5246   attribute style:font-style-name-complex { \string }?
5247 style-text-properties-attlist &=
5248   attribute style:font-pitch { fontPitch }?,
5249   attribute style:font-pitch-asian { fontPitch }?,
5250   attribute style:font-pitch-complex { fontPitch }?
5251 fontPitch = "fixed" | "variable"
5252 style-text-properties-attlist &=
5253   attribute style:font-charset { textEncoding }?,
5254   attribute style:font-charset-asian { textEncoding }?,
5255   attribute style:font-charset-complex { textEncoding }?
5256 textEncoding = xsd:string { pattern = "[A-Za-z][A-Za-z0-9._\-]*" }
5257 style-text-properties-attlist &=
5258   attribute fo:font-size { positiveLength | percent }?,
5259   attribute style:font-size-asian { positiveLength | percent }?,
5260   attribute style:font-size-complex { positiveLength | percent }?
5261 style-text-properties-attlist &=
5262   attribute style:font-size-rel { length }?,
5263   attribute style:font-size-rel-asian { length }?,
5264   attribute style:font-size-rel-complex { length }?
5265 style-text-properties-attlist &=
5266   attribute style:script-type {
5267     "latin" | "asian" | "complex" | "ignore"
5268   }?
5269 style-text-properties-attlist &=
5270   attribute fo:letter-spacing { length | "normal" }?
5271 style-text-properties-attlist &=
5272   attribute fo:language { languageCode }?,
5273   attribute style:language-asian { languageCode }?,
5274   attribute style:language-complex { languageCode }?
5275 style-text-properties-attlist &=
5276   attribute fo:country { countryCode }?,
5277   attribute style:country-asian { countryCode }?,
5278   attribute style:country-complex { countryCode }?
5279 style-text-properties-attlist &=
5280   attribute fo:font-style { fontStyle }?,
5281   attribute style:font-style-asian { fontStyle }?,
5282   attribute style:font-style-complex { fontStyle }?
5283 fontStyle = "normal" | "italic" | "oblique"
5284 style-text-properties-attlist &=
5285   attribute style:font-relief { "none" | "embossed" | "engraved" }?
5286 style-text-properties-attlist &=
5287   attribute fo:text-shadow { shadowType }?
5288 shadowType =
5289   "none"
5290   | # The following string must match an XSL shadow decl
5291     \string
5292 style-text-properties-attlist &=
5293   attribute style:text-underline-type { lineType }?
5294 lineType = "none" | "single" | "double"
5295 style-text-properties-attlist &=
5296   attribute style:text-underline-style { lineStyle }?
5297 lineStyle =
5298   "none"
5299   | "solid"
5300   | "dotted"
5301   | "dash"
5302   | "long-dash"
5303   | "dot-dash"
5304   | "dot-dot-dash"
5305   | "wave"
5306 style-text-properties-attlist &=
5307   attribute style:text-underline-width { lineWidth }?
5308 lineWidth =
5309   "auto"
5310   | "normal"
5311   | "bold"
5312   | "thin"
5313   | "dash"
5314   | "medium"
5315   | "thick"
5316   | positiveInteger
5317   | percent
5318   | positiveLength
5319 style-text-properties-attlist &=
5320   attribute style:text-underline-color { "font-color" | color }?
5321 style-text-properties-attlist &=
5322   attribute fo:font-weight { fontWeight }?,
5323   attribute style:font-weight-asian { fontWeight }?,
5324   attribute style:font-weight-complex { fontWeight }?
5325 fontWeight =
5326   "normal"
5327   | "bold"
5328   | "100"
5329   | "200"
5330   | "300"
5331   | "400"
5332   | "500"
5333   | "600"
5334   | "700"
5335   | "800"
5336   | "900"
5337 style-text-properties-attlist &=
5338   attribute style:text-underline-mode { lineMode }?
5339 lineMode = "continuous" | "skip-white-space"
5340 style-text-properties-attlist &=
5341   attribute style:text-line-through-mode { lineMode }?
5342 style-text-properties-attlist &=
5343   attribute style:letter-kerning { boolean }?
5344 style-text-properties-attlist &=
5345   attribute style:text-blinking { boolean }?
5346 style-text-properties-attlist &= common-background-color-attlist
5347 style-text-properties-attlist &=
5348   attribute style:text-combine { "none" | "letters" | "lines" }?
5349 style-text-properties-attlist &=
5350   attribute style:text-combine-start-char { character }?,
5351   attribute style:text-combine-end-char { character }?
5352 style-text-properties-attlist &=
5353   attribute style:text-emphasize {
5354     "none"
5355     | list {
5356         ("none" | "accent" | "dot" | "circle" | "disc"),
5357         ("above" | "below")
5358       }
5359   }?
5360 style-text-properties-attlist &= attribute style:text-scale { percent }?
5361 style-text-properties-attlist &=
5362   attribute style:text-rotation-angle { integer }?
5363 style-text-properties-attlist &=
5364   attribute style:text-rotation-scale { "fixed" | "line-height" }?
5365 style-text-properties-attlist &= attribute fo:hyphenate { boolean }?
5366 style-text-properties-attlist &=
5367   attribute fo:hyphenation-remain-char-count { positiveInteger }?
5368 style-text-properties-attlist &=
5369   attribute fo:hyphenation-push-char-count { positiveInteger }?
5370 style-text-properties-attlist &=
5371   attribute text:display { "true" }
5372   | attribute text:display { "none" }
5373   | (attribute text:display { "condition" },
5374      attribute text:condition { "none" })
5375   | empty
5376 style-paragraph-properties =
5377   element style:paragraph-properties {
5378     style-paragraph-properties-content
5379   }
5380 style-paragraph-properties-content = style-properties-content
5381 style-paragraph-properties-content-strict =
5382   style-paragraph-properties-attlist,
5383   style-paragraph-properties-elements
5384 style-paragraph-properties-attlist &=
5385   attribute fo:line-height { "normal" | nonNegativeLength | percent }?
5386 style-paragraph-properties-attlist &=
5387   attribute style:line-height-at-least { nonNegativeLength }?
5388 style-paragraph-properties-attlist &=
5389   attribute style:line-spacing { length }?
5390 style-paragraph-properties-attlist &=
5391   attribute style:font-independent-line-spacing { boolean }?
5392 style-paragraph-properties-attlist &= common-text-align
5393 common-text-align =
5394   attribute fo:text-align {
5395     "start" | "end" | "left" | "right" | "center" | "justify"
5396   }?
5397 style-paragraph-properties-attlist &=
5398   attribute fo:text-align-last { "start" | "center" | "justify" }?
5399 style-paragraph-properties-attlist &=
5400   attribute style:justify-single-word { boolean }?
5401 style-paragraph-properties-attlist &=
5402   attribute fo:keep-together { "auto" | "always" }?
5403 style-paragraph-properties-attlist &=
5404   attribute fo:widows { nonNegativeInteger }?
5405 style-paragraph-properties-attlist &=
5406   attribute fo:orphans { nonNegativeInteger }?
5407 style-paragraph-properties-elements &= style-tab-stops
5408 style-tab-stops = element style:tab-stops { style-tab-stop* }?
5409 style-tab-stop =
5410   element style:tab-stop { style-tab-stop-attlist, empty }
5411 style-tab-stop-attlist &= attribute style:position { nonNegativeLength }
5412 style-tab-stop-attlist &=
5413   [ a:defaultValue = "left" ]
5414   attribute style:type { "left" | "center" | "right" }?
5415   | (attribute style:type { "char" },
5416      style-tab-stop-char-attlist)
5417 style-tab-stop-char-attlist &= attribute style:char { character }
5418 style-tab-stop-attlist &= attribute style:leader-type { lineType }?
5419 style-tab-stop-attlist &= attribute style:leader-style { lineStyle }?
5420 style-tab-stop-attlist &= attribute style:leader-width { lineWidth }?
5421 style-tab-stop-attlist &=
5422   attribute style:leader-color { "font-color" | color }?
5423 style-tab-stop-attlist &=
5424   [ a:defaultValue = " " ] attribute style:leader-text { \string }?
5425 style-tab-stop-attlist &=
5426   attribute style:leader-text-style { styleNameRef }?
5427 style-paragraph-properties-attlist &=
5428   attribute style:tab-stop-distance { nonNegativeLength }?
5429 style-paragraph-properties-attlist &=
5430   attribute fo:hyphenation-keep { "auto" | "page" }?
5431 style-paragraph-properties-attlist &=
5432   attribute fo:hyphenation-ladder-count {
5433     "no-limit" | positiveInteger
5434   }?
5435 style-paragraph-properties-elements &= style-drop-cap
5436 style-drop-cap =
5437   element style:drop-cap { style-drop-cap-attlist, empty }?
5438 style-drop-cap-attlist &=
5439   [ a:defaultValue = "1" ]
5440   attribute style:length { "word" | positiveInteger }?
5441 style-drop-cap-attlist &=
5442   [ a:defaultValue = "1" ] attribute style:lines { positiveInteger }?
5443 style-drop-cap-attlist &=
5444   [ a:defaultValue = "0cm" ] attribute style:distance { length }?
5445 style-drop-cap-attlist &= attribute style:style-name { styleNameRef }?
5446 style-paragraph-properties-attlist &=
5447   attribute style:register-true { boolean }?
5448 style-paragraph-properties-attlist &= common-horizontal-margin-attlist
5449 common-horizontal-margin-attlist =
5450   attribute fo:margin-left { length | percent }?,
5451   attribute fo:margin-right { length | percent }?
5452 style-paragraph-properties-attlist &=
5453   attribute fo:text-indent { length | percent }?
5454 style-paragraph-properties-attlist &=
5455   attribute style:auto-text-indent { boolean }?
5456 style-paragraph-properties-attlist &= common-vertical-margin-attlist
5457 common-vertical-margin-attlist =
5458   attribute fo:margin-top { nonNegativeLength | percent }?,
5459   attribute fo:margin-bottom { nonNegativeLength | percent }?
5460 style-paragraph-properties-attlist &= common-margin-attlist
5461 common-margin-attlist =
5462   attribute fo:margin { nonNegativeLength | percent }?
5463 style-paragraph-properties-attlist &= common-break-attlist
5464 common-break-attlist =
5465   attribute fo:break-before { "auto" | "column" | "page" }?,
5466   attribute fo:break-after { "auto" | "column" | "page" }?
5467 style-paragraph-properties-attlist &= common-background-color-attlist
5468 common-background-color-attlist =
5469   attribute fo:background-color { "transparent" | color }?
5470 style-paragraph-properties-elements &= style-background-image
5471 style-background-image =
5472   element style:background-image {
5473     style-background-image-attlist,
5474     (common-draw-data-attlist | office-binary-data | empty)
5475   }?
5476 style-background-image-attlist &=
5477   [ a:defaultValue = "repeat" ]
5478   attribute style:repeat { "no-repeat" | "repeat" | "stretch" }?
5479 style-background-image-attlist &=
5480   [ a:defaultValue = "center" ]
5481   attribute style:position {
5482     "left"
5483     | "center"
5484     | "right"
5485     | "top"
5486     | "bottom"
5487     | list { horiBackPos, vertBackPos }
5488     | list { vertBackPos, horiBackPos }
5489   }?
5490 horiBackPos = "left" | "center" | "right"
5491 vertBackPos = "top" | "center" | "bottom"
5492 style-background-image-attlist &=
5493   attribute style:filter-name { \string }?
5494 style-background-image-attlist &= attribute draw:opacity { percent }?
5495 style-paragraph-properties-attlist &= common-border-attlist
5496 common-border-attlist =
5497   attribute fo:border { \string }?,
5498   attribute fo:border-top { \string }?,
5499   attribute fo:border-bottom { \string }?,
5500   attribute fo:border-left { \string }?,
5501   attribute fo:border-right { \string }?
5502 style-paragraph-properties-attlist &= common-border-line-width-attlist
5503 common-border-line-width-attlist =
5504   attribute style:border-line-width { borderWidths }?,
5505   attribute style:border-line-width-top { borderWidths }?,
5506   attribute style:border-line-width-bottom { borderWidths }?,
5507   attribute style:border-line-width-left { borderWidths }?,
5508   attribute style:border-line-width-right { borderWidths }?
5509 borderWidths = list { positiveLength, positiveLength, positiveLength }
5510 style-paragraph-properties-attlist &= common-padding-attlist
5511 common-padding-attlist =
5512   attribute fo:padding { nonNegativeLength }?,
5513   attribute fo:padding-top { nonNegativeLength }?,
5514   attribute fo:padding-bottom { nonNegativeLength }?,
5515   attribute fo:padding-left { nonNegativeLength }?,
5516   attribute fo:padding-right { nonNegativeLength }?
5517 style-paragraph-properties-attlist &= common-shadow-attlist
5518 common-shadow-attlist = attribute style:shadow { shadowType }?
5519 style-paragraph-properties-attlist &= common-keep-with-next-attlist
5520 common-keep-with-next-attlist =
5521   attribute fo:keep-with-next { "auto" | "always" }?
5522 style-paragraph-properties-attlist &=
5523   [ a:defaultValue = "false" ] attribute text:number-lines { boolean }?
5524 style-paragraph-properties-attlist &=
5525   attribute text:line-number { nonNegativeInteger }?
5526 style-paragraph-properties-attlist &=
5527   attribute style:text-autospace { "none" | "ideograph-alpha" }?
5528 style-paragraph-properties-attlist &=
5529   attribute style:punctuation-wrap { "simple" | "hanging" }?
5530 style-paragraph-properties-attlist &=
5531   attribute style:line-break { "normal" | "strict" }?
5532 style-paragraph-properties-attlist &=
5533   [ a:defaultValue = "auto" ]
5534   attribute style:vertical-align {
5535     "top" | "middle" | "bottom" | "auto" | "baseline"
5536   }?
5537 style-paragraph-properties-attlist &= common-writing-mode-attlist
5538 common-writing-mode-attlist =
5539   attribute style:writing-mode {
5540     "lr-tb" | "rl-tb" | "tb-rl" | "tb-lr" | "lr" | "rl" | "tb" | "page"
5541   }?
5542 style-paragraph-properties-attlist &=
5543   attribute style:writing-mode-automatic { boolean }?
5544 style-paragraph-properties-attlist &=
5545   attribute style:snap-to-layout-grid { boolean }?
5546 style-paragraph-properties-attlist &= common-page-number-attlist
5547 common-page-number-attlist =
5548   attribute style:page-number { positiveInteger | "auto" }?
5549 style-paragraph-properties-attlist &=
5550   attribute style:background-transparency { percent }?
5551 style-ruby-properties =
5552   element style:ruby-properties { style-ruby-properties-content }
5553 style-ruby-properties-content = style-properties-content
5554 style-ruby-properties-content-strict =
5555   style-ruby-properties-attlist, style-ruby-properties-elements
5556 style-ruby-properties-elements = empty
5557 style-ruby-properties-attlist &=
5558   attribute style:ruby-position { "above" | "below" }?
5559 style-ruby-properties-attlist &=
5560   attribute style:ruby-align {
5561     "left"
5562     | "center"
5563     | "right"
5564     | "distribute-letter"
5565     | "distribute-space"
5566   }?
5567 style-section-properties =
5568   element style:section-properties { style-section-properties-content }
5569 style-section-properties-content = style-properties-content
5570 style-section-properties-content-strict =
5571   style-section-properties-attlist, style-section-properties-elements
5572 style-section-properties-attlist &= common-background-color-attlist
5573 style-section-properties-elements &= style-background-image
5574 style-section-properties-attlist &= common-horizontal-margin-attlist
5575 style-section-properties-elements &= style-columns
5576 style-columns =
5577   element style:columns {
5578     style-columns-attlist, style-column-sep?, style-column*
5579   }?
5580 style-columns-attlist &= attribute fo:column-count { positiveInteger }
5581 style-columns-attlist &= attribute fo:column-gap { length }?
5582 style-column = element style:column { style-column-attlist }
5583 style-column-attlist &= attribute style:rel-width { relativeLength }
5584 style-column-attlist &=
5585   [ a:defaultValue = "0cm" ] attribute fo:start-indent { length }?
5586 style-column-attlist &=
5587   [ a:defaultValue = "0cm" ] attribute fo:end-indent { length }?
5588 style-column-attlist &=
5589   [ a:defaultValue = "0cm" ] attribute fo:space-before { length }?
5590 style-column-attlist &=
5591   [ a:defaultValue = "0cm" ] attribute fo:space-after { length }?
5592 style-column-sep = element style:column-sep { style-column-sep-attlist }
5593 style-column-sep-attlist &=
5594   [ a:defaultValue = "solid" ]
5595   attribute style:style {
5596     "none" | "solid" | "dotted" | "dashed" | "dot-dashed"
5597   }?
5598 style-column-sep-attlist &= attribute style:width { length }
5599 style-column-sep-attlist &=
5600   [ a:defaultValue = "100%" ] attribute style:height { percent }?
5601 style-column-sep-attlist &=
5602   [ a:defaultValue = "top" ]
5603   attribute style:vertical-align { "top" | "middle" | "bottom" }?
5604 style-column-sep-attlist &=
5605   [ a:defaultValue = "#000000" ] attribute style:color { color }?
5606 style-section-properties-attlist &=
5607   [ a:defaultValue = "false" ] attribute style:protect { boolean }?
5608 style-section-properties-attlist &=
5609   attribute text:dont-balance-text-columns { boolean }?
5610 style-section-properties-attlist &= common-writing-mode-attlist
5611 style-section-properties-elements &= text-notes-configuration*
5612 style-table-properties =
5613   element style:table-properties { style-table-properties-content }
5614 style-table-properties-content = style-properties-content
5615 style-table-properties-content-strict =
5616   style-table-properties-attlist, style-table-properties-elements
5617 style-table-properties-attlist &=
5618   attribute style:width { positiveLength }?,
5619   attribute style:rel-width { percent }?
5620 style-table-properties-attlist &=
5621   attribute table:align { "left" | "center" | "right" | "margins" }?
5622 style-table-properties-attlist &= common-horizontal-margin-attlist
5623 style-table-properties-attlist &= common-vertical-margin-attlist
5624 style-table-properties-attlist &= common-margin-attlist
5625 style-table-properties-attlist &= common-page-number-attlist
5626 style-table-properties-attlist &= common-break-attlist
5627 style-table-properties-attlist &= common-background-color-attlist
5628 style-table-properties-elements &= style-background-image
5629 style-table-properties-attlist &= common-shadow-attlist
5630 style-table-properties-attlist &= common-keep-with-next-attlist
5631 style-table-properties-attlist &=
5632   attribute style:may-break-between-rows { boolean }?
5633 style-table-properties-attlist &=
5634   attribute table:border-model { "collapsing" | "separating" }?
5635 style-table-properties-attlist &= common-writing-mode-attlist
5636 style-table-properties-attlist &= attribute table:display { boolean }?
5637 style-table-column-properties =
5638   element style:table-column-properties {
5639     style-table-column-properties-content
5640   }
5641 style-table-column-properties-content = style-properties-content
5642 style-table-column-properties-content-strict =
5643   style-table-column-properties-attlist,
5644   style-table-column-properties-elements
5645 style-table-column-properties-elements = empty
5646 style-table-column-properties-attlist &=
5647   attribute style:column-width { positiveLength }?,
5648   attribute style:rel-column-width { relativeLength }?
5649 style-table-column-properties-attlist &=
5650   attribute style:use-optimal-column-width { boolean }?
5651 style-table-column-properties-attlist &= common-break-attlist
5652 style-table-row-properties =
5653   element style:table-row-properties {
5654     style-table-row-properties-content
5655   }
5656 style-table-row-properties-content = style-properties-content
5657 style-table-row-properties-content-strict =
5658   style-table-row-properties-attlist,
5659   style-table-row-properties-elements
5660 style-table-row-properties-attlist &=
5661   attribute style:row-height { positiveLength }?,
5662   attribute style:min-row-height { nonNegativeLength }?
5663 style-table-row-properties-attlist &=
5664   attribute style:use-optimal-row-height { boolean }?
5665 style-table-row-properties-attlist &= common-background-color-attlist
5666 style-table-row-properties-elements &= style-background-image
5667 style-table-row-properties-attlist &= common-break-attlist
5668 style-table-row-properties-attlist &=
5669   attribute fo:keep-together { "auto" | "always" }?
5670 style-table-cell-properties =
5671   element style:table-cell-properties {
5672     style-table-cell-properties-content
5673   }
5674 style-table-cell-properties-content = style-properties-content
5675 style-table-cell-properties-content-strict =
5676   style-table-cell-properties-attlist,
5677   style-table-cell-properties-elements
5678 style-table-cell-properties-attlist &=
5679   attribute style:vertical-align {
5680     "top" | "middle" | "bottom" | "automatic"
5681   }?
5682 style-table-cell-properties-attlist &=
5683   attribute style:text-align-source { "fix" | "value-type" }?
5684 style-table-cell-properties-attlist &= common-style-direction-attlist
5685 common-style-direction-attlist =
5686   attribute style:direction { "ltr" | "ttb" }?
5687 style-table-cell-properties-attlist &=
5688   attribute style:glyph-orientation-vertical { "auto" | "0" }?
5689 style-table-cell-properties-attlist &= common-shadow-attlist
5690 style-table-cell-properties-attlist &= common-background-color-attlist
5691 style-table-cell-properties-elements &= style-background-image
5692 style-table-cell-properties-attlist &= common-border-attlist
5693 style-table-cell-properties-attlist &=
5694   attribute style:diagonal-tl-br { \string }?,
5695   attribute style:diagonal-tl-br-widths { borderWidths }?,
5696   attribute style:diagonal-bl-tr { \string }?,
5697   attribute style:diagonal-bl-tr-widths { borderWidths }?
5698 style-table-cell-properties-attlist &= common-border-line-width-attlist
5699 style-table-cell-properties-attlist &= common-padding-attlist
5700 style-table-cell-properties-attlist &=
5701   attribute fo:wrap-option { "no-wrap" | "wrap" }?
5702 style-table-cell-properties-attlist &= common-rotation-angle-attlist
5703 common-rotation-angle-attlist =
5704   attribute style:rotation-angle { nonNegativeInteger }?
5705 style-table-cell-properties-attlist &=
5706   attribute style:rotation-align {
5707     "none" | "bottom" | "top" | "center"
5708   }?
5709 style-table-cell-properties-attlist &=
5710   attribute style:cell-protect {
5711     "none"
5712     | "hidden-and-protected"
5713     | list { ("protected" | "formula-hidden")+ }
5714   }?
5715 style-table-cell-properties-attlist &=
5716   attribute style:print-content { boolean }?
5717 style-table-cell-properties-attlist &=
5718   attribute style:decimal-places { nonNegativeInteger }?
5719 style-table-cell-properties-attlist &=
5720   attribute style:repeat-content { boolean }?
5721 style-table-cell-properties-attlist &=
5722   attribute style:shrink-to-fit { boolean }?
5723 style-list-level-properties =
5724   element style:list-level-properties {
5725     style-list-level-properties-content
5726   }
5727 style-list-level-properties-content = style-properties-content
5728 style-list-level-properties-content-strict =
5729   style-list-level-properties-attlist,
5730   style-list-level-properties-elements
5731 style-list-level-properties-elements = empty
5732 style-list-level-properties-attlist &= common-text-align
5733 style-list-level-properties-attlist &=
5734   attribute text:space-before { nonNegativeLength }?
5735 style-list-level-properties-attlist &=
5736   attribute text:min-label-width { nonNegativeLength }?
5737 style-list-level-properties-attlist &=
5738   attribute text:min-label-distance { nonNegativeLength }?
5739 style-list-level-properties-attlist &=
5740   attribute style:font-name { \string }?
5741 style-list-level-properties-attlist &=
5742   attribute fo:width { positiveLength }?,
5743   attribute fo:height { positiveLength }?
5744 style-list-level-properties-attlist &=
5745   common-vertical-rel-attlist, common-vertical-pos-attlist
5746 style-graphic-properties-attlist &=
5747   attribute draw:stroke { "none" | "dash" | "solid" }?
5748 style-graphic-properties-attlist &=
5749   attribute draw:stroke-dash { styleNameRef }?
5750 style-graphic-properties-attlist &=
5751   attribute draw:stroke-dash-names { styleNameRefs }?
5752 style-graphic-properties-attlist &=
5753   attribute svg:stroke-width { length }?
5754 style-graphic-properties-attlist &=
5755   attribute svg:stroke-color { color }?
5756 style-graphic-properties-attlist &=
5757   attribute draw:marker-start { styleNameRef }?
5758 style-graphic-properties-attlist &=
5759   attribute draw:marker-end { styleNameRef }?
5760 style-graphic-properties-attlist &=
5761   attribute draw:marker-start-width { length }?
5762 style-graphic-properties-attlist &=
5763   attribute draw:marker-end-width { length }?
5764 style-graphic-properties-attlist &=
5765   attribute draw:marker-start-center { boolean }?
5766 style-graphic-properties-attlist &=
5767   attribute draw:marker-end-center { boolean }?
5768 style-graphic-properties-attlist &=
5769   attribute svg:stroke-opacity {
5770     xsd:double { minInclusive = "0" maxInclusive = "1" }
5771     | percent
5772   }?
5773 style-graphic-properties-attlist &=
5774   attribute draw:stroke-linejoin {
5775     "miter" | "round" | "bevel" | "middle" | "none" | "inherit"
5776   }?
5777 style-graphic-fill-properties-attlist &=
5778   attribute draw:fill {
5779     "none" | "solid" | "bitmap" | "gradient" | "hatch"
5780   }?
5781 style-graphic-fill-properties-attlist &=
5782   attribute draw:fill-color { color }?
5783 style-graphic-fill-properties-attlist &=
5784   attribute draw:secondary-fill-color { color }?
5785 style-graphic-fill-properties-attlist &=
5786   attribute draw:fill-gradient-name { styleNameRef }?
5787 style-graphic-fill-properties-attlist &=
5788   attribute draw:gradient-step-count { nonNegativeInteger }?
5789 style-graphic-fill-properties-attlist &=
5790   attribute draw:fill-hatch-name { styleNameRef }?
5791 style-graphic-fill-properties-attlist &=
5792   attribute draw:fill-hatch-solid { boolean }?
5793 style-graphic-fill-properties-attlist &=
5794   attribute draw:fill-image-name { styleNameRef }?
5795 style-graphic-fill-properties-attlist &=
5796   attribute style:repeat { "no-repeat" | "repeat" | "stretch" }?
5797 style-graphic-fill-properties-attlist &=
5798   attribute draw:fill-image-width { length | percent }?,
5799   attribute draw:fill-image-height { length | percent }?
5800 style-graphic-fill-properties-attlist &=
5801   attribute draw:fill-image-ref-point-x { percent }?,
5802   attribute draw:fill-image-ref-point-y { percent }?,
5803   attribute draw:fill-image-ref-point {
5804     "top-left"
5805     | "top"
5806     | "top-right"
5807     | "left"
5808     | "center"
5809     | "right"
5810     | "bottom-left"
5811     | "bottom"
5812     | "bottom-right"
5813   }?
5814 style-graphic-fill-properties-attlist &=
5815   attribute draw:tile-repeat-offset { text }?
5816 style-graphic-fill-properties-attlist &=
5817   attribute draw:opacity { percent }?
5818 style-graphic-fill-properties-attlist &=
5819   attribute draw:opacity-name { styleNameRef }?
5820 style-graphic-fill-properties-attlist &=
5821   attribute svg:fill-rule { "nonzero" | "evenodd" }?
5822 style-graphic-properties-attlist &=
5823   attribute draw:symbol-color { color }?
5824 style-graphic-properties-attlist &=
5825   attribute text:animation {
5826     "none" | "scroll" | "alternate" | "slide"
5827   }?
5828 style-graphic-properties-attlist &=
5829   attribute text:animation-direction {
5830     "left" | "right" | "up" | "down"
5831   }?
5832 style-graphic-properties-attlist &=
5833   attribute text:animation-start-inside { boolean }?
5834 style-graphic-properties-attlist &=
5835   attribute text:animation-stop-inside { boolean }?
5836 style-graphic-properties-attlist &=
5837   attribute text:animation-repeat { nonNegativeInteger }?
5838 style-graphic-properties-attlist &=
5839   attribute text:animation-delay { duration }?
5840 style-graphic-properties-attlist &=
5841   attribute text:animation-steps { length }?
5842 style-graphic-properties-attlist &=
5843   attribute draw:auto-grow-width { boolean }?,
5844   attribute draw:auto-grow-height { boolean }?
5845 style-graphic-properties-attlist &=
5846   attribute draw:fit-to-size { boolean }?
5847 style-graphic-properties-attlist &=
5848   attribute draw:fit-to-contour { boolean }?
5849 style-graphic-properties-attlist &=
5850   attribute draw:textarea-vertical-align {
5851     "top" | "middle" | "bottom" | "justify"
5852   }?
5853 style-graphic-properties-attlist &=
5854   attribute draw:textarea-horizontal-align {
5855     "left" | "center" | "right" | "justify"
5856   }?
5857 style-graphic-properties-attlist &=
5858   attribute fo:wrap-option { "no-wrap" | "wrap" }?
5859 style-graphic-properties-elements &= text-list-style?
5860 style-graphic-properties-attlist &=
5861   attribute draw:color-mode {
5862     "greyscale" | "mono" | "watermark" | "standard"
5863   }?
5864 style-graphic-properties-attlist &=
5865   attribute draw:color-inversion { boolean }?
5866 style-graphic-properties-attlist &=
5867   attribute draw:luminance { percent }?
5868 style-graphic-properties-attlist &= attribute draw:contrast { percent }?
5869 style-graphic-properties-attlist &= attribute draw:gamma { percent }?
5870 style-graphic-properties-attlist &= attribute draw:red { percent }?
5871 style-graphic-properties-attlist &= attribute draw:green { percent }?
5872 style-graphic-properties-attlist &= attribute draw:blue { percent }?
5873 style-graphic-properties-attlist &=
5874   attribute draw:image-opacity { percent }?
5875 style-graphic-properties-attlist &=
5876   attribute draw:shadow { "visible" | "hidden" }?
5877 style-graphic-properties-attlist &=
5878   attribute draw:shadow-offset-x { length }?,
5879   attribute draw:shadow-offset-y { length }?
5880 style-graphic-properties-attlist &=
5881   attribute draw:shadow-color { color }?
5882 style-graphic-properties-attlist &=
5883   attribute draw:shadow-opacity { percent }?
5884 style-graphic-properties-attlist &=
5885   attribute draw:start-line-spacing-horizontal { distance }?,
5886   attribute draw:start-line-spacing-vertical { distance }?
5887 style-graphic-properties-attlist &=
5888   attribute draw:end-line-spacing-horizontal { distance }?,
5889   attribute draw:end-line-spacing-vertical { distance }?
5890 style-graphic-properties-attlist &=
5891   attribute draw:line-distance { distance }?
5892 style-graphic-properties-attlist &=
5893   attribute draw:guide-overhang { length }?
5894 style-graphic-properties-attlist &=
5895   attribute draw:guide-distance { distance }?
5896 style-graphic-properties-attlist &=
5897   attribute draw:start-guide { length }?
5898 style-graphic-properties-attlist &= attribute draw:end-guide { length }?
5899 style-graphic-properties-attlist &=
5900   attribute draw:placing { "below" | "above" }?
5901 style-graphic-properties-attlist &= attribute draw:parallel { boolean }?
5902 style-graphic-properties-attlist &=
5903   attribute draw:measure-align {
5904     "automatic" | "left-outside" | "inside" | "right-outside"
5905   }?,
5906   attribute draw:measure-vertical-align {
5907     "automatic" | "above" | "below" | "center"
5908   }?
5909 style-graphic-properties-attlist &=
5910   attribute draw:unit {
5911     "automatic"
5912     | "mm"
5913     | "cm"
5914     | "m"
5915     | "km"
5916     | "pt"
5917     | "pc"
5918     | "inch"
5919     | "ft"
5920     | "mi"
5921   }?
5922 style-graphic-properties-attlist &=
5923   attribute draw:show-unit { boolean }?
5924 style-graphic-properties-attlist &=
5925   attribute draw:decimal-places { nonNegativeInteger }?
5926 style-graphic-properties-attlist &=
5927   attribute draw:caption-type {
5928     "straight-line" | "angled-line" | "angled-connector-line"
5929   }?
5930 style-graphic-properties-attlist &=
5931   attribute draw:caption-angle-type { "fixed" | "free" }?
5932 style-graphic-properties-attlist &=
5933   attribute draw:caption-angle { nonNegativeInteger }?
5934 style-graphic-properties-attlist &=
5935   attribute draw:caption-gap { distance }?
5936 style-graphic-properties-attlist &=
5937   attribute draw:caption-escape-direction {
5938     "horizontal" | "vertical" | "auto"
5939   }?
5940 style-graphic-properties-attlist &=
5941   attribute draw:caption-escape { length | percent }?
5942 style-graphic-properties-attlist &=
5943   attribute draw:caption-line-length { length }?
5944 style-graphic-properties-attlist &=
5945   attribute draw:caption-fit-line-length { boolean }?
5946 style-graphic-properties-attlist &=
5947   attribute dr3d:horizontal-segments { nonNegativeInteger }?
5948 style-graphic-properties-attlist &=
5949   attribute dr3d:vertical-segments { nonNegativeInteger }?
5950 style-graphic-properties-attlist &=
5951   attribute dr3d:edge-rounding { percent }?
5952 style-graphic-properties-attlist &=
5953   attribute dr3d:edge-rounding-mode { "correct" | "attractive" }?
5954 style-graphic-properties-attlist &=
5955   attribute dr3d:back-scale { percent }?
5956 style-graphic-properties-attlist &= attribute dr3d:depth { length }?
5957 style-graphic-properties-attlist &=
5958   attribute dr3d:backface-culling { "enabled" | "disabled" }?
5959 style-graphic-properties-attlist &=
5960   attribute dr3d:end-angle { nonNegativeInteger }?
5961 style-graphic-properties-attlist &=
5962   attribute dr3d:close-front { boolean }?
5963 style-graphic-properties-attlist &=
5964   attribute dr3d:close-back { boolean }?
5965 style-graphic-properties-attlist &=
5966   attribute dr3d:lighting-mode { "standard" | "double-sided" }?
5967 style-graphic-properties-attlist &=
5968   attribute dr3d:normals-kind { "object" | "flat" | "sphere" }?
5969 style-graphic-properties-attlist &=
5970   attribute dr3d:normals-direction { "normal" | "inverse" }?
5971 style-graphic-properties-attlist &=
5972   attribute dr3d:texture-generation-mode-x {
5973     "object" | "parallel" | "sphere"
5974   }?,
5975   attribute dr3d:texture-generation-mode-y {
5976     "object" | "parallel" | "sphere"
5977   }?
5978 style-graphic-properties-attlist &=
5979   attribute dr3d:texture-kind { "luminance" | "intensity" | "color" }?
5980 style-graphic-properties-attlist &=
5981   attribute dr3d:texture-filter { "enabled" | "disabled" }?
5982 style-graphic-properties-attlist &=
5983   attribute dr3d:texture-mode { "replace" | "modulate" | "blend" }?
5984 style-graphic-properties-attlist &=
5985   attribute dr3d:ambient-color { color }?,
5986   attribute dr3d:emissive-color { color }?,
5987   attribute dr3d:specular-color { color }?,
5988   attribute dr3d:diffuse-color { color }?
5989 style-graphic-properties-attlist &=
5990   attribute dr3d:shininess { percent }?
5991 style-graphic-properties-attlist &=
5992   attribute dr3d:shadow { "visible" | "hidden" }?
5993 style-graphic-properties-attlist &=
5994   common-draw-rel-size-attlist,
5995   attribute fo:min-width { length | percent }?
5996 style-graphic-properties-attlist &=
5997   attribute fo:min-height { length | percent }?
5998 style-graphic-properties-attlist &=
5999   attribute fo:max-height { length | percent }?,
6000   attribute fo:max-width { length | percent }?
6001 style-graphic-properties-attlist &= common-horizontal-margin-attlist
6002 style-graphic-properties-attlist &= common-vertical-margin-attlist
6003 style-graphic-properties-attlist &= common-margin-attlist
6004 style-graphic-properties-attlist &=
6005   attribute style:print-content { boolean }?
6006 style-graphic-properties-attlist &=
6007   attribute style:protect {
6008     "none"
6009     | list { ("content" | "position" | "size")+ }
6010   }?
6011 style-graphic-properties-attlist &=
6012   attribute style:horizontal-pos {
6013     "left"
6014     | "center"
6015     | "right"
6016     | "from-left"
6017     | "inside"
6018     | "outside"
6019     | "from-inside"
6020   }?,
6021   attribute svg:x { coordinate }?
6022 style-graphic-properties-attlist &=
6023   attribute style:horizontal-rel {
6024     "page"
6025     | "page-content"
6026     | "page-start-margin"
6027     | "page-end-margin"
6028     | "frame"
6029     | "frame-content"
6030     | "frame-start-margin"
6031     | "frame-end-margin"
6032     | "paragraph"
6033     | "paragraph-content"
6034     | "paragraph-start-margin"
6035     | "paragraph-end-margin"
6036     | "char"
6037   }?
6038 style-graphic-properties-attlist &= common-vertical-pos-attlist
6039 common-vertical-pos-attlist =
6040   attribute style:vertical-pos {
6041     "top" | "middle" | "bottom" | "from-top" | "below"
6042   }?,
6043   attribute svg:y { coordinate }?
6044 style-graphic-properties-attlist &= common-vertical-rel-attlist
6045 common-vertical-rel-attlist =
6046   attribute style:vertical-rel {
6047     "page"
6048     | "page-content"
6049     | "frame"
6050     | "frame-content"
6051     | "paragraph"
6052     | "paragraph-content"
6053     | "char"
6054     | "line"
6055     | "baseline"
6056     | "text"
6057   }?
6058 style-graphic-properties-attlist &= common-text-anchor-attlist
6059 style-graphic-properties-attlist &= common-border-attlist
6060 style-graphic-properties-attlist &= common-border-line-width-attlist
6061 style-graphic-properties-attlist &= common-padding-attlist
6062 style-graphic-properties-attlist &= common-shadow-attlist
6063 style-graphic-properties-attlist &= common-background-color-attlist
6064 style-graphic-properties-elements &= style-background-image
6065 style-graphic-properties-elements &= style-columns
6066 style-graphic-properties-attlist &=
6067   attribute style:editable { boolean }?
6068 style-graphic-properties-attlist &=
6069   attribute style:wrap {
6070     "none"
6071     | "left"
6072     | "right"
6073     | "parallel"
6074     | "dynamic"
6075     | "run-through"
6076     | "biggest"
6077   }?
6078 style-graphic-properties-attlist &=
6079   attribute style:wrap-dynamic-threshold { nonNegativeLength }?
6080 style-graphic-properties-attlist &=
6081   attribute style:number-wrapped-paragraphs {
6082     "no-limit" | positiveInteger
6083   }?
6084 style-graphic-properties-attlist &=
6085   attribute style:wrap-contour { boolean }?
6086 style-graphic-properties-attlist &=
6087   attribute style:wrap-contour-mode { "full" | "outside" }?
6088 style-graphic-properties-attlist &=
6089   attribute style:run-through { "foreground" | "background" }?
6090 style-graphic-properties-attlist &=
6091   attribute style:flow-with-text { boolean }?
6092 style-graphic-properties-attlist &=
6093   attribute style:overflow-behavior {
6094     "clip" | "auto-create-new-frame"
6095   }?
6096 style-graphic-properties-attlist &=
6097   attribute style:mirror {
6098     "none"
6099     | "vertical"
6100     | horizontal-mirror
6101     | list { "vertical", horizontal-mirror }
6102     | list { horizontal-mirror, "vertical" }
6103   }?
6104 horizontal-mirror =
6105   "horizontal" | "horizontal-on-odd" | "horizontal-on-even"
6106 style-graphic-properties-attlist &=
6107   attribute fo:clip {
6108     # The attribute value must match the one XSL's clip
6109     \string
6110   }?
6111 style-graphic-properties-attlist &=
6112   [ a:defaultValue = "iterative" ]
6113   attribute draw:wrap-influence-on-position {
6114     "iterative" | "once-concurrent" | "once-successive"
6115   }?
6116 style-graphic-properties-attlist &= common-writing-mode-attlist
6117 style-graphic-properties-attlist &=
6118   attribute draw:frame-display-scrollbar { boolean }?
6119 style-graphic-properties-attlist &=
6120   attribute draw:frame-display-border { boolean }?
6121 style-graphic-properties-attlist &=
6122   attribute draw:frame-margin-horizontal { nonNegativePixelLength }?,
6123   attribute draw:frame-margin-vertical { nonNegativePixelLength }?
6124 nonNegativePixelLength =
6125   xsd:string { pattern = "([0-9]+(\.[0-9]*)?|\.[0-9]+)(px)" }
6126 style-graphic-properties-attlist &=
6127   attribute draw:visible-area-left { nonNegativeLength }?,
6128   attribute draw:visible-area-top { nonNegativeLength }?,
6129   attribute draw:visible-area-width { positiveLength }?,
6130   attribute draw:visible-area-height { positiveLength }?
6131 style-graphic-properties-attlist &=
6132   attribute draw:ole-draw-aspect { nonNegativeInteger }?
6133 style-chart-properties =
6134   element style:chart-properties { style-chart-properties-content }
6135 style-chart-properties-content = style-properties-content
6136 style-chart-properties-content-strict =
6137   style-chart-properties-attlist, style-chart-properties-elements
6138 style-chart-properties-elements = empty
6139 style-chart-properties-attlist &=
6140   [ a:defaultValue = "true" ] attribute chart:scale-text { boolean }?
6141 style-chart-properties-attlist &=
6142   attribute chart:three-dimensional { boolean }?
6143 style-chart-properties-attlist &= attribute chart:deep { boolean }?
6144 style-chart-properties-attlist &=
6145   attribute chart:symbol-type { "none" }
6146   | attribute chart:symbol-type { "automatic" }
6147   | (attribute chart:symbol-type { "named-symbol" },
6148      attribute chart:symbol-name {
6149        "square"
6150        | "diamond"
6151        | "arrow-down"
6152        | "arrow-up"
6153        | "arrow-right"
6154        | "arrow-left"
6155        | "bow-tie"
6156        | "hourglass"
6157        | "circle"
6158        | "star"
6159        | "x"
6160        | "plus"
6161        | "asterisk"
6162        | "horizontal-bar"
6163        | "vertical-bar"
6164      })
6165   | (attribute chart:symbol-type { "image" },
6166      element chart:symbol-image {
6167        attribute xlink:href { anyURI }
6168      })
6169   | empty
6170 style-chart-properties-attlist &=
6171   attribute chart:symbol-width { nonNegativeLength }?,
6172   attribute chart:symbol-height { nonNegativeLength }?
6173 style-chart-properties-attlist &=
6174   [ a:defaultValue = "false" ] attribute chart:vertical { boolean }?
6175 style-chart-properties-attlist &=
6176   [ a:defaultValue = "false" ] attribute chart:connect-bars { boolean }?
6177 style-chart-properties-attlist &=
6178   attribute chart:gap-width { integer }?,
6179   attribute chart:overlap { integer }?
6180 style-chart-properties-attlist &=
6181   [ a:defaultValue = "false" ]
6182   attribute chart:japanese-candle-stick { boolean }?
6183 style-chart-properties-attlist &=
6184   [ a:defaultValue = "none" ]
6185   attribute chart:interpolation {
6186     "none" | "cubic-spline" | "b-spline"
6187   }?,
6188   [ a:defaultValue = "2" ]
6189   attribute chart:spline-order { positiveInteger }?,
6190   [ a:defaultValue = "20" ]
6191   attribute chart:spline-resolution { positiveInteger }?
6192 style-chart-properties-attlist &=
6193   [ a:defaultValue = "0" ]
6194   attribute chart:pie-offset { nonNegativeInteger }?
6195 style-chart-properties-attlist &=
6196   [ a:defaultValue = "false" ] attribute chart:lines { boolean }?
6197 style-chart-properties-attlist &=
6198   [ a:defaultValue = "cuboid" ]
6199   attribute chart:solid-type {
6200     "cuboid" | "cylinder" | "cone" | "pyramid"
6201   }?
6202 style-chart-properties-attlist &=
6203   [ a:defaultValue = "false" ] attribute chart:stacked { boolean }?,
6204   [ a:defaultValue = "false" ] attribute chart:percentage { boolean }?
6205 style-chart-properties-attlist &=
6206   attribute chart:link-data-style-to-source { boolean }?
6207 style-chart-properties-attlist &= attribute chart:visible { boolean }?
6208 style-chart-properties-attlist &=
6209   attribute chart:logarithmic { boolean }?
6210 style-chart-properties-attlist &=
6211   attribute chart:maximum { double }?,
6212   attribute chart:minimum { double }?,
6213   attribute chart:origin { double }?,
6214   attribute chart:interval-major { double }?,
6215   attribute chart:interval-minor-divisor { positiveInteger }?
6216 style-chart-properties-attlist &=
6217   attribute chart:tick-marks-major-inner { boolean }?,
6218   attribute chart:tick-marks-major-outer { boolean }?,
6219   attribute chart:tick-marks-minor-inner { boolean }?,
6220   attribute chart:tick-marks-minor-outer { boolean }?
6221 style-chart-properties-attlist &=
6222   attribute chart:display-label { boolean }?,
6223   attribute chart:text-overlap { boolean }?,
6224   attribute text:line-break { boolean }?,
6225   [ a:defaultValue = "side-by-side" ]
6226   attribute chart:label-arrangement {
6227     "side-by-side" | "stagger-even" | "stagger-odd"
6228   }?
6229 style-chart-properties-attlist &= common-style-direction-attlist
6230 style-chart-properties-attlist &= common-rotation-angle-attlist
6231 style-chart-properties-attlist &=
6232   attribute chart:data-label-number { "none" | "value" | "percentage" }?
6233 style-chart-properties-attlist &=
6234   attribute chart:data-label-text { boolean }?
6235 style-chart-properties-attlist &=
6236   attribute chart:data-label-symbol { boolean }?
6237 style-chart-properties-attlist &=
6238   attribute chart:mean-value { boolean }?
6239 style-chart-properties-attlist &=
6240   [ a:defaultValue = "none" ]
6241   attribute chart:error-category {
6242     "none"
6243     | "variance"
6244     | "standard-deviation"
6245     | "percentage"
6246     | "error-margin"
6247     | "constant"
6248   }?
6249 style-chart-properties-attlist &=
6250   attribute chart:error-percentage { double }?
6251 style-chart-properties-attlist &=
6252   attribute chart:error-margin { double }?
6253 style-chart-properties-attlist &=
6254   attribute chart:error-lower-limit { double }?,
6255   attribute chart:error-upper-limit { double }?
6256 style-chart-properties-attlist &=
6257   attribute chart:error-upper-indicator { boolean }?,
6258   attribute chart:error-lower-indicator { boolean }?
6259 style-chart-properties-attlist &=
6260   [ a:defaultValue = "columns" ]
6261   attribute chart:series-source { "columns" | "rows" }?
6262 style-chart-properties-attlist &=
6263   [ a:defaultValue = "none" ]
6264   attribute chart:regression-type {
6265     "none" | "linear" | "logarithmic" | "exponential" | "power"
6266   }?
6267 style-drawing-page-properties-attlist &=
6268   attribute presentation:transition-type {
6269     "manual" | "automatic" | "semi-automatic"
6270   }?
6271 style-drawing-page-properties-attlist &=
6272   attribute presentation:transition-style {
6273     "none"
6274     | "fade-from-left"
6275     | "fade-from-top"
6276     | "fade-from-right"
6277     | "fade-from-bottom"
6278     | "fade-from-upperleft"
6279     | "fade-from-upperright"
6280     | "fade-from-lowerleft"
6281     | "fade-from-lowerright"
6282     | "move-from-left"
6283     | "move-from-top"
6284     | "move-from-right"
6285     | "move-from-bottom"
6286     | "move-from-upperleft"
6287     | "move-from-upperright"
6288     | "move-from-lowerleft"
6289     | "move-from-lowerright"
6290     | "uncover-to-left"
6291     | "uncover-to-top"
6292     | "uncover-to-right"
6293     | "uncover-to-bottom"
6294     | "uncover-to-upperleft"
6295     | "uncover-to-upperright"
6296     | "uncover-to-lowerleft"
6297     | "uncover-to-lowerright"
6298     | "fade-to-center"
6299     | "fade-from-center"
6300     | "vertical-stripes"
6301     | "horizontal-stripes"
6302     | "clockwise"
6303     | "counterclockwise"
6304     | "open-vertical"
6305     | "open-horizontal"
6306     | "close-vertical"
6307     | "close-horizontal"
6308     | "wavyline-from-left"
6309     | "wavyline-from-top"
6310     | "wavyline-from-right"
6311     | "wavyline-from-bottom"
6312     | "spiralin-left"
6313     | "spiralin-right"
6314     | "spiralout-left"
6315     | "spiralout-right"
6316     | "roll-from-top"
6317     | "roll-from-left"
6318     | "roll-from-right"
6319     | "roll-from-bottom"
6320     | "stretch-from-left"
6321     | "stretch-from-top"
6322     | "stretch-from-right"
6323     | "stretch-from-bottom"
6324     | "vertical-lines"
6325     | "horizontal-lines"
6326     | "dissolve"
6327     | "random"
6328     | "vertical-checkerboard"
6329     | "horizontal-checkerboard"
6330     | "interlocking-horizontal-left"
6331     | "interlocking-horizontal-right"
6332     | "interlocking-vertical-top"
6333     | "interlocking-vertical-bottom"
6334     | "fly-away"
6335     | "open"
6336     | "close"
6337     | "melt"
6338   }?
6339 style-drawing-page-properties-attlist &=
6340   attribute presentation:transition-speed { presentationSpeeds }?
6341 style-drawing-page-properties-attlist &=
6342   attribute smil:type { \string }?
6343 style-drawing-page-properties-attlist &=
6344   attribute smil:subtype { \string }?
6345 style-drawing-page-properties-attlist &=
6346   [ a:defaultValue = "forward" ]
6347   attribute smil:direction { "forward" | "reverse" }?
6348 style-drawing-page-properties-attlist &=
6349   attribute smil:fadeColor { color }?
6350 style-drawing-page-properties-attlist &=
6351   attribute presentation:duration { duration }?
6352 style-drawing-page-properties-attlist &=
6353   attribute presentation:visibility { "visible" | "hidden" }?
6354 style-drawing-page-properties-elements &= presentation-sound?
6355 style-drawing-page-properties-attlist &=
6356   attribute draw:background-size { "full" | "border" }?
6357 style-drawing-page-properties-attlist &=
6358   attribute presentation:background-objects-visible { boolean }?
6359 style-drawing-page-properties-attlist &=
6360   attribute presentation:background-visible { boolean }?
6361 style-drawing-page-properties-attlist &=
6362   attribute presentation:display-header { boolean }?
6363 style-drawing-page-properties-attlist &=
6364   attribute presentation:display-footer { boolean }?
6365 style-drawing-page-properties-attlist &=
6366   attribute presentation:display-page-number { boolean }?
6367 style-drawing-page-properties-attlist &=
6368   attribute presentation:display-date-time { boolean }?
6369 \string = xsd:string
6370 date = xsd:date
6371 time = xsd:time
6372 dateTime = xsd:dateTime
6373 duration = xsd:duration
6374 integer = xsd:integer
6375 nonNegativeInteger = xsd:nonNegativeInteger
6376 positiveInteger = xsd:positiveInteger
6377 double = xsd:double
6378 anyURI = xsd:anyURI
6379 base64Binary = xsd:base64Binary
6380 ID = xsd:ID
6381 IDREF = xsd:IDREF
6382 IDREFS = xsd:IDREFS
6383 boolean = "true" | "false"
6384 dateOrDateTime = xsd:date | xsd:dateTime
6385 timeOrDateTime = xsd:time | xsd:dateTime
6386 language = xsd:language
6387 countryCode = xsd:token { pattern = "[A-Za-z0-9]{1,8}" }
6388 languageCode = xsd:token { pattern = "[A-Za-z]{1,8}" }
6389 character = xsd:string { length = "1" }
6390 length =
6391   xsd:string {
6392     pattern =
6393       "-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px))"
6394   }
6395 nonNegativeLength =
6396   xsd:string {
6397     pattern =
6398       "([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px))"
6399   }
6400 positiveLength =
6401   xsd:string {
6402     pattern =
6403       "([0-9]*[1-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px))"
6404   }
6405 percent = xsd:string { pattern = "-?([0-9]+(\.[0-9]*)?|\.[0-9]+)%" }
6406 relativeLength = xsd:string { pattern = "[0-9]+\*" }
6407 coordinate = length
6408 distance = length
6409 color = xsd:string { pattern = "#[0-9a-fA-F]{6}" }
6410 styleName = xsd:NCName
6411 styleNameRef = xsd:NCName | empty
6412 styleNameRefs = list { xsd:NCName* }
6413 variableName = xsd:string
6414 formula =
6415   # A formula should start with a namespace prefix,
6416   
6417   #  but has no restrictions
6418   xsd:string
6419 targetFrameName = "_self" | "_blank" | "_parent" | "_top" | \string
6420 valueType =
6421   "float"
6422   | "time"
6423   | "date"
6424   | "percentage"
6425   | "currency"
6426   | "boolean"
6427   | "string"
6428 points =
6429   xsd:string { pattern = "-?[0-9]+,-?[0-9]+([ ]+-?[0-9]+,-?[0-9]+)*" }
6430 pathData = xsd:string
6431 vector3D =
6432   xsd:string {
6433     pattern =
6434       "\([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)){2}[ ]*\)"
6435   }
6436 namespacedToken =
6437   xsd:string { pattern = "[0-9a-zA-Z_]+:[0-9a-zA-Z._\-]+" }
6438 anyAttListOrElements =
6439   attribute * { text }*,
6440   anyElements
6441 anyElements =
6442   element * {
6443     mixed { anyAttListOrElements }
6444   }*