株式銘柄紹介ブログ

主に日本の株式を紹介しています

EDINETのXBRLを分析する方法 その2

はじめに

ひきつづきEDINETのXBRLから財務諸表を読む方法について説明します。

前回の記事はこちらにあるので読んでないよっていう方はこちらを先に読んでください。

3.XBRLを解析する

3.要素の日本語名称を調べる

1.読み込む名称リンクベースファイルを特定する

前回までで有報の構造や構成要素の名前、それが何か(タイトル、数値、表の構成要素)までわかりました。ここでは各要素をなんという日本語で表示したらよいのかを調査します。具体的には「jppfs_cor_CashAndDeposits」は「現金及び現金同等物」だということを調査します。そのためには名称リンクベースファイルを読み込む必要があります。


有報が参照する名称リンクベースファイルの一覧は、ダウンロードしたXBRLのZIP中のスキーマファイルに記載されています。スキーマファイルは「jpcrp030000-asr-001_E00007-000_2022-03-31_01_2022-06-27.xsd」のようにファイル名がxsdで終わるものです。


スキーマファイルの先頭部分に参照リンクベース要素というやつが並んでおり、それをまず読み取ります。


以下はスキーマファイルのxmlファイルとしての構造です。簡略化して書いています。


<参照リンクベースファイル要素1>
<参照リンクベースファイル要素2>
・・・


<要素A 属性1の値、属性2の値、・・・・属性nの値>
<要素B 属性1の値、属性2の値、・・・・属性nの値>
<要素C 属性1の値、属性2の値、・・・・属性nの値>
(くりかえし続く)

 

参照リンクベース要素を読み取ると以下のようなリンクベースファイルの一覧を取得できます。ここでは名称リンクベースファイルのみを記載しています。名称リンクベースファイルはファイル名がlab.xlmで終わるファイルです。
 

 

どの名称リンクベースファイルを参照すればよいかは、要素名を見ればわかります。要素名中のスキーマファイルのディレクトリ名(正しい言い方ではないかも)から始まる名称リンクベースファイルを参照すればよいです。


例えば現金及び現金同等物の要素名は「http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2021-11-01/jppfs_cor_2021-11-01.xsd#jppfs_cor_CashAndDeposits」です。この場合は「http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2021-11-01/」から始まる名称リンクベースファイルを参照します。

2.名称リンクベースファイルを読み込む

以下は名称リンクベースファイルのxmlファイルとしての構造です。簡略化して書いています。


<要素名とキーワードを関連づけている要素>
<キーワードと名称要素1を関連づけている要素>
<キーワードと名称要素2を関連づけている要素>
<名称要素1(優先ラベルA)>名称A<名称要素1>
<名称要素2(優先ラベルB)>名称B<名称要素2>

(くりかえし続く)


上記の構造の名称リンクベースファイルに対して

  1. 要素名で検索し、名称リンクベースファイル内で用いられているキーワードを取得する
  2. キーワードから名称要素をたどり、優先ラベルごとの名称文字列を習得する

の処理を行い、要素ごとの名称文字列を取得します。


すると以下のようなデータを得ることが出来ます。


要素名1, 優先ラベルA, 名称文字列A
要素名1, 優先ラベルB, 名称文字列B
要素名1, 優先ラベルC, 名称文字列C
要素名2, 優先ラベルA, 名称文字列D
要素名2, 優先ラベルB, 名称文字列E
要素名2, 優先ラベルC, 名称文字列F
(くりかえし続く)


あとは、要素名からデータを検索することで日本語名称を取得することが出来ます。

4.有報の構造を再構築する

ここにきてややこしい話になりますが、実は表示リンクベースファイルに記載の構造だけでは有報の構造はわかりません。


というのも、EDINETに有報のXBRLを提出する場合、EDINET上のひな型を拡張して有報を作成することになっているからです。


以下は有報の再構成処理のイメージ図です。


EDINET上のひな型のイメージ
「目次要素A」
   「項目1」
    |「項目1-1」
   「項目2」
     「項目2ー1」


提出者の表示リンクベースファイルのイメージ
「目次要素A」
   「項目2(提出者独自項目)」
     「項目2ー1(提出者独自項目)」
     「項目2ー2(提出者独自項目)」
     「項目2ー3(提出者独自項目)」


再構成した有報のイメージ
「目次要素A」
   「項目1」
    |「項目1-1」
   「項目2(提出者独自項目)」
     「項目2ー1(提出者独自項目)」
     「項目2ー2(提出者独自項目)」
     「項目2ー3(提出者独自項目)」


この再構築処理は既に読み込んだ表示リンクベースファイルの目次要素ごとに行う必要があります。具体的には以下の処理を行います。

  1. 目次要素のひな型をEDINETのサーバから取得し、木構造を読み込む(ひな型は目次要素ごとに存在している)
  2. 既に読み込んだ表示リンクベースファイルの目次要素中の最上位要素すべてにたいして3~の処理を繰り返す
  3. 目次要素のひな型から同じ名前の要素を探す
  4. その要素の代わりに自身の要素を挿入する


