Beyond the basics

It's interesting to see the varying emotions people have had in reaction to the standardization of the Office Open XML formats. It was obviously an immense amount of work, and it resulted in a 6,000 page standard. As you all know by now, the reason there was so much information in the specification was that we absolutely had to ensure that all the information people currently had in their existing set of Office binary documents could be ported over into the new format (with no loss).

In addition to that, we wanted to make sure we did our best to ensure that anyone coming trying to build support for the OpenXML formats in their solution had all the information they would need for consuming and producing those documents. This meant we had to go beyond the basics, and document all the pieces of the format we could. This is where you start to see the differences between the approach taken with the ODF standard and the OpenXML standard. In the ODF standard, the decision was made to leave a lot of the pieces out of the standard and to instead have them be application defined. This means you have a simpler standard, but it also means that interoperability is much more difficult to achieve. Let me explain:

As you start to document a specific feature in a file format, you have a few choices:

  • Fully document – This means you define the syntax for representing the feature, and all the information people would need to interpret it.
    • Pros: Everyone can build support for the feature using the specification.
    • Cons: None really (other than it makes the spec bigger)
  • Partially document – This means you define the syntax for representing the feature, but don't provide all the details for implementation.
    • Pros: If two application already have the behavior, it means they have a prescribed method for persisting that in the file format. So while the spec doesn't tell you how to implement the behavior, it does help you interoperate with others who already know the behavior.
    • Cons: It's not as interoperable as when you fully document something, but it still allows for more interoperability than the next approach.
  • Application defined – This means you allow the specification to be extended by an implementer to represent the feature as they choose. Usually you provide a way in which they can use their own namespace for identifying it as not being part of the standard but instead an extension.
    • Pros: This is the only option to account for things not yet in use when the standard was written.
    • Cons: There is no way to interoperate using the spec. You need to look at the implementation for any applications you will be interacting with and see how they extended the spec.

One of the sections people have been wondering about in the Open XML spec is section 2.15 in part 4 (Markup Language Reference). That section defines a couple hundred document level settings. Some of for application behaviors like "don't check spelling." Others are for display behaviors like "show gridlines on tables." And others are for layout behaviors like "align tables row by row."

The important thing for people to realize is that many of these settings are common in a number of Wordprocessing applications. KOffice, OpenOffice, and Microsoft Office all have a similar set of document settings. In ODF, they took the "application defined" approach for the settings, rather than either partially or fully documenting (similar to the original approach with spreadsheet formulas). So, if you save out a blank text document or spreadsheet from OpenOffice you'll get the following set of extended properties, and not a single one of these appear in the ODF standard (many of these directly impact the interoperability of the document in terms of layout and display):

OpenOffice extensions to ODF standard using the https://openoffice.org/2004/office namespace

