{"id":55,"date":"2007-01-16T19:00:00","date_gmt":"2007-01-17T00:00:00","guid":{"rendered":"http:\/\/2d823b65bb.nxcli.io\/2007\/01\/calling-captain-kirk.html"},"modified":"2007-01-16T19:00:00","modified_gmt":"2007-01-17T00:00:00","slug":"calling-captain-kirk","status":"publish","type":"post","link":"https:\/\/www.robweir.com\/blog\/2007\/01\/calling-captain-kirk.html","title":{"rendered":"Calling Captain Kirk"},"content":{"rendered":"<p>I suppose I was the odd child in my neighborhood.     While the other boys were playing with light sabers and phasers, I wanted only one thing from the future: the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Universal_translator\">Universal Translator<\/a>, the ultimate piece of linguistic technology which would immediately translate from all alien tongues.  Captain Kirk had one, and one day, I vowed, I would have one as well.  Who wouldn&#8217;t want one?  It certainly beats spending hours memorizing vocabulary and conjugations and declensions.<\/p>\n<p>Flash forward now to the 21st Century, the present.  We have <a href=\"http:\/\/babelfish.altavista.com\/\">Babelfish<\/a> and <a href=\"http:\/\/www.google.com\/language_tools?hl=en\">Google<\/a>, and they do a fair job at text translation, but the Universal Translator is still science fiction.<\/p>\n<p>Or is it?<\/p>\n<p>The <a href=\"http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-376.htm\">Ecma Office Open XML<\/a> (OOXML) specification seems to presuppose the existence of a Universal Translator of sorts.  Take a look at section 11.3.1 \u201cAlternative Format Input Part\u201d (Page 38):<\/p>\n<blockquote><p>An alternative format import part allows content specified in an alternate format (HTML, MHTML, RTF, earlier versions of WordprocessingML, or plain text) to be embedded directly in a WordprocessingML document in order to allow that content to be migrated to the WordprocessingML format.<\/p><\/blockquote>\n<p>According to the schema, these alternate formats may be the main content of the document, or specifically applied to comments, endnotes, footer, footnotes or headers.<\/p>\n<p>Let&#8217;s parse the original more closely, starting by defining some terms:<\/p>\n<ul>\n<li>The term \u201cpart\u201d in OOXML refers to the individual items (XML documents, images, scripts, other binary blobs, etc.) contained in the OOXML Zip file, which they call a \u201cpackage\u201d.  So a package is made  up of one or more parts.<\/li>\n<li>HTML should be self-evident.  But does this also include the HTML-like output from earlier versions of Word, which wasn&#8217;t always well-formed?<\/li>\n<li><a href=\"ftp:\/\/ftp.ietf.org\/rfc\/rfc2557.txt\">MHTML<\/a> what you get when you save a \u201ccomplete web page\u201d within Internet Explorer. It is MIME-encoded version of the HTML page plus the embedded images.  MHTML is listed as a having a status of \u201cProposed Standard\u201d in the IETF, but it appears to have been held at that state since 1999.  (Does anyone know why it never advanced to the Standard status?)<\/li>\n<li>RTF &#8211; Rich Text Format is a proprietary document format occasionally updated by Microsoft.  As one wag quipped, \u201cRTF is defined as whatever Microsoft Word exports when it exports to RTF\u201d.<\/li>\n<li>WordProcessingML &#8211; I&#8217;ve seen this term used to refer to the XML format of Word 2003 as well as Word 2007.  Presumably the 2003 version is intended here?<\/li>\n<\/ul>\n<p>As you can see, we have several problems here from a specification standpoint.<\/p>\n<p>First, no versions are specified for HTML, MHTML, RTF or WordProcessingML.  Are we supposed to support all versions of of these?  Only some?  Does this include WordProcessingML from beta versions of Office 2007 as well?<\/p>\n<p>Second,  the specification provides no normative references for MHTML, RTF or \u201cearlier versions of WordProcessingML\u201d.<\/p>\n<p>Third, this is a closed list of formats that seems biased toward Microsoft&#8217;s legacy formats. Why not XHTML?  Why not DocBook?  Why not TeX or troff?  Why not ODF?  Is there a legitimate reason to restrict the set of supported formats in this way?<\/p>\n<p>Fourth, \u201cplain text\u201d is not a phrase I like to see in file format specification, since it is undefined.  No encoding is mentioned. What is meant here?  ASCII, Latin-1, UTF-8. UTF-16, EBCDIC? Some of the above?  All of the above?  What encodings are included under the name \u201cplain text\u201d?<\/p>\n<p>Reading further we have:<\/p>\n<blockquote><p>A WordprocessingML consumer shall treat the contents of such legacy text files as if they were formatted using equivalent WordprocessingML, and if that consumer is also a WordprocessingML producer, it shall emit the legacy text in WordprocessingML format.<\/p><\/blockquote>\n<p>Three words should raise an eyebrow.  The first is the use of the word \u201cequivalent\u201d and the other two are the instances of the word \u201cshall\u201d. \u201cShall\u201d is spec talk for a requirement, something a conformant application must do.  According to Annex H of <a href=\"http:\/\/isotc.iso.org\/livelink\/livelink\/fetch\/2000\/2122\/3146825\/4229629\/4230450\/4230456\/ISO_IEC_Directives__Part_2__Rules_for_the_structure_and_drafting_of_International_Standards__2004__5th_edition___pdf_format_.pdf?nodeid=4230517&amp;vernum=0\">ISO Directives Part 2<\/a>, \u201cRules for the Structure and Drafting of International Standards\u201d, the word \u201cshall\u201d is used,\u201cto indicate requirements strictly to be followed in order to conform to the document and from which no deviation is permitted.\u201d<\/p>\n<p>So, compliant consumers are required to take input from a variety of formats and convert them in the &#8220;equivalent&#8221; WordProcessingML.  Putting aside the question as to what version or versions of HTML are intended, there is nothing here that defines the mapping between any version of HTML and WordProcessingML.     So the conversion is application-defined.  Considering that this is indicated to be a required feature of a conformant application, I find the lack of specificity here disturbing.  How can there ever be interoperable processing of OOXML documents if this is not defined?<\/p>\n<p>Reading the OOXML specification a little further down:<\/p>\n<blockquote><p>This Standard does not specify how one might create a WordprocessingML package that contains Alternative Format Import relationships and altChunk elements.<\/p>\n<p>However, a conforming producer shall not create a WordprocessingML package that contains Alternative Format Import relationships and elements.<\/p><\/blockquote>\n<p>\u201cShall not\u201d is another one of the special specification words.  So, essentially, we&#8217;re not allowed, in a conforming application, to create a document with Alternative Format Input Parts, but if we read a document that has one, then we are required to process it, transforming it into equivalent WordProcessingML.<\/p>\n<p>Further, we get this informative note:<\/p>\n<blockquote><p>Note: The Alternative Format Import machinery provides a one time conversion facility. A producer could have an extension that allows it to generate a package containing these relationships and elements, yet when run in conforming mode, does not do so.<\/p><\/blockquote>\n<p>Putting on my tinfoil hat for a moment, I find this all rather fishy.  The OOXML specification, at 6,000+ pages has now just sucked in the complexity of one or more versions of HTML, MHTML, RTF and WordProcessingML.  It requires that a conformant application understand these formats, but forbids a conformant application from producing them.<\/p>\n<p>This is another example of how you never know what you&#8217;re getting when you get an OOXML file.  To support OOXML is not to support a single format, or even a single family of formats.  To fully support OOXML requires that you support OOXML plus a motley hodgepodge of various other formats, deprecated, abandoned and proprietary.  The cost of compatibility with billions of legacy Microsoft documents is that you must support their legacy of years of false starts and restarts in the file format arena.<\/p>\n<p>When you get an OOXML document, you don&#8217;t know what is inside.  It might use the deprecated VML specification for vector graphics, or it might using DrawingML.  It might use the line spacing defined in WordProcessingML, or it might have undefined legacy compatibility overrides for Word 95.  It might have all of its content in XML, or it might have it mostly in RTF, HTML, MHTML, or \u201cplain text\u201d. Or it may have any mix of the above.  Even the most basic application that reads OOXML will also need to be conversant in RTF, HTML and MHTML.<\/p>\n<p>Captain Kirk, where are you?  I need a Universal Translator!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I suppose I was the odd child in my neighborhood. While the other boys were playing with light sabers and phasers, I wanted only one thing from the future: the Universal Translator, the ultimate piece of linguistic technology which would immediately translate from all alien tongues. Captain Kirk had one, and one day, I vowed, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"post-55","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ooxml","7":"entry"},"_links":{"self":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/comments?post=55"}],"version-history":[{"count":0,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts\/55\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/media?parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/categories?post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/tags?post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}