読者です 読者をやめる 読者になる 読者になる

XBRLの処理を始める前に復習

XBRL

"XBRL"は"eXtensible Business Reporting Language"の略である。XMLをベースとして財務情報の表現に特化して作られた言語で、財務情報の電子化におけるグローバルスタンダードとなっている。

XBRLを用いることで、企業の財務情報を機械的に(つまり自動で大量に)処理することができるようになるため、その利用可能性は大きく向上する。自分でXBRLの処理を行うために、まずはその基礎をおさらいしたい。

EDINET

そもそも有価証券報告書とは

金融商品取引法24条1項により内閣総理大臣へ提出が義務付けられている報告書のことである。事業年度ごとに、当該会社の商号、当該会社の属する企業集団及び当該会社の経理の状況その他事業の内容に関する重要な事項その他の公益又は投資者保護のため必要かつ適当なものとして内閣府令で定める事項を記載しなければならない。
「企業内容等の開示に関する内閣府令」に基づき、金融庁が公表している様式を使用し提出する。

有価証券報告書の開示義務

証券取引所に自社株式を公開している、いわゆる「上場企業」は、金融商品取引法25条により、有価証券報告書の開示(公衆の縦覧)が義務付けられている。

EDINET

金融商品取引法27条の30の3(電子開示手続の開示用電子情報処理組織の使用)に基づき、電子開示手続を行う者は、政令で定めるところにより、開示用電子情報処理組織を使用して行わなければならない。

この「開示用電子情報処理組織」がEDINETである。EDINETは2001年に稼働を開始し、2004年(平成16年)以降はEDINETを利用した開示書類の提出が義務化されている(大量保有報告書のように遅れて義務化されたものもある)。XBRLによる財務諸表提出が義務化されたのは2008年(平成20年)からで、2013年(平成25年)からは非財務情報も含め全ての開示書類をXBRLで提出するよう義務化された。

f:id:hqac:20151010210618p:plain

会社法との関係

全ての株式会社は、決算公告を行わなければならない(会社法440条)。しかし、有価証券報告書を提出している会社は公告を省略することができる(同条4項)。これは、有価証券報告書の内容が会社法上の決算報告書の内容を全てカバーしており、かつ財務局やEDINET、会社ウェブサイト等で閲覧できるため、会社法上の決算公告を行うことは実質的に意味が無いからである。

XBRLとは

Q1. XBRLとは何ですか?
A1. XBRLとは、財務情報を効率的に作成、流通及び利用できるよう、国際的に標準化されたコンピュータ言語です。XBRLでは財務報告の電子的ひな形である「タクソノミ」を基に、財務報告内容そのものを表す「インスタンス」を作成します。閲覧する方はXBRLデータを分析システム等に直接取り込むことが可能となり、事務負担の軽減やより高度な財務分析を行うことができます。

引用元: EDINET 「よくある質問」

XBRLXMLを拡張して作られた財務報告専用のマークアップ言語である。雛形となる「タクソノミ」と企業ごとのデータである「インスタンス」に分かれている。

まずはXMLの基本を抑えることにする。

XMLの基礎