Name Type Primary Use Interoperability Section in Spec
ActiveTable string App Behavior Application Defined N/A
AddExternalLeading boolean View Application Defined N/A
AddFrameOffsets boolean View Application Defined N/A
AddParaSpacingToTableCells boolean View Application Defined N/A
AddParaTableSpacing boolean Layout Application Defined N/A
AddParaTableSpacingAtStart boolean Layout Application Defined N/A
AlignTabStopPosition boolean Layout Application Defined N/A
AllowPrintJobCancel boolean App Behavior Application Defined N/A
ApplyUserData boolean View Application Defined N/A
AutoCalculate boolean Display Application Defined N/A
CharacterCompressionType short Layout Application Defined N/A
ChartAutoUpdate boolean Display Application Defined N/A
ClipAsCharacterAnchoredWriterFlyFrames boolean ??? Application Defined N/A
ConsiderTextWrapOnObjPos boolean Layout Application Defined N/A
CurrentDatabaseCommand string Data Application Defined N/A
CurrentDatabaseCommandType int Data Application Defined N/A
CurrentDatabaseDataSource string Data Application Defined N/A
DoNotCaptureDrawObjsOnPage boolean Display Application Defined N/A
DoNotJustifyLinesWithManualBreak boolean View Application Defined N/A
DoNotResetParaAttrsForNumFont boolean Display Application Defined N/A
FieldAutoUpdate boolean Display Application Defined N/A
GridColor long Display Application Defined N/A
HasColumnRowHeaders boolean Display Application Defined N/A
HasSheetTabs boolean App Behavior Application Defined N/A
HorizontalScrollbarWidth int App Behavior Application Defined N/A
IgnoreFirstLineIndentInNumbering boolean Display Application Defined N/A
IgnoreTabsAndBlanksForLineCalculation boolean Display Application Defined N/A
InBrowseMode boolean App Behavior Application Defined N/A
IsKernAsianPunctuation boolean Display Application Defined N/A
IsLabelDocument boolean App Behavior Application Defined N/A
IsOutlineSymbolsSet boolean Display Application Defined N/A
IsRasterAxisSynchronized boolean Display Application Defined N/A
IsSelectedFrame boolean App Behavior Application Defined N/A
IsSnapToRaster boolean Display Application Defined N/A
LinkUpdateMode short App Behavior Application Defined N/A
LoadReadonly boolean App Behavior Application Defined N/A
OutlineLevelYieldsNumbering boolean Display Application Defined N/A
PageViewZoomValue int View Application Defined N/A
PrintAnnotationMode short Printing Application Defined N/A
PrintBlackFonts boolean Printing Application Defined N/A
PrintControls boolean Printing Application Defined N/A
PrintDrawings boolean Printing Application Defined N/A
PrintEmptyPages boolean Printing Application Defined N/A
PrinterIndependentLayout string Printing Application Defined N/A
PrinterName string Printing Application Defined N/A
PrinterSetup base64Binary Printing Application Defined N/A
PrintFaxName string Printing Application Defined N/A
PrintGraphics boolean Printing Application Defined N/A
PrintLeftPages boolean Printing Application Defined N/A
PrintPageBackground boolean Printing Application Defined N/A
PrintPaperFromSetup boolean Printing Application Defined N/A
PrintProspect boolean Printing Application Defined N/A
PrintReversed boolean Printing Application Defined N/A
PrintRightPages boolean Printing Application Defined N/A
PrintSingleJobs boolean Printing Application Defined N/A
PrintTables boolean Printing Application Defined N/A
RasterIsVisible boolean Display Application Defined N/A
RasterResolutionX int Display Application Defined N/A
RasterResolutionY int Display Application Defined N/A
RasterSubdivisionX int Display Application Defined N/A
RasterSubdivisionY int Display Application Defined N/A
RedlineProtectionKey base64Binary ??? Application Defined N/A
SaveGlobalDocumentLinks boolean Data Application Defined N/A
SaveVersionOnClose boolean Data Application Defined N/A
ShowGrid boolean Display Application Defined N/A
ShowNotes boolean Display Application Defined N/A
ShowPageBreakPreview boolean Display Application Defined N/A
ShowPageBreaks boolean Display Application Defined N/A
ShowRedlineChanges boolean Display Application Defined N/A
ShowZeroValues boolean Display Application Defined N/A
TableRowKeep boolean Display Application Defined N/A
UpdateFromTemplate boolean App Behavior Application Defined N/A
UseFormerLineSpacing boolean Display Application Defined N/A
UseFormerObjectPositioning boolean Display Application Defined N/A
UseFormerTextWrapping boolean Display Application Defined N/A
UseOldNumbering boolean Display Application Defined N/A
ViewAreaHeight int View Application Defined N/A
ViewAreaLeft int View Application Defined N/A
ViewAreaTop int View Application Defined N/A
ViewAreaWidth int View Application Defined N/A
ViewId string View Application Defined N/A
ViewLeft int View Application Defined N/A
ViewTop int View Application Defined N/A
VisibleAreaHeight int View Application Defined N/A
VisibleAreaLeft int View Application Defined N/A
VisibleAreaTop int View Application Defined N/A
VisibleAreaWidth int View Application Defined N/A
VisibleBottom int View Application Defined N/A
VisibleLeft int View Application Defined N/A
VisibleRight int View Application Defined N/A
VisibleTop int View Application Defined N/A
ZoomFactor short View Application Defined N/A
ZoomType short View Application Defined N/A
ZoomValue int View Application Defined N/A

If you were to use KOffice to open the document, it wouldn't understand any of these settings as they are all in the https://openoffice.org/2004/office namespace and not defined in the ODF standard. The OpenOffice folks most likely document many of these on their own site so KOffice could use that material when trying for interoperability, but at that point they've had to go beyond the ISO standard and start to rely on application specific information that OASIS and ISO have no say over.

