公開日: 2009年11月11日(Wed)
OpenOffice.org の表計算ツール Calc のファイル形式(*.ods
)が、実はZIP圧縮されたXML形式だったことを知った。だったらもしかして、ワープロツール Writer のファイル形式(*.odt
)もZIPなんじゃないかということでやってみたら、やっぱりZIPだった。
というわけで、今回はその *.odt
ファイルの中身を少し覗いてみた。
*.odt
(サンプルファイル001)をZIP解凍してみたら、次のようなファイルとディレクトリが得られた。
*.zip
にしてあるので、 *.odt
に変更して開いてください。
Picturesディレクトリは、文書中に画像が挿入されている場合だけ生成されるようだ。
表計算形式(*.ods)とだいたい似たようなファイル構造になっている。ならばおそらく、content.xml
に主な内容が書いてあるのだろう。/office:document-content/office:body/office:text
の中に、文書構造らしい記述が見られる。
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content>
<!-- ~省略~ -->
<office:body>
<office:text>
<text:sequence-decls>
<text:sequence-decl text:display-outline-level="0" text:name="Illustration" />
<text:sequence-decl text:display-outline-level="0" text:name="Table" />
<text:sequence-decl text:display-outline-level="0" text:name="Text" />
<text:sequence-decl text:display-outline-level="0" text:name="Drawing" />
</text:sequence-decls>
<text:p text:style-name="P1">ワープロ的文書表現のためのサンプルテキスト。</text:p>
<text:p text:style-name="P1">テストです。テストです。</text:p>
</office:text>
</office:body>
</office:document-content>
基本的な文書構造をマークアップしているっぽいタグを調べてみた。
OpenOffice.org の Writer はワープロツールなので、いわゆるドキュメントを作るのが主目的。ならばおそらく、HTMLと似た感じなんじゃないかしら。
以下、content.xml
内のソースコードを幾つか載せているが、実際の記述はだいぶ長いためかなり省略して掲載したので要注意。詳しくは サンプルファイル002 を解凍して実物を確認されたし。
*.zip
にしてあるので、 *.odt
に変更して開いてください。
普通に書いたテキストは <text:p>
タグで囲われた。おそらくこれは、HTMLの<p>
タグに相当するのだろう。
<text:p>段落。段落。</text:p>
改行は、HTMLでいうところの<br>
タグ。ODTでは <text:line-break>
タグが対応している模様。
<text:p>段落中の改行は<text:line-break />こうです。</text:p>
見出しを置いてみたら <text:h>
タグが作られた。
<text:h text:outline-level="1">大見出し</text:h>
<text:h text:outline-level="2">中見出し</text:h>
<text:h text:outline-level="3">小見出し</text:h>
HTMLでは<h1>
、<h2>
、<h3>
にそれぞれ相当するであろう要素だが、ODTでは全部 <text:h>
タグ1発で全部表現するようだ。その代わり、text:outline-level
属性が見出しの大きさを表している。(styles.xml を覗くと、見出しレベルは1~10までありそうに見える)
箇条書きリストは <text:list>
タグと <text:list-item>
タグで表現された。これはHTMLで言うところの<ul>
タグと <li>
タグに相当する。
<text:list>
<text:list-item><text:p>リストAAAA</text:p></text:list-item>
<text:list-item><text:p>リストBBBB</text:p></text:list-item>
<text:list-item><text:p>リストCCCC</text:p></text:list-item>
</text:list>
HTMLでは<ol>
タグで表される通し番号のリストについては、特に専用のタグは用意されていないようだ。構造ではなく、スタイルだけで区別されているらしい。
<!-- ヘッダ部 -->
<office:automatic-styles>
<text:list-style style:name="L1">
~ 長いので割愛 ~
</text:list-style>
</office:automatic-styles>
<!-- ボディ部 -->
<office:body>
<office:text>
<text:list text:style-name="L1">
<text:list-item><text:p>リストAAAA</text:p></text:list-item>
<text:list-item><text:p>リストBBBB</text:p></text:list-item>
<text:list-item><text:p>リストCCCC</text:p></text:list-item>
</text:list>
</office:text>
</office:body>
こんな感じ。
・・・ちょっと省略しすぎたか。サンプルファイルを確認していただきたい。
表組みを挿入した箇所には、次のような記述がされている。
<table:table table:name="表1">
<table:table-column table:number-columns-repeated="2" />
<table:table-row>
<table:table-cell office:value-type="string">
<text:p>見出しセルA1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string">
<text:p>見出しセルB1</text:p>
</table:table-cell>
</table:table-row>
</table:table>
いろんな属性やらがついていたのでだいぶ省略したが、だいたい骨格はこんな感じ。<table:table>
、<table:table-row>
、<table:table-cell>
が、それぞれHTMLの<table>
、<tr>
、<td>
に相当しているっぽい。<th>
に相当する記述はなく、スタイルで見出しセルっぽく見せているだけのようだ。<table:table-column>
は、HTMLの<colgroup>
とか<col>
とかに相当するのかな?詳細は不明。
画像を挿入すると、<draw:image>
タグが生成される。
<draw:image
xlink:href="Pictures/10000000000001B8000001251A1A0C8D.jpg"
xlink:type="simple"
xlink:show="embed"
xlink:actuate="onLoad"
/>
xlink:href
属性が、挿入した画像を指している。画像の実体は、Picturesフォルダの中に格納されていた。
他にも幾つか属性がついているが、意味はよくわからない。
強制改ページを挿入した付近には、改ページを示しそうなタグは見当たらなかった。
その代わり、text:style-name
に "P3"
が指定された空白の段落が置かれている。
<text:p text:style-name="P3" />
"P3"
には、次のようなスタイルの記述が紐づいているようだ。
<style:style style:name="P3" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:break-before="page"/>
<style:text-properties style:language-asian="ja" style:country-asian="JP"/>
</style:style>
おそらく、<style:paragraph-properties fo:break-before="page" />
の記述が、強制改ページを示しているのだろう。改ページは文書構造じゃなくてスタイルとして扱うようだ。HTMLで使うCSSの page-break-before
と同じだ。
自然改ページされている箇所には <text:soft-page-break />
というタグがあった。
<office:body>
<office:text text:use-soft-page-breaks="true">
<text:p><text:soft-page-break />テキストテキスト。</text:p>
</office:text>
</office:body>
<office:text>
タグに text:use-soft-page-breaks="true"
という属性が足されているのが気になる。これがついてないと <text:soft-page-break />
されないのかな?
そもそもこんなタグがあるくらいだから、もしかしたら明示してあげないと改ページされないのか・・・? と一瞬心配したが、削除してみてもちゃんと自動改ページされた。うーむ・・・。
とりあえずザックリと駆け足で覗いてみたが、もっといろいろいじくってみたら扱えそうな感じ。シェイプ系の図やグラフなんかを入れてみたりしたらどうなるかとか、試してみたい。あと、目次や参照系、ヘッダ/フッタ系も。
ちゃんと深く解析できたら、動的に生成する印刷目的文書形式として、なかなかいい選択肢になるんじゃないだろうか。という可能性は感じる。
また気が向いたら深堀りしてみます。
この調査で作ってみたファイル:
*.zip
にしてあるので、 *.odt
に変更して開いてください。公開日: 2009年11月11日(Wed)