上記の処理は取得したい目次要素、ここでは財務諸表に対してだけやればいいです。


わたしの理解不足でどのひな型を使うべきなのかは仕様書やガイドラインからでは判断できませんでした。なのでサーバ上のひな型の中を読んでみて標準的にみえるものを選んで使用しています。財務諸表に関係するひな型は「http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/年月日文字列/r/cai/」に存在しているようです。


ひな型については仕様書等をもっと読み込めばわかるのでしょうが、今の自分はこれで限界だったのでおざなりになっています。ちなみにタクソノミのガイドラインにそれらしき記載があるのですが、それではひな型を特定するに至りませんでした。


わたしが使っているひな型は以下の通りです。もし参考になれば。


わたしが使っているキャッシュフロー計算書のひな型は間接法によるものなので、直接法のキャッシュフロー計算書にたいして使うとエラーになるかもしれません。国際会計基準のひな型はこれとは別に存在しているようですが、わたしは国際会計基準の財務諸表までやれていないので、どれを使うべきかはわかりません。

5.要素の値を取得する

要素の値をxbrlファイルから取得します。xbrlファイルはダウンロードしたZIPファイルにあるファイル名が.xbrlで終わるファイルです。


以下はxbrlファイルのイメージです。かなり簡略化しています。


<要素A(コンテキスト1)>要素Aのコンテキスト1に対応する数値<要素A>
<要素A(コンテキスト2)>要素Aのコンテキスト2に対応する数値<要素A>
・・・
<要素B(コンテキスト1)>要素Bのコンテキスト1に対応する数値<要素B>
<要素B(コンテキスト2)>要素Bのコンテキスト2に対応する数値<要素B>
(くりかえし続く)

 
xbrlファイルには要素の値がコンテキスト毎に並んでいます。コンテキストとは大雑把に言うと「いつのデータか」を表す識別子です。例えば

  • コンテキスト「CurrentYearDuration」は今期中
  • コンテキスト「Prior1YearDuration」は1年前の決算期間中
  • コンテキスト「CurrentYearInstant」は今期末時点
  • コンテキスト「Prior1YearInstant」は1年前の決算期末時点

といった感じです。


xbrlファイルのイメージをもう少し簡易に書くと以下のようになります。


<要素A(今年)>今年の要素Aの数値<要素A>
<要素A(去年)>去年の要素Aの数値<要素A>
・・・
<要素B(今年)>今年の要素Bの数値<要素B>
<要素B(去年)>去年の要素Bの数値<要素B>
(くりかえし続く)
 

コンテキスト中のDurationは損益計算書など値が期間中のものであることを示しており、Instantは貸借対照表など値が特定の時点のものであることを示しています。各要素の値がDuration、InstantのどちらなのかはスキーマファイルのperiodType属性をみればわかります。


各種財務諸表の値を取得するためにどのコンテキストを使えばよいかについてですが、わたしは「CurrentYearDuration」「CurrentYearInstant」を決め打ちで使うことにしています(財務諸表についてはそれで問題なく値を取れた)。


したがって、要素のperiodType属性を見て、Durationなら「CurrentYearDuration」の値を、Instantなら「CurrentYearInstant」の値をxbrlファイルから取得すればよいです。


注意しなくてはならいのは要素の優先ラベルが「http://www.xbrl.org/2003/role/periodStartLabel」の場合は「Prior1YearInstant」の値を取得しなくてはなりません。キャッシュ・フロー計算書の「現金同等物の期首残高」がこれに該当します。



コンテキストの特定についてはもっとスマートな方法があるはずで、具体的には表示リンクベースファイルのメンバー要素からコンテキストを特定できそうなのですが、うまくいきませんでした。

6.XBRLを分析した結果を出力する

ここまでで

  • 各種財務諸表の構造および含まれる要素
  • 要素の用途、値、日本語名称

を全て取得できているので、あとはそれを自身が欲しい形式にまとめて出力すればよいです。


わたしは「親要素の日本語名称, 要素の日本語名称, 要素の値」という形式で、数値要素を全て出力しています。ここらへんは人によってほしい形式が異なると思うので自由にやったらよいと思います。


この形式で出力すると以下のページのような結果になります。

 

参考になるサイトの紹介

この記事はおおよその内容しか書いていないため、より詳しい情報を知りたい場合は以下のページが参考になります。


おわりに

EDINETから有報のデータを取得するためには「大体こんなことをすればよい」ということをざっくりと説明しました。有報のひな型や使うべきコンテキストの特定方法はかなりおざなりなので、後々やり方がわかった段階で加筆修正したいと思っています。

この記事が皆さんの参考になると嬉しいです。


今回はここまでです。