In KOffice they also have document settings (although it doesn't appear to be nearly as much as OpenOffic) So with KOffice, you would get a different set of properties (here are a few I found):

KOffice extensions to ODF standard using empty namespace

Name Type Primary Use Interoperability Section in Spec
unit string App Behavior Application Defined N/A
SpellCheckerIgnoreList string App Behavior Application Defined N/A
displaylink boolean View Application Defined N/A
underlinelink boolean View Application Defined N/A
displaycomment boolean View Application Defined N/A
displayfieldcode boolean View Application Defined N/A
lastPrintingDate string Data Application Defined N/A
creationDate string Data Application Defined N/A
modificationDate string Data Application Defined N/A

 

Settings in OpenXML

Let's compare that with the OpenXML specification where the large majority are fully documented, and only a few are partially documented (none are application defined). Also note that all of these are completely optional for implementation, and even within Microsoft Office we try to move our customers toward turning many of them off (especially the application specific legacy behaviors). Obviously there may be more settings out there in other applications than what we've specified, and the spec is fully extensible to allow for those as well. We wanted to try to cover all of those currently in use, and as we find new ones we can add them to the spec if needed:

Name Type Primary Use Interoperability Section in Spec
activeWritingStyle complex type App Behavior Fully Documented 2.15.1.01
adjustLineHeightInTable Boolean Layout Fully Documented 2.15.3.01
alignBordersAndEdges Boolean Display Fully Documented 2.15.1.02
alignTablesRowByRow Boolean Layout Fully Documented 2.15.3.02
allowSpaceOfSameStyleInTable Boolean Layout Fully Documented 2.15.3.03
alwaysMergeEmptyNamespace Boolean App Behavior Fully Documented 2.15.1.03
alwaysShowPlaceholderText Boolean Display Fully Documented 2.15.1.04
applyBreakingRules Boolean Layout Fully Documented 2.15.3.04
attachedSchema String Data Fully Documented 2.15.1.05
attachedTemplate relationship App Behavior Fully Documented 2.15.1.06
autofitToFirstFixedWidthCell Boolean Layout Fully Documented 2.15.3.05
autoFormatOverride Boolean App Behavior Fully Documented 2.15.1.09
autoHyphenation Boolean Display Fully Documented 2.15.1.10
autoSpaceLikeWord95 Boolean Layout Partially Documented 2.15.3.06
balanceSingleByteDoubleByteWidth Boolean Layout Fully Documented 2.15.3.07
bookFoldPrinting Boolean Printing Fully Documented 2.15.1.11
bookFoldPrintingSheets Integer Printing Fully Documented 2.15.1.12
bookFoldRevPrinting Boolean Printing Fully Documented 2.15.1.13
bordersDoNotSurroundFooter Boolean Display Fully Documented 2.15.1.14
bordersDoNotSurroundHeader Boolean Display Fully Documented 2.15.1.15
cachedColBalance Boolean Layout Fully Documented 2.15.3.08
captions CT_Captions Display Fully Documented 2.15.1.17
characterSpacingControl CT_CharacterSpacing Layout Fully Documented 2.15.1.18
clickAndTypeStyle String App Behavior Fully Documented 2.15.1.19
clrSchemeMapping complex type Display Fully Documented 2.15.1.20
consecutiveHyphenLimit Integer Display Fully Documented 2.15.1.21
convMailMergeEsc Boolean Display Fully Documented 2.15.3.10
decimalSymbol String Data Fully Documented 2.15.1.22
defaultTableStyle String Display Fully Documented 2.15.1.23
defaultTabStop Integer Display Fully Documented 2.15.1.24
displayBackgroundShape Boolean Display Fully Documented 2.15.1.25
displayHangulFixedWidth Boolean Layout Fully Documented 2.15.3.11
displayHorizontalDrawingGridEvery Integer Display Fully Documented 2.15.1.26
displayVerticalDrawingGridEvery Integer Display Fully Documented 2.15.1.27
documentProtection CT_DocProtect App Behavior Fully Documented 2.15.1.28
documentType CT_DocType App Behavior Fully Documented 2.15.1.29
docVars CT_DocVars App Behavior Fully Documented 2.15.1.31
doNotAutoCompressPictures Boolean App Behavior Fully Documented 2.15.1.32
doNotAutofitConstrainedTables Boolean Layout Fully Documented 2.15.3.12
doNotBreakConstrainedForcedTable Boolean Layout Fully Documented 2.15.3.13
doNotBreakWrappedTables Boolean Layout Fully Documented 2.15.3.14
doNotDemarcateInvalidXml Boolean App Behavior Fully Documented 2.15.1.33
doNotDisplayPageBoundaries Boolean Display Fully Documented 2.15.1.34
doNotEmbedSmartTags Boolean App Behavior Fully Documented 2.15.1.35
doNotExpandShiftReturn Boolean Layout Fully Documented 2.15.3.15
doNotHyphenateCaps Boolean Display Fully Documented 2.15.1.36
doNotIncludeSubdocsInStats Boolean App Behavior Fully Documented 2.15.1.37
doNotLeaveBackslashAlone Boolean Display Fully Documented 2.15.3.16
doNotShadeFormData Boolean App Behavior Fully Documented 2.15.1.38
doNotSnapToGridInCell Boolean Layout Fully Documented 2.15.3.17
doNotSuppressIndentation Boolean Layout Fully Documented 2.15.3.18
doNotSuppressParagraphBorders Boolean Display Fully Documented 2.15.3.19
doNotTrackFormatting Boolean App Behavior Fully Documented 2.15.1.39
doNotTrackMoves Boolean App Behavior Fully Documented 2.15.1.40
doNotUseEastAsianBreakRules Boolean Layout Fully Documented 2.15.3.20
doNotUseHTMLParagraphAutoSpacing Boolean Layout Fully Documented 2.15.3.21
doNotUseIndentAsNumberingTabStop Boolean Layout Fully Documented 2.15.3.22
doNotUseMarginsForDrawingGridOrigin Boolean Layout Fully Documented 2.15.1.41
doNotValidateAgainstSchema Boolean App Behavior Fully Documented 2.15.1.42
doNotVertAlignCellWithSp Boolean Layout Fully Documented 2.15.3.23
doNotVertAlignInTxbx Boolean Layout Fully Documented 2.15.3.24
doNotWrapTextWithPunct Boolean Layout Fully Documented 2.15.3.25
drawingGridHorizontalOrigin Integer Layout Fully Documented 2.15.1.43
drawingGridHorizontalSpacing Integer Layout Fully Documented 2.15.1.44
drawingGridVerticalOrigin Integer Layout Fully Documented 2.15.1.45
drawingGridVerticalSpacing Integer Layout Fully Documented 2.15.1.46
footnoteLayoutLikeWW8 Boolean Layout Partially Documented 2.15.3.26
forceUpgrade CT_Empty App Behavior Fully Documented 2.15.1.47
forgetLastTabAlignment Boolean Layout Fully Documented 2.15.3.27
formsDesign Boolean App Behavior Fully Documented 2.15.1.48
growAutofit Boolean Layout Fully Documented 2.15.3.28
gutterAtTop Boolean Layout Fully Documented 2.15.1.49
hdrShapeDefaults complex type Layout Fully Documented 2.15.1.50
hideGrammaticalErrors Boolean App Behavior Fully Documented 2.15.1.51
hideSpellingErrors Boolean App Behavior Fully Documented 2.15.1.52
hyphenationZone Integer Layout Fully Documented 2.15.1.53
ignoreMixedContent Boolean App Behavior Fully Documented 2.15.1.54
layoutRawTableWidth Boolean Layout Fully Documented 2.15.3.29
layoutTableRowsApart Boolean Layout Fully Documented 2.15.3.30
lineWrapLikeWord6 Boolean Layout Partially Documented 2.15.3.31
linkStyles Boolean App Behavior Fully Documented 2.15.1.55
listSeparator String Data Fully Documented 2.15.1.56
mirrorMargins Boolean Layout Fully Documented 2.15.1.57
mwSmallCaps Boolean Layout Partially Documented 2.15.3.32
noColumnBalance Boolean Layout Fully Documented 2.15.3.33
noExtraLineSpacing Boolean Layout Fully Documented 2.15.3.34
noLeading Boolean Layout Fully Documented 2.15.3.35
noLineBreaksAfter CT_Kinsoku Layout Fully Documented 2.15.1.58
noLineBreaksBefore CT_Kinsoku Layout Fully Documented 2.15.1.59
noPunctuationKerning Boolean Layout Fully Documented 2.15.1.60
noSpaceRaiseLower Boolean Layout Fully Documented 2.15.3.36
noTabHangInd Boolean Layout Fully Documented 2.15.3.37
printBodyTextBeforeHeader Boolean Printing Fully Documented 2.15.3.38
printColBlack Boolean Printing Fully Documented 2.15.3.39
printFormsData Boolean Printing Fully Documented 2.15.1.61
printFractionalCharacterWidth Boolean Printing Fully Documented 2.15.1.62
printPostScriptOverText Boolean Printing Fully Documented 2.15.1.63
printTwoOnOne Boolean Printing Fully Documented 2.15.1.64
proofState String App Behavior Fully Documented 2.15.1.65
readModeInkLockDown complex type App Behavior Fully Documented 2.15.1.66
removeDateAndTime Boolean App Behavior Fully Documented 2.15.1.67
removePersonalInformation Boolean App Behavior Fully Documented 2.15.1.68
revisionView complex type Display Fully Documented 2.15.1.69
rsids CT_DocRsids Data Fully Documented 2.15.1.72
saveFormsData Boolean App Behavior Fully Documented 2.15.1.73
saveInvalidXml Boolean App Behavior Fully Documented 2.15.1.74
savePreviewPicture Boolean App Behavior Fully Documented 2.15.1.75
saveSubsetFonts Boolean App Behavior Fully Documented 2.15.1.76
saveThroughXslt complex type App Behavior Fully Documented 2.15.1.77
saveXmlDataOnly Boolean App Behavior Fully Documented 2.15.1.78
selectFldWithFirstOrLastChar Boolean App Behavior Fully Documented 2.15.3.40
shapeDefaults complex type Data Fully Documented 2.15.1.79
shapeLayoutLikeWW8 Boolean Layout Partially Documented 2.15.3.41
showBreaksInFrames Boolean Display Fully Documented 2.15.3.42
showEnvelope Boolean App Behavior Fully Documented 2.15.1.80
showXMLTags Boolean App Behavior Fully Documented 2.15.1.81
smartTagType complex type App Behavior Fully Documented 2.15.1.82
spaceForUL Boolean Layout Fully Documented 2.15.3.43
spacingInWholePoints Boolean Layout Fully Documented 2.15.3.44
splitPgBreakAndParaMark Boolean Layout Fully Documented 2.15.3.45
strictFirstAndLastChars Boolean Layout Fully Documented 2.15.1.83
styleLockQFSet Boolean App Behavior Fully Documented 2.15.1.84
styleLockTheme Boolean App Behavior Fully Documented 2.15.1.85
stylePaneFormatFilter complex type App Behavior Fully Documented 2.15.1.86
stylePaneSortMethod complex type App Behavior Fully Documented 2.15.1.87
subFontBySize Boolean Layout Fully Documented 2.15.3.46
summaryLength Integer App Behavior Fully Documented 2.15.1.88
suppressBottomSpacing Boolean Layout Fully Documented 2.15.3.47
suppressSpacingAtTopOfPage Boolean Layout Fully Documented 2.15.3.48
suppressSpBfAfterPgBrk Boolean Layout Fully Documented 2.15.3.49
suppressTopSpacing Boolean Layout Fully Documented 2.15.3.50
suppressTopSpacingWP Boolean Layout Partially Documented 2.15.3.51
swapBordersFacingPages Boolean Display Fully Documented 2.15.3.52
themeFontLang CT_Language Data Fully Documented 2.15.1.89
trackRevisions Boolean App Behavior Fully Documented 2.15.1.90
truncateFontHeightsLikeWP6 Boolean Layout Partially Documented 2.15.3.53
uiCompat97To2003 Boolean App Behavior Partially Documented 2.15.3.54
ulTrailSpace Boolean Display Fully Documented 2.15.3.55
underlineTabInNumList Boolean Display Fully Documented 2.15.3.56
updateFields Boolean Display Fully Documented 2.15.1.91
useAltKinsokuLineBreakRules Boolean Layout Fully Documented 2.15.3.57
useAnsiKerningPairs Boolean Layout Fully Documented 2.15.3.58
useFELayout Boolean Layout Fully Documented 2.15.3.59
useNormalStyleForList Boolean Display Fully Documented 2.15.3.60
usePrinterMetrics Boolean Display Fully Documented 2.15.3.61
useSingleBorderforContiguousCells Boolean Display Fully Documented 2.15.3.62
useWord2002TableStyleRules Boolean Display Partially Documented 2.15.3.63
useWord97LineBreakRules Boolean Layout Partially Documented 2.15.3.64
useXSLTWhenSaving Boolean App Behavior Fully Documented 2.15.1.92
view complex type Display Fully Documented 2.15.1.93
wpJustification Boolean Layout Partially Documented 2.15.3.65
wpSpaceWidth Boolean Layout Partially Documented 2.15.3.66
wrapTrailSpaces Boolean Layout Fully Documented 2.15.3.67
writeProtection complex type App Behavior Fully Documented 2.15.1.94
zoom complex type Display Fully Documented 2.15.1.95

-Brian