統合ソフトJustArks/CalcArkファイルの文書構造について

このページでは、Java表計算ソフト「CalcArk」ファイルの性質や構造を全体的なところから解説しています。
使用するすべての要素・属性の仕様一覧や、サンプルファイルも覗くことができます。

表計算データのXHTML表現
 

はじめに

今回は、前回のPrezArkファイルに引き続いて、CalcArkファイルの文書構造について紹介します。
CalcArkファイルが、表計算のデータをXHTML文書としてどのように表現しているのか、その全体像について説明していきます。

CalcArkファイルのボキャブラリ

【図1】XML複合文書としてのCalcArkファイル
image01.gif
【図1】XML複合文書としてのCalcArkファイル
まず最初は、CalcArkファイルがどのような性質を持っているのか、ボキャブラリという観点から見ていきましょう。

■XHTMLベースのXML複合文書
CalcArkファイルは、XHTMLをベースとした、XML複合文書として設計しています。
これはどういうことかというと、
表計算のデータを、基本的にはXHTMLのボキャブラリで表現します。
XHTMLでは表現出来ない部分を、CalcArkが独自に拡張したボキャブラリで補います。
ということを意味します。
また、他には以下のような特徴があります。
スタイルシートにはCSS2を採用し、レイアウトや書式系属性はCSS2のサブセットで表現しています。
書誌情報には、Dublin Coreのボキャブラリを利用しています。
グラフデータには、独自に定義した専用のタグセットを使用しています。
これらのCalcArkファイルの性質を図示したのが【図1】です。

■なぜXHTMLなのか
開発当初は、CalcArkファイルは独自のXML形式として新しく文書型を設計し、ある程度実装も進んでいました。
しかし、いくつかの理由から、完全に独自のXML形式をやめてXHTMLを採用する方針に転換しました。
最大の理由は、XHTMLにすると保存したファイルをそのままブラウザで確認できるというメリットがあるからです。
一方で、前提として、CalcArk自身で読み込んだときにデータを完全に復元出来なくてはなりません。
ファイルを再度読み込んでデータを完全に復元出来できる、保存したファイルをそのままブラウザで表示できるという2つの条件を両方満たすには、HTMLのボキャブラリを拡張できるXHTMLが最良の選択肢だったのです。
このあたりの経緯は、同時期に開発を進めていたPrezArkの場合と似ています。(前回の記事参照)

全体の構造

それでは、CalcArkファイルの具体的な内容について見ていきましょう。
リスト1は、簡単な罫線表とグラフを含むサンプルファイルのソース抜粋です。

