OpenFormula
歴史 > OpenFormulaへの要求

OpenDocument 1.0が制定された当時の背景には、どのオフィススイートのユーザーであっても、互換性の問題なく文書ファイルを相互にやり取りすることへの要求があったが、表計算ソフトにおける数式の記述に関しても同様の要求がある。SUM関数のようなごく一般的な数式を除いては、各アプリケーションにより規定されている数式は異なっており、あるアプリケーションで作成されたスプレッドシートを別のアプリケーションで読み込むことは（出来なくないにせよ）、特殊な対応を行うことではじめて可能であった。そうした障害を避けるために構想されたのがOpenFormulaである。
OpenDocumentでは数式を扱う際に、MathMLを利用しており、また、スプレッドシート上のデータ、フォーマット、テーブル等、表計算ソフト上で一般的に利用される情報をやり取りすることも可能である。OpenDocumentでは関数のような（スプレッドシートで計算された）数式は、table:formulaという形式を用いて表示される。
例えばODSファイルに含まれるcontent.xmlは、SUM関数を用いて計算した場合、office:body以下では次のようになる。
<office:body>
   <office:spreadsheet>
    <table:table table:name="Table1" table:style-name="ta1" table:print="false">
     <office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
     <table:table-column table:style-name="co1" table:number-columns-repeated="256" table:default-cell-style-name="ce1"/>
      <table:table-row table:style-name="ro1">
       <table:table-cell office:value-type="float" office:value="1">
        <text:p>1</text:p>
       </table:table-cell>
       <table:table-cell table:number-columns-repeated="255"/>
      </table:table-row>
      <table:table-row table:style-name="ro1">
       <table:table-cell office:value-type="float" office:value="2">
        <text:p>2</text:p>
       </table:table-cell>
       <table:table-cell table:number-columns-repeated="255"/>
      </table:table-row>
       <table:table-row table:style-name="ro1">
        <table:table-cell office:value-type="float" office:value="3">
        <text:p>3</text:p>
       </table:table-cell>
       <table:table-cell table:number-columns-repeated="255"/>
      </table:table-row>
      <table:table-row table:style-name="ro1">
       <table:table-cell office:value-type="float" office:value="3">
        <text:p>4</text:p>
       </table:table-cell>
       <table:table-cell table:number-columns-repeated="255"/>
      </table:table-row>
      <table:table-row table:style-name="ro1">
       <table:table-cell table:formula="oooc:=SUM([.A1:.A4])" office:value-type="float" office:value="10">
        <text:p>10</text:p>
       </table:table-cell>
       <table:table-cell table:number-columns-repeated="255"/>
      </table:table-row>
      <table:table-row table:style-name="ro1" table:number-rows-repeated="65530">
       <table:table-cell table:number-columns-repeated="256"/>
      </table:table-row>
      <table:table-row table:style-name="ro1">
      <table:table-cell table:number-columns-repeated="256"/>
     </table:table-row>
    </table:table>
   </office:spreadsheet>
  </office:body>
しかし、この table:formula の構文や意味論は十分に定義されていないとする声もある。OpenDocument 1.0においてスプレッドシートの数式は、例えば値域やSUM関数を指定する方法を表示するような、ごく単純な例のセットによってしか定義されておらず、それらの例について、構文や意味論を含めた上で、より詳細で正確な仕様が求められていると批判された。
当時、OpenDocumentの委員会は数式の相互運用性については気にかけておらず、「コメントは、スプレッドシートの、準拠的な実装をサポートするべき数式の文法に関してなされるものであり、確かに相互運用性はユーザーの利益となると思うが、これは目下の仕様の狙うところではないと信じる〔ママ〕。なぜなら、相互運用性は現在その仕様が記述するところのXMLフォーマットとは特に関係がないからである。技術委員会 (Technical Committee) は仕様に定義されている以上の相互運用性の規格の文書化に関して解決法を探ってゆくであろう。」とコメントした。
一方では、仕様はそれほど明確でないが（特に数式は数十年の伝統に沿う傾向があるので）、またほとんどのスプレッドシートでは結局のところ普遍的に使われている数式はごくわずかしかない（例えばSUM関数）ため、仕様の意図は十分に明確であるとされることもある。ただ実際には、多くのディベロパーはOpenOffice.orgを「基準となる実装」と見ている。なぜならOpenOffice.orgのソースコードは公開されていて、またXMLのアウトプットはバイナリデータと異なり、容易に調べることが出来るためである。オープン・スタンダードに沿ったやり方で機能の実装を行うことは、アプリケーションに渡って数式をやり取りする際に生じる多くの問題を解消するといえよう。