<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Doug Mahugh</title><subtitle type="html">Office Interoperability</subtitle><id>http://blogs.msdn.com/dmahugh/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/dmahugh/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-05-05T14:58:51Z</updated><entry><title>Open XML support in new tools, apps, and custom solutions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/11/18/open-xml-support-in-new-tools-apps-and-custom-solutions.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/11/18/open-xml-support-in-new-tools-apps-and-custom-solutions.aspx</id><published>2009-11-18T23:38:53Z</published><updated>2009-11-18T23:38:53Z</updated><content type="html">&lt;p&gt;One of the more interesting aspects of my job is meeting people who are developing software that interoperates with Office through the various formats that we support.&amp;#160; It’s exciting to hear their plans, work with them on the details of how our products can collaborate or share data, and then see the final solutions, whether they’re released in shrink-wrapped packages, available for download on the web, or delivered as a custom solution for a specific organization.&lt;/p&gt;  &lt;p&gt;Three of the more innovative firms I’ve had the pleasure of meeting and working with over the last few years are Altova, Datawatch, and PSC.&amp;#160; Here’s an overview of the latest work each of them has been doing with the Open XML formats.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.altova.com/"&gt;&lt;img title="Altova StyleVision" border="0" alt="Altova StyleVision" src="http://www.altova.com/images/shots/fixed-lines.gif" width="500" height="445" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Altova&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Altova’s &lt;a href="http://www.altova.com/download/missionkit/software_development_tools_enterprise.html"&gt;MissionKit&lt;/a&gt; is a powerful suite of XML tools for developers and XML architects.&amp;#160; I know them as an Open XML implementer, and also as a tool vendor.&amp;#160; We use XMLSpy, DiffDog, and other Altova tools for all kinds of things on our team, and we’ve even used them for Ecma TC45’s work on maintenance of the Open XML specification itself.&lt;/p&gt;  &lt;p&gt;Altova first rolled out &lt;a href="http://www.altova.com/xmlspy/office-2007-xml.html"&gt;Open XML support&lt;/a&gt; in April 2007, when they added to XMLSpy the ability to create DOCX, XLSX, and PPTX documents from scratch, as well as the ability to edit Open XML documents with context-sensitive help, auto-completion, and all the other productivity-enhancing features of XMLSpy.&amp;#160; The latest release of their product line, &lt;a href="http://www.altova.com/whatsnew.html"&gt;Version 2010&lt;/a&gt;, was rolled out last month with even more Open XML support options, as well as a host of other new features.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.altova.com/whatsnew.html#stylevision"&gt;StyleVision 2010&lt;/a&gt;, the stylesheet designer in the Altova lineup, now offers an entirely new design paradigm for creating XML forms that can be saved in DOCX and many other formats.&amp;#160; The key breakthrough in this release is that StyleVision is now a true electronic form design tool in every sense of the phrase.&amp;#160; Users can precisely position form elements on a canvas and specify templates within configurable layout containers, and they can design the form first, then add data-source connections later.&amp;#160; This provides many benefits, not least of which is that a graphic designer or similar person can create a great-looking form and then a developer or XML expert can add the necessary technical plumbing later.&amp;#160; If you’ve spent much time around e-forms, you know that that approach works much better than the other way around. :-)&amp;#160; StyleVision still offers free-flow (HTML-style) form creation as well as the new absolute-positioning functionality, for scenarios where a free-flowing form is more appropriate.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://datawatch.com/_products/monarch_wn.php"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Monarch Context in action" border="0" alt="Monarch Context in action" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/OpenXMLinnewtoolsappsandcustomsolutions_C670/image_9.png" width="500" height="427" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Datawatch&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Datawatch’s flagship product Monarch has been helping people create reports since 1991, and has supported the Open XML formats since February 2007, just two months after the publication of ECMA-376.&amp;#160; The latest release (Monarch &lt;a href="http://datawatch.com/_products/monarch_wn.php"&gt;Version 10.5&lt;/a&gt;) includes several changes related to their Open XML support.&lt;/p&gt;  &lt;p&gt;Monarch is a report mining and analysis tool that allows users to non-programmatically retrieve data from various information sources (usually reports in PDF, HTML, text or other formats) and create consolidated reports from that data.&amp;#160; It is both a consumer and a producer of the XLSX/XLSM formats, and it is used by hundreds of thousands of users to generate reports from data sources that would otherwise be very difficult to consolidate or work with.&lt;/p&gt;  &lt;p&gt;Version 10.5 includes support for digital signatures in XLSX/XLSM documents, improved PDF import, and other features, but the really interesting feature from an Open XML point of view is Monarch Context, a free add-in for Excel.&amp;#160; Monarch 10.5 has the ability to take advantage of the flexibility of OPC (the Open Packaging Convention) to store a full-fidelity XML representation of the original source report in the output XLSX document.&amp;#160; It also includes metadata on each row of the spreadsheet that ties back to the source of that row’s data in the original report.&amp;#160; With Monarch Context (see screenshot above), you can then navigate to a row in in the generated spreadsheet, click on Display Source, and see the source data for that row.&lt;/p&gt;  &lt;p&gt;This is a powerful example of the creative possibilities that developers have when working with OPC.&amp;#160; The generated report includes its own audit trail and source data, and you can even ask Monarch to sign the XLSX/XLSM file, to assure future viewers of the integrity of the report for compliance and auditing purposes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000005717"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="PPTX report generated by PSC&amp;#39;s custom system for RDI" border="0" alt="PPTX report generated by PSC&amp;#39;s custom system for RDI" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/OpenXMLinnewtoolsappsandcustomsolutions_C670/image17.png" width="500" height="254" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PSC&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.psclistens.com/"&gt;PSC Group LLC&lt;/a&gt; is a Chicago-area professional services consulting firm, a Microsoft Gold Partner, an IBM partner, and active in a wide range of technology services and projects.&amp;#160; I’ve gotten to know John Head, PSC’s Director of Enterprise Collaboration, fairly well through DII workshops and other activities, where he is a perennial force to be reckoned with.&amp;#160; John’s a hands-on expert and is definitely not the kind of guy who ever leaves you wondering what he really thinks -- it’s great to get that kind of direct informed feedback when we participate in DII events.&lt;/p&gt;  &lt;p&gt;One of PSC’s clients is RDI (Research Director, Inc.), a Maryland-based radio-research consulting firm that analyzes, interprets and presents Arbitron audience research data for over 200 radio stations.&amp;#160; RDI came to PSC with a problem: they had been using the same custom system for 10 years, and their needs had grown so much that it was taking three weeks to build the presentations they needed to generate each quarter.&amp;#160; As Marc Greenspan of RDI explains, “Taking three weeks to process the data was no longer an option.&amp;#160; By the time we’d be done, the next set of data would be coming in, and the presentations would be close to useless to our customers. We needed a scalable, sustainable production system, and our motivation was literally business survival.”&lt;/p&gt;  &lt;p&gt;PSC developed a custom Open XML solution for RDI that now delivers these same reports in just three days, enabling RDI to offer its analyses 13 times per year instead of 4 times per year, and dramatically reducing the cost of generating their analysis.&amp;#160; John Head explains that “We were able to improve the application performance so drastically by not having to automate PowerPoint, because it’s not involved until the user actually opens the file.&amp;#160; We couldn’t have done that without Open XML. We couldn’t support document generation on the server with binary formats. It was too hard and it didn’t always work. Open XML changed that.”&lt;/p&gt;  &lt;p&gt;There’s a new &lt;a href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000005717"&gt;case study&lt;/a&gt; on our web site about the system that John’s team has built for RDI.&amp;#160; It’s a good example of how the world of automated document assembly is rapidly changing with the advent of standardized XML-based document formats.&amp;#160; I had the opportunity to learn about this system early on, when the PSC team gave us a demo in Redmond last year, and it’s great to see it rolled out and in production.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Microsoft&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;And finally, for those who haven’t seen the news yet … &lt;a href="http://www.microsoft.com/2010"&gt;we have a new Open XML implementation available, too&lt;/a&gt;.&amp;#160; More on that one later. ;-)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924877" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>DII workshop, Brussels</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/11/17/dii-workshop-brussels.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/11/17/dii-workshop-brussels.aspx</id><published>2009-11-17T12:17:24Z</published><updated>2009-11-17T12:17:24Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DII workshop" border="0" alt="DII workshop" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image_thumb.png" width="504" height="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Last week I participated in the DII workshop that took place in Brussels.&amp;#160; Attendees included a variety of document-format experts from the ODF and Open XML worlds, including members of SC34 working groups, the OASIS ODF and OIC TCs, ODF and Open XML implementers, public-sector experts in interoperability and archiving, and others.&lt;/p&gt;  &lt;p&gt;The roundtable discussions at this event covered some interesting issues, including various approaches to round-tripping content through different formats, extensibility strategies and technical considerations, and future possibilities for the Strict and Transitional conformance classes of ISO/IEC 29500.&lt;/p&gt;  &lt;p&gt;The workshop presentations are now available for download &lt;a href="http://www.documentinteropinitiative.org/diipresentationsanddocs/brusselsnov09.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.flickr.com/photos/dougerino/4099127242/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Belgian beer" border="0" alt="Belgian beer" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image1_thumb.png" width="124" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.flickr.com/photos/dougerino/4101059544/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="parliament" border="0" alt="parliament" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image7_thumb.png" width="124" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.flickr.com/photos/dougerino/4100295835/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Brussels" border="0" alt="Brussels" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image_thumb_5.png" width="124" height="184" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/dougerino/4101027643/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Antwerp" border="0" alt="Antwerp" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrussels_EC8/image_thumb_6.png" width="124" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923522" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>ODF plugfest and OOoCon, Orvieto</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/11/07/odf-plugfest-and-ooocon-orvieto.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/11/07/odf-plugfest-and-ooocon-orvieto.aspx</id><published>2009-11-07T21:42:00Z</published><updated>2009-11-07T21:42:00Z</updated><content type="html">&lt;P&gt;I’ve spent the last week in the city of Orvieto, perched atop a hill in Umbria, Italy.&amp;nbsp; Monday and Tuesday I particpated in the second ODF Plugfest, and then Wednesday through Friday I attended OOoCon, the annual OpenOffice.org conference.&amp;nbsp; I gave a presentation on Wednesday about Office’s approach to interoperability with OpenOffice.org, which you can find on the &lt;A href="http://conference.services.openoffice.org/index.php/ooocon/2009/schedConf/presentations" mce_href="http://conference.services.openoffice.org/index.php/ooocon/2009/schedConf/presentations"&gt;OOoCon presentation page&lt;/A&gt;, and you can find the presentations from the plugfest, as well as the test scenarios we went through, on the &lt;A href="http://plugtest.opendocsociety.org/doku.php" mce_href="http://plugtest.opendocsociety.org/doku.php"&gt;plugfest web site&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;It was great to see everyone I had met at the last plugfest, and I also had the opportunity to finally meet in person many people I’ve only known via email and the ODF TC calls, including Svante Schubert, Charles Schulz, Louis Suarez-Potts, Eike Rathke and others.&amp;nbsp; Everyone was great, and made me feel very welcome.&lt;/P&gt;
&lt;P&gt;I was planning to do some sightseeing in Rome this weekend, but there is a train strike that begins at 21:00 today (Saturday), so I’m going to stay right here in Orvieto until Monday, when I’ll fly to Brussels for meetings and preparations for the upcoming &lt;A href="http://blogs.msdn.com/dmahugh/archive/2009/10/13/dii-workshop-brussels-november-12.aspx" mce_href="http://blogs.msdn.com/dmahugh/archive/2009/10/13/dii-workshop-brussels-november-12.aspx"&gt;DII workshop&lt;/A&gt; on Thursday, November 12.&amp;nbsp; If you’d like to see the photos I’ve taken in Orvieto this week, you can find them on &lt;A href="http://www.flickr.com/photos/dougerino/tags/orvieto/" mce_href="http://www.flickr.com/photos/dougerino/tags/orvieto/"&gt;Flickr&lt;/A&gt;, and I’ve also included thumbnails of a few favorites below.&lt;/P&gt;
&lt;P&gt;And now, after a long day of photographing the sights of Orvieto, it’s time to get out and enjoy some local cuisine.&amp;nbsp; Buon appetito!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.flickr.com/photos/dougerino/4072312034/" mce_href="http://www.flickr.com/photos/dougerino/4072312034/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image28.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image28.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4072545725/" mce_href="http://www.flickr.com/photos/dougerino/4072545725/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image25.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image25.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4070295070/" mce_href="http://www.flickr.com/photos/dougerino/4070295070/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image_43.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image_43.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4076758097/" mce_href="http://www.flickr.com/photos/dougerino/4076758097/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image3.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image3.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4082946279/" mce_href="http://www.flickr.com/photos/dougerino/4082946279/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image42.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image42.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4066978183/" mce_href="http://www.flickr.com/photos/dougerino/4066978183/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image15.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image15.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4083126508/" mce_href="http://www.flickr.com/photos/dougerino/4083126508/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image16.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image16.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4084154950/" mce_href="http://www.flickr.com/photos/dougerino/4084154950/"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image_18.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image_18.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4083615012/" mce_href="http://www.flickr.com/photos/dougerino/4083615012/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image1.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image1.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4081124710/" mce_href="http://www.flickr.com/photos/dougerino/4081124710/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image11.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image11.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4079176429/" mce_href="http://www.flickr.com/photos/dougerino/4079176429/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image10.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image10.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4082886887/" mce_href="http://www.flickr.com/photos/dougerino/4082886887/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image7%5B1%5D.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image7%5B1%5D.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4082878779/" mce_href="http://www.flickr.com/photos/dougerino/4082878779/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image4.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image4.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4081106544/" mce_href="http://www.flickr.com/photos/dougerino/4081106544/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image1%5B1%5D.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image1%5B1%5D.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4070314512/" mce_href="http://www.flickr.com/photos/dougerino/4070314512/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image36.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image36.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4069537237/" mce_href="http://www.flickr.com/photos/dougerino/4069537237/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image21.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image21.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4079177797/" mce_href="http://www.flickr.com/photos/dougerino/4079177797/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image301.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image301.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4077911684/" mce_href="http://www.flickr.com/photos/dougerino/4077911684/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image271.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image271.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4079936324/" mce_href="http://www.flickr.com/photos/dougerino/4079936324/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image39.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image39.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.flickr.com/photos/dougerino/4072192153/" mce_href="http://www.flickr.com/photos/dougerino/4072192153/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image18.png" width=104 height=84 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFplugfestandOOoConOrvieto_13C2/image18.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919134" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>DII workshop – Brussels, November 12</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/10/13/dii-workshop-brussels-november-12.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/10/13/dii-workshop-brussels-november-12.aspx</id><published>2009-10-14T05:38:00Z</published><updated>2009-10-14T05:38:00Z</updated><content type="html">&lt;p&gt;The next DII (Document Interoperability Initiative) workshop will take place in Brussels on November 12.&amp;#160; As always, the goal of the DII workshops is to share information with the developer community and solicit feedback on how we can work together to improve interoperability.&lt;/p&gt;  &lt;p&gt;Much has changed since the last DII workshop in Brussels, when we discussed Office’s future plans for ODF support and the pending rollout of the &lt;a href="http://documentinteropinitiative.org"&gt;implementer notes&lt;/a&gt;, as well as the need for a validator and document test library to improve ISO/IEC 29500 interoperability.&amp;#160; Now there are two versions of Office that offer built-in ODF support (Office 2007 SP2 and the Office 2010 Technical Preview), implementer notes have been published for ODF, ECMA-376, and ISO/IEC 29500, and validator and test-library projects are underway.&lt;/p&gt;  &lt;p&gt;This workshop will include presentations on a variety of document interoperability topics.&amp;#160; I'll blog the details of the agenda after it's finalized, but I wanted to let everyone know the date so those who are interested can make plans to attend.&amp;#160; In the meantime, here are a few of the presentations that are already being planned:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I'll be covering the Office 2010 extensions (as was covered by the Office program managers in last month's &lt;a href="http://blogs.msdn.com/dmahugh/archive/2009/09/23/dii-workshop-on-office-2010-extensions.aspx"&gt;DII workshop in Redmond&lt;/a&gt;).&amp;#160; I will also present the latest news on how we’re working to improve ODF interoperability between Office and other popular applications, and talk about our plans for the future. &lt;/li&gt;    &lt;li&gt;Alex Brown will be covering present and future plans for the &lt;a href="http://code.google.com/p/officeotron/"&gt;Office-o-tron&lt;/a&gt; validator project. &lt;/li&gt;    &lt;li&gt;Klaus-Peter Eckert of Fraunhofer FOKUS will present the latest status of the document test library project and other work Fraunhofer is doing to improve interoperability. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Like all DII workshops, this event is open to anyone and everyone, and there is no cost to attend.&amp;#160; If you're interested in attending, let us know by sending an email to &lt;a href="mailto:diievents@microsoft.com"&gt;diievents@microsoft.com&lt;/a&gt;, and we’ll follow up with information about the venue, agenda, and other details.&lt;/p&gt;  &lt;p&gt;On a more personal note, I know that many people in the document formats community (myself included) are photo geeks, and cameras may have outnumbered laptops at some of the standards meetings and interop events I’ve attended.&amp;#160; I’ve been to Brussels twice before, but never had time to snap more than a few photos on the way between meetings, like the snapshots below.&amp;#160; This time, however, I’ll be in Brussels a day early and am planning to get out and take a bunch of pictures on the Armistice Day holiday, November 11.&amp;#160; So if you’re coming to the workshop and would like to go on a photo outing the day before, &lt;a href="mailto:dmahugh@microsoft.com"&gt;let me know&lt;/a&gt;.&amp;#160; The more the merrier.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrusselsNovember12_9636/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Brussels" border="0" alt="Brussels" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIworkshopBrusselsNovember12_9636/image_thumb_1.png" width="543" height="412" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;See you in Brussels!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906995" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>DII Workshop on Office 2010 Extensions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/09/23/dii-workshop-on-office-2010-extensions.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/09/23/dii-workshop-on-office-2010-extensions.aspx</id><published>2009-09-24T06:11:04Z</published><updated>2009-09-24T06:11:04Z</updated><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="presentations at the DII workshop, 9/18/2009" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/DIIWorkshoponOffice2010Extensions_98C9/image_thumb.png" width="520" height="381" /&gt;&lt;/p&gt;  &lt;p&gt;If you’re using the Office 2010 Technical Preview and you’re the type of person who likes to look closely at the markup of documents that you’ve created (as most readers of this blog are), you may have noticed some new namespaces that Word, Excel, and PowerPoint used for new functionality such as &lt;a href="http://blogs.msdn.com/excel/archive/2009/07/17/sparklines-in-excel.aspx"&gt;sparklines&lt;/a&gt; in spreadsheets or &lt;a href="http://blogs.msdn.com/powerpoint/archive/2009/07/22/organizing-your-presentation-with-sections.aspx"&gt;presentation sections&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Last Friday, at a DII workshop in Redmond, program managers from the Office product groups explained how these new namespaces are used in Office 2010.&amp;#160; This event was scheduled for the day after the &lt;a href="http://www.itscj.ipsj.or.jp/sc34/open/1291.htm"&gt;SC34 Plenary&lt;/a&gt; which took place in nearby Bellevue, so that interested SC34 members could easily attend.&amp;#160; In addition to the SC34 attendees, several US-based ISVs were also present, which led to a good roundtable discussion in the afternoon with a variety of perspectives represented.&lt;/p&gt;  &lt;p&gt;Office 2010 takes advantage of two types of extensibility mechanisms in ISO/IEC 29500: extension lists and ACBs (alternate content blocks).&amp;#160; These extension points, which are documented in the text of the standard (see Part 3), provide implementers with a standardized way to innovate and add new functionality while maintaining conformance to the standard itself.&amp;#160; The core concept is that an implementer can provide more than one representation for an object (a shape on a slide, say), and then consumers of that document can render the version that they understand.&lt;/p&gt;  &lt;p&gt;The workshop featured four presentations on how Office 2010 uses ACBs and extension lists.&amp;#160; Word/Excel/PowerPoint program managers (Zeyad Rajabi, Chris Rae, and Ric Bretschneider, respectively) explained examples from each of those products, and Nick Chiang of the graphics team covered some general concepts about how graphics are handled in Office 2010.&amp;#160; The presentations included demos of various new types of functionality in Office, followed by deep-dive explanations of the markup used to serialize this new functionality.&lt;/p&gt;  &lt;p&gt;All of the presentations are now available for download &lt;a href="http://www.documentinteropinitiative.org/diipresentationsanddocs/redmondsept09.aspx"&gt;here&lt;/a&gt;, and documentation of the specific extensions used by Office 2010 can be found in the &lt;a href="http://msdn.microsoft.com/en-us/library/cc313118.aspx"&gt;Microsoft Office File Formats&lt;/a&gt; section of the Open Specifications Developer Center on MSDN::&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;[MS-DOCX]: &lt;a href="http://msdn.microsoft.com/en-us/library/dd773189.aspx"&gt;Word Extensions to the Office Open XML File Format&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;[MS-XLSX]: &lt;a href="http://msdn.microsoft.com/en-us/library/dd922181.aspx"&gt;Excel Extensions to the Office Open XML File Format&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;[MS-PPTX]: &lt;a href="http://msdn.microsoft.com/en-us/library/dd926741.aspx"&gt;PowerPoint Extensions to the Office Open XML File Format&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;[MS-ODRAWXML]: &lt;a href="http://msdn.microsoft.com/en-us/library/dd905216.aspx"&gt;Office Drawing Extensions to Office Open XML&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After the presentations on Friday, we had a roundtable discussion of the topics covered during the day, and a variety of related topics.&amp;#160; Here are some of the points of discussion that I found most interesting:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Standardizing implementer notes.&amp;#160; &lt;/strong&gt;Should there be a standardized approach for documenting the details of a specific implementation of a standard?&amp;#160; If a standardized schema were used by all implementers, it would be possible to build tools to work with these notes and search them or mine the data to identify possible improvements to the standard and trends among implementations.&amp;#160; There was consensus that this is a topic worth further discussion and consideration. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Should the Office 2010 extensions be standardized?&lt;/strong&gt;&amp;#160; I was interested to see the range of opinions on this question.&amp;#160; Some people feel they should, others feel that they should not, and others felt that further investigation and study is needed to determine what subset of these extensions may be appropriate or worthwhile for de jure standardization. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Test suites and profiles.&amp;#160; &lt;/strong&gt;We discussed various approaches to creating document test suites and standards conformance profiles that would enable better interoperability.&amp;#160; Participants in this discussion included members of the OASIS OIC TC, SC34 WG4 and SC34 WG5, as well as software developers who (as John Head put it) “don’t care about standards, we just want everyone to implement the same thing in the same way.” &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Should all implementations have published implementer notes?&amp;#160; &lt;/strong&gt;This topic was raised by a participant who asked about implementer notes for Mac Office, which currently don’t exist.&amp;#160; Some felt that such documentation is needed from all implementers, and one person even suggested that publication of implementer notes could be a requirement for claiming conformance to a standard.&amp;#160; Others felt that such a requirement might be an obstacle to adoption of the standard, given the magnitude of the effort needed to create comprehensive documentation for an implementation. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Can some things be standardized in a way that allows for their re-use in both ODF and Open XML?&amp;#160; &lt;/strong&gt;One of the attendees suggested that slide transitions could be standardized independent of the underlying document format, to allow them to be re-used consistently in more than one format.&amp;#160; This would certainly simplify some aspects of translation between formats, but as others pointed out, it may be more effective to focus on translation between the existing standards rather than modifying each of them to support a new approach, which could be technically and politically challenging. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Do standards slow the pace of innovation?&amp;#160; &lt;/strong&gt;I hadn’t expected this topic to come up, but it prompted an interesting discussion of whether forward progress in document formats is limited by the fact that the&amp;#160; major alternatives are all published international standards that must adhere to well-defined processes for their maintenance and evolution. The conclusion on this topic seemed to be that this is not an issue (i.e., standards don’t restrict innovation), but more could be done to educate implementers and users about how innovation and standards can peacefully co-exist. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;What’s the best way to handle schema validation for documents that use MCE?&amp;#160; &lt;/strong&gt;MCE (Markup Compatibility and Extensibility – Part 3 of ISO/IEC 29500) requires a consumer to pre-process the XML markup before doing schema validation.&amp;#160; We discussed how implementers can best address this requirement.&amp;#160; Some felt NVDL might be the best tool for the job, and others suggested that there is a need for more examples of how to work with MCE, and tools that support MCE, across all platforms.&amp;#160; This is another area we agreed needs further discussion and consideration. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It’s great to have so many experts in one room, sharing their thoughts on these topics, and I learned a lot from the wide variety of opinions expressed.&amp;#160; What do you think?&amp;#160; Do you have a strong opinion on any of these topics?&amp;#160; Let me know in the comments below.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898770" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>SC34 WG4 Meeting, Bellevue</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/09/15/sc34-wg4-meeting-bellevue.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/09/15/sc34-wg4-meeting-bellevue.aspx</id><published>2009-09-16T02:33:13Z</published><updated>2009-09-16T02:33:13Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/SC34WG4meeting_9E35/DM1_7792_4.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WG4 meeting, Sunday 09/13/2009" border="0" alt="WG4 meeting, Sunday 09/13/2009" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/SC34WG4meeting_9E35/DM1_7792_thumb_1.jpg" width="531" height="186" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;WG4 has been meeting in Bellevue, Washington the last three days, as part of a full week of activities around the upcoming SC34 plenary here this Thursday.&amp;#160; We wrapped up the meeting with a half-day this morning (Tuesday), after meeting all day on Sunday and Monday.&lt;/p&gt;  &lt;p&gt;WG4 covered a variety of topics in this week’s meetings.&amp;#160; I won’t get into great detail on those, because some of these topics are still open and WG4 deliberations will continue in future calls and meetings, but here are a few of the more interesting topics we covered:&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The past, present and future of Strict and Transitional; WG4 is working toward consensus on the long-term intent of this distinction, to help guide future work on new functionality and other maintenance activities. &lt;/li&gt;    &lt;li&gt;The W3C &lt;a href="http://dev.w3.org/2006/waf/widgets/"&gt;“Widgets 1.0: Packaging and Configuration”&lt;/a&gt; candidate recommendation, and how it compares/contrasts to OPC. &lt;/li&gt;    &lt;li&gt;Possible use of &lt;a href="http://www.assembla.com/"&gt;Assembla&lt;/a&gt; for tracking defect reports and maintaining the IS29500 schemas. &lt;/li&gt;    &lt;li&gt;Open defect reports on media types, fonts, and custom XML, discussed proposed resolutions, and closed most of the DRs we covered. &lt;/li&gt;    &lt;li&gt;Issues around ISO 8601 dates, including how to define a profile of the 8601 standard for use in IS29500, and the question of whether ISO 8601 dates should be removed from Transitional. &lt;/li&gt;    &lt;li&gt;Various options for addressing the unqualified attributes issue that has been raised by the Czech Republic. &lt;/li&gt;    &lt;li&gt;How future reprints and revisions to the standard will be handled, and how&amp;#160; the upcoming changes to the ISO/IEC Directives will affect that work. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In addition to the 20-25 people in the&amp;#160; room each day, we had a few people call in to contribute and participate.&amp;#160; Especially noteworthy, in my opinion, were the phone contributions from Japan’s Toshiya Suzuki (who was on the phone from roughly 2:00AM to 9:00AM his time) and Denmark’s Jesper Lund Stocholm, who juggled LiveMeeting, a phone call, and a 2-month-old baby with aplomb.&amp;#160; Thanks for calling in, guys.&lt;/p&gt;  &lt;p&gt;We also had two presentations from invited Microsoft experts.&amp;#160; Zeyad Rajabi covered custom XML, and Jeff Chen covered Markup Compatibility and Extensibility.&amp;#160; This gave WG4 members an opportunity to ask questions of subject-matter experts in these areas, to help inform future maintenance activities.&lt;/p&gt;  &lt;p&gt;Other SC34 working groups are also meeting here this week prior to the Thursday plenary, including WG5 (ODF-OXML translation), WG3 (topic maps), and WG1 (validation).&amp;#160; This afternoon and tomorrow, I’m attending AHG3, the ad-hoc group looking into ODF maintenance and how SC34 and OASIS can work together on maintenance going forward.&amp;#160; I’m going to also try to spend some time with WG5 if I can (which is meeting at the same time as AHG3), and then Thursday is the SC34 plenary itself, and Friday we have a &lt;a href="http://blogs.msdn.com/dmahugh/archive/2009/07/21/dii-workshop-mce-deep-dive-redmond.aspx"&gt;DII workshop&lt;/a&gt; over in Redmond on the Microsoft campus.&amp;#160; Busy week.&lt;/p&gt;  &lt;p&gt;I’ll cover some of these topics in more detail after decisions are made in WG4 and/or relevant resolutions are approved in the SC34 plenary.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/SC34WG4meeting_9E35/DM1_7830_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Lake Washington and Olympic Mountains, from Kirkland 09/14/2009" border="0" alt="Lake Washington and Olympic Mountains, from Kirkland 09/14/2009" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/SC34WG4meeting_9E35/DM1_7830_thumb_1.jpg" width="538" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895611" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>DII Workshop: MCE Deep Dive, Redmond</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/07/21/dii-workshop-mce-deep-dive-redmond.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/07/21/dii-workshop-mce-deep-dive-redmond.aspx</id><published>2009-07-21T22:49:59Z</published><updated>2009-07-21T22:49:59Z</updated><content type="html">&lt;p&gt;We’ll be hosting another &lt;a href="http://documentinteropinitiative.org"&gt;DII&lt;/a&gt; workshop soon, and this one will be of special interest to those who want to understand the inner workings of MCE (Markup Compatibility and Extensibility) as defined in Part 3 of ISO/IEC 29500.&amp;#160; We’ve used MCE for new functionality in documents created by Office 2010, and members of SC34 WG4 have expressed interest in understanding the details of our implementation.&amp;#160; So we’re planning a workshop in Redmond on Friday, September 18, the day after the upcoming SC34 plenary in nearby Bellevue, to do a deep-dive review of how Office 2010 uses MCE.&lt;/p&gt;  &lt;p&gt;For those who aren’t familiar with MCE, here’s how it is described in the Scope clause of the standard (ISO/IEC 29500-3):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This Part of ISO/IEC 29500 describes a set of conventions that are used by Office Open XML documents to clearly mark elements and attributes introduced by future versions or extensions of Office Open XML documents, while providing a method by which consumers can obtain a baseline version of the Office Open XML document (a version without extensions) for interoperability.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;By using MCE for the new functionality in Office 2010, we can deliver innovations like &lt;a href="http://blogs.msdn.com/excel/archive/2009/07/17/sparklines-in-excel.aspx"&gt;sparklines&lt;/a&gt; in Excel 2010 or &lt;a href="http://blogs.msdn.com/powerpoint/archive/2009/07/14/introducing-powerpoint-2010.aspx"&gt;new slide transitions&lt;/a&gt; in PowerPoint 2010, while maintaining compatibility with the Open XML standard.&amp;#160; At this one-day event, members of the Word, Excel, PowerPoint and graphics teams will demonstrate these new capabilities and show how these new capabilities are stored in MCE &lt;em&gt;alternate content blocks &lt;/em&gt;and extension lists.&lt;/p&gt;  &lt;p&gt;The date for this workshop will be &lt;strong&gt;Friday, September 18&lt;/strong&gt;, and the location will be Microsoft’s Redmond campus.&amp;#160; If you’re interested in attending, please contact my colleague Amruta Gulanikar via &lt;a href="http://blogs.msdn.com/amrutag/contact.aspx"&gt;this form&lt;/a&gt; to get on the list.&amp;#160; Amruta can also provide information about travel and hotel options.&lt;/p&gt;  &lt;p&gt;I hope to see you there!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9843761" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>Open XML developers: where to get answers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/07/09/open-xml-developers-where-to-get-answers.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/07/09/open-xml-developers-where-to-get-answers.aspx</id><published>2009-07-10T04:10:05Z</published><updated>2009-07-10T04:10:05Z</updated><content type="html">&lt;p&gt;I recently returned from a long business trip, and while working through my email backlog I’ve come across several questions from developers who are working with the Open XML formats.&amp;#160; I’ve responded to each of them with some tips on how to best get such questions answered, and I&amp;#160; thought I’d summarize that information here for others who may find it useful.&lt;/p&gt;  &lt;p&gt;Your &lt;strong&gt;first stop for most Open XML development questions &lt;/strong&gt;should be the &lt;a href="http://openxmldeveloper.org/forums/default.aspx"&gt;forums&lt;/a&gt; section of the &lt;a href="http://www.openxmldeveloper.org"&gt;Open XML Developer&lt;/a&gt; web site.&amp;#160; You can post a question there and it will be seen by the people who manage that site, and also by the broader Open XML developer community.&amp;#160; Over 4,000 comments have been posted to those forums, so you can also learn quite a bit by reviewing the existing threads.&amp;#160; And the &lt;a href="http://openxmldeveloper.org/articles.aspx"&gt;library&lt;/a&gt; section of the site has dozens of articles with Open XML code samples in many programming languages, including Java, C#, C++, PHP, Ruby, Python, and others.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Another great one-stop shop for Open XML development topics &lt;/strong&gt;is the &lt;a href="http://msdn.microsoft.com/en-us/office/bb265236.aspx"&gt;Open XML Developer Portal&lt;/a&gt;.&amp;#160; There you can find a huge&amp;#160; number of code samples, articles, whitepapers, how-to videos, and free downloads, as well as links to many other resources.&amp;#160; This site is focused on the needs of developers who are working with Microsoft’s tools, including the Open XML SDK and the System.IO.Packaging API.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;For developers working with the Open XML SDK&lt;/strong&gt;, be sure to check out Erika Ehrli’s recent summary of “&lt;a href="http://blogs.msdn.com/erikaehrli/archive/2009/05/14/open-xml-format-sdk-2-0-getting-started-best-practices.aspx"&gt;Getting Started Best Practices&lt;/a&gt;” for SDK developers.&amp;#160; You can also find a rapidly growing collection of great in-depth blog posts about Open XML SDK development over on &lt;a href="http://blogs.msdn.com/brian_jones/"&gt;Brian Jones’s blog&lt;/a&gt;, where Zeyad Rajabi has been covering a wide variety of common scenarios for Open XML developers.&lt;/p&gt;  &lt;p&gt;Speaking of &lt;strong&gt;Microsoft blogs for Open XML developers&lt;/strong&gt;, any serious Open XML developer should also include &lt;a href="http://blogs.msdn.com/ericwhite/default.aspx"&gt;Eric White’s blog&lt;/a&gt; in their RSS feeds.&amp;#160; Eric is a leading proponent of the use of functional programming techniques based on LINQ to XML technology, and he covers the Open XML SDK and SharePoint topics as well as more general XML development concepts.&amp;#160; Another Microsoft blogger to follow is &lt;a href="http://blogs.msdn.com/speront/"&gt;Stephen Peront&lt;/a&gt;, who works with me on the Office Interoperability team and recently covered the &lt;a href="http://blogs.msdn.com/speront/archive/2009/04/17/9553717.aspx"&gt;File Format Converter API&lt;/a&gt; that we released in Office 2007 SP2.&lt;/p&gt;  &lt;p&gt;If you’re looking for &lt;strong&gt;detailed information about Office’s implementation of Open XML&lt;/strong&gt;, check out the implementer notes published on the &lt;a href="http://www.documentinteropinitiative.org"&gt;DII web site&lt;/a&gt;.&amp;#160; There you can find information about our support for &lt;a href="http://blogs.msdn.com/dmahugh/archive/2009/01/16/ecma-376-implementation-notes-for-office-2007-sp2.aspx"&gt;ECMA-376&lt;/a&gt;, and soon you’ll find a similarly detailed set of notes for our implementation of ISO/IEC 29500 in Office 2010.&amp;#160; This information can be very useful for maximizing interoperability with Office.&lt;/p&gt;  &lt;p&gt;You can find related information about &lt;strong&gt;Office’s support for file formats &lt;/strong&gt;(including other formats in addition to Open XML) at the &lt;a href="http://msdn.microsoft.com/en-us/openspecifications/default.aspx"&gt;Open Specifications Developer Center&lt;/a&gt; on MSDN.&amp;#160; That site hosts thousands of pages of documentation for protocols and formats that are supported by Office, and the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/openspecifications/"&gt;forums&lt;/a&gt; section of the site is a good place to get specific questions answered.&amp;#160; The MSDN forums also include a very active &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/threads"&gt;forum for Open XML SDK developers&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;One final detail worth mentioning is &lt;strong&gt;where to get the Open XML specification itself&lt;/strong&gt;.&amp;#160; You can download ECMA-376 from the Ecma International web site, and the &lt;a href="http://www.openxmldeveloper.org"&gt;home page of the Open XML Developer web site&lt;/a&gt; has a handy set of links for that purpose.&amp;#160; And you can download the ISO/IEC 29500 specification from the “&lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html"&gt;Freely Available Standards&lt;/a&gt;” page on the ISO web site.&lt;/p&gt;  &lt;p&gt;As you can see, there are many good resources available for Open XML developers.&amp;#160; If you have questions about how to do something specific, or are looking for general advice on working with Open XML, the links above are the best places to get help.&amp;#160; Feel free to contact me as well, through this blog, if you’re looking for something you can’t find at these sites, and I’ll try to help you track down the best place to get the information you need.&lt;/p&gt;  &lt;p&gt;OK, time to get back to working through that email backlog …&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/OpenXMLdeveloperswheretogetanswers_D731/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/OpenXMLdeveloperswheretogetanswers_D731/image_thumb.png" width="507" height="44" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9827955" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>WG4/WG5 Meetings</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/06/29/wg4-wg5-meetings.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/06/29/wg4-wg5-meetings.aspx</id><published>2009-06-29T17:32:54Z</published><updated>2009-06-29T17:32:54Z</updated><content type="html">&lt;p&gt;&lt;img title="WG4 meeting, Copenhagen" alt="WG4 meeting, Copenhagen" src="http://farm4.static.flickr.com/3663/3651802864_e56b8794fd.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;  &lt;p&gt;I’ve just returned last night from a week in Copenhagen, where I attended the SC34 WG4/WG5 meetings that were hosted by Danish Standards.&amp;#160; As usual, it was several days of non-stop document format discussions, in the meetings as well as over breakfast, lunch, dinner, and Carlsbergs.&amp;#160; A typical comment from one of the delegates Wednesday afternoon: “let’s take a break from sitting down and continue this debate standing up for a while.”&lt;/p&gt;  &lt;p&gt;Other attendees have posted some thoughts about the meetings already, and I expect we’ll see more discussion of the details on participants’ blogs going forward.&amp;#160; See &lt;a href="http://www.adjb.net"&gt;Alex Brown&lt;/a&gt; and &lt;a href="http://idippedut.dk"&gt;Jesper Lund Stocholm&lt;/a&gt; for information about some of the topics we discussed, including &lt;a href="http://idippedut.dk/post/2009/06/23/Re-introducing-onoff-values-to-ST-OnOff-in-OOXML-Part-4.aspx"&gt;boolean values&lt;/a&gt;, &lt;a href="http://www.adjb.net/post/SC-34-meetings-Copenhagen.aspx"&gt;ISO 8601 dates&lt;/a&gt;, and other aspects of IS29500 maintenance.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WG4 (IS29500 Maintenance)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The main focus of WG’s work, as always, was processing of DRs (defect reports) that have been submitted by member bodies.&amp;#160; As of the end of the meeting, we had closed 205 of the 284 defect reports that have been submitted to date; watch the &lt;a href="http://www.itscj.ipsj.or.jp/sc34/wg4/statistics/Statistics%2020090613.pdf"&gt;WG4 statistics page&lt;/a&gt; for an update in the next few days that will reflect the latest status.&amp;#160; The biggest submitter of DRs to date has been the UK, although I see that Japan plans to take the lead soon, according to &lt;a href="http://www.flickr.com/photos/alexbrn/3653841290/"&gt;a comment from WG4 convenor Murata Makoto&lt;/a&gt; on Alex Brown’s Flickr stream.&lt;/p&gt;  &lt;p&gt;In addition to discussing proposed solutions and closing DRs, we discussed at some length two topics Alex raised in presentations to the group: the intent of IS29500’s division into Transitional and Strict at the BRM last year (including how they’re related and the long-term maintenance implied by this structure), and various approaches to conformance testing for IS29500 (and also IS26300).&amp;#160; We also reviewed the planned schedule for COR1 (the first set of technical corrigenda for IS29500) and AM1 (the first set of amendments).&amp;#160; Project editor Rex Jaeschke is already working on these documents, and WG4 hopes to be ready to approve them on the July 23 conference call, or on a July 30 call if needed.&amp;#160; After that, they’ll proceed to SC34 and JTC1 for balloting.&amp;#160; One other interesting topic we discussed was how we can implement a public email archive for all WG4 correspondence.&lt;/p&gt;  &lt;p&gt;I’ll have more to say on all of these topics as we move forward with them in WG4.&amp;#160; For the next few weeks, however, the main focus of WG4’s work will be to get COR1 and AM1 ready for approval and publication, so that the IS29500 standard can be updated to reflect all of the work WG4 has done to date.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WG5 (ODF-OXML Translation)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;After WG4 met on June 22-24, WG5 met on June 25.&amp;#160; WG5 is the working group on translation between the ODF and Open XML formats, and the main work item in WG5 right now is a TR (technical report) that will provide guidance on various details of the translation process.&lt;/p&gt;  &lt;p&gt;Klaus-Peter Eckert (Fraunhofer FOKUS), the editor of the TR, provided an overview of the current status and outlined some of the scenarios the report is based upon.&lt;/p&gt;  &lt;p&gt;Alex Brown presented on conformance and validation, covering the same topics he had covered for WG4 earlier in the week.&amp;#160; We discussed possible collaboration between WG5 members, Fraunhofer FOKUS, and others, to create a community-developed validator that would benefit from the expertise of WG1, WG4, and WG5.&amp;#160; These discussions are ongoing.&lt;/p&gt;  &lt;p&gt;I presented a recap of the &lt;a href="http://www.odfworkshop.nl/"&gt;ODF Plugfest&lt;/a&gt; I had attended in The Hague, and explained how members of the OIC TC will be contributing to the &lt;a href="http://plugtest.opendocsociety.org/doku.php"&gt;plugfest wiki&lt;/a&gt;.&amp;#160; We discussed whether a similar wiki-based approach might be appropriate for testing translation scenarios as defined by WG5.&amp;#160; We also went through the schema that OIC TC chair Bart Hanssens has created for managing interoperability test cases, and looked at how that approach might be useful to WG5.&amp;#160; Although WG5 and the OIC TC have different missions – the OIC TC is all about ODF interoperability, whereas WG5 is about ODF-OXML translation – there is quite a bit of conceptual overlap in their work.&amp;#160; We decided that it would be good to keep WG5 informed of developments in the OIC TC going forward, and I’ll be playing that role for WG5.&lt;/p&gt;  &lt;p&gt;As usual at these meetings, I got out and took some &lt;a href="http://www.flickr.com/photos/dougerino/tags/copenhagen/"&gt;pictures&lt;/a&gt; around town in the evenings.&amp;#160; The fact that it was light out until after 23:00 every evening certainly extended photo-taking hours, and we were fortunate to be in town during the week of the solstice celebration (the &lt;a href="http://www.adjb.net/post/SC-34-meetings-Copenhagen.aspx"&gt;witch-burning&lt;/a&gt; to which one attendee alluded earlier in the week), as well as the week of a crazy graduation ritual in which truckloads of young Danes in white hats cruise around the city yelling through bullhorns, sounding sirens, drinking beer, and generally carrying on.&lt;/p&gt;  &lt;p&gt;&lt;img title="celebrating graduation" alt="celebrating graduation" src="http://farm4.static.flickr.com/3388/3666438070_911e930f32.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808641" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>ODF Plugfest, The Hague</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/06/16/odf-plugfest-the-hague.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/06/16/odf-plugfest-the-hague.aspx</id><published>2009-06-17T09:09:03Z</published><updated>2009-06-17T09:09:03Z</updated><content type="html">&lt;p&gt;Over the last two days I’ve been attending the ODF Interoperability Workshop, a fascinating event that brought together ODF implementers from many countries to talk about the issues and collaborate on interoperability testing.&amp;#160; The &lt;a href="http://www.odfworkshop.nl/"&gt;workshop web site&lt;/a&gt; covers the details of the agenda, provides a variety of related content (including the presentations), and lists the objectives of the event:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The aim is to provide a &lt;strong&gt;low-level hands-on interoperability testing environment&lt;/strong&gt; in which         &lt;br /&gt;vendors and community members can&lt;strong&gt; fine tune &lt;/strong&gt;the &lt;strong&gt;interoperability&lt;/strong&gt; capabilities of their ODF implementations and make test cases, recommendations and create best practices for implementors. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The ultimate goal is to achieve&lt;strong&gt; full seamless interoperability&lt;/strong&gt; for the entire feature set of ODF across all suppliers, platforms and supported technologies. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The workshop is meant for people who write and architect the code to handle the actual ODF in        &lt;br /&gt;applications - desktop editors and viewers, online apps, mobile, etc. Participants should represent every major team behind the various competing ODF products, their direct (technical) management and community leaders, as well as the members of the ODF OIC committee.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It was a productive two days, both in terms of what was accomplished in the official activities of the event and also in terms of the networking opportunities it provided.&lt;/p&gt;  &lt;p&gt;The first day started with a speech by Frank Heemskerk, the Minister of Foreign Trade for the Netherlands.&amp;#160; He discussed the the Dutch government’s policy on the use of open standards, and made a direct appeal to the attendees to “go beyond compliancy and help achieve broad-based open standards.&amp;quot;&lt;/p&gt;  &lt;p&gt;Mr. Heemskerk was followed by Ineke Schop, Program Manager for Netherlands in Open Connection.&amp;#160; Ms. Schop described her view of the goals and aspirations of open standards in general, as well as some of the specific steps being taken by her organization to deliver on those objectives.&lt;/p&gt;  &lt;p&gt;After that we got into the details of working through ODF interoperability issues.&amp;#160; There were a variety of sessions by implementers and members of the ODF TC and OIC TC, and you can find all the details in &lt;a href="http://www.odfworkshop.nl/programme_20090615-16"&gt;the agenda&lt;/a&gt; posted on the workshop web site.&amp;#160; Note that the presentations are also included in the online agenda – several have already been posted, and the rest will be available soon.&amp;#160; Video interviews were recorded with many of the attendees, and those should be available soon as well.&lt;/p&gt;  &lt;p&gt;It was great to see some old friends again, and I also met many people I knew before only through their voices on ODF TC calls or their online presence in the ODF community, including Oliver-Rainier Wittman (Sun), Mingfei Jai (IBM), Marc Maurer ( AbiWord), Zaheda Bhorat (Google), and many others.&amp;#160; My colleague Peter Amstein, the chief architect of our ODF support, was also in attendance, and it was an opportunity for him to get to know the people behind many other ODF implementations.&lt;/p&gt;  &lt;p&gt;During the afternoon of each day, we did interoperability testing and had many informal discussions about specific technical issues.&amp;#160; Some of the tests were based on specific issues that people already knew about, and at other times we worked through specific scenarios that OIC TC chair Bart Hanssens had defined, as well as scenarios that attendees created.&amp;#160; This testing resulted in identification of varying interpretations of the spec, bugs, and other issues that can now be resolved to improve the overall state of interoperability.&amp;#160; I’ll not be talking about specific details of those tests, because we were asked to conduct ourselves in accordance with the &lt;a href="http://en.wikipedia.org/wiki/Chatham_House_Rule"&gt;Chatham House Rule&lt;/a&gt; and not name specific products in post-event blogging or reporting.&amp;#160; This policy was in place to assure that the event could be productive and results-oriented, and I’d say this worked very well – all of the implementers were open and pragmatic about working through issues that came up in testing.&lt;/p&gt;  &lt;p&gt;There were many bloggers and Twitterers in attendance, so I expect others will post their thoughts on the event after everyone gets back home; I noticed that &lt;a href="http://www.floschi.info/2009/06/odfplugfest-version-10-released/"&gt;Floschi&lt;/a&gt; already has a nice summary posted.&lt;/p&gt;  &lt;p&gt;It was a very useful event, and I’d like to give special thanks to Fabrice Mous and Michiel Leenaars, who worked tirelessly to provide a great experience for the attendees.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFPlugfestTheHague_118BB/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/ODFPlugfestTheHague_118BB/image_thumb.png" width="518" height="586" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9766777" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>Testing Office’s ODF Implementation</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/06/14/testing-office-s-odf-implementation.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/06/14/testing-office-s-odf-implementation.aspx</id><published>2009-06-15T07:32:00Z</published><updated>2009-06-15T07:32:00Z</updated><content type="html">&lt;P&gt;In this blog post, I’m going to cover some of the details of how we approached the challenges of testing our ODF 1.1 implementation that was released in Office 2007 SP2.&lt;/P&gt;
&lt;P&gt;Adding support for a new document format such as ODF to Office is a large and complex project.&amp;nbsp; Office has a very broad range of functionality, and we had to map that functionality to the structures defined in ODF.&amp;nbsp; This mapping then needed to be rigorously tested, in isolation and also in rich documents that reflect typical usage of various combinations of features, to assure that our generated documents are conformant to the specification and to maximize interoperability with other implementations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;High-Level Planning&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_10.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 5px 15px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_4.png" width=152 height=240 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When we began work on our ODF 1.1 implementation, we started by developing a set of high-level &lt;STRONG&gt;guiding principles &lt;/STRONG&gt;that we would follow.&amp;nbsp; I covered those in a &lt;A href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx"&gt;blog post&lt;/A&gt; last year, as well as a recent post that explained how we see &lt;A href="http://blogs.msdn.com/dmahugh/archive/2009/06/05/standards-based-interoperability.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2009/06/05/standards-based-interoperability.aspx"&gt;the relationship between standards and interoperability&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;After we had reached agreement on these principles, the various feature teams began designing the details.&amp;nbsp; A “feature team” here at Microsoft is made up of three groups of people: program managers (PMs), developers, and testers.&amp;nbsp; In broad simple terms, PMs are responsible for writing down the specifications, developers are responsible for implementing those specifications, and testers are responsible for verifying that everything works as intended.&amp;nbsp; Since there was a specification for ODF in hand already, the main job of the feature team was to write down the details of how we would implement it.&amp;nbsp; In this post I’ll be focusing on the work of the testers, although inevitably that will include some discussion of the work of the PMs and developers, because the&amp;nbsp; three disciplines work very closely together in an iterative manner.&lt;/P&gt;
&lt;P&gt;Most of the people who planned and executed our ODF implementation are members of the same teams that are responsible for other aspects of the design, development and testing of the Office clients.&amp;nbsp; We created an “ODF virtual-team” that included specific individuals from each of the relevant product teams – Word, Excel, PowerPoint, and graphics, primarily --- and the v-team approached the project with the same management structure and business processes that we use for other work on Office.&amp;nbsp; Attendees of the DII workshop in Redmond last summer had a chance to meet several key members of the ODF v-team, who gave presentations and participated in the roundtable discussions at that event.&lt;/P&gt;
&lt;P&gt;In addition to these people in Redmond, we have other teams that we can call on for projects like this one, and for the testing work on our ODF implementation we pulled in people from the Office group in four countries, as well as people who worked on Office years ago but have moved on to other roles (for their expertise in older features that we wanted to verify are supported correctly in our ODF implementation).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Mapping Between ODF and Open XML&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Office’s internal representation of documents is very closely aligned with the Open XML formats, so one of the first steps in planning our ODF implementation was to do detailed mapping between the Open XML structures that Office already supported, and the ODF structures that we would be saving and loading to/from in ODF 1.1 documents.&lt;/P&gt;
&lt;P&gt;The PMs had primary responsibility for this, and they created sets of spreadsheets to capture the mappings between every ODF and Open XML element and attribute.&amp;nbsp; This mapping needed to be defined in both directions: OXML-&amp;gt;ODF for File/Save operations, and ODF-&amp;gt;OXML for File/Open operations.&lt;/P&gt;
&lt;P&gt;As a simple example of how that worked, here is part of the spreadsheet for the concept of &lt;STRONG&gt;bold &lt;/STRONG&gt;text, as mapped from OXML to ODF:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_1.png" width=529 height=108 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;This excerpt is just a subset of what was captured in the mapping; the PMs also identified required/optional status, default values, and other information.&lt;/P&gt;
&lt;P&gt;And here’s the converse mapping for &lt;STRONG&gt;bold &lt;/STRONG&gt;text, going from ODF to OXML:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_2.png" width=525 height=241 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;I’ve used a very simple example here, and yet as you can see there are many details involved.&amp;nbsp; There were thousands of details like this in the mapping spreadsheets, and collectively these spreadsheets served two roles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;they were the spec for the developers &lt;/LI&gt;
&lt;LI&gt;they defined the scope of the test plan for the testers &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The process of creating the mapping spreadsheets is interesting unto itself, due to the many places where ODF and Open XML had different approaches or different capabilities.&amp;nbsp; I’ll cover the mapping spreadsheets in more detail in a future blog post.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Test Tools and Test Documents&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_14.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 5px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb.png" width=217 height=240 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb.png"&gt;&lt;/A&gt; &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Like any professional test team, the Office testers have a wide variety of tools they’ve built to help automate their work.&amp;nbsp; Here are a few examples of the tools that were used to test Office’s ODF implementation:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Verifying conformance to the schemas in the standard was a high priority, and we used Jing (called by an internal tool we call ODE) to validate against ODF’s RNG schemas. &lt;/LI&gt;
&lt;LI&gt;The Excel team used an internal tool named Trippy to automate round-tripping.&amp;nbsp; They ran this tool against a test library of over 700,000 test documents, each of which was saved as an ODS file and then validated against the reference schemas. &lt;/LI&gt;
&lt;LI&gt;The Word team used tool called OHarness, which can be used to run the same operation on each one of a batch of files.&amp;nbsp; They used a library of over 100,000 documents, saving each one as an ODT file, logging bugs for the developers, and repeating the tests until they drove the number of non-conformant documents to zero. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These tools, and others developed by the test teams, all work against large collections of documents.&amp;nbsp; These test documents came from a variety of sources:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Text documents that have been used in the past for the binary formats documentation and other purposes. &lt;/LI&gt;
&lt;LI&gt;Real-world documents which have been given to us by customers for the purpose of helping us see how they use our products and seeing the problems they have run into. &lt;/LI&gt;
&lt;LI&gt;Documents from test libraries created by other organizations, such as the test documents from the University of Central Florida atomic test suite and the test documents that Dialogika has created based on their work in developing the European Commission’s corporate style package for official and legislative documents. &lt;/LI&gt;
&lt;LI&gt;Documents manually created by the testers to cover every element, attribute and attribute value defined in the ODF schemas. &lt;/LI&gt;
&lt;LI&gt;Public documents collected from the internet. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Our libraries of test documents are dynamic and constantly growing.&amp;nbsp; As a recent example, we found that the latest Committee Draft of the ODF 1.2 specification uses styles in a way that exposed a bug in Word’s implementation.&amp;nbsp; (&lt;A href="http://broadcast.oreilly.com/2009/05/is-sp2-no-good-or-is-odf-no-go.html" target=_blank mce_href="http://broadcast.oreilly.com/2009/05/is-sp2-no-good-or-is-odf-no-go.html"&gt;Rick Jelliffe&lt;/A&gt; has blogged about this bug.)&amp;nbsp; So we’ve added that document to our test library going forward.&amp;nbsp; (We’ve also fixed that bug and tested the fix, which will appear in a future update.)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Verifying Mapping&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;After the developers had written code to handle the mappings as defined in the spreadsheets (which were essentially the specs for their work), the testers got to work testing this code.&lt;/P&gt;
&lt;P&gt;One aspect of testing was the small documents for verifying specific elements and attributes.&amp;nbsp; These were handled in an automated manner using tools such as Trippy and OHarness, as mentioned above.&lt;/P&gt;
&lt;P&gt;Another aspect of this testing was the creation of complex “real-world documents” that contained combinations of functionality to test various scenarios that we’ve found typically occur in actual use of Word, Excel, or PowerPoint.&lt;/P&gt;
&lt;P&gt;For example, many Excel users create spreadsheet documents that contain a large worksheet of raw data like this one:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_3.png" width=518 height=229 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;… and that data is often summarized that data in pivot tables and/or formatted reports like these:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_5.png" width=526 height=213 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The test team would create documents like this one, then manually verify that the document could be saved as either an ODS or XLSX file without change in appearance or functionality.&amp;nbsp; In this particular case, the test team verified that a variety of details were handled the same in Open XML and ODF, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Formatting of cell content, including conditional formatting &lt;/LI&gt;
&lt;LI&gt;Data with Autofilter on data sheet &lt;/LI&gt;
&lt;LI&gt;PivotTable in Pivot sheet based on above data &lt;/LI&gt;
&lt;LI&gt;Results of formula calculations &lt;/LI&gt;
&lt;LI&gt;Data validation &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Verifying Conformance&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As I mentioned earlier, the product teams each have a large corpus of test document that are used for automated testing of conformance.&amp;nbsp; Binary documents and Open XML documents are opened and then saved as ODF, and each of these documents is validated against the ODF schemas.&amp;nbsp; By analyzing the results of these tests, the testers can identify problems that need to be corrected, and then the tests are re-run.&lt;/P&gt;
&lt;P&gt;The goal of this process is simple: to drive the number of non-conformant documents to zero.&amp;nbsp; We reached that goal for the Office 2007 SP2 implementation of ODF, and as of this writing I don’t know of a way to make Word, Excel or PowerPoint write a non-conformant ODF document.&amp;nbsp; It may theoretically be possible to do so – and if anyone happens to come across such a scenario please let me know – but we have verified that the hundreds of thousands of documents in our test libraries can be saved as fully conformant ODF 1.1 files from Office 2007 SP2.&amp;nbsp; By conformant,&amp;nbsp; I mean here fully schema-compliant and also conformant with our reading of the text of the ODF 1.1 spec.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security Testing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When we add support for a new format, one area that requires intensive testing is security.&amp;nbsp; Does our implementation of the new format create any new security risks that need to be mitigated?&amp;nbsp; Is there any way that an ODF document can be corrupted (deliberately or accidentally) that could cause a security problem?&amp;nbsp; The test teams were responsible for answering these questions.&lt;/P&gt;
&lt;P&gt;The key tool used for this aspect of the test plan was Distributed File Fuzzing (DFF).&amp;nbsp; The basic concept is that thousands of documents are corrupted in random ways, and these documents are opened on large numbers of PCs in a distributed environment.&amp;nbsp; Data is collected on the ways in which these corrupted files fail to open, and this data is used to verify that there are not security problems caused by bad error handlers, buffer overruns, integer overflow, or other issues.&lt;/P&gt;
&lt;P&gt;When issues are found in security testing,&amp;nbsp; the process is the same as in the other types of testing: the testers log bugs, and the developers check whether the problem is in design or implementation, and based on those findings we either modify the design and re-code, or correct the code.&amp;nbsp; The tests are then repeated, and this process continues until the number of open security issues reaches zero.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Testing Interoperability&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_16.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 5px 5px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_6.png" width=240 height=165 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The final piece of the testing puzzle is interoperability testing: verifying that documents created in Office can be opened in other implementations, and vice versa.&lt;/P&gt;
&lt;P&gt;This type of testing is nothing new for the test teams, because we do it every time we add a feature to Office.&amp;nbsp; In the past, we focused primarily on interoperability between various versions of Office, but now that test matrix has been expanded to include the latest versions of major ODF implementations.&lt;/P&gt;
&lt;P&gt;To verify interoperability with other ODF implementations, the test teams created documents from scratch in OpenOffice.org and Symphony, and then opened those documents in Office.&amp;nbsp; They also created documents in Office and opened them in the other implementations.&lt;/P&gt;
&lt;P&gt;In addition to these types of simple tests, we also wanted to verify that our implementation was not dependent on details of other implementations that aren’t actually standardized in the specification.&lt;/P&gt;
&lt;P&gt;A good example of this sort of issue is the question of how parts are named and where they’re stored in the ZIP package that comprises an ODF document.&amp;nbsp; I’ve blogged in the past about &lt;A href="http://blogs.msdn.com/dmahugh/archive/2007/09/11/open-xml-implementation-test-documents.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2007/09/11/open-xml-implementation-test-documents.aspx"&gt;this same issue in Open XML&lt;/A&gt; – an implementation of the Open XML standard shouldn’t assume that the document start part is word/document.xml, just because Word happens to use that name and location.&lt;/P&gt;
&lt;P&gt;In ODF, some of those details are standardized – the start part is always named content.xml, for example – but others are not.&amp;nbsp; So the testers used ODE to manually modify documents that had been created by OpenOffice.org, to change certain details such as the name of the folder containing embedded images.&amp;nbsp; They then opened these documents in Office, to verify that our implementation will be able to interoperate with implementations that have made different design decisions within the range of options that the ODF standard allows.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As you can see, there are many things to consider when creating and executing a test plan for support of a new document format in Office.&amp;nbsp; At an abstract level, it’s just another test plan – we design, then code, then test, with ongoing revisions to all three as needed to reach our design goals.&amp;nbsp; But the specifics of the ODF implementation test plan were geared toward the details of the ODF standard, as outlined above.&lt;/P&gt;
&lt;P&gt;Due to the work our test teams did on the ODF 1.1 implementation in Office 2007 SP2, we are very confident that the implementation we produced adheres to the details of the design we had created, as documented on the &lt;A href="http://documentinteropinitiative.org/" target=_blank mce_href="http://documentinteropinitiative.org"&gt;implementer notes web site&lt;/A&gt;.&amp;nbsp; I realize that some people may disagree with some of the design decisions we made in our implementation, and we welcome constructive debate of those details.&lt;/P&gt;
&lt;P&gt;I’m posting this from The Hague, where I will be attending the &lt;A href="http://odfworkshop.nl/about_20090615-16" target=_blank mce_href="http://odfworkshop.nl/about_20090615-16"&gt;ODF plugfest&lt;/A&gt; today and tomorrow.&amp;nbsp; My colleague Peter Amstein – who led the technical work on our ODF implementation – is also here, and we’re looking forward to learning about how other implementers approach document format interoperability testing, and discussing how we can all work together on ODF interoperability going forward.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.flickr.com/photos/dougerino/tags/thehague/" mce_href="http://www.flickr.com/photos/dougerino/tags/thehague/"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Parliament building, The Hague" border=0 alt="Parliament building, The Hague" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_19.png" width=523 height=253 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TestingOfficesODFImplementation_F09B/image_19.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9752052" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>Standards-Based Interoperability</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/06/05/standards-based-interoperability.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/06/05/standards-based-interoperability.aspx</id><published>2009-06-05T17:02:23Z</published><updated>2009-06-05T17:02:23Z</updated><content type="html">&lt;p&gt;There has been quite a bit of discussion lately in the blogosphere about various approaches to document format interoperability.&amp;#160; It’s great to see all of the interest in this topic, and in this post I’d like to outline how we look at interoperability and standards on the Office team.&amp;#160; Our approach is based on a few simple concepts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Interoperability is best enabled by a multi-pronged approach&lt;/strong&gt; based on open standards, proactive maintenance of standards, transparency of implementation, and a collaborative approach to interoperability testing. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Standards conformance is an important starting point&lt;/strong&gt;, because when implementations deviate from the standard they erode its long-term value &lt;/li&gt;    &lt;li&gt;Once implementers agree on the need&amp;#160; for conformance to the standard, &lt;strong&gt;interoperability can be improved through supporting activities &lt;/strong&gt;such as shared stewardship of the standard, community engagement, transparency, and collaborative testing &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It’s easy to get bogged down in the details when you start thinking through interoperability issues, so for this post I’m going to focus on a few simple diagrams that illustrate the basics of interoperability.&amp;#160; (These diagrams were inspired by a recent blog post by &lt;a href="http://blogs.code-counsel.net/Wouter/Lists/Posts/Post.aspx?ID=105" target="_blank"&gt;Wouter Van Vugt&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Interoperability without Standards &lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image5_thumb.png" width="250" height="172" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First, let’s consider how software interoperability works when it is not standards-based.&lt;/p&gt;  &lt;p&gt;Consider the various ways that four applications can share data, as shown in the diagram to the right.&amp;#160; There are six connections between these four applications, and each connection can be traversed in either direction, so there are 12 total types of interoperability involved.&amp;#160; (For example., Application A can consume a data file produced by Application B, or vice versa.)&lt;/p&gt;  &lt;p&gt;As the number of applications increases, this complexity grows rapidly.&amp;#160; Double the number of applications to 8 total, and there will be 56 types of interoperability between them:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_thumb_2.png" width="533" height="364" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Let’s go back to the simple case of 4 applications that need to interoperate with one another, and take a look at another factor: software bugs.&amp;#160; All complex software has bugs, a&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image25.png"&gt;&lt;img style="border-right-width: 0px; margin: 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image25_thumb.png" width="203" height="147" /&gt;&lt;/a&gt;nd some bugs can present significant challenges to interoperability.&amp;#160; Let’s consider the case that 3 of the 4 applications have bugs that affect interoperability, as shown in the diagram to the right.&lt;/p&gt;  &lt;p&gt;The bugs will need to be addressed when data moves between these applications.&amp;#160; Some bugs can present unsolvable roadblocks to interoperability, but for purposes of this discussion let’s assume that every one of these bugs has a workaround.&amp;#160; That is, application A can take into account the known bug in application B and either implement the same buggy behavior itself, or try to fix up the problem when working with files that it knows came from application B.&lt;/p&gt;  &lt;p&gt;Here’s where those workarounds will need to be implemented:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_11.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_thumb.png" width="523" height="377" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note the complexity of this diagram.&amp;#160; There are 6 connections between these 4 applications, and everyone one of them has a different set of workarounds for bugs along the path.&amp;#160; Furthermore, any given connection may have different issues when data moves in different directions, leading to 12 interoperability scenarios, every one of which presents unique challenges.&amp;#160; And what happens if one of the implementers fixes one of their bugs in a new release?&amp;#160; That effectively adds yet another node to the diagram, increasing the complexity of the overall problem.&lt;/p&gt;  &lt;p&gt;In the real world, interoperability is almost never achieved in this way.&amp;#160; Standards-based interoperability is much better approach for everyone involved, whether that standard is an open one such as ODF (IS26300) or Open XML (IS29500), or a de-facto standard set by one popular implementation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Standards-Based Interoperability&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the world of de-facto standards, one vendor ends up becoming the “reference implementation” that everyone else works to interoperate with.&amp;#160; In actual practice, this de-facto standard may or may not even be written down – engineers can often achieve a high degree of interoperability simply by observing the reference implementation and working to follow it.&lt;/p&gt;  &lt;p&gt;De-facto standards often (but not always) get written down to become public standards eventually. One simple example of this is the “Edison base” standard for screw-in light bulbs and sockets, which started as a proprietary approach but has long since been standardized by the IEC.&amp;#160;&amp;#160; In fact this is a much more common way for standards to become successful than the “green field” approach in which the standard is written down first before there are any implementations.&lt;/p&gt;  &lt;p&gt;Once a standard becomes open and public, the process for maintaining it and the way that implementers achieve interoperability with one another changes a little.&lt;/p&gt;  &lt;p&gt;The core premise of open standards-based interoperability is this: &lt;strong&gt;each application implements the published standard as written, and this provides a baseline for delivering interoperability&lt;/strong&gt;.&amp;#160; Standards don’t address all interoperability challenges, but the existence of a standard addresses many of the issues involved, and the other issues can be addressed through standards maintenance, transparency of implementation details, and collaborative interoperability testing.&lt;/p&gt;  &lt;p&gt;In the standards-based scenario, the standard itself is the central mechanism for enabling interoperability between implementations:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_thumb_1.png" width="539" height="368" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This diagram is much simpler than the other diagram above that showed 56 possible connections between 8 implementations.&amp;#160; The presence of the standard means that there are only 8 connections, and each connection only has to deal with the bugs in a single implementation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How this all applies to Office 2007 SP2&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I covered last summer the set of &lt;a href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target="_blank"&gt;guiding principles&lt;/a&gt; that we used to guide the work we did to support ODF in Office 2007 SP2. These principles were applied in a specific order, and I’d like to revisit the top two guiding principles to explain how they support the view of interoperability that I’ve covered above.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Guiding Principle #1: Adhere to the ODF 1.1 Standard&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In order to achieve the level of simplicity shown in the diagram above, the standard itself must be carefully written and implementers need to agree on the importance of adhering to the published version of the standard.&amp;#160; That’s why we made “Adhere to the ODF 1.1 Standard” our #1 guiding principle.&amp;#160; This is the starting point for enabling interoperability.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://adjb.net/post/Notes-on-Document-Conformance-and-Portability-4.aspx" target="_blank"&gt;Recent independent tests&lt;/a&gt; have found that our implementation does in fact adhere to the ODF 1.1 standard, and I hope others will continue to conduct such tests and publish the results.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Guiding Principle #2: Be Predictable&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The second guiding principle we followed in our ODF implementation was “Be Predictable.”&amp;#160; I’ve described this concept in the past as “doing what an informed user would likely expect,” but I’d like to explain this concept in a little more detail here, because it’s a very important aspect of our approach to interoperability in general.&lt;/p&gt;  &lt;p&gt;Being predictable is also known as &lt;a href="http://en.wikipedia.org/wiki/Principle_of_least_astonishment" target="_blank"&gt;the principle of least astonishment&lt;/a&gt;.&amp;#160; The basic concept is that users don’t want to be surprised by inconsistencies and quirks in the software they use, and software designers should strive to minimize or eliminate any such surprises.&lt;/p&gt;  &lt;p&gt;There are many ways that this concept comes into play when implementing a document format such as ODF or Open XML.&amp;#160; One general category is mapping one set of options to a different set of options, and I used an example of this in the &lt;a href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target="_blank"&gt;blog post&lt;/a&gt; mentioned above:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_18.png"&gt;&lt;em&gt;&lt;img style="border-right-width: 0px; margin: 0px 35px 0px 30px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image_thumb_7.png" width="240" height="113" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; When OOXML is a superset of ODF, we usually map the OOXML-only constructs to a default ODF value. For example, ODF does not support OOXML’s doubleWave border style, so when we save as ODF we map that style to the default border style.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Our other option in this case would have to turn the text box and the border into a picture.&amp;#160; That would have made the border look nearly identical when the user opened the file again, but we felt that users would have been astonished (in a bad way) when they discovered that they could no longer edit the text after saving and reopening the file.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What about Bugs and Deviations?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image51.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/StandardsBasedInteroperability_114EA/image51_thumb.png" width="257" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Of course, the existence of a published standard doesn’t prevent interoperability bugs from occurring.&amp;#160; These bugs may include deviations from the requirements of the standard.&amp;#160; In addition, they may include different interpretations of ambiguous sections of the standard.&lt;/p&gt;  &lt;p&gt;The first step in addressing these sorts of real-world issues is &lt;strong&gt;transparency&lt;/strong&gt;.&amp;#160; It’s hard to work around bugs and deviations if you’re not sure what they are, or if you have to resort to guesswork and reverse engineering to locate them.&lt;/p&gt;  &lt;p&gt;Our approach to the transparency issue has been to document the details of our implementation through published implementer notes.&amp;#160; We’ve done that for our implementations of &lt;a href="http://blogs.msdn.com/dmahugh/archive/2008/12/16/odf-implementation-notes-for-office-2007-sp2.aspx" target="_blank"&gt;ODF 1.1&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/dmahugh/archive/2009/01/16/ecma-376-implementation-notes-for-office-2007-sp2.aspx" target="_blank"&gt;ECMA-376&lt;/a&gt;, and going forward we’ll be doing the same for IS29500 and future versions of ODF when we support them.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Interoperability Testing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The final piece of the puzzle is hands-on testing, to identify areas where implementations need to be adjusted to enable reliable interoperability.&lt;/p&gt;  &lt;p&gt;This is where the de-facto standard approach meets the public standard.&amp;#160;&amp;#160; If the written standard is unclear or allows for multiple approaches to something, but all of the leading implementations have already chosen one particular approach, then it is easy for a new entrant to the field to see how to be interoperable.&amp;#160;&amp;#160; If other implementers have already chosen diverging approaches however, then it is not so clear what to do.&amp;#160;&amp;#160; Standards maintainers can help a great deal in this situation by clarifying and improving the written standard, and new implementers may want to wait on implementing that particular feature of the standard until the common approach settles out.&lt;/p&gt;  &lt;p&gt;We did a great deal of interoperability testing for our ODF implementation before&amp;#160; we released it, both internally and through community events such as the DII workshops.&amp;#160; We’ve also worked with other implementers in a 1-on-1 manner, and going forward we’ll be participating in a variety of interoperability events.&amp;#160; These are necessary steps in achieving the level of interoperability and predictability that customers expect these days.&lt;/p&gt;  &lt;p&gt;In my next post, I’ll cover our testing strategy and methodology in more detail.&amp;#160; What else would you like to know about how Office approaches document format interoperability?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701351" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>Tracked Changes</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/05/13/tracked-changes.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/05/13/tracked-changes.aspx</id><published>2009-05-14T07:52:00Z</published><updated>2009-05-14T07:52:00Z</updated><content type="html">&lt;P&gt;When I blogged about &lt;A href="http://blogs.msdn.com/dmahugh/archive/2009/04/28/working-with-odf-in-word-2007-sp2.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2009/04/28/working-with-odf-in-word-2007-sp2.aspx"&gt;the release of SP2 with ODF support&lt;/A&gt; two weeks ago, I mentioned that I was planning to blog about a few of the tough decisions we faced in our SP2 implementation of ODF, such as the decision not to support tracked changes.&amp;nbsp; I’ve spent some time since then covering &lt;A href="http://blogs.msdn.com/dmahugh/archive/2009/05/09/1-2-1.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2009/05/09/1-2-1.aspx"&gt;our approach to formulas in ODF&lt;/A&gt;, and now I’d like to move on to answering the question of why we aren’t supporting ODF tracked changes.&lt;/P&gt;
&lt;P&gt;For those who just want the summary, here’s a high-level recap of what I’ll cover in more detail below:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Tracked changes is a very complex aspect of document format functionality&lt;/STRONG&gt;; for example, the ECMA-376 specification devotes over 100 pages to describing tracked changes &lt;/LI&gt;
&lt;LI&gt;Microsoft Word has a long history of supporting tracked changes, and this functionality is used by a large number of Word users &lt;/LI&gt;
&lt;LI&gt;Due to its role in collaborative processes, &lt;STRONG&gt;tracked changes is often used for documents with legal, financial or technical implications that are reviewed and edited by multiple people&lt;/STRONG&gt;; in such scenarios, accuracy and reliability are critical &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ODF 1.1 has a very limited description of tracked changes&lt;/STRONG&gt;, covered in only 4 pages of the specification.&amp;nbsp; ODF 1.1 does not does explain how to implement change tracking for many of Word’s commonly used features, and in some cases it is not even clear if the ODF mechanism makes it possible at all. &lt;/LI&gt;
&lt;LI&gt;As a result of these differences, we found that it&lt;STRONG&gt; is not possible to implement robust and reliable tracked changes with ODF&lt;/STRONG&gt;; even very simple concepts, such as deleting a row from a table, are not supported by any existing ODF implementation of tracked changes &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;There is almost no interoperability among the various non-Microsoft implementations of ODF when it comes to tracked changes.&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;To protect our customers from losing data when using tracked changes, and to avoid making an interoperability promise that would turn out to be hollow, &lt;STRONG&gt;we made the difficult decision to not support tracked changes at all in ODF&lt;/STRONG&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The rest of this post will cover the details of the points summarized above.&amp;nbsp; This is a long post, and it gets a little technical in places, because change tracking is inherently a complex topic.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;State of Tracked Changes Interoperability&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;SP2 is a new implementation of ODF, but there are many existing implementations of ODF that are already in wide use.&amp;nbsp; I’ve done an informal review of them to try to understand existing practices around the use of tracked changes in ODF documents.&lt;/P&gt;
&lt;P&gt;Here’s what I’ve found:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.openoffice.org/" target=_blank mce_href="http://www.openoffice.org/"&gt;OpenOffice.org 3.1&lt;/A&gt; supports tracked changes &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://symphony.lotus.com/software/lotus/symphony/home.nsf/home" target=_blank mce_href="http://symphony.lotus.com/software/lotus/symphony/home.nsf/home"&gt;IBM Lotus Symphony 1.2&lt;/A&gt; supports tracked changes &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://koffice.org/" target=_blank mce_href="http://koffice.org/"&gt;KOffice 1.6&lt;/A&gt; does not support tracked changes; they’re working on support for insertions, deletions, and formatting changes in a &lt;A href="http://wiki.koffice.org/index.php?title=Schedules/KOffice/2.1/Feature_Plan#KWord" target=_blank mce_href="http://wiki.koffice.org/index.php?title=Schedules/KOffice/2.1/Feature_Plan#KWord"&gt;future version&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://docs.google.com/" target=_blank mce_href="http://docs.google.com/"&gt;Google Docs&lt;/A&gt; doesn’t support tracked changes &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://abiword.com/" target=_blank mce_href="http://abiword.com/"&gt;AbiWord 2.6.8&lt;/A&gt; doesn’t appear to support tracked changes &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If anyone knows of additional information on these implementations, or any other ODF implementation that supports tracked changes, especially if you know of one which is not derived from the OpenOffice.org source code, please let me know and I’ll update that list.&lt;/P&gt;
&lt;P&gt;To test interoperability between current ODF implementations of tracked changes, I created a simple document with some tracked changes, saved it in ODF, and then looked at what happened when I opened that document in other ODF implementations.&lt;/P&gt;
&lt;P&gt;So the first step is to create a test document.&amp;nbsp; Using Symphony 1.2, I followed these steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Click on “Create a new Document” &lt;/LI&gt;
&lt;LI&gt;Insert a table (Create/Table), and put some text in each cell to identify the rows &lt;/LI&gt;
&lt;LI&gt;Add a paragraph of text, below the table, containing two sentences &lt;/LI&gt;
&lt;LI&gt;Add a numbered list of four items, below the paragraph &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The starting point for my document looks like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_25.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_25.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_11.png" width=525 height=199 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_11.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Then I added some change-tracking, as follows:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Turn on change tracking (Edit/Revisions/Record) &lt;/LI&gt;
&lt;LI&gt;Delete the second row from the table (right-click, Row/Delete) &lt;/LI&gt;
&lt;LI&gt;Highlight the last sentence of the paragraph and the first two items of the numbered list, up through the (DELETE) on the second item, and delete that region &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;My document now looks like this in Symphony:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_29.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_29.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_13.png" width=519 height=171 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_13.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;One things you’ll notice here is that the row I deleted from the table is simply gone, with no change tracking recorded.&amp;nbsp; This is due to an inherent limitation in ODF’s approach to change tracking, which does not allow table changes to be tracked in a standardized manner.&lt;/P&gt;
&lt;P&gt;More on that later, but first let’s see what happens when I save this document as ODF 1.1.&amp;nbsp; After I click Save, here’s what I&amp;nbsp; see:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_31.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_31.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_14.png" width=528 height=178 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_14.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Take a close look at the numbering of the list items, and you’ll see that the second list item has no numbering any longer.&amp;nbsp; Very strange.&amp;nbsp; And if I reject all changes in the document, the numbering of that item doesn’t come back – it disappeared somehow, the instant I saved my document as ODF 1.1.&lt;/P&gt;
&lt;P&gt;I suppose some people might be tempted to suggest that I should use the latest OpenOffice.org release for this test, which came out a couple weeks ago.&amp;nbsp; I tried that, and I get similar – but not identical – strange behavior by following the steps above.&lt;/P&gt;
&lt;P&gt;Speaking of OpenOffice.org 3.1, let’s open this saved document in that implementation of ODF.&amp;nbsp; When I do, here’s what I see:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_33.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_33.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_15.png" width=525 height=134 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_15.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;At first glance, it looks like all of the changes were accepted.&amp;nbsp; But in fact, the changes are still in the document, and you must go into Edit/Changes/Show to make the tracked changes appear.&lt;/P&gt;
&lt;P&gt;In Google Docs, we see essentially the same thing that OpenOffice.org displayed by default:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_35.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_35.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_16.png" width=521 height=115 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_16.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Google Docs automatically accepts tracked changes in ODF documents, and then uses its own entirely different approach for managing change tracking.&amp;nbsp; Google Docs uses a Revision History feature to track changes to documents; for example, here’s what I see when I click on Tools, Revision History when viewing this document in Google Docs:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_37.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_37.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_17.png" width=516 height=136 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_17.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;It appears that Google Docs is pretty committed to this approach to change tracking, based on &lt;A href="http://www.google.com/support/forum/p/Google+Docs/thread?tid=014457aa446500fa&amp;amp;hl=en" target=_blank mce_href="http://www.google.com/support/forum/p/Google+Docs/thread?tid=014457aa446500fa&amp;amp;hl=en"&gt;this recent exchange&lt;/A&gt; on the Google Docs Help Center site:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Jcuesta: &lt;/STRONG&gt;&lt;EM&gt;We need Track Changes.&amp;nbsp; When?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Gill (Google Docs Guru): &lt;/STRONG&gt;&lt;EM&gt;Who knows?&amp;nbsp; Given that we already have Revisions, quite possibly never.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Moving on to another ODF 1.1 implementation, AbiWord 2.6.8 (which does not support tracked changes), here’s how my test document appears:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_39.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_39.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_18.png" width=520 height=180 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_18.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;AbiWord doesn’t support tracked changes, so I would have expected to either see the document with no changes at all, or with all changes accepted.&amp;nbsp; Instead, I see what appears to be a random re-arrangement of the document content.&amp;nbsp; On closer inspection, I think this is due to ODF’s approach to handling deletions, which requires that deleted content be stored at a location separate from where it was deleted.&amp;nbsp; I’ll explain that in more detail below.&lt;/P&gt;
&lt;P&gt;So far, we have two applications that seem to agree on how to display this document (OpenOffice.org 3.1 and Google Docs), and two others that each have a different way of displaying the document.&amp;nbsp; Sounds messy, but it gets even worse if you start varying which application creates the document in the first place.&lt;/P&gt;
&lt;P&gt;For example, I followed the same steps outlined above, but started from OpenOffice.org 3.1 instead of Symphony 1.2.&amp;nbsp; Here’s the result:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_41.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_41.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_19.png" width=522 height=150 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_19.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;But if I load this OO.o-created document in Google Docs, I see something quite different from what I saw when I loaded the Symphony-created document in Google Docs.&amp;nbsp; Instead of all tracked changes being accepted, and the deleted text gone, now I see all tracked changes being ignored, and the deleted text (except for the deleted table row) is present, although the list numbering skips over the second item:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_43.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_43.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_20.png" width=519 height=156 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_20.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So we’ve seen that none of these implementations track changes to tables, and the behavior when loading tracked-changes documents into applications other than OpenOffice.org or Symphony varies between several possibilities, including accepting changes, ignoring changes, and restoring deleted content to a different position in the document.&amp;nbsp; Furthermore, this is only a simple test that includes nothing but deletions.&amp;nbsp; If you start combining deletions and insertions in the ways that people typically do while collaborating on documents, you’ll find even more surprising behavior when those documents are opened in applications other than the one that created&amp;nbsp; them.&amp;nbsp; &lt;EM&gt;This is the state of ODF tracked-changes interoperability today.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Cause of the Problem&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The problems above are not just caused by bugs in these implementations.&amp;nbsp; Rather, they are the result of inadequate specification of change-tracking functionality in ODF 1.1, combined with a peculiar design decision in ODF’s approach to tracking deletions.&lt;/P&gt;
&lt;P&gt;To get a feel for how thoroughly ODF specifies change tracking, it’s instructive to compare the size of the relevant sections of the ODF 1.1 and ECMA-376 specifications.&amp;nbsp; ECMA-376, which supports 100% of the change-tracking functionality that Word uses, devotes 121 pages to change tracking in Part 4, Section 2.13.5.&amp;nbsp; ODF 1.1, by comparison, has only 4 pages devoted to change tracking in section 4.6 of ODF 1.1.&lt;/P&gt;
&lt;P&gt;There are many areas where we found that ODF 1.1’s approach to tracked changes couldn’t provide the functionality and reliability that our customers have come to expect.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Where to put deleted content?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When you delete content with tracked changes on, the content remains in the document, marked as deleted by a particular user on a particular date/time.&amp;nbsp; But &lt;EM&gt;where &lt;/EM&gt;in the document?&amp;nbsp; The answer is different for Open XML and ODF.&lt;/P&gt;
&lt;P&gt;Let’s look at a simple example, and see how the two formats handle the deleted text.&amp;nbsp; Here’s the example we’ll use, a single sentence with a word deleted from it:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_17.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_17.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 0px 50px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_7.png" width=255 height=44 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;First let’s look at how Open XML handles this deletion.&amp;nbsp; Here’s the ECMA-376 markup that Word 2007 writes out for this sentence:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_19.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_19.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_8.png" width=518 height=244 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;You can see that the deleted text is inline, right where it was before it was deleted, surrounded by a delText tag.&lt;/P&gt;
&lt;P&gt;Now let’s look at the ODF markup that OpenOffice.org 3.1 writes for this deletion:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_21.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_21.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_9.png" width=442 height=564 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/TrackedChangesAnyone_79C/image_thumb_9.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In this case, the deleted word does not appear inline.&amp;nbsp; Rather, there is a text:change element inline, with an ID of &lt;STRONG&gt;ct205721376.&lt;/STRONG&gt;&amp;nbsp; Within the text:tracked-changes element (which occurs earlier in the body of the document), you can see where ID &lt;STRONG&gt;ct205721376&lt;/STRONG&gt; is defined as being a deletion by Doug Mahugh, containing the word &lt;STRONG&gt;deletion &lt;/STRONG&gt;inside a text:p element.&lt;/P&gt;
&lt;P&gt;There are two problems with this approach: one problem for implementations that don’t support tracked changes, and one problem for implementations that do support tracked changes.&lt;/P&gt;
&lt;P&gt;To see the problem for implementations that don’t support tracked changes, refer above to the AbiWord screen shot.&amp;nbsp; AbiWord doesn’t know about tracked changes, but it does know about paragraphs (text:p elements), so it displays every paragraph it finds in the document, in the order that it finds them.&amp;nbsp; Since the deleted “paragraphs” appear first in the markup, they appear first in the displayed document.&lt;/P&gt;
&lt;P&gt;I put paragraphs in quotes there for a reason: in the simple example we’re looking at here, I did not delete a paragraph, &lt;EM&gt;I deleted a word from inside a paragraph&lt;/EM&gt;.&amp;nbsp; So why is the deleted text wrapped inside a paragraph element?&lt;/P&gt;
&lt;P&gt;The answer is that the ODF spec requires deleted content (as contained in a text:deletion element) to be schema-compliant, regardless of whether the deleted region was a well-formed element or (as in this case) merely a fragment within some other structure, such as a word within a paragraph.&lt;/P&gt;
&lt;P&gt;This is the source of the problem I alluded to above, for implementers who choose to support ODF tracked changes.&amp;nbsp; Each implementer must decide how to synthesize markup to make each piece of deleted content into well-formed XML, and then later – when it comes time to accept or reject the change – each implementer must make decisions about how to distinguish between the synthesized packaging and the deleted content itself.&lt;/P&gt;
&lt;P&gt;Unfortunately, the ODF specification doesn’t provide much guidance on this complex topic.&amp;nbsp; Here’s the guidance provided in ODF 1.1 (Section 4.6.4 Deletion):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;To reconstruct the text before the deletion took place, do:&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;If the change mark is inside a paragraph, insert the text content of the &amp;lt;text:deletion&amp;gt; element as if the beginning &amp;lt;text:p&amp;gt; and final &amp;lt;/text:p&amp;gt; tags were missing. &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;If the change mark is inside a header, proceed as above, except adapt the end tags to match their new counterparts. &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Otherwise, simply copy the text content of the &amp;lt;text:deletion&amp;gt; element in place of the change mark.&lt;/EM&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This guidance works for very simple cases, but does not allow for complex situations such as deleting part of a table, as described below.&amp;nbsp; A specific implementer may come up with an approach that works within their application, but since the spec doesn’t say how to synthesize the markup for the shim, what shows up as a deletion in one application might show up as a different deletion, or not deleted at all, in a different application.&lt;/P&gt;
&lt;P&gt;The approach used by ECMA-376, as shown in the example above, keeps the delete text inline where it was deleted, thus eliminating all of these issues.&amp;nbsp; There is no extra synthesized markup added when a deletion is saved, and therefore implementers don’t need to make decisions about how or whether to remove that markup when it comes time to accept or reject the changes.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Changes to Tables&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The ODF 1.1 specifiation says (in section 8.11) that “Change tracking of tables is not supported for text documents.”&lt;/P&gt;
&lt;P&gt;And indeed, no existing ODF implementation that I’m aware of attempts to track changes to tables, such as adding or deleting rows or cells, modifying table properties or grid layout, and so on.&amp;nbsp; Looking at Section 4.6, it’s easy to see why this is so: there is no information provided about how to track table changes, and it’s not at all obvious how one would do so within the current mechanism.&lt;/P&gt;
&lt;P&gt;Deleted sections of tables would be especially problematic in ODF, because of the need to create a shim to make the relocated deleted content schema-valid.&amp;nbsp; The ODF spec provides some guidance on how to revert deleted paragraph content (as quoted above), but for tables, there is no such guidance.&lt;/P&gt;
&lt;P&gt;So if a row of a table is deleted, what should an implementer do?&amp;nbsp; Store in &amp;lt;text:tracked-changes&amp;gt; a table with one row inside the deleted-content section?&amp;nbsp; And how would another implementation know whether that indicates a deleted row of a table, or a deleted one-row table?&lt;/P&gt;
&lt;P&gt;In the ECMA-376 specification, on the other hand, there are defined mechanisms for tracking changes to tables.&amp;nbsp; As one example, consider the simple act of deleting an row from a table while change-tracking is turned on.&amp;nbsp; In ODF, that row is simply gone, and reverting your tracked changes later will not recover the row.&amp;nbsp; But in Open XML, the &amp;lt;del&amp;gt; element can be applied to a table row, and as stated in Section 2.13.15.4, “This element specifies that the parent table row shall be treated as a deleted row whose deletion has been tracked as a revision. This setting shall not imply any revision state about the table cells in this row or their contents (which must be revision marked independently), and shall only affect the table row itself.“&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Format Changes &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Tracking changes also entails tracking changes to document formatting properties. &lt;/P&gt;
&lt;P&gt;ECMA-376 has many elements dedicated to tracking formatting changes, including pPrChange, rPrChange, sectPrChange, tblPrChange, tblPrExChange, tcPrchange, and trPrChange.&amp;nbsp; These elements are described over 17 pages (pages 1015-1032 of Part 4). &lt;/P&gt;
&lt;P&gt;ODF 1.1, on the other hand, has a single format-change element, which is documented as follows in Section 4.6.5, Format Change: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;A format change element represents any change in formatting attributes. The region where the change took place is marked by a change start and a change end element. &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Note: A format change element does not contain the actual changes that took place.&lt;/EM&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Much was made during the IS29500 standards process of the difference in the size of the ODF and Open XML specifications.&amp;nbsp; This is a good example of where that difference comes from: in this case, a concept glossed over in three vague sentences of the ODF spec gets 17 pages of documentation in the Open XML spec.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This has been a long blog post, but I wanted to make sure that people understand why we made the difficult decision to not support tracked changes in our Office 2007 SP2 implementation of ODF.&lt;/P&gt;
&lt;P&gt;When you load an ODF document containing tracked changes into Word 2007 SP2, all existing changes will be accepted, and you will not be able to save any further tracked changes in the document unless you save as DOCX.&amp;nbsp; This is an inconvenience, but a necessary one to protect users from unexpected surprises in the various scenarios outlined above.&amp;nbsp; Keep in mind that you can still use Word’s document compare feature to compare a previous version of an ODT file to a newer version, in order to see what changed.&lt;/P&gt;
&lt;P&gt;Finally, there are a few questions that I anticipate some people may ask, so I’d like to address those here …&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Couldn’t you have at least supported tracked changes for simple cases, as OpenOffice.org does?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Change tracking that handles “some” or even "most” of the changes a user makes would be extremely risky to use, because the user may be surprised to discover later that certain types of changes were not being tracked.&amp;nbsp; We’ve learned through clear feedback we get from our customers that a feature which works “most of the time” can be worse than no feature at all.&amp;nbsp; Users count on accurate, reliable change tracking for managing updates to their critical business documents.&lt;/P&gt;
&lt;P&gt;We really wanted to make change tracking work for our ODF implementation in Office 2007 SP2. I’ve spoken to some of the developers on the Word team, who wrote a lot of code for this and really tried to solve the problems. But ultimately our test team pointed out that the feature was just not “ship quality” and there was no good way to make it better without extending ODF - which &lt;A href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx"&gt;our first principle of Adhere to the ODF 1.1 standard&lt;/A&gt;&lt;B&gt;&lt;/B&gt; told us not to do.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Will change tracking be improved in ODF 1.2?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Unfortunately, it doesn’t look like it.&amp;nbsp; The current draft of ODF 1.2 contains no additions to Section 4.6 of ODF 1.1 (which is Section 4.5 in ODF 1.2 due to renumbering).&amp;nbsp; The only change is that the examples have been removed from the section.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why didn’t Microsoft work to get this fixed in the ODF TC?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We joined the OASIS ODF TC last June, and we started slowly because some people have stated concerns about Microsoft having too much influence on ODF’s direction.&amp;nbsp; The first proposal we made was a very simple proposal to add two optional attributes to indicate maximum grid size for spreadsheet applications, which would have addressed a specific real-world interoperability problem we encountered with a major ODF implementation.&amp;nbsp; Other TC members argued against this proposal, and after several such exchanges we decided not to push the matter.&lt;/P&gt;
&lt;P&gt;We then continued submitting proposed solutions to specific interoperability issues, and by the time proposals for ODF 1.2 were cut off in December, we had submitted 15 proposals for consideration.&amp;nbsp; The TC voted on what to include in version 1.2, and none of the proposals we had submitted made it into ODF 1.2.&lt;/P&gt;
&lt;P&gt;We look forward&amp;nbsp; to contributing more to the ODF TC in the future, and we would welcome the opportunity to work with other TC members to improve ODF’s ability to handle tracked changes.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9614028" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>1 + 2 = 1?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/05/09/1-2-1.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/05/09/1-2-1.aspx</id><published>2009-05-10T09:26:00Z</published><updated>2009-05-10T09:26:00Z</updated><content type="html">&lt;P&gt;Does 1 plus 2 equal 3?&amp;nbsp;&amp;nbsp; After last week’s sometimes acrimonious discussion about formulas in ODF, you may be glad to hear that IBM and Microsoft appear to agree on that answer to this simple question.&amp;nbsp; But OpenOffice.org is not so certain – maybe the answer is just &lt;STRONG&gt;1&lt;/STRONG&gt; sometimes – and the question itself turns out not to be so simple after all.&amp;nbsp; Let me explain.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The State of ODF Formula Interoperability Today&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;What is the current reality of ODF formula interoperability?&amp;nbsp; Understanding the status of the ODF ecosystem will help clarify the set of issues and options that we faced when making the tough decisions we had to make about how to best support formulas in ODF spreadsheets.&lt;/P&gt;
&lt;P&gt;For this example, I’ll use the latest released versions of two well-known ODF implementations: IBM Lotus Symphony (version 1.2, &lt;A href="http://symphony.lotus.com/" target=_blank mce_href="http://symphony.lotus.com"&gt;download here&lt;/A&gt;) and OpenOffice.org (version 3.1, &lt;A href="http://www.openoffice.org/" target=_blank mce_href="http://www.openoffice.org/"&gt;download here&lt;/A&gt;).&amp;nbsp; I want to talk about current reality, so I’m not using any outdated versions of software (the OO build I’m using, for example, was released in the last week).&amp;nbsp; I also stayed away from unreleased or private beta versions that might become available sometime in the future, and I used the default settings for each application.&lt;/P&gt;
&lt;P&gt;First, I fired up Symphony 1.2, and followed these steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enter a numeric value of &lt;STRONG&gt;1 &lt;/STRONG&gt;in cell A1. &lt;/LI&gt;
&lt;LI&gt;Format cell A2 as text, right-justified, then enter a &lt;STRONG&gt;2 &lt;/STRONG&gt;in that cell. &lt;/LI&gt;
&lt;LI&gt;In cell A3, enter the formula &lt;STRONG&gt;=A1+A2&lt;/STRONG&gt;. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In Symphony 1.2, here’s what I see:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_thumb.png" width=521 height=129 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;After saving this spreadsheet as an ODS file, I open it in OpenOffice.org 3.1 and see this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_thumb_1.png" width=521 height=129 mce_src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/121_6C5E/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Clearly this is a problem.&amp;nbsp; The exact same data, in the exact same spreadsheet, when operated on with the exact same formula, provides &lt;EM&gt;different results&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Some might be tempted to say that formatting a cell as text and then using it in a calculation is dumb.&amp;nbsp; And I’d agree that there are few people who ever do such a thing intentionally.&amp;nbsp; But in a large complex spreadsheet, with thousands of cells involved in complex calculations, it’s easy to make mistakes like this.&amp;nbsp; In fact, if you’ve spent any amount of time at all creating complex spreadsheets, I’ll bet that on more than one occasion you’ve wasted a bunch of time trying to debug a problem that turned out to be caused by such mistakes; I know I sure have.&lt;/P&gt;
&lt;P&gt;Similar issues arise with boolean values – what does it mean to “sum” a column of cells that includes both numeric values and boolean values?&amp;nbsp; Not all spreadsheet implementations agree on the answer to that question, either. This can create interactions between formatting and calculating – change the format of some cells, and the totals change in your spreadsheet.&amp;nbsp; Most users find such behavior very confusing, to say the least.&lt;/P&gt;
&lt;P&gt;One of the most interesting things I found in my testing of these two implementations was that although they write different markup for formulas, the exact same interoperability problem occurs regardless of which application is used to create the spreadsheet. &lt;/P&gt;
&lt;P&gt;If you create the spreadsheet in Symphony 1.2, as I did, the table:table-cell element has a table:formula attribute with a value of &lt;STRONG&gt;"=[.A1]+[.A2]"&lt;/STRONG&gt;.&amp;nbsp; And this formula will yield a result of &lt;STRONG&gt;3&lt;/STRONG&gt; in Symphony and &lt;STRONG&gt;1&lt;/STRONG&gt; in OpenOffice.org, as described above. &lt;/P&gt;
&lt;P&gt;If instead you create the same spreadsheet in OpenOffice.org 3.1, when you open it in Symphony 1.2 you'll see &lt;STRONG&gt;of:=A1+A2&lt;/STRONG&gt; in cell A3.&amp;nbsp; But after you manually correct the formula, this spreadsheet, too, will yield a result of &lt;STRONG&gt;3 &lt;/STRONG&gt;in Symphony and &lt;STRONG&gt;1 &lt;/STRONG&gt;in OpenOffice.org.&lt;/P&gt;
&lt;P&gt;So these two ODF implementations do not have predictable formula interoperability, regardless of where you start.&amp;nbsp; And these are not obscure implementations – they are the latest released versions of the implementations from IBM and Sun, the two companies that together chair the ODF TC.&amp;nbsp; Even if both companies released fixes tomorrow, there will still be many copies of the current non-interoperable versions of these applications in use for a long time to come.&amp;nbsp; &lt;EM&gt;This is the state of formula interoperability among ODF spreadsheets today.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fixing the Problem&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This difference in behavior is a well-known issue among those who work with spreadsheet formulas.&amp;nbsp; &lt;A href='http://markmail.org/message/6ikmup4cjlniu3bf?q=Weir+"goto+statements"+spreadsheets&amp;amp;page=1&amp;amp;refer=z7qz4pvheplcwqf2' target=_blank mce_href='http://markmail.org/message/6ikmup4cjlniu3bf?q=Weir+"goto+statements"+spreadsheets&amp;amp;page=1&amp;amp;refer=z7qz4pvheplcwqf2'&gt;As Rob Weir said three years ago&lt;/A&gt; “Automatic string conversions considered dangerous. They are the GOTO statements of spreadsheets.”&amp;nbsp; (One of the ODF TC members even has that line in his email auto-signature.)&lt;/P&gt;
&lt;P&gt;How to manage string conversions is far from the only problem with spreadsheet interoperability across vendors (and even across versions of the same product in some cases). The current draft OpenFormula specification contains 254 notes (by my count) about other issues similar to this one.&lt;/P&gt;
&lt;P&gt;The OpenFormula sub-committee of the ODF TC has worked hard to address this.&amp;nbsp; Here is an excerpt from the draft OpenFormula specification (&lt;EM&gt;emphasis &lt;/EM&gt;added):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;H5&gt;6.2.4 Conversion to Number&lt;/H5&gt;
&lt;P&gt;If the expected type is Number, then if value is of type:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Number, return it. &lt;/LI&gt;
&lt;LI&gt;Logical, return 0 if FALSE, 1 if TRUE. &lt;/LI&gt;
&lt;LI&gt;Text: The specific conversion is implementation-defined; an application may return 0, an error value, or the results of its attempt to convert the text value to a number (and fall back to 0 or error if it fails to do so). Applications may apply VALUE() or some other function to do this conversion, should they choose to do so. Conversion depends on the actual locale the application runs in, especially if group or decimal separators are involved. Note that portable spreadsheet files &lt;EM&gt;cannot depend on any particular conversion, and &lt;B&gt;shall&lt;/B&gt; avoid implicit conversions from text to number&lt;/EM&gt;. &lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After OpenFormula is approved and published, this approach, with its explicitly defined concept of “portable spreadsheet files,” will allow more predictable and consistent interoperability for ODF spreadsheet users.&lt;/P&gt;
&lt;P&gt;But in the current environment, with no standardization of formula markup across major ODF implementations, users who want to avoid interoperability problems need to stick to a very conservative strategy.&amp;nbsp; As Burton Group analyst &lt;A href="http://ccsblog.burtongroup.com/collaboration_and_content/2009/05/odf-spreadsheet-bickering-what-it-means.html" target=_blank mce_href="http://ccsblog.burtongroup.com/collaboration_and_content/2009/05/odf-spreadsheet-bickering-what-it-means.html"&gt;Guy Creese&lt;/A&gt; said last week:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;“… this in-between time (between the OpenOffice.org de facto standard and the wait for the officially approved 1.2 standard) means there isn't one way to handle this problem. The vendors would like you to believe that there is (their way), but in reality there isn't. Ultimately, this will resolve itself over time. ODF 1.2 will be approved, and there will finally be an approved standard that everyone--IBM, Microsoft, Sun (Sun/Oracle)--can follow.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Until then, if an enterprise does want to use ODF, the best strategy is to stick with one productivity suite as a way to avoid these interoperability problems. That way, even if formula support is idiosyncratic, it at least will be consistent within the enterprise.”&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;STRONG&gt;How Excel 2007 SP2 Handles ODF Formulas&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The question of how to handle formulas in SP2’s ODF implementation was one of the tough decisions we faced in our ODF implementation.&amp;nbsp; We had made conformance to the ODF 1.1 specification a top priority, and yet the spec doesn’t specify a formula language.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;It seemed clear to us that we couldn’t simply omit the&amp;nbsp; namespace, as the current version of Symphony does.&amp;nbsp; That would be in violation of Section 8.1.3 of the ODF specification, where it says “&lt;STRONG&gt;Every formula should begin with a namespace prefix specifying the syntax and semantics used within the formula&lt;/STRONG&gt;.” &lt;/P&gt;
&lt;P&gt;What about using the same &lt;STRONG&gt;of: &lt;/STRONG&gt;namespace that OpenOffice.org 3.1 uses?&amp;nbsp; We saw a couple of pretty serious problems with that approach as well:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It would not be interoperable with some existing implementations, such as the widely&amp;nbsp; used current version of IBM Lotus Symphony. &lt;/LI&gt;
&lt;LI&gt;It is based on a draft specification that has not been finalized or approved as a standard, and therefore could still change. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;What about using the &lt;STRONG&gt;oooc: &lt;/STRONG&gt;namespace that OpenOffice.org 3.1 writes when you choose its ODF 1.1 compatibilty mode? That syntax is on its way out for everyone, and we saw no point creating yet another new implementation of something that is clearly going to be deprecated soon.&amp;nbsp; And it doesn’t solve the problem: OpenOffice.org 3.1 writes the &lt;STRONG&gt;oooc: &lt;/STRONG&gt;namespace prefix in its ODF 1.0/1.1 compatibility mode, and those spreadsheets still can yield different results in OpenOffice.org and Symphony.&lt;/P&gt;
&lt;P&gt;After a robust internal debate on the topic, it became clear what we needed to do to apply the first two of our five prioritized &lt;A href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target=_blank mce_href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx"&gt;guiding principles&lt;/A&gt; for Office’s ODF implementation:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Adhere to the ODF 1.1 standard&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Be Predictable&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Preserve User Intent &lt;/LI&gt;
&lt;LI&gt;Preserve Editability &lt;/LI&gt;
&lt;LI&gt;Preserve Visual Fidelity &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;As we discussed in several DII workshops starting back in July of 2008 (with multiple ODF implementers and multiple ODF TC members in attendance), these guiding principles are in priority order. When we could not achieve them all, we choose the top ones first.&lt;/P&gt;
&lt;P&gt;To &lt;EM&gt;adhere to the ODF 1.1 standard&lt;/EM&gt;, we begin formulas with “a namespace prefix specifying the syntax and semantics used within the formula.”&amp;nbsp; Excel 2007 SP2 uses an &lt;STRONG&gt;msoxl &lt;/STRONG&gt;prefix and write the formula attribute like this:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;table:formula="&lt;STRONG&gt;msoxl:=A1+A2&lt;/STRONG&gt;"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That fulfills our goal of adhering to the standard since ISO/IEC 29500 defines both the syntax and semantics of this namespace.&amp;nbsp; Then, to &lt;EM&gt;provide a predictable user experience across all spreadsheets&lt;/EM&gt;, we elected to support this namespace, and only this namespace.&lt;/P&gt;
&lt;P&gt;If I move my spreadsheet from one application to another, and then discover I can’t recalculate it any longer, that is certainly disappointing.&amp;nbsp; But the behavior is predictable: nothing recalculates, and no erroneous results are created.&lt;/P&gt;
&lt;P&gt;But what if I move my spreadsheet and everything looks fine at first, and I can recalculate my totals, but only much later do I discover that the results are completely different than the results I got in the first application?&lt;/P&gt;
&lt;P&gt;That will most definitely not be a predictable experience.&amp;nbsp; And in actual fact, the unpredictable consequences of that sort of variation in spreadsheet behavior can be very consequential for some users.&amp;nbsp; Our customers expect and require accurate, predictable results, and so do we. That’s why we put so much time, money and effort into working through these difficult issues. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What Does Excel 2007 SP2 Do With the Example Above?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The answer is that we agree with IBM: 1 + 2 = 3.&lt;/P&gt;
&lt;P&gt;Excel does the same thing Symphony 1.2 does, converting the text “2” to a numeric 2 and using that value in the calculation, so that the total is 3.&amp;nbsp; Excel does this because this type of automatic conversion – which has been a popular Excel feature for a very long time – is allowed by the semantics of the formula markup language Excel uses.&lt;/P&gt;
&lt;P&gt;The formula markup that Excel uses is based on the formula language defined in ECMA-376 and ISO/IEC 29500, and here’s what it says about type conversion in Section 18.17.2.6 (Types and Values) of Part 1 of IS29500: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A title=_Toc197334597 name=_Toc197334597&gt;&lt;/A&gt;&lt;A title=_Toc189014356 name=_Toc189014356&gt;&lt;/A&gt;&lt;A title=_Toc190145083 name=_Toc190145083&gt;&lt;/A&gt;&lt;A title=_Toc190254430 name=_Toc190254430&gt;&lt;/A&gt;&lt;A title=_Toc190433538 name=_Toc190433538&gt;&lt;/A&gt;&lt;A title=_Toc190662990 name=_Toc190662990&gt;&lt;/A&gt;&lt;A title=_Toc193515650 name=_Toc193515650&gt;&lt;/A&gt;&lt;A title=_Ref194332861 name=_Ref194332861&gt;&lt;/A&gt;&lt;STRONG&gt;An implementation is permitted to provide an implicit conversion from string-constant to number. However, the rules by which such conversions take place are implementation-defined.&lt;/STRONG&gt; [Example: An implementation might choose to accept "123"+10 by converting the string "123" to the number 123. Such conversions might be locale-specific in that a string-constant such as "10,56" might be converted to 10.56 in some locales, but not in others, depending on the radix point character. end example]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Excel’s approach to formulas in ODF, as well as our approach to other difficult issues, is completely public and fully documented in the &lt;A href="http://documentinteropinitiative.org/" target=_blank mce_href="http://documentinteropinitiative.org/"&gt;implementer notes&lt;/A&gt; for SP2.&amp;nbsp; As the note for this issue explains:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;The standard defines the attribute table:formula, contained within the element &amp;lt;able:table-cell&amp;gt;, contained within the parent element &amp;lt;office:spreadsheet table:table-row&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;This attribute is supported in core Excel 2007. This attribute is supported in core Excel 1. When saving the Table:Formula attribute, Excel precedes its formula syntax with the "msoxl" namespace. 2. When loading the attribute Table:formula, Excel first looks at the namespace. If the namespace is "msoxl", Excel will load the value of Table:formula as a formula in Excel. 3. When loading the Table:formula attribute, if the namespace is missing or unknown, the Table:formula attribute is not loaded, and the value "Office:value" is used instead. If the result of the formula is an error, the element &amp;lt;text:p&amp;gt; will be loaded and mapped to an Error data type in Excel. Error types not supported by Excel are mapped to #VALUE!&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;The Question of Syntax&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I’d like to also address the issue of cell reference syntax in the ODF 1.1 specification, since that was also a topic of much discussion on several blogs last week.&amp;nbsp; I’ll start with some quick background for those who don’t wallow in standards documents for a living.&lt;/P&gt;
&lt;P&gt;The English language is inherently an ambiguous thing,&amp;nbsp; and great literature sometimes uses the ambiguity to good effect.&amp;nbsp; Words can have more than one meaning, and verb phrases might be intended to go with one noun or with another, as in &lt;A href="http://www.gray-area.org/Research/Ambig/#LIAR" mce_href="http://www.gray-area.org/Research/Ambig/#LIAR"&gt;famously ambiguous job references&lt;/A&gt; like “You will be very fortunate to get this person to work for you."&lt;/P&gt;
&lt;P&gt;Writers of technical standards like to use &lt;A href="http://www.iso.org/iso/standards_development/processes_and_procedures/iso_iec_directives_and_iso_supplement.htm" mce_href="http://www.iso.org/iso/standards_development/processes_and_procedures/iso_iec_directives_and_iso_supplement.htm"&gt;rules and procedures&lt;/A&gt; that are designed to avoid this sort of problem.&amp;nbsp; These rules, which place requirements on the&amp;nbsp; use of words like should, shall, must and may,&amp;nbsp; tend to result in a stilted writing style which gets tedious fast, but reduces the need to agree on what is “obvious” or “implied” when interpreting the meaning of the text later.&lt;/P&gt;
&lt;P&gt;A standards document is said to contain both &lt;I&gt;normative&lt;/I&gt; language and &lt;I&gt;informative&lt;/I&gt; language.&amp;nbsp;&amp;nbsp; The things you must do to comply with a standard are supposed to be in the normative part,&amp;nbsp; and things like examples and introductions are informative.&amp;nbsp;&amp;nbsp; So that everyone can be&amp;nbsp; sure about which parts are which,&amp;nbsp; the normative parts use specific phrases like “shall” and “shall not” to clearly label the things the standard actually requires you to do.&lt;/P&gt;
&lt;P&gt;So the debate about Excel 2007 SP2’s cell reference syntax comes down to whether the few sentences in the ODF 1.1 spec which cover this were meant to be informative or normative.&amp;nbsp; The section of ODF 1.1&amp;nbsp; in question does not use the words &lt;I&gt;shall&lt;/I&gt; or &lt;I&gt;must&lt;/I&gt;.&amp;nbsp;&amp;nbsp; It introduces the topic with the phrases “typically” and “can include”.&amp;nbsp;&amp;nbsp; In our reading of it,&amp;nbsp; this language makes that part of the specification &lt;I&gt;informative&lt;/I&gt;, stating no requirements for implementers.&lt;/P&gt;
&lt;P&gt;The ODF 1.1 spec is casual about applying the rules of normative language, and as a result ODF 1.1 has more than its share of ambiguity.&amp;nbsp; The ODF 1.2 draft, however, is already much improved in this regard, mainly through the great work of ODF editor Patrick Durusau.&amp;nbsp; The OpenForumla draft specification is extremely careful in its use of normative language, and that will help implementers a great deal when they sit down to write their software.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;When Will Office Support OpenFormula? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This question has come up on some blogs, so I’d like to address it here as well.&lt;/P&gt;
&lt;P&gt;The real question is “when will Office support ODF 1.2,” since OpenFormula is simply a part of the ODF 1.2 specification.&amp;nbsp; And the answer is that we don’t know yet, because nobody knows yet when ODF 1.2 will be published as an OASIS or ISO standard.&amp;nbsp; As I said in the previous post, “we will look closely at Open Formula when it becomes a standard and make a decision then about how to best proceed.”&amp;nbsp; (It looks like &lt;A href="http://www.ferris.com/2009/01/20/lotus-symphony-hard-to-see-why-it-will-succeed/" target=_blank mce_href="http://www.ferris.com/2009/01/20/lotus-symphony-hard-to-see-why-it-will-succeed/"&gt;IBM has committed to supporting ODF 1.2 and OpenFormula in late 2010&lt;/A&gt;.)&lt;/P&gt;
&lt;P&gt;In the meantime, if you want to use Excel 2007 SP2 to edit documents that contain formulas from OpenOffice.org or Symphony, and preserve those formulas through editing sessions, and you understand the risk that the results might not be the same, you have a couple of free options.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://odf-converter.sourceforge.net/download.html" target=_blank mce_href="http://odf-converter.sourceforge.net/download.html"&gt;Open XML / ODF Translator Add-Ins for Office&lt;/A&gt; can be used with Office 2007 SP2, and as covered on the translator team blog, supports a variety of formula namespaces.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://www.sun.com/software/star/odf_plugin/" target=_blank mce_href="http://www.sun.com/software/star/odf_plugin/"&gt;Sun ODF Plugin&lt;/A&gt; provides yet another option, and apparently &lt;A href="http://blogs.sun.com/malte/entry/using_the_sun_odf_plugin" target=_blank mce_href="http://blogs.sun.com/malte/entry/using_the_sun_odf_plugin"&gt;works with SP2&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9600166" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry><entry><title>ODF Spreadsheet Interoperability</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dmahugh/archive/2009/05/05/odf-spreadsheet-interoperability.aspx" /><id>http://blogs.msdn.com/dmahugh/archive/2009/05/05/odf-spreadsheet-interoperability.aspx</id><published>2009-05-06T00:58:51Z</published><updated>2009-05-06T00:58:51Z</updated><content type="html">&lt;p&gt;Rob Weir posted on his blog a couple of days ago an &lt;a href="http://www.robweir.com/blog/2009/05/update-on-odf-spreadsheet.html" target="_blank"&gt;Update on ODF Spreadsheet Interoperability&lt;/a&gt;.&amp;#160; I think it’s great that he has brought up spreadsheet interoperability, and specifically the issue of formulas, which seems to be the main thrust of his post.&amp;#160; I mentioned on the day of our &lt;a href="http://blogs.msdn.com/dmahugh/archive/2009/04/28/working-with-odf-in-word-2007-sp2.aspx" target="_blank"&gt;SP2 release&lt;/a&gt; last week that “I’ll be doing some blog posts that get down into more of the technical details, to help explain some of the engineering decisions that we made in our implementation,” and Rob’s post is a good starting point for that conversation.&lt;/p&gt;  &lt;p&gt;For those who only want to read the first two paragraphs of this very long post, here’s a summary:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ODF’s lack of spreadsheet formula syntax creates some interoperability challenges;&amp;#160;&amp;#160; Because ODF 1.0 and 1.1 do not support formulas, &lt;em&gt;all &lt;/em&gt;ODF spreadsheet implementations are application-dependent &lt;/li&gt;    &lt;li&gt;We’ve worked hard to overcome these challenges in ways that provide accurate results and predictable interoperability&lt;/li&gt;    &lt;li&gt;We have been fully transparent about the decisions we’ve made in our ODF implementation, both in terms of the &lt;a href="http://blogs.msdn.com/dmahugh/archive/2008/08/05/guiding-principles-for-office-s-odf-implementation.aspx" target="_blank"&gt;guiding principles&lt;/a&gt; we’ve followed and also the specific details published in our &lt;a href="http://documentinteropinitiative.org/" target="_blank"&gt;implementer notes&lt;/a&gt;&amp;#160;&lt;/li&gt;    &lt;li&gt;The Open Formula specification is not yet a standard, so we do not support it in its unfinished state, but we will look closely at Open Formula when it becomes a standard and make a decision then about how to best proceed &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Before I get into the details, I think it’s worth noting that there’s nothing new here.&amp;#160; The challenges of ODF’s lack of formula specification have been around for a long time, and many people saw the current situation coming.&lt;/p&gt;  &lt;p&gt;Nearly three years ago, &lt;a href="http://notes2self.net/archive/2006/07/12/446.aspx" target="_blank"&gt;Stephen McGibbon&lt;/a&gt; had a good post covering the situation, which is worthwhile reading for some background on how we got to where we are today.&amp;#160; As you can see from the quotes in Stephen’s blog post, many people in the ODF community – and the broader standards community – were dismayed at the decision to not include formula syntax in ODF.&amp;#160; Others outside of Microsoft also &lt;a href="http://blogs.gnome.org/mortenw/2005/06/16/opendocument-for-spreadsheets/"&gt;pointed out the problem&lt;/a&gt; years ago.&amp;#160; Rob’s blog post, as well as this post, are excellent examples of the sorts of interoperability challenges that those people saw coming as a result of the decision to not include formula syntax in the ODF standard.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Testing Methodology&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The first thing I did upon reading Rob’s post was to try to follow his steps for myself, so that I could understand the context of his findings.&amp;#160; Here’s the methodology he describes in his post:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The test scenario I used was a simple wedding planner for a fictional user, Maya, who is getting married on August 15th. She wants to track how many days are left until her wedding, as well as track a simple ledger of wedding-related expenses. Nothing complicated here. I created this spreadsheet from scratch in each of the editors, by performing the following steps:&lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;Enter the title in A1 &amp;quot;May's Wedding Planner&amp;quot; and increased font size to 14 point. &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Enter formula = TODAY() in B3 and set US style MM/DD/YY date format/ &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Enter the date of the wedding as a constant in cell B4, also setting date format. &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Added simple calculations on cells B6-B8, to calculate days, weeks and months until the wedding. &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;A11 through E16 is a simple ledger of the kind that is done thousands of times a day by spreadsheet users everywhere. Once you have the formula set up in column E (Balance = previous balance + credits - debits) then you can simply copy down the formula to the new row for each new entry &lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Sounds simple enough.&amp;#160; So I fired up Open Office 3.0.1, and followed those steps.&amp;#160; The resulting spreadsheet looked like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_thumb_1.png" width="440" height="273" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then I saved the document, by clicking File/Save and then typing in a filename:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image8_thumb.png" width="439" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So far so good.&amp;#160; Next step, I tried opening the document in IBM Lotus Symphony version 1.2.0.&amp;#160; Here’s what I saw:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_thumb.png" width="440" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And then I opened the same document in Excel 2007 SP2, and here’s what I saw:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_thumb_3.png" width="443" height="295" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is a great example of a common ODF spreadsheet interoperability challenge, and two different ways of dealing with it.&amp;#160; The challenge is caused by the fact that Open Office writes formulas in a syntax that is unknown to Symphony and Excel.&amp;#160; Open Office, for reasons I don’t understand, has decided to use as their default formula syntax the unfinished Open Formula specification, which is neither approved nor published by OASIS – not even out for public review yet.&lt;/p&gt;  &lt;p&gt;So what do Symphony and Excel do about this challenge?&amp;#160; The answer is that Symphony preserves the (unrecognized)&amp;#160; formula markup, and Excel preserves the cached values.&amp;#160; (A quick aside for those who don’t know: spreadsheets typically store both the formula and the value resulting from the most recent recalculation.)&lt;/p&gt;  &lt;p&gt;Getting back to Rob’s initial premise of this being a typical wedding-planning exercise, if Maya were to send this spreadsheet to a person using Microsoft Excel SP2, that person would see the values as shown above.&amp;#160; They’d know at a glance what day was ‘today’ when Maya made the file, and that the ledger balance that day was 5500.&lt;/p&gt;  &lt;p&gt;But if Maya were to send this spreadsheet to a person running IBM Lotus Symphony, they’d see only the formulas.&amp;#160; Perhaps an ODF markup expert like Rob would be able to massage that spreadsheet into something usable, but most people would find it a bit hard to conceive of what it means for a wedding to be “of:=B4-B3” days away, or for there to be a ledger balance of “of:=E15+C16-D16” dollars.&lt;/p&gt;  &lt;p&gt;So what does Rob’s test matrix show for these two scenarios?&amp;#160; Oddly, it labels Open Office to IBM Lotus Symphony interoperability for this scenario as “OK” and it labels Open Office to Microsoft Office SP2 interoperability as “Fail” (with a red background for added emphasis).&amp;#160; Now, I know Rob works for IBM and probably wants to portray Symphony in the best possible light, but is that a reasonable assessment of the interoperability we’ve just seen above?&lt;/p&gt;  &lt;p&gt;After further investigation, though, I think I see what Rob may have actually done to get the result in his table.&amp;#160; He seems to have included some steps that aren’t documented in his blog post:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In Open Office Calc, he went into Tools, Options, Load/Save, General. &lt;/li&gt;    &lt;li&gt;For “ODF format version” he changed the setting from “1.2 (recommended&amp;quot;)” to “1.0/1.1 (OpenOffice.org 2.x)” &lt;/li&gt;    &lt;li&gt;The dialog then warned him that “Not using ODF 1.2 may cause information to be lost.” &lt;/li&gt;    &lt;li&gt;He clicked OK to save the change. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here’s how it looks, for those who don’t have Open Office handy:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image36.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image36_thumb.png" width="493" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;After following these steps, Rob was then able to create a spreadsheet that stores formulas in the undocumented non-standardized syntax that was used by old versions of Open Office.&amp;#160; Symphony, being simply a fork of an older version of the Open Office code base, is able to understand those formulas, so it can load both the values and the formulas themselves.&lt;/p&gt;  &lt;p&gt;It’s worth noting &lt;a href="http://www.openoffice.org/issues/show_bug.cgi?id=93719" target="_blank"&gt;what the OpenOffice.org developers have to say&lt;/a&gt; about this option that Rob has apparently used for his interoperability testing:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image40.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image40_thumb.png" width="500" height="83" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So it sounds like there isn’t any single version of ODF that will provide compatibility across all versions of Open Office and Symphony.&amp;#160;&amp;#160; You can use the “may cause information to be lost” option if you want to do a demonstration of formula interoperability with ODF, but if you want to demonstrate text-bullet interoperability, you may need to use another option.&lt;/p&gt;  &lt;p&gt;And what does Excel 2007 SP2 do with the document saved in this alternative format?&amp;#160; Exactly the same thing it does with Open Office’s current default format: it displays the data, so that the document user can see the results of the last recalculation of the spreadsheet, and it ignores the formulas that are written in a non-standardized syntax that Excel doesn’t support.&amp;#160; I think that’s a pretty reasonable approach, when a spreadsheet application comes across non-standardized formula syntax: show the last recalculated result, thus preserving the data, and don’t try to guess at the semantics of undocumented formula markup.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why Doesn’t Office 2007 SP2 support Open Office formula syntax?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;That’s a logical question to ask, in regard to how SP2 handles formulas.&amp;#160; To answer it accurately and completely, we should distinguish between the two formula syntaxes that Open Office uses.&lt;/p&gt;  &lt;p&gt;The first is the syntax they use in their non-recommended “1.0/1.1 (OpenOffice.org 2.x)” setting.&amp;#160; This is an undocumented, deprecated syntax, and therefore not a reliable mechanism for formula interoperability.&amp;#160; Despite what you may read on some blogs, it is &lt;em&gt;not &lt;/em&gt;the same syntax as used by Excel 97/2000/2003.&amp;#160; Open Office copied quite a bit of the feature set from Excel, and there are definitely similarities in the formula syntax, but there are also differences with regard to referencing, operators, data types, and function arguments.&lt;/p&gt;  &lt;p&gt;The other formula syntax that Open Office supports is the Open Formula syntax, which will eventually appear in ODF 1.2.&amp;#160; This syntax has not yet been approved by a standards body, nor has it undergone the 60-day public review period that OASIS requires prior to approval and publication.&amp;#160; It may go to public review soon, but it won’t be a standard until later this year at the soonest, and the details may change as a result of the remaining TC work and the public review process.&amp;#160; (According to recent discussions in the ODF TC, we may send the other parts of ODF 1.2 out for public review first, to allow more time to finish up Open Formula.)&lt;/p&gt;  &lt;p&gt;In Office’s implementation, we haven’t chosen to support the draft Open Formula spec (as Open Office currently does), because we have certain obligations when we ship software that don’t apply to open-source projects like Open Office.&amp;#160; We need to test and verify behavior to a degree that’s not possible without final, fixed documentation that is believed to be 100% complete and accurate.&amp;#160; When Open Formula is completed, standardized, and published, we'll be looking at that as the future path for enabling formula interoperability in ODF spreadsheets.&amp;#160; But we’re not there yet; ODF 1.2 is not done, and not even ready for public review.&lt;/p&gt;  &lt;p&gt;It’s interesting to note that we have discussed this very issue at a DII workshop.&amp;#160; Last July, we had a workshop in Redmond, with attendees including other ODF implementers, members of the ODF TC, standards professionals, and others.&amp;#160; In the roundtable discussions, I brought up our approach to formula support as outlined above, and asked for feedback.&amp;#160; Although it was not 100% unanimous, there was clear consensus among most of the participants in the discussion that they did not want us to implement a non-standard formula syntax in anticipation of it becoming a standard.&amp;#160; “Putting the cart before the horse” in that manner was seen by many as a possible source of future interoperability problems, rather than a solution to them, and we took that feedback into consideration.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/dmahugh/archive/2008/12/16/odf-implementation-notes-for-office-2007-sp2.aspx" target="_blank"&gt;As I’ve covered before&lt;/a&gt;, we feel that thorough documentation of implementation details is a cornerstone of document format interoperability.&amp;#160; We’ve published detailed &lt;a href="http://documentinteropinitiative.org/" target="_blank"&gt;implementer notes&lt;/a&gt; for our ODF implementation, and on the matter of formulas (which are stored in the table:formula element), here’s what our implementer notes have to say:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The standard defines the attribute table:formula, contained within the element &amp;lt;table:table-cell&amp;gt;, contained within the parent element &amp;lt;office:spreadsheet \ table:table-row&amp;gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;This attribute is supported in core Excel 2007.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;1. When saving the table:formula attribute, Excel 2007 precedes its formula syntax with the &amp;quot;msoxl&amp;quot; namespace.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;2. When loading the attribute table:formula, Excel 2007 first looks at the namespace. If the namespace is “msoxl”, Excel 2007 will load the value of table:formula as a formula in Excel.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;3. When loading the table:formula attribute, if the namespace is missing or unknown, the table:formula attribute is not loaded, and the value “office:value” is used instead. If the result of the formula is an error, Excel 2007 loads the &amp;lt;text:p&amp;gt; element and maps the element to an Error data type. Error data types that Excel 2007 does not support are mapped to #VALUE!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And, as both Rob’s tests and mine show, that is exactly what Excel does.&amp;#160; It would be great if there were a place implementers could go to see these sorts of details for &lt;em&gt;all &lt;/em&gt;major ODF implementations.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m glad to see this sort of public scrutiny of the details of ODF interoperability and how the underlying challenges are handled by various implementations.&amp;#160; As you can see, spreadsheet interoperability is a complicated topic, and in the specific case of ODF spreadsheets, there is even more complexity created by the lack of a defined formula syntax in any published version of ODF.&lt;/p&gt;  &lt;p&gt;The good news, when it comes to formulas, is that the Open Formula specification will address this area soon.&amp;#160; My colleague Eric Patterson represents the Excel team in the Open Formula SC, and the very capable David Wheeler leads that group.&amp;#160; Much good work has been done already, and we look forward to seeing the final Open Formula spec go out for public review and then approval by OASIS.&amp;#160; The nearly 400 pages of formula syntax documentation in ISO/IEC&amp;#160; 29500 (Part 1, section 18.17) enables reliable formula interoperability in the Open XML community, and soon the ODF community will have a similar level of formula interoperability.&lt;/p&gt;  &lt;p&gt;But formulas are not the only ODF interoperability challenge.&amp;#160; As members of the ODF TC and also the OIC (ODF Interoperability and Conformance) TC, both Rob and I – and many others – will need to work together to enable better interoperability in areas including tracked changes, mail merge, application settings, and others.&amp;#160; Will ODF 1.2 be the most interoperable version of ODF yet?&amp;#160; I hope so, and there are signs that it will be.&amp;#160; But our work is not nearly done.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dmahugh/WindowsLiveWriter/c946eac2398f_9579/image_2.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9589779" width="1" height="1"&gt;</content><author><name>dmahugh</name><uri>http://blogs.msdn.com/members/dmahugh.aspx</uri></author></entry></feed>