データモデルにXBRLを用いたテンプレートエンジンの試作

データモデルにXBRLを用いたテンプレートエンジン(XBRL Template engine Prototype、略して「XTP」)を試作した。

テンプレートエンジンとは、『テンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、成果ドキュメントを出力するソフトウェアまたはソフトウェアコンポーネントである』(Wikipedia)。今回作成したXTPは、データモデルがXBRLインスタンスのテンプレートエンジンである。

想定する利用方法
TDnetで開示される決算短信サマリのXBRLから、ユーザがブラウザで見やすいHTML(日本語・英語)を作成する、といった利用方法が考えられる。(これをXTPの実装目標とした。)

開発ツール

処理概要
XTPプログラム(以下、XTP)は、A.テンプレート、B.XBRLインスタンス、C.マッピング情報を入力として、ドキュメントを生成する。

A.テンプレートは、動的に変更する部分は変数($foo$、$bar$のように、「$」で囲む)として記述したHTMLなどのテキストファイル。XTPでは、A.テンプレートの文法はStringTemplateのものをそのまま採用した。

テンプレートイメージ

B.XBRLインスタンスはデータ。

C.マッピング情報は、A.のテンプレート上の変数に、B.のインスタンスからどのような値をどのようなフォーマットで設定するかを定義する。
マッピング情報イメージ

XTPでは、マッピング情報の定義に基づいてXBRLインスタンスを解析して必要な値を抜出し、テンプレート上の変数に割り当てる。テンプレート上の変数をテンプレートに展開するレンダリング処理は、StringTemplateが行う。
マッピング情報の記載は、DSLドメイン固有言語:独自の簡易的な言語)を定義し、そのDSLのパーサ・ジェネレータとしてANTLRを用いた。DSLを独自に実装することで、機能拡張がしやすくなる。

出力イメージ

実装
※特に隠すつもりはないので、ソース見せてよ、という方はご連絡ください。

所感

  • XTPの実装は簡単だったが、短信サマリのテンプレートを作るのが予想以上に手間取った
  • HTMLへの変換だけなら十分実用的
  • ラベルリンクを解析して、ラベルを出力できるとよい(今後の課題)
  • タプルやディメンションに対応するとよいのでは(今後の課題)
  • ANTLRは難しいがおもしろい(DSLは癖になる)
  • StringTemplateが機能豊富すぎて、XTPの機能の少なさが情けなくなる

あまりお金にはつながらないかなぁと思うのですが、もし興味をもっていただいて、使わせてほしい、とか、一緒に研究しよう、とか思っていただける方がいたらうれしいです。