# Open Document Format for Office Applications (OpenDocument) Version 1.3 # OASIS Standard, In progress # Relax-NG Schema # Source: https://tools.oasis-open.org/version-control/svn/office/ # Copyright (c) OASIS Open 2002-2015. All Rights Reserved. # # All capitalized terms in the following text have the meanings assigned to them # in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The # full Policy may be found at the OASIS website. # # This document and translations of it may be copied and furnished to others, and # derivative works that comment on or otherwise explain it or assist in its # implementation may be prepared, copied, published, and distributed, in whole or # in part, without restriction of any kind, provided that the above copyright # notice and this section are included on all such copies and derivative works. # However, this document itself may not be modified in any way, including by # removing the copyright notice or references to OASIS, except as needed for the # purpose of developing any document or deliverable produced by an OASIS # Technical Committee (in which case the rules applicable to copyrights, as set # forth in the OASIS IPR Policy, must be followed) or as required to translate it # into languages other than English. # # The limited permissions granted above are perpetual and will not be revoked by # OASIS or its successors or assigns. # # This document and the information contained herein is provided on an "AS IS" # basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT # LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT # INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR # FITNESS FOR A PARTICULAR PURPOSE. namespace anim = "urn:oasis:names:tc:opendocument:xmlns:animation:1.0" namespace calcext = "urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" namespace chart = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" namespace chartooo = "http://openoffice.org/2010/chart" namespace config = "urn:oasis:names:tc:opendocument:xmlns:config:1.0" namespace css3t = "http://www.w3.org/TR/css3-text/" namespace db = "urn:oasis:names:tc:opendocument:xmlns:database:1.0" namespace dc = "http://purl.org/dc/elements/1.1/" namespace dr3d = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" namespace draw = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" namespace drawooo = "http://openoffice.org/2010/draw" namespace field = "urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" namespace fo = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" namespace form = "urn:oasis:names:tc:opendocument:xmlns:form:1.0" namespace grddl = "http://www.w3.org/2003/g/data-view#" namespace loext = "urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" namespace math = "http://www.w3.org/1998/Math/MathML" namespace meta = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" namespace number = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" namespace office = "urn:oasis:names:tc:opendocument:xmlns:office:1.0" namespace officeooo = "http://openoffice.org/2009/office" namespace presentation = "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" namespace rng = "http://relaxng.org/ns/structure/1.0" namespace script = "urn:oasis:names:tc:opendocument:xmlns:script:1.0" namespace smil = "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" namespace style = "urn:oasis:names:tc:opendocument:xmlns:style:1.0" namespace svg = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" namespace table = "urn:oasis:names:tc:opendocument:xmlns:table:1.0" namespace tableooo = "http://openoffice.org/2009/table" namespace text = "urn:oasis:names:tc:opendocument:xmlns:text:1.0" namespace xforms = "http://www.w3.org/2002/xforms" namespace xhtml = "http://www.w3.org/1999/xhtml" namespace xlink = "http://www.w3.org/1999/xlink" include "OpenDocument-schema-v1.3.rnc" { office-document-common-attrs = attribute office:version { # FIXME remove this hack once we write 1.3 "1.3" | "1.2" } & attribute grddl:transformation { list { anyIRI* } }? style-graphic-properties-attlist = attribute draw:stroke { "none" | "dash" | "solid" }? & attribute draw:stroke-dash { styleNameRef }? & attribute draw:stroke-dash-names { styleNameRefs }? & attribute svg:stroke-width { length }? & attribute svg:stroke-color { color }? & attribute draw:marker-start { styleNameRef }? & attribute draw:marker-end { styleNameRef }? & attribute draw:marker-start-width { length }? & attribute draw:marker-end-width { length }? & attribute draw:marker-start-center { boolean }? & attribute draw:marker-end-center { boolean }? & attribute svg:stroke-opacity { xsd:double { minInclusive = "0" maxInclusive = "1" } | zeroToHundredPercent }? & attribute draw:stroke-linejoin { "miter" | "round" | "bevel" | "middle" | "none" }? & attribute svg:stroke-linecap { "butt" | "square" | "round" }? & attribute draw:symbol-color { color }? & attribute text:animation { "none" | "scroll" | "alternate" | "slide" }? & attribute text:animation-direction { "left" | "right" | "up" | "down" }? & attribute text:animation-start-inside { boolean }? & attribute text:animation-stop-inside { boolean }? & attribute text:animation-repeat { nonNegativeInteger }? & attribute text:animation-delay { duration }? & attribute text:animation-steps { length }? & attribute draw:auto-grow-width { boolean }? & attribute draw:auto-grow-height { boolean }? & # FIXME remove this once the export bug is fixed attribute draw:fit-to-size { "true" | "false" | "all" | "shrink-to-fit" }? & attribute draw:fit-to-contour { boolean }? & attribute draw:textarea-vertical-align { "top" | "middle" | "bottom" | "justify" }? & attribute draw:textarea-horizontal-align { "left" | "center" | "right" | "justify" }? & attribute fo:wrap-option { "no-wrap" | "wrap" }? & attribute style:shrink-to-fit { boolean }? & attribute draw:color-mode { "greyscale" | "mono" | "watermark" | "standard" }? & attribute draw:color-inversion { boolean }? & attribute draw:luminance { signedZeroToHundredPercent } # https://issues.oasis-open.org/browse/OFFICE-3821 ? & attribute draw:contrast { percent }? & attribute draw:gamma { percent }? & attribute draw:red { signedZeroToHundredPercent }? & attribute draw:green { signedZeroToHundredPercent }? & attribute draw:blue { signedZeroToHundredPercent }? & attribute draw:image-opacity { zeroToHundredPercent }? & attribute draw:shadow { "visible" | "hidden" }? & attribute draw:shadow-offset-x { length }? & attribute draw:shadow-offset-y { length }? & attribute draw:shadow-color { color }? & attribute draw:shadow-opacity { zeroToHundredPercent }? & # TODO: no proposal for loext:shadow-blur attribute loext:shadow-blur { length }? & attribute draw:start-line-spacing-horizontal { distance }? & attribute draw:start-line-spacing-vertical { distance }? & attribute draw:end-line-spacing-horizontal { distance }? & attribute draw:end-line-spacing-vertical { distance }? & attribute draw:line-distance { distance }? & attribute draw:guide-overhang { length }? & attribute draw:guide-distance { distance }? & attribute draw:start-guide { length }? & attribute draw:end-guide { length }? & attribute draw:placing { "below" | "above" }? & attribute draw:parallel { boolean }? & attribute draw:measure-align { "automatic" | "left-outside" | "inside" | "right-outside" }? & attribute draw:measure-vertical-align { "automatic" | "above" | "below" | "center" }? & attribute draw:unit { "automatic" | "mm" | "cm" | "m" | "km" | "pt" | "pc" | "inch" | "ft" | "mi" }? & attribute draw:show-unit { boolean }? & attribute draw:decimal-places { nonNegativeInteger }? & attribute draw:caption-type { "straight-line" | "angled-line" | "angled-connector-line" }? & attribute draw:caption-angle-type { "fixed" | "free" }? & attribute draw:caption-angle { angle }? & attribute draw:caption-gap { distance }? & attribute draw:caption-escape-direction { "horizontal" | "vertical" | "auto" }? & attribute draw:caption-escape { length | percent }? & attribute draw:caption-line-length { length }? & attribute draw:caption-fit-line-length { boolean }? & attribute dr3d:horizontal-segments { nonNegativeInteger }? & attribute dr3d:vertical-segments { nonNegativeInteger }? & attribute dr3d:edge-rounding { percent }? & attribute dr3d:edge-rounding-mode { "correct" | "attractive" }? & attribute dr3d:back-scale { percent }? & attribute dr3d:depth { length }? & attribute dr3d:backface-culling { "enabled" | "disabled" }? & attribute dr3d:end-angle { angle }? & attribute dr3d:close-front { boolean }? & attribute dr3d:close-back { boolean }? & attribute dr3d:lighting-mode { "standard" | "double-sided" }? & attribute dr3d:normals-kind { "object" | "flat" | "sphere" }? & attribute dr3d:normals-direction { "normal" | "inverse" }? & attribute dr3d:texture-generation-mode-x { "object" | "parallel" | "sphere" }? & attribute dr3d:texture-generation-mode-y { "object" | "parallel" | "sphere" }? & attribute dr3d:texture-kind { "luminance" | "intensity" | "color" }? & attribute dr3d:texture-filter { "enabled" | "disabled" }? & attribute dr3d:texture-mode { "replace" | "modulate" | "blend" }? & attribute dr3d:ambient-color { color }? & attribute dr3d:emissive-color { color }? & attribute dr3d:specular-color { color }? & attribute dr3d:diffuse-color { color }? & attribute dr3d:shininess { percent }? & attribute dr3d:shadow { "visible" | "hidden" }? & common-draw-rel-size-attlist & attribute fo:min-width { length | percent }? & attribute fo:min-height { length | percent }? & attribute fo:max-height { length | percent }? & attribute fo:max-width { length | percent }? & common-horizontal-margin-attlist & common-vertical-margin-attlist & common-margin-attlist & attribute style:print-content { boolean }? & attribute style:protect { "none" | list { ("content" | "position" | "size")+ } }? & attribute style:horizontal-pos { "left" | "center" | "right" | "from-left" | "inside" | "outside" | "from-inside" }? & attribute svg:x { coordinate }? & attribute style:horizontal-rel { "page" | "page-content" | "page-start-margin" | "page-end-margin" | "frame" | "frame-content" | "frame-start-margin" | "frame-end-margin" | "paragraph" | "paragraph-content" | "paragraph-start-margin" | "paragraph-end-margin" | "char" }? & common-vertical-pos-attlist & common-vertical-rel-attlist & common-text-anchor-attlist & common-border-attlist & common-border-line-width-attlist & common-padding-attlist & common-shadow-attlist & common-background-color-attlist & common-background-transparency-attlist & common-editable-attlist & attribute style:wrap { "none" | "left" | "right" | "parallel" | "dynamic" | "run-through" | "biggest" }? & attribute style:wrap-dynamic-threshold { nonNegativeLength }? & attribute style:number-wrapped-paragraphs { "no-limit" | positiveInteger }? & attribute style:wrap-contour { boolean }? & attribute style:wrap-contour-mode { "full" | "outside" }? & attribute style:run-through { "foreground" | "background" }? & attribute style:flow-with-text { boolean }? & attribute style:overflow-behavior { "clip" | "auto-create-new-frame" }? & attribute style:mirror { "none" | "vertical" | horizontal-mirror | list { "vertical", horizontal-mirror } | list { horizontal-mirror, "vertical" } }? & attribute fo:clip { "auto" | clipShape }? & attribute draw:wrap-influence-on-position { "iterative" | "once-concurrent" | "once-successive" }? & common-writing-mode-attlist & attribute draw:frame-display-scrollbar { boolean }? & attribute draw:frame-display-border { boolean }? & attribute draw:frame-margin-horizontal { nonNegativePixelLength }? & attribute draw:frame-margin-vertical { nonNegativePixelLength }? & attribute draw:visible-area-left { nonNegativeLength }? & attribute draw:visible-area-top { nonNegativeLength }? & attribute draw:visible-area-width { positiveLength }? & attribute draw:visible-area-height { positiveLength }? & attribute draw:draw-aspect { "content" | "thumbnail" | "icon" | "print-view" }? & attribute draw:ole-draw-aspect { nonNegativeInteger }? & # https://issues.oasis-open.org/browse/OFFICE-4047 attribute loext:allow-overlap { boolean }? & # TODO: no proposal for loext:glow* attribute loext:glow-radius { length }? & attribute loext:glow-color { color }? & attribute loext:glow-transparency { zeroToHundredPercent }? & # TODO: no proposal for loext:softedge-radius attribute loext:softedge-radius { length }? draw-text = (text-p | text-list | # https://issues.oasis-open.org/browse/OFFICE-3761 loext-table)* office-annotation-attlist &= attribute office:display { boolean }? & common-office-annotation-name-attlist? & attribute loext:resolved { boolean }? style-style-content = (attribute style:family { "text" }, style-text-properties?) | (attribute style:family { "paragraph" }, # TODO no proposal loext-graphic-properties?, 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" }, # TODO no proposal loext-graphic-properties?, 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?) table-table-template = element table:table-template { table-table-template-attlist, table-first-row?, table-last-row?, table-first-column?, table-last-column?, table-body, table-even-rows?, table-odd-rows?, table-even-columns?, table-odd-columns?, table-background?, # TODO no proposal table-first-row-even-column?, table-last-row-even-column?, table-first-row-end-column?, table-first-row-start-column?, table-last-row-end-column?, table-last-row-start-column? } draw-frame = element draw:frame { common-draw-shape-with-text-and-styles-attlist, common-draw-position-attlist, common-draw-rel-size-attlist, common-draw-caption-id-attlist, presentation-shape-attlist, draw-frame-attlist, (draw-text-box | draw-image | draw-object | draw-object-ole | draw-applet | draw-floating-frame | draw-plugin | table-table)*, office-event-listeners?, draw-glue-point*, draw-image-map?, svg-title?, svg-desc?, (draw-contour-polygon | draw-contour-path)?, # TODO no proposal loext-signatureline?, loext-qrcode? } common-value-and-type-attlist = (attribute office:value-type { "float" }, attribute calcext:value-type { "float" }?, attribute office:value { double }) | (attribute office:value-type { "percentage" }, attribute calcext:value-type { "percentage" }?, attribute office:value { double }) | (attribute office:value-type { "currency" }, attribute calcext:value-type { "currency" }?, attribute office:value { double }, attribute office:currency { \string }?) | (attribute office:value-type { "date" }, attribute calcext:value-type { "date" }?, attribute office:date-value { dateOrDateTime }) | (attribute office:value-type { "time" }, attribute calcext:value-type { "time" }?, attribute office:time-value { duration }) | (attribute office:value-type { "boolean" }, attribute calcext:value-type { "boolean" }?, attribute office:boolean-value { boolean }) | (attribute office:value-type { "string" }, # OFFICE-3759 attribute calcext:value-type { "string" | "error" }?, attribute office:string-value { \string }?) chart-axis = element chart:axis { chart-axis-attlist, # OFFICE-2119 ((attribute chartooo:axis-type { "auto" }, chartooo-date-scale?) | (attribute chartooo:axis-type { "date" }, chartooo-date-scale) | attribute chartooo:axis-type { "text" })?, chart-title?, chart-categories?, chart-grid* } table-table = element table:table { table-table-attlist, table-title?, table-desc?, # TODO add to proposal, OFFICE-2112 table-table-protection?, table-table-source?, office-dde-source?, table-scenario?, office-forms?, table-shapes?, table-columns-and-groups, table-rows-and-groups, table-named-expressions?, # TODO no proposal, this is wild guessing, OFFICE-3785 element calcext:conditional-formats { element calcext:conditional-format { attribute calcext:target-range-address { cellRangeAddress }, (element calcext:condition { attribute calcext:apply-style-name { styleNameRef }, attribute calcext:value { \string }, attribute calcext:base-cell-address { cellAddress } }+ | element calcext:data-bar { attribute calcext:max-length { \string }, attribute calcext:negative-color { color }, attribute calcext:positive-color { color }, attribute calcext:axis-color { color }, attribute calcext:axis-position { "middle" }?, element calcext:formatting-entry { attribute calcext:value { \string }, attribute calcext:type { "auto-minimum" | "auto-maximum" | "minimum" | "maximum" | "percent" | "percentile" | "number" | "formula" } }, element calcext:formatting-entry { attribute calcext:value { \string }, attribute calcext:type { "auto-minimum" | "auto-maximum" | "minimum" | "maximum" | "percent" | "percentile" | "number" | "formula" } } } | element calcext:color-scale { element calcext:color-scale-entry { attribute calcext:value { \string }, attribute calcext:type { "minimum" | "maximum" | "percent" | "percentile" | "number" | "formula" }, attribute calcext:color { color } }, element calcext:color-scale-entry { attribute calcext:value { \string }, attribute calcext:type { "minimum" | "maximum" | "percent" | "percentile" | "number" | "formula" }, attribute calcext:color { color } }, element calcext:color-scale-entry { attribute calcext:value { \string }, attribute calcext:type { "minimum" | "maximum" | "percent" | "percentile" | "number" | "formula" }, attribute calcext:color { color } }? }) }+ }? } # TODO no proposal draw-object = element draw:object { draw-object-attlist, loext-text, (common-draw-data-attlist | office-document | math-math) } draw-object-ole = element draw:object-ole { draw-object-ole-attlist, loext-text, (common-draw-data-attlist | office-binary-data) } # FIXME: one test exports 250 here, which is probably a bug fontWeight = "normal" | "bold" | "100" | "200" | "250" | "300" | "400" | "500" | "600" | "700" | "800" | "900" } # TODO no proposal loext-p = element loext:p { paragraph-attrs, paragraph-content-or-hyperlink* } loext-text = (loext-p | text-list | loext-table)* # OFFICE-2119 chartooo-date-scale = element chartooo:date-scale { attribute chart:base-time-unit { chart-time-unit }? & (attribute chart:major-interval-value { positiveInteger }, attribute chart:major-interval-unit { chart-time-unit })? & (attribute chart:minor-interval-value { positiveInteger }, attribute chart:minor-interval-unit { chart-time-unit })? } chart-time-unit = "days" | "months" | "years" # TODO no proposal loext-signatureline = element loext:signatureline { attribute loext:id { \string }, attribute loext:suggested-signer-name { \string }, attribute loext:suggested-signer-title { \string }, attribute loext:suggested-signer-email { \string }, attribute loext:signing-instructions { \string }, attribute loext:show-sign-date { boolean }, attribute loext:can-add-comment { boolean } } loext-qrcode = element loext:qrcode { attribute office:string-value { \string }, attribute loext:qrcode-errorcorrection { "low" | "medium" | "quartile" | "high" }, attribute loext:qrcode-border { nonNegativeInteger } } # https://issues.oasis-open.org/browse/OFFICE-3761 loext-table = element loext:table { table-table-attlist, table-title?, table-desc?, table-table-source?, office-dde-source?, table-scenario?, office-forms?, table-shapes?, loext-columns-and-groups, loext-rows-and-groups, table-named-expressions? } loext-rows-and-groups = (table-table-row-group | loext-rows-no-group)+ loext-rows-no-group = (loext-rows, (table-table-header-rows, loext-rows?)?) | (table-table-header-rows, loext-rows?) loext-rows = table-table-rows | (text-soft-page-break?, loext-table-row)+ loext-table-row = element loext:table-row { table-table-row-attlist, (loext-table-cell | loext-covered-table-cell)+ } loext-table-cell = element loext:table-cell { table-table-cell-attlist, table-table-cell-attlist-extra, table-table-cell-content } loext-covered-table-cell = element loext:covered-table-cell { table-table-cell-attlist, table-table-cell-content } loext-columns-and-groups = (table-table-column-group | loext-columns-no-group)+ loext-columns-no-group = (loext-columns, (table-table-header-columns, loext-columns?)?) | (table-table-header-columns, loext-columns?) loext-columns = loext-table-columns | loext-table-column+ loext-table-columns = element loext:table-columns { loext-table-column+ } loext-table-column = element loext:table-column { table-table-column-attlist, empty } loext-graphic-properties = element loext:graphic-properties { style-graphic-properties-content-strict } table-first-row-even-column = element loext:first-row-even-column { common-table-template-attlist, empty } table-last-row-even-column = element loext:last-row-even-column { common-table-template-attlist, empty } table-first-row-end-column = element loext:first-row-end-column { common-table-template-attlist, empty } table-first-row-start-column = element loext:first-row-start-column { common-table-template-attlist, empty } table-last-row-end-column = element loext:last-row-end-column { common-table-template-attlist, empty } table-last-row-start-column = element loext:last-row-start-column { common-table-template-attlist, empty } common-draw-rel-size-attlist &= # OFFICE-3854 attribute loext:rel-width-rel { "page" | [ # TODO layout-environment ? ] "paragraph" }?, attribute loext:rel-height-rel { "page" | "paragraph" }? common-svg-font-face-xlink-attlist &= # TODO no proposal attribute loext:font-style { fontStyle }?, attribute loext:font-weight { fontWeight }? # TODO no proposal # there's no ref-attrs so add it here text-common-ref-content &= attribute loext:reference-language { language }? style-list-level-label-alignment-attlist &= # TODO no proposal attribute loext:label-followed-by { "listtab" | "space" | "nothing" | "newline" }? style-ruby-properties-attlist &= # TODO proposal, OFFICE-3944 attribute loext:ruby-position { "above" | "below" | "inter-character" }? style-text-properties-attlist &= # TODO no proposal attribute officeooo:rsid { \string }?, attribute officeooo:paragraph-rsid { \string }?, # https://issues.oasis-open.org/browse/OFFICE-4049 attribute loext:opacity { zeroToHundredPercent }? style-text-properties-attlist &= # OFFICE-3843 attribute loext:padding { nonNegativeLength }?, attribute loext:padding-left { nonNegativeLength }?, attribute loext:padding-right { nonNegativeLength }?, attribute loext:padding-top { nonNegativeLength }?, attribute loext:padding-bottom { nonNegativeLength }?, attribute loext:border { \string }?, attribute loext:border-left { \string }?, attribute loext:border-right { \string }?, attribute loext:border-top { \string }?, attribute loext:border-bottom { \string }?, attribute loext:shadow { shadowType }? # TODO no proposal style-chart-properties-attlist &= attribute loext:try-staggering-first { boolean }? # TODO no proposal style-chart-properties-attlist &= attribute loext:std-weight { \string }? # TODO no proposal chart-series-attlist &= attribute loext:label-string { \string }? # OFFICE-1148 style-chart-properties-attlist &= attribute loext:regression-max-degree { positiveInteger }?, attribute loext:regression-force-intercept { boolean }?, attribute loext:regression-intercept-value { double }?, attribute loext:regression-name { \string }?, attribute loext:regression-period { \string }?, attribute loext:regression-extrapolate-forward { \string }?, attribute loext:regression-extrapolate-backward { \string }? # TODO no proposal table-data-pilot-field-attlist &= attribute tableooo:display-name { \string }? # TODO no proposal, 9009663d chart-chart-attlist &= attribute loext:data-pilot-source { \string }? # OFFICE-2112, TODO half of this missing in proposal table-table-protection = element loext:table-protection { attribute loext:select-protected-cells { boolean }?, attribute loext:select-unprotected-cells { boolean }?, attribute loext:insert-columns { boolean }?, attribute loext:insert-rows { boolean }?, attribute loext:delete-columns { boolean }?, attribute loext:delete-rows { boolean }? } office-spreadsheet-attlist &= attribute loext:protection-key-digest-algorithm-2 { anyURI }? table-table-attlist &= attribute loext:protection-key-digest-algorithm-2 { anyURI }? # https://issues.oasis-open.org/browse/OFFICE-2317 vertJustifyValues = "auto" | "distribute" common-text-justify = attribute css3t:text-justify { vertJustifyValues }? style-vertical-justify = attribute loext:vertical-justify { vertJustifyValues }?, attribute style:vertical-justify { vertJustifyValues }? style-paragraph-properties-attlist &= (common-text-justify, style-vertical-justify)? style-table-cell-properties-attlist &= (common-text-justify, style-vertical-justify)? number-fraction-attlist &= # OFFICE-3695 # TODO no proposal, 1544a26ac9f7dd60605dd21e9cbe29d490aafdce attribute loext:max-numerator-digits { positiveInteger }? # TODO no proposal table-data-pilot-level-attlist &= attribute calcext:repeat-item-labels { boolean }? # TODO no proposal draw-enhanced-geometry-attlist &= attribute drawooo:sub-view-size { \string }?, attribute drawooo:enhanced-path { \string }? # TODO no proposal draw-custom-shape-attlist &= common-draw-rel-size-attlist # TODO no proposal style-page-layout-properties-attlist &= style-graphic-fill-properties-attlist style-header-footer-properties-attlist &= style-graphic-fill-properties-attlist # TODO no proposal text-index-entry-tab-stop-attrs &= attribute style:with-tab { boolean }? # TODO no proposal style-text-properties-attlist &= attribute loext:char-shading-value { \string }? # TODO no proposal text-bookmark-start-attlist &= (attribute loext:hidden { boolean }, attribute loext:condition { \string }?)? # TODO no proposal; see 7a5d79f2297a43d0a854e304b0792164272edfe0 # FIXME this is almost certainly incomplete: need to figure out which elements can have this and which named pattern can be extended with it to get exactly these elements form-checkbox-attlist &= attribute form:input-required { boolean }? # https://issues.oasis-open.org/browse/OFFICE-4030 common-writing-mode-attlist &= attribute loext:writing-mode { "bt-lr" }? # https://issues.oasis-open.org/browse/OFFICE-4073 common-vertical-rel-attlist &= attribute loext:vertical-rel { "page-content-top" | "page-content-bottom" }? # https://issues.oasis-open.org/browse/OFFICE-4105 style-page-layout-properties-attlist &= attribute loext:margin-gutter { length }? # just a test-case for user-defined attributes, move along, nothing to see here... style-table-cell-properties-attlist &= attribute proName { \string }? # TODO no proposal chart-data-point-attlist &= attribute loext:custom-label-field { \string }? # TODO no proposal style-text-properties-attlist &= attribute loext:hyphenation-no-caps { boolean }? # TODO no proposal chart-data-point-attlist &= (attribute loext:custom-label-pos-x { double }, attribute loext:custom-label-pos-y { double })? # TODO no proposal chart-legend-attlist &= attribute loext:overlay { boolean }? # https://issues.oasis-open.org/browse/OFFICE-3936 style-chart-properties-attlist &= attribute loext:major-origin { double }? # TODO no proposal text-index-entry-chapter-attrs &= attribute loext:outline-content-visible { boolean }? # https://issues.oasis-open.org/browse/OFFICE-2096 paragraph-content |= element field:fieldmark-start { attribute text:name { \string }, attribute field:type { # TODO \string }, element field:param { attribute field:name { \string }, attribute field:value { \string } }* } paragraph-content |= element field:fieldmark-end { empty } paragraph-content |= element field:fieldmark { attribute text:name { \string }, attribute field:type { # TODO \string }, element field:param { attribute field:name { \string }, attribute field:value { \string } }* } # TODO no proposal animation-element |= element loext:animatePhysics { common-anim-target-attlist, common-timing-attlist, animate-physics-attlist } animate-physics-attlist = # default value: 0 attribute loext:velocity-x { double }?, # default value: 0 attribute loext:velocity-y { double }?, # default value: 0.1 attribute loext:bounciness { xsd:double { minInclusive = "0" maxInclusive = "1" } }?, # default value: 1 attribute loext:density { xsd:double { minInclusive = "0" } }? # TODO no proposal style-chart-properties-attlist &= attribute loext:custom-leader-lines { boolean }? # TODO no proposal style-chart-properties-attlist &= attribute loext:external-data { \string }?