Parts
start =
office-document
| office-document-content
| office-document-styles
| office-document-meta
| office-document-settings
office-document =
element office:document {
office-document-attrs,
office-document-common-attrs,
office-meta,
office-settings,
office-scripts,
office-font-face-decls,
office-styles,
office-automatic-styles,
office-master-styles,
office-body
}
office-document-common-attrs =
attribute office:version { "1.2" }
& attribute grddl:transformation {
list { anyIRI* }
}?
Content
office-document-content =
element office:document-content {
office-document-common-attrs,
office-scripts,
office-font-face-decls,
office-automatic-styles,
office-body
}
office-body = element office:body {
element office:text {
attribute text:global { boolean }? &
attribute text:use-soft-page-breaks { boolean }?,
office-forms,
text-tracked-changes,
text-decls,
table-decls,
text-content* | (text-page-sequence, (shape)*),
table-functions
}
}
text-decls =
element text:variable-decls { text-variable-decl* }?,
element text:sequence-decls { text-sequence-decl* }?,
element text:user-field-decls { text-user-field-decl* }?,
element text:dde-connection-decls { text-dde-connection-decl* }?,
text-alphabetical-index-auto-mark-file?
table-decls =
table-calculation-settings?,
table-content-validations?,
table-label-ranges?
text-page-sequence =
element text:page-sequence {
text-page+
}
text-page =
element text:page {
attribute text:master-page-name { styleNameRef },
empty
}
text-content =
text-h |
text-p |
text-list |
text-numbered-paragraph |
table-table |
text-section |
text-soft-page-break |
text-table-of-content |
text-illustration-index |
text-table-index |
text-object-index |
text-user-index |
text-alphabetical-index |
text-bibliography |
shape |
change-marks
Paragraphs
text-h =
element text:h {
heading-attrs,
paragraph-attrs,
element text:number { \string }?,
(paragraph-content | text-a)*
}
text-p =
element text:p {
paragraph-attrs,
(paragraph-content | text-a)*
}
heading-attrs =
attribute text:outline-level { positiveInteger } &
attribute text:restart-numbering { boolean }? &
attribute text:start-value { nonNegativeInteger }? &
attribute text:is-list-header { boolean }?
paragraph-attrs =
attribute text:style-name { styleNameRef }? &
attribute text:class-names { styleNameRefs }? &
attribute text:cond-style-name { styleNameRef }? &
(attribute xml:id { ID }, attribute text:id { NCName }?)? &
common-in-content-meta-attlist?
common-in-content-meta-attlist =
attribute xhtml:about { URIorSafeCURIE },
attribute xhtml:property { CURIEs },
common-meta-literal-attlist
common-meta-literal-attlist =
attribute xhtml:datatype { CURIE }?,
attribute xhtml:content { \string }?
paragraph-content =
text |
element text:s { attribute text:c { nonNegativeInteger }? } |
element text:tab { text-tab-attr } |
element text:line-break { empty } |
text-soft-page-break
element text:span {
attribute text:style-name { styleNameRef }?,
attribute text:class-names { styleNameRefs }?,
(paragraph-content | text-a)*
} |
element text:meta {
common-in-content-meta-attlist? &
attribute xml:id { ID }?,
(paragraph-content | text-a)*
} |
(text-bookmark | text-bookmark-start | text-bookmark-end) |
element text:reference-mark { attribute text:name { \string } } |
element text:reference-mark-start { attribute text:name { \string } } |
element text:reference-mark-end { attribute text:name { \string } } |
element text:note {
text-note-class,
attribute text:id { \string }?,
element text:note-citation {
attribute text:label { \string }?,
text
},
element text:note-body { text-content* }
} |
element text:ruby {
attribute text:style-name { styleNameRef }?,
element text:ruby-base { (paragraph-content | text-a)* },
element text:ruby-text {
attribute text:style-name { styleNameRef }?,
text
}
} |
(office-annotation | office-annotation-end) |
change-marks |
shape |
element text:date { text-date-attlist, text } |
element text:time { text-time-attlist, text } |
element text:page-number { text-page-number-attlist, text } |
element text:page-continuation { text-page-continuation-attlist, text } |
element text:author-name { common-field-fixed-attlist, text } |
element text:author-initials { common-field-fixed-attlist, text } |
element text:chapter { text-chapter-attlist, text } |
element text:title { common-field-fixed-attlist, text } |
element text:subject { common-field-fixed-attlist, text } |
element text:keywords { common-field-fixed-attlist, text } |
element text:hidden-text { text-hidden-text-attlist, text } |
element text:reference-ref | text:bookmark-ref { |
text-common-ref-content & text-bookmark-ref-content
} |
element text:hidden-paragraph {
text-hidden-paragraph-attlist, text
} |
element text:meta-field { text-meta-field-attlist, (paragraph-content | text-a)* } |
element text:toc-mark-start { text-toc-mark-start-attrs } |
element text:toc-mark-end { text-id } |
element text:toc-mark { attribute text:string-value { \string }, text-outline-level } |
element text:user-index-mark-start { text-id, text-outline-level, text-index-name } |
element text:user-index-mark-end { text-id } |
element text:user-index-mark {
attribute text:string-value { \string },
text-outline-level,
text-index-name
} |
element text:alphabetical-index-mark-start {
text-id, text-alphabetical-index-mark-attrs
} |
element text:alphabetical-index-mark-end { text-id } |
element text:alphabetical-index-mark {
attribute text:string-value { \string },
text-alphabetical-index-mark-attrs
} |
element text:bibliography-mark {
attribute text:bibliography-type { text-bibliography-types },
attribute text:identifier
| text:address
| text:annote
| text:author
| text:booktitle
| text:chapter
| text:edition
| text:editor
| text:howpublished
| text:institution
| text:journal
| text:month
| text:note
| text:number
| text:organizations
| text:pages
| text:publisher
| text:school
| text:series
| text:title
| text:report-type
| text:volume
| text:year
| text:url
| text:custom1
| text:custom2
| text:custom3
| text:custom4
| text:custom5
| text:isbn
| text:issn { \string }*,
text
}
text-a =
element text:a {
attribute office:name { \string }? &
attribute office:title { \string }? &
attribute xlink:type { "simple" } &
attribute xlink:href { anyIRI } &
attribute xlink:actuate { "onRequest" }? &
attribute office:target-frame-name { targetFrameName }? &
attribute xlink:show { "new" | "replace" }? &
attribute text:style-name { styleNameRef }? &
attribute text:visited-style-name { styleNameRef }?,
office-event-listeners?,
paragraph-content*
}
Lists
text-list =
element text:list {
attribute text:style-name { styleNameRef }? &
attribute text:continue-numbering { boolean }? &
attribute text:continue-list { IDREF }? &
attribute xml:id { ID }?
text-list-header?,
text-list-item*
}
text-list-item =
element text:list-item {
attribute text:start-value { nonNegativeInteger }? &
attribute text:style-override { styleNameRef }? &
attribute xml:id { ID }?,
text-list-item-content
}
text-list-item-content =
element text:number { \string }?,
(text-p | text-h | text-list | text-soft-page-break)*
Numbered paragraphs
text-numbered-paragraph =
element text:numbered-paragraph {
text-numbered-paragraph-attr,
element text:number { \string }?,
(text-p| text-h)
}
text-numbered-paragraph-attr =
attribute text:list-id { NCName }
& attribute text:level { positiveInteger }?
& (attribute text:style-name { styleNameRef },
attribute text:continue-numbering { boolean },
attribute text:start-value { nonNegativeInteger })?
& attribute xml:id { ID }?
Sections
text-section =
element text:section {
text-section-attlist,
(text-section-source | office-dde-source | empty),
text-content*
}
text-section-attlist =
common-section-attlist
& (attribute text:display { "true" | "none" }
| (attribute text:display { "condition" },
attribute text:condition { \string })
| empty)
text-section-source =
element text:section-source {
text-section-source-attr =
(attribute xlink:type { "simple" },
attribute xlink:href { anyIRI },
attribute xlink:show { "embed" }?)?
& attribute text:section-name { \string }?
& attribute text:filter-name { \string }?
}
text-soft-page-break = element text:soft-page-break { empty }
common-section-attlist =
attribute text:style-name { styleNameRef }?
& attribute text:name { \string }
& attribute text:protected { boolean }?
& attribute text:protection-key { \string }?
& attribute text:protection-key-digest-algorithm { anyIRI }?
& attribute xml:id { ID }?
Tables
table-table =
element table:table {
attribute table:name { \string }? &
attribute table:style-name { styleNameRef }? &
attribute table:template-name { \string }? &
attribute table:use-first-row-styles { boolean }? &
attribute table:use-last-row-styles { boolean }? &
attribute table:use-first-column-styles { boolean }? &
attribute table:use-last-column-styles { boolean }? &
attribute table:use-banding-rows-styles { boolean }? &
attribute table:use-banding-columns-styles { boolean }? &
attribute table:protected { boolean }? &
attribute table:protection-key { \string }? &
attribute table:protection-key-digest-algorithm { anyIRI }? &
attribute table:print { boolean }? &
attribute table:print-ranges { cellRangeAddressList }? &
attribute xml:id { ID }? &
attribute table:is-sub-table { boolean }?,
element table:title { text }?,
element table:desc { text }?,
table-table-source?,
office-dde-source?,
table-scenario?,
office-forms?,
table-shapes?,
table-columns-and-groups,
table-rows-and-groups,
table-named-expressions?
}
table-columns-and-groups =
(table-table-column-group | table-columns-no-group)+
table-columns-no-group =
(table-columns, (table-table-header-columns, table-columns?)?)
| (table-table-header-columns, table-columns?)
table-columns =
table-table-columns | table-table-column+
table-rows-and-groups =
(table-table-row-group | table-rows-no-group)+
table-rows-no-group =
(table-rows, (table-table-header-rows, table-rows?)?) |
(table-table-header-rows, table-rows?)
table-rows =
table-table-rows |
(text-soft-page-break?, table-table-row)+
table-table-row =
element table:table-row {
attribute table:number-rows-repeated { positiveInteger }? &
attribute table:style-name { styleNameRef }? &
attribute table:default-cell-style-name { styleNameRef }? &
attribute table:visibility { "visible" | "collapse" | "filter" }? &
attribute xml:id { ID }?,
(table-table-cell | table-covered-table-cell)+
}
table-table-cell =
element table:table-cell {
table-table-cell-attlist,
table-table-cell-attlist-extra,
table-table-cell-content
}
table-covered-table-cell =
element table:covered-table-cell {
table-table-cell-attlist,
table-table-cell-content
}
table-table-cell-content =
table-cell-range-source?,
office-annotation?,
table-detective?,
text-content*
table-table-cell-attlist =
attribute table:number-columns-repeated { positiveInteger }? &
attribute table:style-name { styleNameRef }? &
attribute table:content-validation-name { \string }? &
attribute table:formula { \string }? &
common-value-and-type-attlist? &
attribute table:protect { boolean }? &
attribute table:protected { boolean }? &
attribute xml:id { ID }? &
common-in-content-meta-attlist?
table-table-column =
element table:table-column {
attribute table:number-columns-repeated { positiveInteger }? &
attribute table:style-name { styleNameRef }? &
attribute table:visibility { "visible" | "collapse" | "filter" }? &
attribute table:default-cell-style-name { styleNameRef }? &
attribute xml:id { ID }?,
table-table-column-attlist,
empty
}
table-table-header-columns =
element table:table-header-columns {
table-table-column+
}
table-table-columns =
element table:table-columns {
table-table-column+
}
table-table-column-group =
element table:table-column-group {
attribute table:display { boolean }?,
table-columns-and-groups
}
table-table-rows =
element table:table-rows {
(text-soft-page-break?, table-table-row)+
}
table-table-row-group =
element table:table-row-group {
attribute table:display { boolean }?,
table-rows-and-groups
}
Indexes
Table of contents
text-table-of-content =
element text:table-of-content {
common-section-attlist,
element text:table-of-content-source {
text-table-of-content-source-attlist,
text-index-title-template?,
text-table-of-content-entry-template*,
text-index-source-styles*
},
text-index-body
}
text-table-of-content-source-attlist =
attribute text:outline-level { positiveInteger }? &
attribute text:use-outline-level { boolean }? &
attribute text:use-index-marks { boolean }? &
attribute text:use-index-source-styles { boolean }? &
attribute text:index-scope { "document" | "chapter" }? &
attribute text:relative-tab-stop-position { boolean }?
text-table-of-content-entry-template =
element text:table-of-content-entry-template {
attribute text:outline-level { positiveInteger } &
attribute text:style-name { styleNameRef },
(text-index-entry-chapter |
text-index-entry-page-number |
text-index-entry-text |
text-index-entry-span |
text-index-entry-tab-stop |
text-index-entry-link-start |
text-index-entry-link-end)*
}
Illustration index
text-illustration-index =
element text:illustration-index {
common-section-attlist,
element text:illustration-index-source {
text-illustration-index-source-attrs,
text-index-title-template?,
text-illustration-index-entry-template?
},
text-index-body
}
text-illustration-index-source-attrs =
attribute text:index-scope { "document" | "chapter" }? &
attribute text:relative-tab-stop-position { boolean }? &
attribute text:use-caption { boolean }? &
attribute text:caption-sequence-name { \string }? &
attribute text:caption-sequence-format { "text" | "category-and-value" | "caption" }?
text-illustration-index-entry-template =
element text:illustration-index-entry-template {
text-illustration-index-entry-content
}
text-illustration-index-entry-content =
attribute text:style-name { styleNameRef },
(text-index-entry-chapter |
text-index-entry-page-number |
text-index-entry-text |
text-index-entry-span |
text-index-entry-tab-stop)*
Table index
text-table-index =
element text:table-index {
common-section-attlist,
element text:table-index-source {
text-illustration-index-source-attrs,
text-index-title-template?,
text-table-index-entry-template?
},
text-index-body
}
text-table-index-entry-template =
element text:table-index-entry-template {
text-illustration-index-entry-content
}
Object index
text-object-index =
element text:object-index {
common-section-attlist,
element text:object-index-source {
attribute text:index-scope { "document" | "chapter" }? &
attribute text:relative-tab-stop-position { boolean }? &
attribute text:use-spreadsheet-objects { boolean }? &
attribute text:use-math-objects { boolean }? &
attribute text:use-draw-objects { boolean }? &
attribute text:use-chart-objects { boolean }? &
attribute text:use-other-objects { boolean }?,
text-index-title-template?,
text-object-index-entry-template?
},
text-index-body
}
text-object-index-entry-template =
element text:object-index-entry-template {
text-illustration-index-entry-content
}
User index
text-user-index =
element text:user-index {
common-section-attlist,
element text:user-index-source {
text-user-index-source-attr,
text-index-title-template?,
text-user-index-entry-template*,
text-index-source-styles*
},
text-index-body
}
text-user-index-source-attr =
attribute text:index-scope { "document" | "chapter" }? &
attribute text:relative-tab-stop-position { boolean }? &
attribute text:use-index-marks { boolean }? &
attribute text:use-index-source-styles { boolean }? &
attribute text:use-graphics { boolean }? &
attribute text:use-tables { boolean }? &
attribute text:use-floating-frames { boolean }? &
attribute text:use-objects { boolean }? &
attribute text:copy-outline-levels { boolean }? &
attribute text:index-name { \string } &
text-user-index-entry-template =
element text:user-index-entry-template {
attribute text:outline-level { positiveInteger } &
attribute text:style-name { styleNameRef },
(text-index-entry-chapter |
text-index-entry-page-number |
text-index-entry-text |
text-index-entry-span |
text-index-entry-tab-stop)*
}
Alphabetical index
text-alphabetical-index =
element text:alphabetical-index {
common-section-attlist,
text-alphabetical-index-source,
text-index-body
}
text-alphabetical-index-source =
element text:alphabetical-index-source {
text-alphabetical-index-source-attrs,
text-index-title-template?,
text-alphabetical-index-entry-template*
}
text-alphabetical-index-source-attrs =
attribute text:index-scope { "document" | "chapter" }? &
attribute text:relative-tab-stop-position { boolean }? &
attribute text:ignore-case { boolean }? &
attribute text:main-entry-style-name { styleNameRef }? &
attribute text:alphabetical-separators { boolean }? &
attribute text:combine-entries { boolean }? &
attribute text:combine-entries-with-dash { boolean }? &
attribute text:combine-entries-with-pp { boolean }? &
attribute text:use-keys-as-entries { boolean }? &
attribute text:capitalize-entries { boolean }? &
attribute text:comma-separated { boolean }? &
attribute fo:language { languageCode }? &
attribute fo:country { countryCode }? &
attribute fo:script { scriptCode }? &
attribute style:rfc-language-tag { language }? &
attribute text:sort-algorithm { \string }? &
text-alphabetical-index-auto-mark-file =
element text:alphabetical-index-auto-mark-file {
attribute xlink:type { "simple" },
attribute xlink:href { anyIRI }
}
text-alphabetical-index-entry-template =
element text:alphabetical-index-entry-template {
attribute text:outline-level { "1" | "2" | "3" | "separator" } &
attribute text:style-name { styleNameRef },
(text-index-entry-chapter |
text-index-entry-page-number |
text-index-entry-text |
text-index-entry-span |
text-index-entry-tab-stop )*
}
Bibliography
text-bibliography =
element text:bibliography {
common-section-attlist, text-bibliography-source, text-index-body
}
text-bibliography-source =
element text:bibliography-source {
text-index-title-template?, text-bibliography-entry-template*
}
text-bibliography-entry-template =
element text:bibliography-entry-template {
text-bibliography-entry-template-attrs,
(text-index-entry-span
| text-index-entry-tab-stop
| text-index-entry-bibliography)*
}
text-bibliography-entry-template-attrs =
attribute text:bibliography-type { text-bibliography-types }
& attribute text:style-name { styleNameRef }
Index entries
text-index-entry-chapter =
element text:index-entry-chapter {
attribute text:style-name { styleNameRef }?,
text-index-entry-chapter-attrs
}
text-index-entry-chapter-attrs =
attribute text:display {
"name"
| "number"
| "number-and-name"
| "plain-number"
| "plain-number-and-name"
}?
& attribute text:outline-level { positiveInteger }?
text-index-entry-page-number =
element text:index-entry-page-number {
attribute text:style-name { styleNameRef }?
}
text-index-entry-text =
element text:index-entry-text {
attribute text:style-name { styleNameRef }?
}
text-index-entry-span =
element text:index-entry-span {
attribute text:style-name { styleNameRef }?,
text
}
text-index-entry-tab-stop =
element text:index-entry-tab-stop {
attribute text:style-name { styleNameRef }?,
text-index-entry-tab-stop-attrs
}
text-index-entry-tab-stop-attrs =
attribute style:leader-char { character }?
& (attribute style:type { "right" }
| (attribute style:type { "left" },
attribute style:position { length }))
text-index-entry-link-start =
element text:index-entry-link-start {
attribute text:style-name { styleNameRef }?
}
text-index-entry-link-end =
element text:index-entry-link-end {
attribute text:style-name { styleNameRef }?
}
text-index-entry-bibliography =
element text:index-entry-bibliography {
text-index-entry-bibliography-attrs
}
text-index-entry-bibliography-attrs =
attribute text:style-name { styleNameRef }?
& attribute text:bibliography-data-field {
"address"
| "annote"
| "author"
| "bibliography-type"
| "booktitle"
| "chapter"
| "custom1"
| "custom2"
| "custom3"
| "custom4"
| "custom5"
| "edition"
| "editor"
| "howpublished"
| "identifier"
| "institution"
| "isbn"
| "issn"
| "journal"
| "month"
| "note"
| "number"
| "organizations"
| "pages"
| "publisher"
| "report-type"
| "school"
| "series"
| "title"
| "url"
| "volume"
| "year"
}
Misc index properties
text-index-source-styles =
element text:index-source-styles {
attribute text:outline-level { positiveInteger },
text-index-source-style*
}
text-index-source-style =
element text:index-source-style {
attribute text:style-name { styleName },
empty
}
text-index-title-template =
element text:index-title-template {
attribute text:style-name { styleNameRef }?,
text
}
text-index-body = element text:index-body { index-content-main* }
index-content-main = text-content | text-index-title
text-index-title =
element text:index-title {
common-section-attlist, index-content-main*
}
Styles
office-document-styles =
element office:document-styles {
office-document-common-attrs,
office-font-face-decls,
office-styles,
office-automatic-styles,
office-master-styles
}
office-styles =
element office:styles {
styles &
style-default-style* &
style-default-page-layout? &
text-outline-style? &
text-notes-configuration* &
text-bibliography-configuration? &
text-linenumbering-configuration? &
draw-gradient* &
svg-linearGradient* &
svg-radialGradient* &
draw-hatch* &
draw-fill-image* &
draw-marker* &
draw-stroke-dash* &
draw-opacity* &
style-presentation-page-layout* &
table-table-template*
}?
office-font-face-decls =
element office:font-face-decls { style-font-face* }?
office-automatic-styles =
element office:automatic-styles { styles & style-page-layout* }?
office-master-styles =
element office:master-styles {
style-master-page* & style-handout-master? & draw-layer-set?
}?
styles =
style-style* &
text-list-style* &
number-number-style* &
number-currency-style* &
number-percentage-style* &
number-date-style* &
number-time-style* &
number-boolean-style* &
number-text-style*
style-style =
element style:style {
style-style-attlist,
style-style-content,
style-map*
}
style-style-attlist =
attribute style:name { styleName } &
attribute style:display-name { \string }? &
attribute style:parent-style-name { styleNameRef }? &
attribute style:next-style-name { styleNameRef }? &
attribute style:list-level { positiveInteger | empty }? &
attribute style:list-style-name { styleName | empty }? &
attribute style:master-page-name { styleNameRef }? &
attribute style:auto-update { boolean }? &
attribute style:data-style-name { styleNameRef }? &
attribute style:percentage-data-style-name { styleNameRef }? &
attribute style:class { \string }? &
attribute style:default-outline-level { positiveInteger | empty }?
style-style-content =
(attribute style:family { "text" },
style-text-properties?) |
(attribute style:family { "paragraph" },
style-paragraph-properties?,
style-text-properties?) |
(attribute style:family { "section" },
style-section-properties?) |
(attribute style:family { "ruby" },
style-ruby-properties?) |
(attribute style:family { "table" },
style-table-properties?) |
(attribute style:family { "table-column" },
style-table-column-properties?) |
(attribute style:family { "table-row" },
style-table-row-properties?) |
(attribute style:family { "table-cell" },
style-table-cell-properties?,
style-paragraph-properties?,
style-text-properties?) |
(attribute style:family { "graphic" | "presentation" },
style-graphic-properties?,
style-paragraph-properties?,
style-text-properties?) |
(attribute style:family { "drawing-page" },
style-drawing-page-properties?) |
(attribute style:family { "chart" },
style-chart-properties?,
style-graphic-properties?,
style-paragraph-properties?,
style-text-properties?)
style-text-properties =
element style:text-properties { style-text-properties-content-strict }
style-text-properties-content-strict =
style-text-properties-attlist, style-text-properties-elements
style-text-properties-elements = empty
style-text-properties-attlist =
attribute fo:font-variant { "normal" | "small-caps" }?
& attribute fo:text-transform { "none" | "lowercase" | "uppercase" | "capitalize" }?
& attribute fo:color { color }?
& attribute style:use-window-font-color { boolean }?
& attribute style:text-outline { boolean }?
& attribute style:text-underline-type { "none" | "single" | "double" }?
& attribute style:text-underline-style { lineStyle }?
& attribute style:text-underline-width { lineWidth }?
& attribute style:text-underline-color { "font-color" | color }?
& attribute style:text-underline-mode { "continuous" | "skip-white-space" }?
& attribute style:text-overline-type { "none" | "single" | "double" }?
& attribute style:text-overline-style { lineStyle }?
& attribute style:text-overline-width { lineWidth }?
& attribute style:text-overline-color { "font-color" | color }?
& attribute style:text-overline-mode { "continuous" | "skip-white-space" }?
& attribute style:text-line-through-type { "none" | "single" | "double" }?
& attribute style:text-line-through-style { lineStyle }?
& attribute style:text-line-through-width { lineWidth }?
& attribute style:text-line-through-color { "font-color" | color }?
& attribute style:text-line-through-text { \string }?
& attribute style:text-line-through-text-style { styleNameRef }?
& attribute style:text-line-through-mode { "continuous" | "skip-white-space" }?
& attribute style:text-position { list { (percent | "super" | "sub"), percent? } }?
& attribute style:font-name { \string }?
& attribute style:font-name-asian { \string }?
& attribute style:font-name-complex { \string }?
& attribute fo:font-family { \string }?
& attribute style:font-family-asian { \string }?
& attribute style:font-family-complex { \string }?
& attribute style:font-family-generic { "roman" | "swiss" | "modern" | "decorative" | "script" | "system" }?
& attribute style:font-family-generic-asian { "roman" | "swiss" | "modern" | "decorative" | "script" | "system" }?
& attribute style:font-family-generic-complex { "roman" | "swiss" | "modern" | "decorative" | "script" | "system" }?
& attribute style:font-style-name { \string }?
& attribute style:font-style-name-asian { \string }?
& attribute style:font-style-name-complex { \string }?
& attribute style:font-pitch { "fixed" | "variable" }?
& attribute style:font-pitch-asian { "fixed" | "variable" }?
& attribute style:font-pitch-complex { "fixed" | "variable" }?
& attribute style:font-charset { textEncoding }?
& attribute style:font-charset-asian { textEncoding }?
& attribute style:font-charset-complex { textEncoding }?
& attribute fo:font-size { positiveLength | percent }?
& attribute style:font-size-asian { positiveLength | percent }?
& attribute style:font-size-complex { positiveLength | percent }?
& attribute style:font-size-rel { length }?
& attribute style:font-size-rel-asian { length }?
& attribute style:font-size-rel-complex { length }?
& attribute style:script-type { "latin" | "asian" | "complex" | "ignore" }?
& attribute fo:letter-spacing { length | "normal" }?
& attribute fo:language { languageCode }?
& attribute style:language-asian { languageCode }?
& attribute style:language-complex { languageCode }?
& attribute fo:country { countryCode }?
& attribute style:country-asian { countryCode }?
& attribute style:country-complex { countryCode }?
& attribute fo:script { scriptCode }?
& attribute style:script-asian { scriptCode }?
& attribute style:script-complex { scriptCode }?
& attribute style:rfc-language-tag { language }?
& attribute style:rfc-language-tag-asian { language }?
& attribute style:rfc-language-tag-complex { language }?
& attribute fo:font-style { "normal" | "italic" | "oblique" }?
& attribute style:font-style-asian { "normal" | "italic" | "oblique" }?
& attribute style:font-style-complex { "normal" | "italic" | "oblique" }?
& attribute style:font-relief { "none" | "embossed" | "engraved" }?
& attribute fo:text-shadow { "none" | \string }?
& attribute fo:font-weight { fontWeight }?
& attribute style:font-weight-asian { fontWeight }?
& attribute style:font-weight-complex { fontWeight }?
& attribute style:letter-kerning { boolean }?
& attribute style:text-blinking { boolean }?
& common-background-color-attlist
& attribute style:text-combine { "none" | "letters" | "lines" }?
& attribute style:text-combine-start-char { character }?
& attribute style:text-combine-end-char { character }?
& attribute style:text-emphasize {
"none"
| list {
("none" | "accent" | "dot" | "circle" | "disc"),
("above" | "below")
}
}?
& attribute style:text-scale { percent }?
& attribute style:text-rotation-angle { angle }?
& attribute style:text-rotation-scale { "fixed" | "line-height" }?
& attribute fo:hyphenate { boolean }?
& attribute fo:hyphenation-remain-char-count { positiveInteger }?
& attribute fo:hyphenation-push-char-count { positiveInteger }?
& (attribute text:display { "true" }
| attribute text:display { "none" }
| (attribute text:display { "condition" },
attribute text:condition { "none" })
| empty)
style-paragraph-properties =
element style:paragraph-properties {
style-paragraph-properties-content-strict
}
style-paragraph-properties-content-strict =
style-paragraph-properties-attlist,
style-paragraph-properties-elements
style-paragraph-properties-attlist =
attribute fo:line-height { "normal" | nonNegativeLength | percent }?
& attribute style:line-height-at-least { nonNegativeLength }?
& attribute style:line-spacing { length }?
& attribute style:font-independent-line-spacing { boolean }?
& common-text-align
& attribute fo:text-align-last { "start" | "center" | "justify" }?
& attribute style:justify-single-word { boolean }?
& attribute fo:keep-together { "auto" | "always" }?
& attribute fo:widows { nonNegativeInteger }?
& attribute fo:orphans { nonNegativeInteger }?
& attribute style:tab-stop-distance { nonNegativeLength }?
& attribute fo:hyphenation-keep { "auto" | "page" }?
& attribute fo:hyphenation-ladder-count {
"no-limit" | positiveInteger
}?
& attribute style:register-true { boolean }?
& common-horizontal-margin-attlist
& attribute fo:text-indent { length | percent }?
& attribute style:auto-text-indent { boolean }?
& common-vertical-margin-attlist
& common-margin-attlist
& common-break-attlist
& common-background-color-attlist
& common-border-attlist
& common-border-line-width-attlist
& attribute style:join-border { boolean }?
& common-padding-attlist
& common-shadow-attlist
& common-keep-with-next-attlist
& attribute text:number-lines { boolean }?
& attribute text:line-number { nonNegativeInteger }?
& attribute style:text-autospace { "none" | "ideograph-alpha" }?
& attribute style:punctuation-wrap { "simple" | "hanging" }?
& attribute style:line-break { "normal" | "strict" }?
& attribute style:vertical-align {
"top" | "middle" | "bottom" | "auto" | "baseline"
}?
& common-writing-mode-attlist
& attribute style:writing-mode-automatic { boolean }?
& attribute style:snap-to-layout-grid { boolean }?
& common-page-number-attlist
& common-background-transparency-attlist
style-paragraph-properties-elements =
style-tab-stops & style-drop-cap & style-background-image
style-table-properties =
element style:table-properties {
style-table-properties-content-strict
}
style-table-properties-content-strict =
style-table-properties-attlist, style-table-properties-elements
style-table-properties-attlist =
attribute style:width { positiveLength }?
& attribute style:rel-width { percent }?
& attribute table:align { "left" | "center" | "right" | "margins" }?
& common-horizontal-margin-attlist
& common-vertical-margin-attlist
& common-margin-attlist
& common-page-number-attlist
& common-break-attlist
& common-background-color-attlist
& common-shadow-attlist
& common-keep-with-next-attlist
& attribute style:may-break-between-rows { boolean }?
& attribute table:border-model { "collapsing" | "separating" }?
& common-writing-mode-attlist
& attribute table:display { boolean }?
style-table-properties-elements = style-background-image
style-table-column-properties =
element style:table-column-properties {
style-table-column-properties-content-strict
}
style-table-column-properties-content-strict =
style-table-column-properties-attlist,
style-table-column-properties-elements
style-table-column-properties-elements = empty
style-table-column-properties-attlist =
attribute style:column-width { positiveLength }?
& attribute style:rel-column-width { relativeLength }?
& attribute style:use-optimal-column-width { boolean }?
& common-break-attlist
style-table-row-properties =
element style:table-row-properties {
style-table-row-properties-content-strict
}
style-table-row-properties-content-strict =
style-table-row-properties-attlist,
style-table-row-properties-elements
style-table-row-properties-attlist =
attribute style:row-height { positiveLength }?
& attribute style:min-row-height { nonNegativeLength }?
& attribute style:use-optimal-row-height { boolean }?
& common-background-color-attlist
& common-break-attlist
& attribute fo:keep-together { "auto" | "always" }?
style-table-row-properties-elements = style-background-image
style-table-cell-properties =
element style:table-cell-properties {
style-table-cell-properties-content-strict
}
style-table-cell-properties-content-strict =
style-table-cell-properties-attlist,
style-table-cell-properties-elements
style-table-cell-properties-attlist =
attribute style:vertical-align {
"top" | "middle" | "bottom" | "automatic"
}?
& attribute style:text-align-source { "fix" | "value-type" }?
& common-style-direction-attlist
& attribute style:glyph-orientation-vertical {
"auto" | "0" | "0deg" | "0rad" | "0grad"
}?
& common-writing-mode-attlist
& common-shadow-attlist
& common-background-color-attlist
& common-border-attlist
& attribute style:diagonal-tl-br { \string }?
& attribute style:diagonal-tl-br-widths { borderWidths }?
& attribute style:diagonal-bl-tr { \string }?
& attribute style:diagonal-bl-tr-widths { borderWidths }?
& common-border-line-width-attlist
& common-padding-attlist
& attribute fo:wrap-option { "no-wrap" | "wrap" }?
& common-rotation-angle-attlist
& attribute style:rotation-align {
"none" | "bottom" | "top" | "center"
}?
& attribute style:cell-protect {
"none"
| "hidden-and-protected"
| list { ("protected" | "formula-hidden")+ }
}?
& attribute style:print-content { boolean }?
& attribute style:decimal-places { nonNegativeInteger }?
& attribute style:repeat-content { boolean }?
& attribute style:shrink-to-fit { boolean }?
table-table-template =
element table:table-template {
attribute table:name { \string } &
attribute table:first-row-start-column { "row" | "column" } &
attribute table:first-row-end-column { "row" | "column" } &
attribute table:last-row-start-column { "row" | "column" } &
attribute table:last-row-end-column { "row" | "column" },
element table:first-row { common-table-template-attlist, empty }?,
element table:last-row { common-table-template-attlist, empty }?,
element table:first-column { common-table-template-attlist, empty }?,
element table:last-column { common-table-template-attlist, empty }?,
element table:body { common-table-template-attlist, empty },
element table:even-rows { common-table-template-attlist, empty }?,
element table:odd-rows { common-table-template-attlist, empty }?,
element table:even-columns { common-table-template-attlist, empty }?,
element table:odd-columns { common-table-template-attlist, empty }?,
element table:background { attribute table:style-name { styleNameRef }, empty }?
}
common-table-template-attlist =
attribute table:style-name { styleNameRef },
attribute table:paragraph-style-name { styleNameRef }?
Meta
office-document-meta =
element office:document-meta {
office-document-common-attrs,
office-meta
}
office-meta = element office:meta {
office-meta-data*
}?
office-meta-data =
element meta:generator { \string } |
element dc:title { \string } |
element dc:description { \string } |
element dc:subject { \string } |
element dc:creator { \string } |
element dc:date { dateTime } |
element dc:language { language } |
element meta:keyword { \string } |
element meta:initial-creator { \string } |
element meta:printed-by { \string } |
element meta:creation-date { dateTime } |
element meta:print-date { dateTime } |
element meta:template {
attribute xlink:type { "simple" },
attribute xlink:href { anyIRI },
attribute xlink:actuate { "onRequest" }?,
attribute xlink:title { \string }?,
attribute meta:date { dateTime }?
} |
element meta:auto-reload {
(attribute xlink:type { "simple" },
attribute xlink:href { anyIRI },
attribute xlink:show { "replace" }?,
attribute xlink:actuate { "onLoad" }?)?,
attribute meta:delay { duration }?
} |
element meta:hyperlink-behaviour {
attribute office:target-frame-name { targetFrameName }?,
attribute xlink:show { "new" | "replace" }?
} |
element meta:editing-cycles { nonNegativeInteger } |
element meta:editing-duration { duration } |
element meta:document-statistic {
attribute meta:page-count { nonNegativeInteger }?,
attribute meta:table-count { nonNegativeInteger }?,
attribute meta:draw-count { nonNegativeInteger }?,
attribute meta:image-count { nonNegativeInteger }?,
attribute meta:ole-object-count { nonNegativeInteger }?,
attribute meta:object-count { nonNegativeInteger }?,
attribute meta:paragraph-count { nonNegativeInteger }?,
attribute meta:word-count { nonNegativeInteger }?,
attribute meta:character-count { nonNegativeInteger }?,
attribute meta:frame-count { nonNegativeInteger }?,
attribute meta:sentence-count { nonNegativeInteger }?,
attribute meta:syllable-count { nonNegativeInteger }?,
attribute meta:non-whitespace-character-count {
nonNegativeInteger
}?,
attribute meta:row-count { nonNegativeInteger }?,
attribute meta:cell-count { nonNegativeInteger }?
} |
element meta:user-defined {
attribute meta:name { \string },
((attribute meta:value-type { "float" },
double)
| (attribute meta:value-type { "date" },
dateOrDateTime)
| (attribute meta:value-type { "time" },
duration)
| (attribute meta:value-type { "boolean" },
boolean)
| (attribute meta:value-type { "string" },
\string)
| text)
} |
Settings
office-document-settings =
element office:document-settings {
office-document-common-attrs, office-settings
}
Scripts
office-scripts =
element office:scripts {
office-script*,
office-event-listeners?
}?
office-script =
element office:script {
attribute script:language { \string },
mixed { anyElements }
}