リスト1 :サンプルファイル「sample.html」抜粋
1:<?xml version="1.0" encoding="Shift_JIS"?>
2:<html xmlns:pa="http://www.justsystem.co.jp/ark/xmlns/prezark/" pa:version="1.0"
3: xml:lang="ja-JP" lang="ja-JP"xmlns="http://www.w3.org/1999/xhtml">
4:<head>
5: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6: <link rel="schema.DC" href="http://dublincore.org/qdcmes/1.0/" />
7: <meta content="2001-09-17 14:28" name="DC.Date" />
8: <meta content="text/html" name="DC.Format" />
9: <meta content="PrezArk(Muffin/1.0)" name="generator" />
10: <meta content="^Cg" name="DC.Title" />
11: <meta content="isikawa" name="DC.Creator" />
13: <pa:permit>
14: <pa:item title=" " />
15: </pa:permit>
21:</head>
23:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 50px;top: 1px;">
24:<a name="pa:page1"></a>
25:<div>[previous] [<a href="#pa:page2">next</a>] [top]</div>
27:<div class="tmPage" pa:type="page" pa:layout="title" style="top: 30px;">
28: <div class="tmTitle" style="z-index: 0;" pa:type="area.title">
31: <div class="tmSubTitle" style="z-index: 1;" pa:type="area.subtitle">
34: <div class="note" pa:type="note">^Cgy[Wフノ[g</div>
36:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 50px;top: 650px;">
37:<a name="pa:page2"></a>
38:<div>[<a href="#pa:page1">previous</a>] [next] [<a href="#pa:page1">top</a>]</div>
40:<div class="smPage" pa:type="page" pa:layout="list" style="top: 680px;">
41: <div class="smTitle" style="z-index: 0;" pa:type="area.title">
44: <div class="smArea1A" style="z-index: 1;" pa:type="area.list">
50: <div class="note" pa:type="note">モ常淇y[Wフノ[g</div>
52:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 600px; top: 1330px;">

【図2】CalcArkファイルの構造
image02.gif
【図2】CalcArkファイルの構造
【図2】は、ファイルの内容を簡略化して、全体の構造をわかりやすく図示したものです。

CalcArkファイルは、次の3つの部分から構成されます。
XML宣言(リスト1:001行目)
文書ヘッダ(リスト1:003~017行目)
文書本体(リスト1:018~068行目)
1.XML宣言
XML宣言は、PrezArkファイル同様、文書の冒頭に必ず保存しています。

2.文書ヘッダ
文書ヘッダは、文書のタイトル・作成者などのメタ情報や、スタイルシートを格納します。この文書ヘッダの内容は、ブラウザでは表示されません。
3.文書本体
文書本体には文書の内容が含まれます。文書本体は大きく分けると2つの部分からなります。
1つは、XHTMLの要素で構成され、直接ブラウザで表示される部分。
(リスト1:019~062行目。【図2】では、文書本体の中にある上から3つの固まり)
これは、CalcArk上の可視データをブラウザ上でも同様に表示するためのデータです。主にセルデータをtable要素で、画像・グラフの枠をimg要素で表現しています。

もう1つは、CalcArkが独自に定義する要素群です。
(リスト1:063~067行目。【図2】では、文書本体の中にある一番下の固まり)
これは、XHTML要素では表現出来ない表計算のデータを格納する部分です。CalcArk自身が読込時に処理しますが、ブラウザでは表示対象外としています。

文書本体の内容

全体の構造がわかったところで、ここでは文書本体のもう少し具体的な内容に迫ります。
CalcArkファイルでは、シート上の可視データをどのようにXHTMLで表現しているのでしょうか。
答えは意外にシンプルです。
大ざっぱに言うと、テーブルとイメージのみです。セルデータをテーブル(table要素)で、枠(画像、グラフ)をイメージ(img要素)で表現しています。

■セルデータ
セルデータは、シート上のデータ入力範囲を1つのテーブルに見立てて、table要素を使って表現しています。
基本的にはシートに対し1つのテーブルを保存するのですが、場合によっては複数のテーブルに分割しています。
極端な例として、A1セル(シート左上)とIV65536セル(シート右下)にしかデータがない場合を考えてみましょう。
このシートのデータ入力範囲を1つのテーブルにすると、それはつまりシート全体を指すわけですから、65536行*256列のとてつもなく巨大なテーブルになってしまいます。
しかも、そのテーブルのほとんどのセルにはデータは入っていないわけです。
このような巨大な空白を含むテーブルを保存するのは非常に無駄が大きいため、CalcArkでは行単位の空白が一定以上連続して続く場合には、テーブルを分割して保存するようにしています。
この例だと、A1セルだけからなるテーブルと、IV65536セルだけからなるテーブルの2つに分割します。

では、テーブルの中身を見てみましょう。以下は、サンプルファイルのソースのテーブルの部分の抜粋です。

リスト2 :サンプルファイル「sample.html」テーブル部分の抜粋
1:<div class="table" ca:sht-idx="0">
2: <table class="sht0" ca:adr="$B$1" ca:sht-idx="0" style="width:76.21mm; height:67.75mm;">
4: <col span="3" style="width:17.5mm;" />
6: <td ca:adr="$B$1"><br /></td>
7: <td ca:adr="$C$1"><br /></td>
8: <td ca:adr="$D$1"><br /></td>
9: <td ca:adr="$E$1"><br /></td>
12: <td class="cel0 bdr0" ca:adr="$B$2" ca:tp="txt">名前</td>
13: <td class="cel0 bdr4" ca:adr="$C$2" ca:tp="txt">3月</td>
14: <td class="cel0 bdr8" ca:adr="$D$2" ca:tp="txt">4月</td>
15: <td class="cel0 bdr12" ca:adr="$E$2" ca:tp="txt">合計</td>
18: <td class="cel1 bdr1" ca:adr="$B$3" ca:tp="txt">CalcArk</td>
19: <td class="cel2 bdr5 right" ca:adr="$C$3" ca:tp="num" ca:v="23">23</td>
20: <td class="cel2 bdr9 right" ca:adr="$D$3" ca:tp="num" ca:v="98">98</td>
21: <td class="cel2 bdr13 right" ca:adr="$E$3" ca:fml="=SUM(C3:D3)" ca:tp="num" ca:v="121">121</td>
24: <td class="cel1 bdr2" ca:adr="$B$4" ca:tp="txt">PrezArk</td>
25: <td class="cel2 bdr6 right" ca:adr="$C$4" ca:tp="num" ca:v="34">34</td>
26: <td class="cel2 bdr10 right" ca:adr="$D$4" ca:tp="num" ca:v="55">55</td>
27: <td class="cel2 bdr14 right" ca:adr="$E$4" ca:fml="=SUM(C4:D4)" ca:tp="num" ca:v="89">89</td>
30: <td class="cel1 bdr3" ca:adr="$B$5" ca:tp="txt">一太郎Ark</td>
31: <td class="cel2 bdr7 right" ca:adr="$C$5" ca:tp="num" ca:v="12">12</td>
32: <td class="cel2 bdr11 right" ca:adr="$D$5" ca:tp="num" ca:v="33">33</td>
33: <td class="cel2 bdr15 right" ca:adr="$E$5" ca:fml="=SUM(C5:D5)" ca:tp="num" ca:v="45">45</td>
35: </table>

基本的には、table要素、col要素、tr要素、td要素といったHTMLでおなじみのテーブル要素群を利用していますが、セルを表すtd要素には、"ca:"で始まる様々な属性を付加しています。("ca:"はCalcArkが独自に定義する名前空間のプレフィックスです。)
その一例を紹介しましょう。

ca:adr属性
この属性は、シート上のセルのアドレスを指しています。例えばB2セルを指すtd要素には"$B$2"といった値が設定されています。
実はCalcArk自身は、この属性を利用していない(読込時には無視している)のですが、別のプログラムから特定のセルのデータを抽出したりするのに使えるため、データのあるセルにはすべて設定しています。

ca:tp属性
この属性は、セルデータの種類を表します。文字列セルの場合は"txt"、数値セルの場合は"num"といった値が設定されています。

ca:fml属性
この属性は数式を表します。セルに数式が設定されている場合(この例だと021行目、027行目、033行目)には必ず設定され、数式文字列を値に取っています。

このように、XHTMLのテーブルを独自の属性で拡張しながら、CalcArkのセルデータとして表現しています。

■枠(画像、グラフ)

リスト3 :サンプルファイル「sample.html」グラフ部分の抜粋

001: <div class="frame" ca:sht-idx="0" ca:tp="chart" ca:z-idx="0" style="left:78.19mm; top:5.64mm; width:80.0mm;height:60.0mm;">
002: <img alt="" height="213" src="sample.html.files/chart001.png" width="283" />
003: <div class="hidden">
004: <chart:chart height="211" ca:col-header="true" ca:rng="$B$2:$E$5" ca:row-header="true" ca:sht-idx="0"
005: xmlns:chart="http://www.justsystem.co.jp/ark/xmlns/chart/" orientation="vertical"
006: range-info="0,1,2:0,1,2" series-direction="column" version="1.0" width="283">
007: (省略)
008: </chart:chart>
009: </div>
010: </div>

CalcArkには、画像とグラフという2種類の枠がありますが、これらの枠データはイメージ(img要素)を使って表しています。
なお、グラフの場合には、イメージの他にグラフ専用のデータを保持しています。(リスト3の004~008行目)
グラフ専用データは、それだけで独立した要素群として、CalcArk独自データとは別の名前空間に定義しています。ここではその詳細についての説明は割愛します。

■ブラウザ専用データ
さて、この章の最初にシートの表現にはテーブルとイメージのみを使用していると言いましたが、実際にファイルをブラウザで表示してみると、先頭に各シートへのリンクがあったり、シート間に区切り線があったりします。
これらのデータは、ファイルをブラウザで表示した際に、シート間の区切りを明確にしたり、リンクで簡単にシート間を行き来したりするために補って保存している、ブラウザ専用のデータです。 ブラウザ専用なので、CalcArk自身はまったく必要としません。
また、ブラウザ専用データを保存するかどうかは保存時のオプションで切り替えることが出来ます。
[ファイル-名前を付けて保存]のダイアログで「ブラウザでの見栄え」という項目を「より正確」(初期値)にすると保存され、「標準」にすると保存されません。

■CalcArk独自データ
文書本体には、このほかにCalcArkが独自に定義する要素群を持っていますが、その部分の詳細な説明は割愛します。

最後に

CalcArkファイルの文書構造、いかがでしたか。今回は全体のおおまかな説明にとどめました。
CalcArkファイルについてもっと詳しく知りたいという方は、使用するすべての要素・属性の仕様一覧や、サンプルファイルを付録に用意しましたので、そちらをご覧ください。
また、CalcArkをはじめ、JustArksの各アプリケーションで作成したファイルの活用事例も紹介していく予定ですので、期待していてください。

付録

名称説明
サンプルファイル記事中で使用したサンプル。CalcArkファイルで使用するすべての要素を一通り含む。
CalcArkファイル サンプルソース上記サンプルファイルのソースと画面イメージ
CalcArkファイル 要素・属性一覧CalcArkファイルで使用するすべての要素・属性の仕様一覧

添付ファイル: fileimage01.gif 16件 [詳細] fileimage02.gif 12件 [詳細]

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-06-03 (金) 19:21:01 by pukiwiki 1.5.4