統合JavaソフトJustArks/CalcArkXMLデータの分析とグラフ化
の編集
http://www.kisnet.or.jp/~kanou/index.php?%E7%B5%B1%E5%90%88Java%E3%82%BD%E3%83%95%E3%83%88JustArks/CalcArkXML%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%88%86%E6%9E%90%E3%81%A8%E3%82%B0%E3%83%A9%E3%83%95%E5%8C%96
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
//このページでは、JustArkの様々な面に焦点を当てて、Ark開発スタッフ自らがメッセージを発信します。 &size(24){XMLデータの分析とグラフ化 ~CalcArkでXMLデータの分析に挑戦~}; ----- ・はじめに ・XML関数プラグインの概要とインストール ・集計、グラフ化 ・外部参照 ・テンプレート ・おわりに ***はじめに [#vdb67640] //みなさんこんにちは。CalcArk ワークシート関数担当のHです。 さて、皆さんは XML のデータを集計したりグラフ化したりする場合、どうしていますか? XSLT、そして SVG が勧告になった現在、XSLT ファイルを用意して、データを集計したり SVG で出力したりしている 方も多いのではないでしょうか。 しかしながら、XSLT や SVG の仕様は必ずしも容易に理解できるものではないため、理解している方でも XSLT ファイルを 作成するのを面倒に思ったことはあるはずです。 そして、もっと手軽に、目で確認しながら、集計したりグラフ化したりしたいなぁと思ったことが・・・ CalcArk と XML関数プラグインがそれを解決してくれます。 XSLT ファイルは要りません。 SVG の仕様を知らなくても、グラフが作成できます。 CalcArk には、XSLT を遙かに上回る数の関数が用意されています。関数は、必要になればプラグインで追加できます。 表形式なので、XML をデータベース的に扱うのに適しています。 勿論、ソートもできます。 そして何よりも、目で確認しながら結果を得ることができます。 ***XML関数プラグインの概要とインストール [#mb2dd707] 今回は、「XML のデータを取得する」という課題に、「ワークシート関数」でアプローチしてみました。 何故、ワークシート関数なのか、については後述します。 現在の XML 関数プラグインは大きく2つの機能を提供しています。 1つは、XPath による XML データの取得で、もう1つは、CalcArkXHTML 内のセルデータ取得(一般に言うところの「外部参照」)です。 どのような関数があるかについては、[ツール-プラグイン-設定]のUIで「プロパティ」ボタンを押下すれば、関数の一覧が表示されます。 また、Javadoc形式のドキュメントも用意していますので、参考にしてください。 何はともあれ、まずは動かしてみましょう。 以下の手順に従って、インストール、動作確認を行ってください。 XML関数プラグインを、プラグインダウンロードページからダウンロードして、plugins ディレクトリにコピーする。 JAXP1.1 に対応した XML パーサーと、Xalan2 をクラスパスの通った場所にコピーする。 Xalan2 が必要なのは、XML関数プラグインが XPath の機能を利用しているからです。 Xalan2 はApache XML Projectからダウンロードできます。 因みに、筆者は XML パーサーに Xerces1 を使いました。 参考までに、動作確認したモジュールのバージョンは Xerces1.4.4 と Xalan2.3.1 です。 JAVA_HOME/jre/lib/ext に xalan.jar(886KB), xerces.jar(1770KB), xml-apis.jar(106KB) をコピーしました。 CalcArk を起動する。 [ツール-プラグイン-設定] のUIで、「プラグイン」のところに「XMLワークシート関数」があることを確認します。 これで、インストールは完了です。 ***集計、グラフ化 [#g74c06d1] ある機関から、各都道府県の面積と人口のデータが XML で提供されているとします。 (この類のデータは、近い将来、自治体等からXMLで提供されるようになるかもしれませんね。) この XML データから、CalcArk で日本の総人口を求めて(集計)、また上位の5県をグラフ化(分析)してみましょう。 この集計結果をファイルにしたものが http://www.justsystem.co.jp/ark/genba/files09/samples/population.html にありますので、CalcArk で読み込んでみてください。 CalcArk を起動して、[ファイル-URLを開く]UIの URL 欄に、上記 URL をコピーし、ファイル形式を XHTML1.0 にしてOKボタンを押下します。 (※プロキシの設定が必要な場合は、それも忘れずに) シート「一覧」の A 列には各都道府県の名前が入力されており、その名前を元に B~D 列の数式が先ほどの XML データを取得しています。 例えば、C5 セルには、以下の数式が入力されています。 =VALUE(SelectSingleNodeValue($F$2,G5,TRUE)) (XML関数プラグインが提供している)SelectSingleNodeValue 関数は、第1引数に「XMLファイルのURI」を、第2引数に 「XPath式」をとり、XPath式で指定されたノードの値を返します。 第3引数は、パースしたXML(DOM)をキャッシュしておくかどうかのフラグです。 参照先の F2 セルや G5 セルを再表示すると、F2 セルには、先ほどの XML ファイルの URL が入力されていて、 G5 セルは //prefecture[@name='北海道']/population/man/text() という XPath 式であることが分かります。これは「name 属性が北海道である prefecture 要素の、子要素 population の さらに子要素 man のテキストノード」を取得しなさい、という式です。 先ほどの XML で確認すると、2726996 となっています。 SelectSingleNodeValue 関数は、データを文字列で返しますので、VALUE 関数を使って数値に変換しています。 他の B5:D51 範囲内のセルも同様です。 そして、最終的に 52 行目で SUM 関数を使って集計しています。 また、その結果を元にして、シート「ランク」で上位5県をグラフ化しています。 |&ref(./screen1.gif,25%);|&ref(./screen2.gif,25%);| 画面イメージ 画面イメージ ***外部参照 [#f8f8381d] CalcArk を使えば、申請書や見積書等の帳票は簡単に作成でき、しかも、そのまま Web に公開することができます。 今、社内の各部署から、毎日のように様々な購入申請が作成され、それが一カ所に集められていっているとしましょう。 経理であるあなたは四半期分の経費を計算しなければいけません。 CalcArkで作成された購入申請書は、 決まったフォーマットで作成されているため、 この場合、セル C13 の値(予定合計金額欄)の合計を計算すればいいことになります。 さて、どうするか。 XSLT ファイルを用意するのは面倒です。CalcArk を使いましょう。 CalcArk の標準の機能では、他ブック(外部ファイル)への参照式を入力することはできないため、 =[foo.html]Sheet1!A1 のようにして、foo.html の Sheet1 のセル A1 の値を参照することはできませんが、今回、XML関数プラグインが提供する XCell 関数を使えば、それが可能になります。この例であれば =XCell("foo.html","Sheet1",1,1) となります。第1引数に「CalcArkXHTMLファイルのURI」、第2引数に「シート名文字列」、第3引数と第4引数にそれぞれ 「行番号」「列番号」を指定すると、目的のセルデータの値を返します。 今までと同様に、 http://www.justsystem.co.jp/ark/genba/files09/samples/shinseisho_total.html を CalcArk で読み込んでみてください。 それぞれのデータを取得するのに XCell 関数を利用し、セル F8 で合計を計算しています。 画面イメージ |&ref(./screen3.gif,25%);|&ref(./screen4.gif,25%);| 画面イメージ ***テンプレート [#z47f72ce] ここまで見てきて、何か気がつかれたことはありませんか? population.xml のデータを集計、グラフ化する population.html、shinseisho1/2/3.html を 集計する shinseisho_total.html。 これらは全て、あるデータを集計、分析、グラフ化する「テンプレート」になっています。 そして、これが XML のデータ抽出を、関数プラグインとして提供した理由の1つでもあるのです。 抽出方法を数式としてファイルに埋め込めるので、テンプレート化できる。 抽出結果がセルなので、カスタマイズ(テンプレート化)し易い。 ファイルを読み込むだけで、分析(グラフ化)が可能。つまりは、一連のUIの操作が不要。 データの形式を問わない。今回は XML でしたが、データの形式が何であれ、それに特化したプラグインを作成すればいい。 元データが変更されても、dynamic に追従できる。 例えば population.xml のデータの一部が変更されても、population.html を読み込めば、最新の情報が得られます。 おわりに ***ちょっとまとめると [#h7fbc648] クライアントには CalcArk だけがあれば十分です。勿論、OS の種類は問いません。 サーバーに、元データと集計ファイル(テンプレートファイル)を置きましょう。 元データが変わっても、自動的に集計結果、グラフも変わります。 URL から読み込んで、必要になれば、IDisk Tool for Java で(WebDAVサーバーに)更新しましょう。 一太郎Ark や PrezArk の文書も、勿論 XML(XHTML) なので、集計・グラフ化したいデータがあれば、CalcArk に任せましょう。 XML関数プラグインはソースも公開していますので、参考にしてください。 //プラグインに関して、不具合・要望などありましたら、Ark Developers メーリングリストまでお寄せください。
タイムスタンプを変更しない
//このページでは、JustArkの様々な面に焦点を当てて、Ark開発スタッフ自らがメッセージを発信します。 &size(24){XMLデータの分析とグラフ化 ~CalcArkでXMLデータの分析に挑戦~}; ----- ・はじめに ・XML関数プラグインの概要とインストール ・集計、グラフ化 ・外部参照 ・テンプレート ・おわりに ***はじめに [#vdb67640] //みなさんこんにちは。CalcArk ワークシート関数担当のHです。 さて、皆さんは XML のデータを集計したりグラフ化したりする場合、どうしていますか? XSLT、そして SVG が勧告になった現在、XSLT ファイルを用意して、データを集計したり SVG で出力したりしている 方も多いのではないでしょうか。 しかしながら、XSLT や SVG の仕様は必ずしも容易に理解できるものではないため、理解している方でも XSLT ファイルを 作成するのを面倒に思ったことはあるはずです。 そして、もっと手軽に、目で確認しながら、集計したりグラフ化したりしたいなぁと思ったことが・・・ CalcArk と XML関数プラグインがそれを解決してくれます。 XSLT ファイルは要りません。 SVG の仕様を知らなくても、グラフが作成できます。 CalcArk には、XSLT を遙かに上回る数の関数が用意されています。関数は、必要になればプラグインで追加できます。 表形式なので、XML をデータベース的に扱うのに適しています。 勿論、ソートもできます。 そして何よりも、目で確認しながら結果を得ることができます。 ***XML関数プラグインの概要とインストール [#mb2dd707] 今回は、「XML のデータを取得する」という課題に、「ワークシート関数」でアプローチしてみました。 何故、ワークシート関数なのか、については後述します。 現在の XML 関数プラグインは大きく2つの機能を提供しています。 1つは、XPath による XML データの取得で、もう1つは、CalcArkXHTML 内のセルデータ取得(一般に言うところの「外部参照」)です。 どのような関数があるかについては、[ツール-プラグイン-設定]のUIで「プロパティ」ボタンを押下すれば、関数の一覧が表示されます。 また、Javadoc形式のドキュメントも用意していますので、参考にしてください。 何はともあれ、まずは動かしてみましょう。 以下の手順に従って、インストール、動作確認を行ってください。 XML関数プラグインを、プラグインダウンロードページからダウンロードして、plugins ディレクトリにコピーする。 JAXP1.1 に対応した XML パーサーと、Xalan2 をクラスパスの通った場所にコピーする。 Xalan2 が必要なのは、XML関数プラグインが XPath の機能を利用しているからです。 Xalan2 はApache XML Projectからダウンロードできます。 因みに、筆者は XML パーサーに Xerces1 を使いました。 参考までに、動作確認したモジュールのバージョンは Xerces1.4.4 と Xalan2.3.1 です。 JAVA_HOME/jre/lib/ext に xalan.jar(886KB), xerces.jar(1770KB), xml-apis.jar(106KB) をコピーしました。 CalcArk を起動する。 [ツール-プラグイン-設定] のUIで、「プラグイン」のところに「XMLワークシート関数」があることを確認します。 これで、インストールは完了です。 ***集計、グラフ化 [#g74c06d1] ある機関から、各都道府県の面積と人口のデータが XML で提供されているとします。 (この類のデータは、近い将来、自治体等からXMLで提供されるようになるかもしれませんね。) この XML データから、CalcArk で日本の総人口を求めて(集計)、また上位の5県をグラフ化(分析)してみましょう。 この集計結果をファイルにしたものが http://www.justsystem.co.jp/ark/genba/files09/samples/population.html にありますので、CalcArk で読み込んでみてください。 CalcArk を起動して、[ファイル-URLを開く]UIの URL 欄に、上記 URL をコピーし、ファイル形式を XHTML1.0 にしてOKボタンを押下します。 (※プロキシの設定が必要な場合は、それも忘れずに) シート「一覧」の A 列には各都道府県の名前が入力されており、その名前を元に B~D 列の数式が先ほどの XML データを取得しています。 例えば、C5 セルには、以下の数式が入力されています。 =VALUE(SelectSingleNodeValue($F$2,G5,TRUE)) (XML関数プラグインが提供している)SelectSingleNodeValue 関数は、第1引数に「XMLファイルのURI」を、第2引数に 「XPath式」をとり、XPath式で指定されたノードの値を返します。 第3引数は、パースしたXML(DOM)をキャッシュしておくかどうかのフラグです。 参照先の F2 セルや G5 セルを再表示すると、F2 セルには、先ほどの XML ファイルの URL が入力されていて、 G5 セルは //prefecture[@name='北海道']/population/man/text() という XPath 式であることが分かります。これは「name 属性が北海道である prefecture 要素の、子要素 population の さらに子要素 man のテキストノード」を取得しなさい、という式です。 先ほどの XML で確認すると、2726996 となっています。 SelectSingleNodeValue 関数は、データを文字列で返しますので、VALUE 関数を使って数値に変換しています。 他の B5:D51 範囲内のセルも同様です。 そして、最終的に 52 行目で SUM 関数を使って集計しています。 また、その結果を元にして、シート「ランク」で上位5県をグラフ化しています。 |&ref(./screen1.gif,25%);|&ref(./screen2.gif,25%);| 画面イメージ 画面イメージ ***外部参照 [#f8f8381d] CalcArk を使えば、申請書や見積書等の帳票は簡単に作成でき、しかも、そのまま Web に公開することができます。 今、社内の各部署から、毎日のように様々な購入申請が作成され、それが一カ所に集められていっているとしましょう。 経理であるあなたは四半期分の経費を計算しなければいけません。 CalcArkで作成された購入申請書は、 決まったフォーマットで作成されているため、 この場合、セル C13 の値(予定合計金額欄)の合計を計算すればいいことになります。 さて、どうするか。 XSLT ファイルを用意するのは面倒です。CalcArk を使いましょう。 CalcArk の標準の機能では、他ブック(外部ファイル)への参照式を入力することはできないため、 =[foo.html]Sheet1!A1 のようにして、foo.html の Sheet1 のセル A1 の値を参照することはできませんが、今回、XML関数プラグインが提供する XCell 関数を使えば、それが可能になります。この例であれば =XCell("foo.html","Sheet1",1,1) となります。第1引数に「CalcArkXHTMLファイルのURI」、第2引数に「シート名文字列」、第3引数と第4引数にそれぞれ 「行番号」「列番号」を指定すると、目的のセルデータの値を返します。 今までと同様に、 http://www.justsystem.co.jp/ark/genba/files09/samples/shinseisho_total.html を CalcArk で読み込んでみてください。 それぞれのデータを取得するのに XCell 関数を利用し、セル F8 で合計を計算しています。 画面イメージ |&ref(./screen3.gif,25%);|&ref(./screen4.gif,25%);| 画面イメージ ***テンプレート [#z47f72ce] ここまで見てきて、何か気がつかれたことはありませんか? population.xml のデータを集計、グラフ化する population.html、shinseisho1/2/3.html を 集計する shinseisho_total.html。 これらは全て、あるデータを集計、分析、グラフ化する「テンプレート」になっています。 そして、これが XML のデータ抽出を、関数プラグインとして提供した理由の1つでもあるのです。 抽出方法を数式としてファイルに埋め込めるので、テンプレート化できる。 抽出結果がセルなので、カスタマイズ(テンプレート化)し易い。 ファイルを読み込むだけで、分析(グラフ化)が可能。つまりは、一連のUIの操作が不要。 データの形式を問わない。今回は XML でしたが、データの形式が何であれ、それに特化したプラグインを作成すればいい。 元データが変更されても、dynamic に追従できる。 例えば population.xml のデータの一部が変更されても、population.html を読み込めば、最新の情報が得られます。 おわりに ***ちょっとまとめると [#h7fbc648] クライアントには CalcArk だけがあれば十分です。勿論、OS の種類は問いません。 サーバーに、元データと集計ファイル(テンプレートファイル)を置きましょう。 元データが変わっても、自動的に集計結果、グラフも変わります。 URL から読み込んで、必要になれば、IDisk Tool for Java で(WebDAVサーバーに)更新しましょう。 一太郎Ark や PrezArk の文書も、勿論 XML(XHTML) なので、集計・グラフ化したいデータがあれば、CalcArk に任せましょう。 XML関数プラグインはソースも公開していますので、参考にしてください。 //プラグインに関して、不具合・要望などありましたら、Ark Developers メーリングリストまでお寄せください。
テキスト整形のルールを表示する
添付ファイル:
screen4.gif
154件
[
詳細
]
screen3.gif
159件
[
詳細
]
screen1.gif
156件
[
詳細
]
screen2.gif
155件
[
詳細
]