XBRLで記述された財務データを扱う言語処理系の提案 高尾 祐治†,松下 誠†,井上 克郎†,湯浦 克彦‡ †大阪大学 大学院情報科学研究科 ‡株式会社日立製作所 ビジネスソリューション事業部
発表の流れ 財務データとXBRL 問題点と研究の目的 XBRL文書の構成と,そのモデル プログラミング言語 サンプルプログラム まとめ
財務データ 財務データとは,企業が公表する資本や借金の額などの財務活動のデータ 財務データが記述された表は財務諸表と呼ばれる 貸借対照表 (資金の調達先,資金の使用先) 損益計算書 (売上高,経常利益,純利益) キャッシュフロー計算書 (資金の運用先) 紙ベースの財務諸表をインターネットを通じて流通,利用するため,統一されたフォーマットが必要となった
財務データ記述言語 XBRL 2000年7月,米国公認会計士協会を中心に,財務データを記述するためのXMLベースの言語XBRL(eXtensible Business Reporting Language)が策定された 普及するXBRL 東京証券取引所への財務データの登録が,XBRLに対応 上場企業のXBRL化した財務データをインターネットで提供 XBRL文書の変換,分析のニーズは高い XBRL文書に書かれた値を変更し,新しい文書を作成 大量のXBRL文書から値を読み出して指標を計算 タイトル
XBRLの問題点 既存のXML処理系を使ったXBRL文書操作は困難 複雑な財務データを表現するため,XBRLの仕様は複雑
研究の目的 XML技術の細部に精通していなくても,XBRL文書を簡単に操作することのできる,XBRL文書の操作環境の実現 大量の文書を扱うことのできる,簡単なプログラミング言語 8分25秒
発表の流れ 財務データとXBRL 問題点と研究の目的 XBRL文書の構成と,そのモデル プログラミング言語 サンプルプログラム まとめ
XBRL文書の構成 インスタンス文書 タクソノミ リンクベース 財務データを記述したXML文書 語彙を定義 要素間の関係を 定義 リンクベース インスタンス文書 財務データを記述したXML文書 タクソノミ インスタンス文書で使う語彙(要素名, 属性など)を定義したXML Schema リンクベース 要素間の関係や,各要素に対する追加情報を定義したXLink 定義リンク 財務諸表で現れる項目間の関係 (例,親子関係) 計算リンク 値の計算方法(重み付き加算式) プレゼンテーションリンク 項目の表示順 ラベルリンク 項目の表示名称 リファレンスリンク 項目の参考文献
項目要素を補足する,企業コード,単位を記述 インスタンス文書 インスタンス文書の構成 グループ要素 (ルートノード,必須) 項目要素(財務データ,必須) コンテキスト要素 (項目要素の補足情報,必須) タプル要素(任意) 脚注要素(任意) グループ要素 <group …> <sample:assets numericContext="c1">6000</sample:assets> <sample:currentAssets numericContext="c1">5000</sample:currentAssets> <sample:noncurrentAssets numericContext="c1">1000</sample:noncurrentAssets> 要素とその値が連続して並ぶ (入れ子構造にならない) コンテキスト属性で, コンテキスト要素を指定 <xbrli:numericContext id="c1" precision="18" cwa="true"> <xbrli:entity> <xbrli:identifier schema="www.nasdaq.com">SAMP</xbrli:identifier> <xbrli:segmant/> </xbrli:entity> <xbrli:unit> <xbrli:operator id="divide"> <xbrli:measure>ISO4217:EUR</xbrli:measure> <xbrli:measure>xbrli:shares</xbrli:measure> </xbrli:operator> </xbrli:unit> </xbrli:numericContext> 項目要素を補足する,企業コード,単位を記述 <xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4217="http://www.iso.org/4217" xmlns:sample="http://sample" xsi:schemaLocation="http://sample sample.xsd"> インスタンス文書全体に関わる記述 (タクソノミ,名前空間の指定) 項目要素 <assets …>100</assets> コンテキスト要素 <numericContext> … </numericContext> </group>
XBRL文書の特徴 財務諸表に現れる,項目とその内訳といった親子構造は,リンクベースで定義する 財務事実を表現する項目要素は,入れ子で記述しない データと構造を別々に記述することで,利用場面によって表示方法や,計算式を変えるといった,柔軟な表現が可能 逆に,XBRL文書の解析を難しくしている インスタンス文書を解析するために,タクソノミとリンクベースの解析もする必要がある
XBRL文書のモデル インスタンス文書に記述された項目要素への読み書きを簡単に行うためのモデル インスタンス文書に記された要素間の関係に注目 入れ子による親子関係 リンクベースで定義された項目要素の親子関係 項目要素がコンテキスト要素を参照する関係 この関係を元にXBRL文書を有向グラフで表す 頂点:要素 辺 :要素間の関係(親子) 頂点に,項目要素の値(財務データ)を付加する XBRL文書に記された要素間の関係に注目 関係を使うと,有向グラフを書ける
XBRL文書の例 配付資料のインスタンス文書の例を参照 リンクベースで次の関係(貸借対照表の関係)を定義 assets(資産の部)は currentAsset(流動資産)と, noncurrentAssets(固定資産)の親 liabilitiesAndStockholdersEquity(負債の部)は liabilities (負債)と stockholdersEquity(資本)の親
assets currentAssets group liabilities noncurrentAssets numericContext liabilitiesAnd StockholdersEquity liabilities stockholdersEquity group numericContext (子要素は省略) 入れ子構造による 親子関係 リンクベースによる id属性による 参照関係 まじめにやると,こうなる
インスタンス文書に記述された値の変更を実現可能 有向グラフを使った操作 頂点間の矢印(項目要素間の関係)を使って,操作対象の項目要素を見つける 頂点に付加された,項目要素の値を読み書きすることで,XBRL文書の操作を行う 有向グラフのモデルに対する操作で インスタンス文書に記述された値の変更を実現可能
項目要素以外の操作 有向グラフのモデルは,項目要素への読み書きを簡単に行うためのモデル 有向グラフのモデルでは表現できない構造もある インスタンス文書の詳細な操作を行う場合は,有向グラフでは不足 <P> text1 <IMG src="image.jpg"/> text2 </P> P IMG text1text2 Src=“image.jpg” DOMを利用することを考える
Document Object Model (DOM) DOM はXMLを木構造で表すモデル DOMツリーを使えば,どのような操作もできる しかし,DOMは 要素の値を木構造の頂点として表すので,操作が煩雑 コメントや,処理命令も扱う(XBRL操作では不要) DOMをそのまま提供すると,面倒な操作を強いられたり,XBRL操作には不要なものまで考えないといけない
DOMツリーを含んだモデル 有向グラフの頂点と,DOMツリーの要素ノードを結合させたモデルを,インスタンス文書のモデルとする 値:6000 <xbrli:group> <sample:assets numericContext="c1">6000</sample:assets> </xbrli:group> 値:6000 numericContext=“c1” ルート xbrli:group sample:assets 6000 numericContext=“c1” DOMのノード 有向グラフの頂点
発表の流れ 財務データとXBRL 問題点と研究の目的 XBRL文書の構成と,そのモデル プログラミング言語 サンプルプログラム まとめ
プログラミング言語 構文 XBRL文書処理機能 提供する関数 習得が容易 XBRL文書のモデルを言語機能に組み込む 入出力 XML汎用処理 提案するプログラミング言語は, 容易に習得できることを目指して設計した構文, XBRL文書のモデルを言語機能に組み込むことで実現するXBRL処理機能を持っています さらに,これらの処理機能を持つ関数を提供します.
構文 構造化プログラミング 宣言無しで使える変数 演算子,制御構造 関数の定義,呼び出し 利用者層,プログラムの規模を考慮すると妥当 加減乗除,文字列処理 if-then-else,for,while 関数の定義,呼び出し
XBRL文書の操作方法 有向グラフの頂点を構造体で表す 構造体には,要素の値,他の構造体へのリンクが含まれる 構造体のメンバを変更することで,値の操作,属性の変更を実現 提供する関数を使うことで,構造の操作を実現 XBRL文書操作を簡単に行うことができる
提供する関数 XML汎用 XBRL専用 XML操作 要素取得 入出力 リンクベースで定義された関係の参照 項目要素コンテキスト要素への参照 insertBefore, replaceNode, removeNode, … 要素取得 getElementByTagName, getElementById 入出力 open, save, saveAs XBRL専用 リンクベースで定義された関係の参照 xbrl_getParentNode, xbrl_getChildNodes 項目要素コンテキスト要素への参照 xbrl_getContext XBRL特有の計算 xbrl_calculateNode, xbrl_calculateAllNodes
発表の流れ 財務データとXBRL 問題点と研究の目的 XBRL文書の構成と,そのモデル プログラミング言語 サンプルプログラム まとめ
プログラムの例 貸借対照表に記述された「資産(assets)」の内訳に対して,計算処理を行う 内訳は,リンクベースで定義された親子関係 既存の処理系では,リンクベースを解析して親子関係にある要素を取得する必要がある 本言語では,関数を使って要素を取得できる
プログラムの例 // ファイルを開く rootnode = open("sample_xbrl.xml"); // 要素の取得 assets = getElementByTagName(rootnode, "sample:assets"); // 子要素の配列を取得 assets_child = xbrl_getChildNodes(assets[0]); // 子要素全てに対して,計算をする for (i=0; i<length(assets_child); i++) { assets_child[i].value *= rate; } // 同一ファイルに保存する save(rootnode);
まとめ 有向グラフを使ったXBRL文書のモデルを導入した モデル通してXBRL文書の操作をするためのプログラミング言語を提案した