XML文書は"要素(element)"と"属性(attribute)"で規定される"タグ"とその内容により構成される。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 都道府県マスタ[
<!ELEMENT 都道府県マスタ (都道府県)>
<!ELEMENT 都道府県 (県名, かな県名, 県庁所在地, かな県庁所在地)>
<!ELEMENT 県名 (#PCDATA)>
<!ELEMENT かな県名 (#PCDATA)>
<!ELEMENT 県庁所在地 (#PCDATA)>
<!ELEMENT かな県庁所在地 (#PCDATA)>
]>
<都道府県マスタ>
    <都道府県 番号="1" 地方="北海道地方">
        <県名>北海道</県名>
        <かな県名>ほっかいどう</かな県名>
        <県庁所在地>札幌</県庁所在地>
        <かな県庁所在地>さっぽろ</かな県庁所在地>
    </都道府県>
    <都道府県 番号="2" 地方="東北地方">
        <県名>青森県</県名>
        <かな県名>あおもりけん</かな県名>
        <県庁所在地>青森</県庁所在地>
        <かな県庁所在地>あおもり</かな県庁所在地>
    </都道府県>
<!-- ...(中略)... -->
    <都道府県 番号="47" 地方="沖縄地方">
        <県名>沖縄県</県名>
        <かな県名>おきなわけん</かな県名>
        <県庁所在地>那覇</県庁所在地>
        <かな県庁所在地>なは</かな県庁所在地>
    </都道府県>
</都道府県マスタ>

XMLの長所

  • テキスト形式なのでプラットフォームに依存しない
  • (HTMLと違い)タグを自由に定義できるので、データの意味を伝えやすい
  • データの階層構造を定義できるので、親子関係を記述しやすい
  • データ構造(スキーマ)とデータを分離できるので、アプリケーションで扱いやすい

XMLの短所

  • データ量が増えるため、処理に時間がかかる
  • (人間にとって)非常に読みづらい

XML文書の構造

XML宣言
<?xml version="1.0" encoding="UTF-8"?>

まず先頭に、XMLのバージョンや文字コードを記述する。スタンドアロン宣言(外部のスキーマ定義を参照するかどうか)もこちらのXML宣言に記載することができる。standalone="yes"とすると、外部のスキーマ定義を参照しない。記載しない場合は、standalone="no"とみなされる(外部のスキーマ定義を参照する)。

DTDXML Schema
<!DOCTYPE 都道府県マスタ[
<!ELEMENT 都道府県マスタ (都道府県)>
<!ELEMENT 都道府県 (県名, かな県名, 県庁所在地, かな県庁所在地)>
<!ELEMENT 県名 (#PCDATA)>
<!ELEMENT かな県名 (#PCDATA)>
<!ELEMENT 県庁所在地 (#PCDATA)>
<!ELEMENT かな県庁所在地 (#PCDATA)>
]>

XML文書内で、その構造や使われている要素を定義することができる。は要素「都道府県」が要素「県名」「かな県名」「県庁所在地」「かな県庁所在地」を持つことを定義している。また、は要素「県名」が文字列データであることを定義している。要素だけでなく、ATTLIST宣言を使うことで属性も定義することができる。
これはDTD - Document Type Definitionと呼ばれる。DTDは別のファイルで定義し、XML文書から参照することもできる。外部のファイルをDTDとして指定する場合は、DOCTYPE宣言に以下のように記述する。

<!DOCTYPE ルート要素名 PUBLIC "公開識別子" "外部DTDのファイル名">

例えば、XHTML 1.0の外部DTDを利用する場合は、PUBLICキーワードを使って以下のように指定する。

<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

DTDはデータの構造を定義することができるが、データ型の定義ができず、名前空間にも対応していないという欠点があった。それらの欠点を克服するため、データ構造の定義にはXML Schemaが使われるようになった。

XML SchemaXMLのデータ構造(スキーマ)を表現するためのXML文書である。
スキーマ宣言は次のように書く。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
....
</xsd:schema>

ここでは、xsdという接頭字をつけてXML Schemaを表す名前空間を定義している。
XML Schemaでは文字列(string)や真偽値(boolean)、10進数整数(integer)、日付・時間(dateTime)等、たくさんの組み込み型を使うことができる。例えば、データ型が文字列の要素「県名」を定義するためには、以下のとおり記述する。

<xsd:element name="県名" type="xsd:string" />

XML Schemaでは、組み込み型から派生して新たな型を作ることもできる。派生の方法には単純型(データ型に制約をつけて、データの範囲を制限する)と複数型(定義したデータ型に子要素や属性を追加する)の2種類がある。
例えば、「都道府県」要素の「地方」属性を列挙型で制限する型「region」を作る。基底型をstringとし、単純型で派生させる場合は、次のようになる。

<xsd:simpleType name="region">
    <xsd:restriction base:"xsd:string">
        <xsd:enumeration value="北海道地方">
        <xsd:enumeration value="東北地方">
        <xsd:enumeration value="関東地方">
        <xsd:enumeration value="中部地方">
        <xsd:enumeration value="近畿地方">
        <xsd:enumeration value="中国地方">
        <xsd:enumeration value="四国地方">
        <xsd:enumeration value="九州・沖縄地方">
    </xsd:restriction>
</xsd:simpleType>

Schema内での要素や属性の宣言は、次のように行う。

<xsd:element name="要素名" type="データ型名" />

<xsd:attribute name="属性名" type="データ型名" />

データ型の指定以外にも、デフォルト値や固定値の指定を行うことができる。

文書インスタンス
<都道府県マスタ>
    <都道府県 番号="1" 地方="北海道地方">
        <県名>北海道</県名>
        <かな県名>ほっかいどう</かな県名>
        <県庁所在地>札幌</県庁所在地>
        <かな県庁所在地>さっぽろ</かな県庁所在地>
    </都道府県>
<!-- ...(中略)... -->
</都道府県マスタ>

XML形式で書いた実際のデータをXMLインスタンスと呼ぶ。インスタンスはタグとその内容で構成されている。なお、今回の記事では読みやすくインデントしているが、インデントは必須ではない。
タグは"要素(element)"と"属性(attribute)"で構成されている。上記の例では「都道府県」や「県名」が要素で、「番号」や「地方」は都道府県要素の属性となる。

名前空間
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://hogehoge.co.jp"
            xmlns:hoge="http://hogehoge.co.jp">

名前空間は、スキーマがどのXML文書と対応しているかを区別するための情報で、定義したスキーマを識別するために使われる。これを定義することで、同じ要素・属性名を定義しても名前空間が違うため名前の衝突が起こらない。
targetNamespaceはこのSchemaの名前空間を表す。xmlns:hoge名前空間の接頭字で、この名前空間hogeという接頭字で利用できる。

XPath

XMLは親子関係を持つ(先の例でいえば、都道府県タグは県名タグの親)。この親子関係を利用して、必要とするデータを指定する式がXPathである。Pathの指定は絶対参照と相対参照がある。
絶対参照はルートノード(XML文書全体の親要素)を起点とし、目的の要素ノードまでに存在する全ての要素名を/で結んで記述する。
例: /都道府県/県名
相対参照は、カレントノードを起点とし、冒頭に/をつけずに記述する。このとき、OSのディレクトリ階層の表記で用いられるパス記法と似た形式で記述ができる(.はカレントノード、..は親ノード、//はカレントノードとその子孫ノード、等)。

XBRLデータの取得

実際に開示されているXBRLデータを取得する方法は2種類ある。

EDINETからブラウザ経由でダウンロードする

EDINETの「書類検索」から一括で検索対象のXBRLファイルをダウンロードできる。
ただし、一度にダウンロードできるのは100件までとなっている(検索結果の表示が1ページ100件のため)。

第三者の提供する外部API(非公式)を利用する

有報キャッチャー ウェブサービス AtomAPI
(有)プレシスが提供する「有報キャッチャー ウェブサービス AtomAPI」を利用することで、API経由でXBRLデータを取得できる。
当該APIにリクエストを送ると、クエリに対応するEDINET提出書類及び各書類へのURIを含むレスポンスが返される。

このAPIを利用したXBRL取得用のスクリプトについては、以前の記事で取り組んでみた。
http://hqac.hatenadiary.com/entry/2015/10/03/194923

XBRLの構成

ダウンロードしたXBRLデータには、.xbrl形式、.xsd形式、.xml、.html形式の4種類のファイルが含まれている。
xbrlは報告書のインスタンスxmlマニフェストファイル及び勘定科目ラベル等の定義ファイル、xsdはスキーマの定義ファイルで、htmlはインラインXBRLファイルである。
xbrl形式のファイルはインラインXBRLを付したhtmlファイルをEDINETにアップロードすると自動的に生成されるようだ(金融庁: 報告書インスタンス作成ガイドラインより)。

f:id:hqac:20151012012510p:plain