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