まえがき

この文書は,XBRL Internationalが2011年12月21日に公開した”XBRL Formula Overview 1.0 Public Working Draft 21 December 2011”をXBRL Japanが翻訳したものです。

この文書の利用の際には,以下に規定されたXBRL Internationalの知的財産の方針およびXBRL Japanの一般的免責事項にご同意ください。

この翻訳はXBRL Japan開発委員会監修の元,以下のメンバーによって作成されました。

翻訳者:
大谷奈々恵  IT翻訳者

貢献者(50音順):
内田  勝  富士通株式会社
大山承剛  富士通株式会社
奥村  仁  富士通株式会社
小泉  誠  株式会社Mercury And Earth
塩崎  直  宝印刷株式会社
自見宗幸  富士通株式会社
多川雄一  株式会社日立ソリューションズ
藤田亮介  株式会社インターネットディスクロージャー
村松  翔  株式会社日立ソリューションズ
森貞裕文  株式会社プロネクサス


XBRL Formula概観1.0

公開ワーキングドラフト 2011年12月21日

Copyright ©2011 XBRL International Inc., All Rights Reserved.

このバージョン:
<http://www.xbrl.org/WGN/XBRL-formula-overview/PWD-2011-12-21/XBRL-formula-overview-WGN-PWD-2011-12-21.html>
編者:
Herm Fischer,Mark V Systems <fischer@markv.com>
寄稿者:
Victor Morilla,Banco de España <vmorilla@bde.es>
Bartosz Ochocki,BRAG <bartosz.ochocki@br-ag.eu>
Geoff Shuetrim,Galexy Pty. <geoff@galexy.com>
後藤 正智,富士通株式会社<mg@jp.fujitsu.com>
Roland Hommes,RHOCON <roland@rhocon.nl>
Hugh Wallis,Standard Dimensions <hugh@standarddimensions.com>

この文書の状況

この公開ワーキングドラフトは自由に配布できる。この文書よりも他の文書が優先される場合がある。読者には,この文書に関する意見や,特許権に関して気づいたことがあれば補足文書とともに,formula-feedback@xbrl.orgまでご連絡いただきたい。

要約

XBRL formulaでは,XBRLインスタンス文書のファクトを基にした妥当性検証,及び出力XBRLインスタンス文書のファクトとして抽出されるデータの生成について規定する。

この概観では,XBRL formulaの構文やセマンティクスを理解するための導入として,XBRL formulaの例を挙げて説明する。付随する規格にて,XBRL formulaの各種機能における,実装及びその妥当性についての厳密な説明をする。説明で取り上げる例はオープンソース及びコミュニティ版のツールを使用している。

注釈

1 :次の項目も取扱われるべきである。

  1. - 各アサーションはtest属性を持ち,一部のフィルタや汎用変数はselect属性を持つ。XPathステートメントが記載される場合,実際には何がメモリに読み込まれるのか。例:select count(// xbrli:periodStart)又はgeneralFilter上のselect @decimalsなど。
  2. - test属性のxpathはselect属性の結果においてどのように評価されるのか。メモリに存在するものはどのようなものでも一種のインスタンスとして動作するのか。
  3. - locationFilterのlocation属性の構文は何か。
  4. - parentFilterにxbrli:xbrlを指定すると,ルートの子と(ルートの子である)タプルの中で入れ子になっているファクトのすべてを返すが,ancestorFilterを同じインスタンス文書に適用する場合は,タプルの子とともにタプル自身も返すのはなぜか。
  5. - どのようにxfi:duplicate-tupleを適用するか。引数が2つあるが,この関数をすべての存在するタプルに繰り返し適用し,かつ,両引数で同じタプルの比較を行っていないことをどのように確認するか?
  6. - xfi:duplicate-itemについても同様。
  7. - @select contentの複数の結果を順次処理し,出力結果を1つの結果として扱うのに適切な方法は?
  8. - @bindAsSequenceにtrue又はfalseが設定された場合に,メモリマップはどのようになるか。どちらの設定で何度評価を行ってもメモリマップ上では何の影響も無いようである。
  9. - variable:functionはアサーション/フォーミュラのtest属性内でのみ参照されるというのは正しいか。その関数は,アサーション/フォーミュラへアークで関連付けされていないというのは正しいか。

目次

1 序文
2 目的
3 関連技術
4 XBRL formula処理の概観
5 Formulaリンクベースの構成
6 クラス図
7 値アサーション
7.1 総収入に対して純利益を検証する例
7.2 残高の変動を検証する例
7.3 ディメンションの処理例
7.3.1 ディメンション毎に”資産=負債及び純資産”であることを検証する
7.3.2 代替値を使用して”資産=流動資産+固定資産”であることを検証する
7.3.3 特定のディメンションメンバのたな卸資産を検証する(変数フィルタに1つのディメンションメンバ)
7.3.4 特定のディメンションメンバのたな卸資産を検証する(変数フィルタに2つのディメンションメンバ)
7.3.5 特定のディメンションメンバのたな卸資産を検証する(グループフィルタに2つのディメンションメンバ)
8 アスペクトモデル
8.1 カスタムのアスペクト照合テスト
9 明示的フィルタ
9.1 グループフィルタ(変数集合に対するフィルタ)
9.2 変数フィルタ(レンダリングにも使用)
9.2.1 アスペクト保護
10 暗黙的フィルタ処理
11 ファクト変数の代替値
12 存在アサーション
12.1 純利益のファクトの存在を検証する例
13 出力XBRLインスタンス文書のファクトの項目を生成するフォーミュラ
13.1 値ルール
13.1.1 精度ルール
13.2 アスペクトルール
13.2.1 ソース
13.2.2 組み合わせ不可能なルール
13.2.3 組み合わせ可能なルール
14 一貫性アサーション
15 検証メッセージ
16 関数レジストリ概観
17 カスタム関数
17.1 リンクベース内に実装されたカスタム関数
17.2 外部プログラムのカスタム関数
18 複数インスタンス処理の概観
18.1 インスタンスの関係によるチェイニング
19 タプル出力の生成概観
19.1 変数スコープの関係によるチェイニング

付録

A (参考)原文書の知的財産の状態
B (参考)謝辞
C (参考)文書履歴
D 改訂履歴

1 アスペクトモデル
2 フィルタ
3 アスペクトルール
4 関数レジストリの登録関数

1 XBRL formula処理の俯瞰図
2 4つの処理モデルの作用
3 処理モデルの例
4 XBRL formula処理で使用されるリンクベースの内容物
5 変数集合,アサーション,フォーミュラ,変数のクラス図
6 フォーミュラにおけるルールのクラス図
7 フィルタのクラス図(1/2)
8 フィルタのクラス図(2/2)
9 値アサーションの処理モデル
10 純利益及び総収入のファクトの例
11 純利益が総収入以下であることを検証するアサーション
12 値アサーションの概念図(変数及びフィルタがある場合)
13 残高及び期中変動額における変動のファクトの例
14 期首残高,期中変動額,期末残高を検証するアサーション
15 値アサーションの概念図(ファクト変数に依存関係が存在する場合)
16 ディメンション毎のディメンション対応型ファクト表の例
17 contextRef毎のディメンション対応型ファクト一覧の例
18 値アサーションの概念図(ディメンション毎に検証する場合)
19 値アサーションの概念図(代替値を用いて,ディメンション毎に検証する場合)
20 値アサーションの概念図(変数フィルタを用いて,特定のディメンションメンバ1つについて検証する場合)
21 値アサーションの概念図(変数フィルタを用いて,特定のディメンションメンバ2つについて検証する場合)
22 値アサーションの概念図(グループフィルタを用いて,特定のディメンションメンバ2つについて検証する場合)
23 暗黙的フィルタ処理(ファクト変数$changes)
24 暗黙的フィルタ処理(ファクト変数$beginningBalance)
25 暗黙的フィルタ処理(ファクト変数$endingBalance)
26 存在アサーションの処理モデル
27 純利益のファクトの存在を検証するアサーション
28 存在アサーションの概念図
29 ファクト生成の処理モデル
30 一貫性アサーションの処理モデル
31 インスタンス統合の処理モデル
32 複数インスタンスの個別処理モデル
33 複数インスタンス処理におけるリンクベース内容物
34 複数インスタンス処理の概念図(複数インスタンスをまたいでアスペクトが一致するファクトの総計値を求める場合)
35 インスタンスの関係によるチェイニングの概念図
36 タプルを出力するチェイニングされたフォーミュラの概念図(タプルに複数のファクトの項目を含む場合)
37 タプルを出力するチェイニングされたフォーミュラの概念図(入れ子になった各タプルに,それぞれ1つのファクトの項目を含む場合)
38 変数スコープの関係によるチェイニングの概念図

1 値アサーション実行のトレースログ詳細(変数及びフィルタがある場合)
2 値アサーションのリンクベース構文(変数及びフィルタがある場合)
3 値アサーション実行のトレースログ詳細(ファクト変数に依存関係がある場合)
4 値アサーションのリンクベース構文(ファクト変数に依存関係がある場合)
5 値アサーション実行のトレースログ抜粋(ディメンション毎に検証する場合)
6 代替値を設定したファクト変数のリンクベース構文
7 値アサーション実行のトレースログ抜粋(代替値を使用した場合)
8 ディメンションフィルタのリンクベース構文(1つのディメンションメンバ)
9 ディメンションフィルタのリンクベース構文(2つのディメンションメンバ)
10 フォーミュラにおける値ルールのリンクベース構文
11 直近ソースの算出
12 コンセプトルールのリンクベース構文
13 検証メッセージのリンクベース構文
14 カスタム関数の実装(CFI)
15 複数インスタンスをまたいでアスペクトが一致するファクトの総計値を求めるリンクベース構文
16 インスタンスの関係によるC = D + EからA = B + Cへのチェイニングのリンクベース構文
17 それぞれに1つのファクトの項目を含む入れ子になったタプルを生成するリンクベース構文
18 変数スコープの関係によるC = D + EからA = B + Cへのチェイニングのリンクベース構文


1 序文

XBRL formulaでは,XBRLインスタンス文書のファクトを基にした妥当性検証,及び出力XBRLインスタンス文書のファクトとして抽出されるデータの生成について規定する。

この概観では,XBRL formulaの構文やセマンティクスを理解するための導入として,XBRL formulaの例を挙げて説明する。付随する規格にて,XBRL formulaの各種機能における,実装及びその妥当性についての厳密な説明をする。説明で取り上げる例はオープンソース及びコミュニティ版のツールを使用している。

2 目的

XBRL formulaの目的は,XBRL 2.1の基本仕様書における妥当性検証や,ディメンションを考慮した妥当性検証では利用できない検証機能を,XBRLの持つセマンティクスに厳密に従いつつ,XBRL表現に直感的で,ビジネス用途に適し,拡張可能で,管理が容易な形で提供することである。XBRL formulaは,提出者や,年次で監督機関からリリースされるインスタンス文書及び文書提出規則によって異なる,多岐に渡る文書に対応するように設計される。最終的には,XBRL formulaはそれ自身の保守管理や監査機能をサポートする,公式の文書処理となるように設計されている。

XBRL formulaの目的の1つは,変換や比率の測定,データマイニングなどによって抽出される様々な種類のデータを,出力されるインスタンス文書において表現することである。

変換には,ある特定のタクソノミから他の種類のタクソノミへの変換(例えばGlobal LedgerからFinancial Reportingタクソノミへ),同じタクソノミのあるバージョンから他のバージョンへの変換(名前空間が変更され,一部のコンセプトがマッピングされたものなど),そして同じタクソノミの異なる会計明細間における関連付け(キャッシュフローを貸借対照表や取引へ関連付けるなど)が含まれる。

比率の測定とデータマイニングでは,公比のような計算式によって導き出される財務データを確認できる。米国SECやIFRSへXBRL文書を提出する場合,個々の提出者の財務報告書では,それぞれ異なるコンセプトや会計ルールを使用していることがある。この場合のXBRL formulaの目的は,代わりに使用できるコンセプトの名前や各コンセプトの関係を認識することによって,それらのコンセプトの識別に役立つ宣言的仕様を提供できることである。

[: 次の項目も取扱われるべき。

  1. - 各アサーションはtest属性を持ち,一部のフィルタや汎用変数はselect属性を持つ。XPathステートメントが記載される場合,実際には何がメモリに読み込まれるのか。例:select count(// xbrli:periodStart)又はgeneralFilter上のselect @decimalsなど。
  2. - test属性のxpathはselect属性の結果においてどのように評価されるのか。メモリに存在するものはどのようなものでも一種のインスタンス文書として動作するのか。
  3. - locationFilterのlocation属性の構文は何か。
  4. - parentFilterにxbrli:xbrlを指定すると,ルートの子と(ルートの子である)タプルの中で入れ子になっているファクトのすべてを返すが,ancestorFilterを同じインスタンス文書に適用する場合は,タプルの子とともにタプル自身も返すのはなぜか。
  5. - どのようにxfi:duplicate-tupleを適用するか。引数が2つあるが,この関数をすべての存在するタプルに繰り返し適用し,かつ,両引数で同じタプルの比較を行っていないことをどのように確認するか?
  6. - xfi:duplicate-itemについても同様。
  7. - @select contentの複数の結果を順次処理し,出力結果を1つの結果として扱うのに適切な方法は?
  8. - @bindAsSequenceにtrue又はfalseが設定された場合に,メモリマップはどのようになるか。どちらの設定で何度評価を行ってもメモリマップ上では何の影響も無いようである。
  9. - variable:functionはアサーション/フォーミュラのtest属性内でのみ参照されるというのは正しいか。その関数は,アサーション/フォーミュラへアークで関連付けされていないというのは正しいか。
]

3 関連技術

XBRL formulaと目的を一部同じくする,代替技術がいくつかある。これらは手続き型プログラミング,宣言型プログラミング,そしてデータウェアハウス/ビジネスインテリジェンスの3つの領域に分けられる。

手続き型プログラミングには,今日のXBRLプロセッサでよく使用されている言語が含まれ,特にJavaや.net言語(C#やVisual Basicファミリー)などがある。これらは強固なXML機能を持ち,多くの場合はXBRLプロセッサと共に使用される。XBRLプロセッサは,妥当性検証されたデータを必要とする,又はXBRLのディメンションやセマンティクスを扱うアプリケーションに大抵の場合は必要である。XBRLプロセッサは多くの場合Javaで実装されているが,C#で実装されている場合もある。今日利用されているXBRL商用システムの構築にこれらのXBRLプロセッサは利用され,大きな成果をあげてきた。しかし,XBRL formulaの目的をこの方法で達成するには,かなり大きな技術チームが必要であり,大抵の場合は大規模なアプリケーションが作成されることになる。これは,プロジェクトが膨大化し,人員配属が難しくなり管理が長期化することを意味する。人の入れ替わりが激しい環境(政府契約など)では,管理にはリスクが伴い,多くは失敗に終わってしまう。

XMLに特化した宣言型プログラミング言語の1つとしては,XSLT(及びSchematronと呼ばれるルールベースのXSLT生成プログラム)がある。XSLT(又はカスタマイズおよび改修されたSchematronの実装)をXBRL2.0で使用するにはXBRLの関数レジストリ機能を利用できる必要がある。とはいえ,より以前には,Java実装のXBRLプロセッサと接続し,XBRL1.0を使用して成功した初期の商用システムはある。XSLTはパターンやテンプレートに基づく,完全に宣言型の言語であり,さらにはXBRLのニーズによく合う式や手続き型機能を備えている。しかし,関数レジストリ機能が利用できない場合,関数レジストリを利用せずに構文レベルでXBRL処理を構築するのは恐ろしく困難な開発タスクである(XBRLの初期にはいくつかそのようなプロジェクトが成功したことがあったが,すでに管理不能になっている)。XSLTは習得するのが非常に難しく,(従来のXMLデータの報告文書を単に形式を整えるためだけにXSLTを使用するのは比較的容易であることと対照的に)XSLTが生来もつ表現力を駆使してXSLT内でXBRL処理を記述できるのは,ひとにぎりの人間である。SchematronはXSLTよりもさらにもう1段階抽象的で,XBRL formulaにより近い存在であるため,Schematronの著者はSchematronのルール仕様をほぼ自動でXBRL formulaの値アサーションに移行してディメンションを考慮した処理を適用できるようにした。

XBRLに特化した宣言型プログラミング言語としては,CoreFiling社による民間から提供されるものとしてSphinxがあり,XBRLファクト及びファクト間の制約を表現するための言語とされている。Sphinxは単一の入力インスタンス文書に対する処理や,値アサーション及び存在アサーションというXBRL formulaの目的のためには使用できるが,XBRL Formulaのformulatupleのように出力インスタンス文書や変換インスタンス文書を生成するのには使用できない。Sphinxはコードが主体の言語でXPathの要素述語(主軸と呼ぶ)のようなファクトへアクセスする構成体と,XBRL formulaではアスペクトと呼ばれるものに基づいて(フィルタを)指定する角括弧の述語からなる構文を持つ。アスペクトとは,例えば,エンティティ,報告期間,単位,明示的ディメンション及び型付ディメンションなどを指し,その構文は実際には独自のものなのだが,(著者にとっては)XPathとPythonとの考え方の中間にある。主軸と述語のようなフィルタ式によって,リレーショナル関数及び集合関数を実行可能なアスペクトを考慮したファクトの集合が抽出される。それらは,Pythonのようなジェネレータの構成体を連想させる入れ子が可能なイテレータである。仮に,その抽出されたファクトの集合に対する操作(おそらく,その操作は現在のXPath2.0を補完する演算子で,XPath2.0の一般的なコンパレータとは異なる新しい演算子,つまり,いずれかのファクト”any”に対する操作ではなく,すべてのファクト”all”に対する操作をする演算子や,単位を統合する集合演算子のようなもの)がSphinxに追加された場合,SphinxのコードはXBRL Formulaのいくつかの部分に位置づけることができるだろう。

XBRL formula処理の目的は,単一の入力XBRLインスタンス文書(又はFormulaリンクベースを処理する単一プロセスに関連付けられた入力インスタンス文書の集合)に対して,妥当性検証,関連付け,又はデータの抽出などの特定の操作を実行することである。同時に分析する入力インスタンス文書の数が多い(もしくは膨大かもしれない)場合,ビジネスウェアハウスやビジネスインテリジェンス(BW/BI)は適切な技術であると言えるだろう。これらは通常,SQLデータベースに基づく技術であり,それらの技術自体にはプログラミングの宣言的な形式が使用されている。XBRL formulaはXBRLの完全なセマンティクスと共にネイティブXBRLインスタンス文書を直接操作するのに対して,BI/BWの根幹を成すSQLタイプのデータベースは,XBRLインスタンス文書のデータがデータベースのスキーマ構造に準拠するようにデータを抽出,変換,そして読み込む(Extraction,Transformation,Loading:ETL)プロセスを必要とする。膨大な数のインスタンス文書がそれぞれ全く異なるスキーマとセマンティクスの構造を持っている場合(SECファイリングなど),XBRLインスタンス文書のETLは複雑になる可能性がある。ETL後のBWのXBRLインスタンス文書では,元の形式においてそのDTSが持つ独自のセマンティクスは正規化されることで無くなってしまう。XBRL formulaの目的は元の形式を保持することであり,削減されたETL後の情報の集合全体に対して操作を実行する目的はBIに委ねる。

4 XBRL Formula処理の概観

XBRL formula処理モデルを簡略化する場合,入力XBRLインスタンス文書がFormulaプロセッサに渡される。インスタンス文書にはDTSを発見するための指定がされており,またインスタンス文書の中にはコンテキスト,単位,及びファクトが含まれている。Formulaプロセッサは,そのDTS内の全てのFormulaリンクベースのコンポーネントを識別できる。あるいは,外部から特定のFormulaリンクベースが与えられてもよい。Formulaリンクベースには,アサーションとフォーミュラ,そしてそれらが動作するのに必要な機能(変数やフィルタ,メッセージなど)が含まれる。図1に示すとおり,プロセッサは一部又はすべてのアサーション及びフォーミュラ処理を評価し,アサーションの結果(アサーションが成功したかどうかのメッセージ)とフォーミュラの結果(複数のファクトを含む出力XBRLインスタンス文書)を生成する。商用のアプリケーションでは,検証対象や処理中の入力インスタンス文書へ適用するアサーション及びフォーミュラ,そしてフォーミュラ処理結果の処置方法を制御するためにFormulaプロセッサと連動する,多くのインタフェースが用意される場合がある。

図1:XBRL formula処理の俯瞰図

XBRL formulaには図2に示すとおり4つの処理モデルがある。左の列は値アサーションと存在アサーションであり,これらは入力XBRLインスタンス文書のデータに対して動作し,評価結果(原因の詳細メッセージと補足データなどを伴う,ブール型による成功又は失敗の結果)を返す。右の列は,上がフォーミュラ,下が一貫性アサーションである。フォーミュラは処理結果がファクトの出力となる。一貫性アサーションは,フォーミュラによって出力されるファクトと,それと一致する入力XBRLインスタンス文書にあると想定されるファクトとを比較したい場合に使用する。

図2:4つの処理モデルの作用

それでは,図3でこれら4つの処理モデルの簡単な例をそれぞれ紹介する。

図3:処理モデルの例

値アサーションは,比率や演算アルゴリズム,文字列やテキストのチェック,日付チェックなどを含む式を検証する。式はXPath2.0でコーディングされ,宣言されたフィルタを通してインスタンス文書のデータを参照する。値アサーションは検証する式を表現しており,式に対して配管や配線のような各データ要素を関連付ける作業は必要ない。式とデータ要素の関連付けは宣言されたフィルタによって行われる。これについては,また後で説明する。

存在アサーションは,宣言されたフィルタ式によって入力XBRLインスタンス文書の中で発見できた(又は見つからなかった)データの存在数を計数する。存在アサーションは,存在しなければならないデータをより簡単に表現できるように作成されたものだが,他のデータの存在に依存する場合は必須データの指定が複雑になってしまうので,他の存在するデータが原因で見つからないという理由を詳述するメッセージが必要になることもある。そのような場合,求めたデータの数を計数するだけの存在アサーションよりも,フィルタによって求めたデータに基づく式を持つことができる値アサーションのほうが適切なことがある。

フォーミュラは,Formulaリンクベースの中で最も洗練された機能である(フォーミュラという名前から気づくかもしれないが,フォーミュラはアサーションが出現する前は,Formulaリンクベースの起源となる最初の機能であった)。フォーミュラは式を持つという点で値アサーションと少し似ているが,値アサーションの式はブール型(成功又は失敗)であるのに対し,フォーミュラの式は出力XBRLインスタンス文書のファクトを生成する。出力されるファクトは,出力インスタンス文書におけるXML構文を生成するのに必要なコンセプトや値(ファクトの式による値),数値であれば精度,コンテキスト/単位を含むすべてのアスペクトを持つ。コンテキストと単位のアスペクトは,フィルタ処理で選択したデータからコピーするか,又はルールによって構成できる。一般的な例として次の2つの場合がある。

  1. 出力ファクトが入力ファクトと合致する,又は非常に近い場合。例として”資産 = 負債+純資産(assets = liabilities + equity)”というような場合が挙げられる。フォーミュラでは,適切なデータを求めるフィルタとともに値の式としてliabilities + equityを指定し,項のうちの1つ(例えば,liabilities)からコンテキストや単位の情報をコピーさせるだけでよい。出力ファクトのコンセプト名assetsは,ルールとして指定される。ルールを指定しない場合は,liabilitiesからコンセプト名がコピーされるが,ルールが指定されるためコンセプト名は上書きされる。そのようにして,ほとんどプログラミングに骨を折ることなく,出力ファクトには,入力ファクトの項の日付,単位,ディメンション,そして新たなコンセプト名が設定される。
  2. 出力ファクトが入力ファクトとは全く異なる場合,おそらくは比率が抽出されるような場合である。その場合,出力ファクトのデータは抽出元のデータと,異なる単位(一株あたりの金額,時間あたりの何か),異なる報告期間(期間である期中変動額から導出された,期末残高時点),又は異なるディメンションを持つ可能性がある。この場合は,手続き型のコードのプログラミングではなく,宣言的にコーディングされたフォーミュラのルールによって対応する。

4つ目の処理モデルは一貫性アサーションである。一貫性アサーションは,フォーミュラによって抽出された出力ファクトについて,それに(許容差内で)十分近く一致する入力ファクトが存在するという見込みのもとで比較を行う。一貫性アサーションでは,フォーミュラ(例:上の図表における資産のファクトを生成するフォーミュラ)及び照合対象の入力ファクトとの値の近さに関する指定(パーセント又は絶対値)が必要である。

5 Formulaリンクベースの構成

XBRL formula処理を遂行するために必要なFormulaリンクベースは,図4の拡大図で示されるコンポーネントの集合である。はじめに重要な機能について確認した上で,その後,例を使用してそれらの機能についての説明をする。

図4:XBRL formula処理で使用されるリンクベースの内容物

各アサーションは,結果が成功又は失敗のいずれかとなるブール式であり,アサーション処理の対象は値(合致又はフィルタされた一連の入力ファクトデータに対するブール式の評価),存在(フィルタ式に準じた特定入力データの存在),一貫性(生成する出力ファクトが許容差内で入力ファクトと合致すること)がある。フォーミュラとは,出力ファクトとそのアスペクトを指定するための値とルールである。

アークは,Formulaリンクベースのコンポーネントを関連付ける関係を形成する。これらの関係は,拡張性やモジュール性の中核を成すものである。共有可能なリンクベースのコンポーネントは,共有する機能(異なるアサーションやフォーミュラ間で共有される変数やフィルタなど)に関係づけられる。これらの関係は,禁止関係の条件を用いて拡張することができる。アークによって,コンポーネント同士をメンテナンスやソースコード管理などの目的に応じたファイルにグループ化することができるため,モジュール性も向上する。

変数は,入力データ(通常,ファクトの項目)を結びつける方法を宣言し,アサーション及びフォーミュラの式において変数名として参照される名前を割り当てられる。入力ファクトに結びつけられる変数をファクト変数と言い,どの入力ファクトが結びつけ可能であるかについてフィルタを使って宣言する。汎用変数は中間結果の保持や,又は関数レジストリの利用,参照用テーブルの利用,又はさらに複雑なタイプのDTSリンクベースツリーのトラバーサルなどの,その他の処理に使用される。

変数集合は,関連する変数を備える,値アサーション,存在アサーション,又はフォーミュラである。変数集合は評価可能な処理宣言であり,フィルタによって入力XBRLインスタンス文書のファクトの集合に変数集合が適用されると,アサーションが試行され,またフォーミュラの値とルールの処理が行われて出力ファクトが生成される。

フィルタは,変数に結びつけることが可能なファクトを限定するアスペクト(例えば名前,ディメンション又は報告期間など)を指定する。

メッセージは,アサーションやフォーミュラの結果をレポーティングシステムやロギングシステムに橋渡しするためのテキストと体系化されたパラメータを提供する。パラメータには評価対象の変数に結びつけられたものが含まれる。

前提条件は,値が結びつけられた一組の変数群に対して,フォーミュラの値やファクトの出力,又はアサーションにおける値の検証,又は存在数の計数,の実施を決定する方法を提供する。

パラメータは,XBRL formulaが動作する環境の外部と連携できるため左の線上に示される。パラメータには,内部で評価される式が含まれる場合があり,その式ではアサーション,フォーミュラ及びメッセージの実行に使われるグローバル定数が生成される。また,パラメータに外部から値を設定する場合もある。外部から設定する値の例として,米国SECファイリングのケースでは,期待される入力の型,企業識別子,企業名などが挙げられるだろう。これらは,入力XBRLインスタンス文書におけるファクトの内容やコンテキスト情報に対する検証に使われる。

カスタム関数は,外部の環境と連携するプログラミング言語によって実装できるので左の線上に示される。例としては,SQLデータベースやBI/BWシステムと連携するカスタム関数が挙げられるだろう。カスタム関数はリンクベース内でも実装可能である(そういうわけで,図中,リンクベース内にカスタム関数の図形が繰り返し含まれる)。リンクベース内のカスタム関数は,関数の引数,XBRL formulaのパラメータ,そして関数レジストリ機能などを利用しつつ,XPath2.0でコード化されることで可搬性があるので,このカスタム関数を使うことでFormulaリンクベースをさらに構造化し,よく使用される式を体系化することができる。

6 クラス図

下図はXBRL formulaのクラス図である。図5は,変数集合,各アサーション,出力ファクトを生成するフォーミュラ,そしてフィルタに該当するクラス,図6はフォーミュラにおけるルールのクラス,そして図7及び図8はフィルタのクラスを示す。

図5:変数集合,アサーション,フォーミュラ,変数のクラス図

図6:フォーミュラにおけるルールのクラス図

図7:フィルタのクラス図(1/2)

図8:フィルタのクラス図(2/2)

7 値アサーション

値アサーションは,多くの場合Formulaリンクベースで最もよく使う機能であり,入力XBRLインスタンス文書のファクトを式によって検証する方法を提供する。図9は値アサーションの処理モデルである。まず,Formulaプロセッサはすべてのパラメータの値を取得する(通常,処理中はパラメータの値は固定であるため,何か他の処理が行われる前にパラメータの値を取得する)。そして,処理するアサーションの選択を外部アプリケーションで制御しない場合,FormulaプロセッサはDTSから参照可能なすべての値アサーションを実行する。それぞれの値アサーションでは,項を表す評価対象の変数にはフィルタ処理結果に従って入力XBRLインスタンス文書のファクトが結びつけられ,適用可能な変数の集合のそれぞれに対して評価される。この処理モデルでは,最適化ができる場合も多い。例えば,共通で,静的で,繰り返し使われるフィルタ式で,繰り返して実行しなくても済むものを識別したり,入れ子の繰り返し処理となり,前のサイクルでの処理と重複することになる変数とファクトの結びつけ処理を識別したりする場合などがある。下の図と実行内容のトレース(デバックなどに必要)は,連続した一連の実行処理を簡略化したものである。

図9:値アサーションの処理モデル

7.1 総収入に対して純利益を検証する例

最初の例では,純利益(NetIncomes)が総収入(GrossIncomes)以下であることを検証する。純利益と総収入,どちらも2年分の報告がされている場合のファクトを図10に示す。2007年の場合,総収入は500ドルであり純利益は200ドルなので,”純利益 ≤ 総収入=200ドル ≤ 500ドル”となるので真となりアサーションは成功する。2006年の場合は,純利益の1,400ドルは総収入の900ドルより大きいためアサーションは失敗する。

図10:純利益及び総収入のファクトの例


対応するアサーションのツール上の表示を図11に示す。1番上の行が値アサーションである。純利益に対する項を持ち,この項には入力XBRLインスタンス文書からのファクトが1つ格納され,XPath2.0の式に従って前にドル記号($)が付いた変数名$netIncomesで表わされる。2番目の項は,総収入に対するファクトの項目に対応し,変数名$grossIncomesで表される。XPath2.0の“値比較”演算子”≤”は,文字では”le”と表記する。XBRL formulaでは,これらの各項はファクト変数である。これらの2つのファクト変数はそれぞれ,変数に結びつけたいコンセプトをコンセプト名フィルタによって宣言し,そのコンセプトはconcept:NetIncomesのようにQNameで定義される。この宣言を行うアサーションを表現する概念図を図12に示す。

図11:純利益が総収入以下であることを検証するアサーション

図12は,値アサーション式とそのファクト変数及びそれらのフィルタによって,アサーションがどのように表現されるかを示す概念図である。

図12:値アサーションの概念図(変数及びフィルタがある場合)

値アサーションのテスト式は,$netIncomes le $grossIncomesである。$netIncomesと$grossIncomesは,それぞれファクト変数によって指定される。ファクト変数は,結びつけるファクトをコンセプト名フィルタによってフィルタ(限定)する。各コンセプト名フィルタには,それに対応するファクトの要素名と合致しなければならないQNameを指定する。

図9の処理モデルでは,Formulaプロセッサは最初に処理対象のアサーション(ここでは,純利益が総収入以下であることを検証するアサーション)を特定している。次に,順番にファクト変数に入力XBRLインスタンス文書のファクトを結びつける。アークによる関係によってアサーションに必要なファクト変数が特定される。当該の各関係では,変数に結びつけたファクトに関連付ける変数名も指定する。この例では$netIncomesを最初に示しているが,2つの変数の間には依存関係が無いためどのような順序であってもよく,更に言えばそれぞれ分割して2つの異なるCPUコアで並行処理してもよい。

$netIncomesが単体のファクト変数のみで,フィルタが接続されなければ,入力ファクトすべてに対して1つずつ結びつけられる。しかし,$netIncomesにはconcept:NetIncomesである2つのファクトが結びつけられて初めて意味を持つ。これは,そのファクト変数にvariable-filter関係を持つコンセプト名フィルタによって指定される。アサーションをファクト変数やフィルタに接続する関係を利用すると,異なるアサーション間で同じ定義の変数(及びフィルタ)を柔軟に共有できるようになる(その関係によって名前が指定されるため,複数の関係から利用される変数は,それぞれの関係で指定される名前を持つことができる)。

はじめに$netIncomesがファクトに結びつけられると,次のファクト変数も同じようにファクトに結びつけられるが,暗黙的フィルタ処理によって純利益の各ファクトに符合する総収入のファクトの範囲が絞り込まれる。暗黙的フィルタ処理の結果,2007年のファクトに対しては評価(各変数への値の割り当てと値アサーションの式の試行)が1回行われ,2006年のファクトに対してはまた別の評価が1回行われる。

$netIncomesと$grossIncomesの両方にファクトが結びつけられると,そのアサーションを評価できるようになる。評価の後,図9の処理モデルによって,まずは評価できる総収入のファクトがそれ以上無いことを確かめる。総収入のファクトはあと1つあるが,(暗黙的フィルタ処理によって)それが報告期間アスペクトにおいて純利益のファクトに合致しないため,評価はスキップされる。

暗黙的フィルタ処理の報告期間が合致しないため評価はされないが,別の総収入のファクトを考慮すると,純利益のファクト変数は次の値を想定し,総収入のファクト変数を再試行する。

例1は上記のインスタンス文書及びアサーションをFormulaプロセッサで実行した場合の詳細なトレースログである(オープンソースのプロセッサ,Arelleを使用)。

例1:値アサーション実行のトレースログ詳細(変数及びフィルタがある場合)

トレースログ 意味
Fact Variable netIncomes filtering: start with 4 facts アサーション処理では,まず$netIncomesに結びつくファクトを見つける。はじめは,インスタンス文書内にある4つのファクトはすべて$netIncomesに(1つずつ)結びつけられる候補である。
Fact Variable netIncomes conceptName filter NetIncomesFilter passes 2 facts このファクト変数に関連付けられているコンセプト名フィルタは,concept:NetIncomesに合致するQNameを持つ2つのファクトのみを通過させる。
Fact Variable netIncomes: filters result [fact(concept:NetIncomes, period-2007, unit, '200'), fact(concept:NetIncomes, period-2006, unit, '1,400')] 次にフィルタ処理の結果である2つのファクトは1つずつ$netIncomesに結びつけられる。
Fact Variable netIncomes: bound value fact(concept:NetIncomes, period-2007, unit, '200') 2つのうち1番目の純利益のファクトの項目が$netIncomesに結びつけられる。
Fact Variable grossIncomes filtering: start with 4 facts $grossIncomesも,インスタンス文書内の4つのファクトすべてを候補として開始する。
Fact Variable grossIncomes conceptName filter GrossIncomesFilter passes 2 facts このファクト変数に関連付けられているコンセプト名フィルタは,concept:GrossIncomesに合致するQNameを持つ2つのファクトのみを通過させる。
Fact Variable netIncomes implicit filter period passes 1 facts 暗黙的フィルタ処理では,総収入のファクトにおける保護されていないすべてのアスペクトをフィルタの検索対象として,純利益のファクトとの照合を行う。この例では,報告期間アスペクトに注目した例を取り上げる(この例に重要でないアスペクトについてのトレースは省略する)。
Fact Variable grossIncomes: filters result [fact(concept:GrossIncomes, period-2007, unit, '500')] 総収入のファクトうち,純利益のファクトの報告期間に合致するのは1つだけであり,これだけがフィルタの結果として残る。
Fact Variable grossIncomes: bound value fact(concept:GrossIncomes, period-2007, unit, '500')  
Value Assertion assertion この段階で,$grossIncomes及び$netIncomesともに,値が結びつけられているので,アサーション式が評価できるようになる。
Result: True  
  上記アサーションの評価が実行された後,仮に2つ以上のファクトが$grossIncomesに割り当て可能であった場合には,他の値についても割り当てられて評価されることになるが,フィルタを通過し,(報告期間において)純利益のファクトに暗黙的に合致する総収入のファクトは1つしかないため,次の処理では(はじめの)ファクト変数$netIncomesに別の値を入れて試行される。
Fact Variable netIncomes: bound value fact(concept:NetIncomes, period-2006, unit, '1,400') コンセプト名フィルタを通過した2つのファクトのうち,2番目の純利益のファクトの項目が$netIncomesに結びつけられる。
Fact Variable grossIncomes filtering: start with 4 facts  
Fact Variable grossIncomes conceptName filter GrossIncomesFilter passes 2 facts  
Fact Variable netIncomes implicit filter period passes 1 facts 2番目の純利益のファクトに対して2番目の総収入のファクトの報告期間が合致する。
Fact Variable grossIncomes: filters result [fact(concept:GrossIncomes, period-2006, unit, '900')]  
Fact Variable grossIncomes: bound value fact(concept:GrossIncomes, period-2006, unit, '900')  
Value Assertion assertion  
Result: False 2番目のアサーション結果は,データから予測されるように,失敗となる。
Value Assertion assertion evaluations : 1 satisfied, 1 not satisfied  

例2はリンクベースの構文を示している。

例2:値アサーションのリンクベース構文(変数及びフィルタがある場合)

リンクベース構文 意味
<generic:link xlink:type="extended" xlink:role="http://www.xbrl.org/2003/role/link"> 拡張リンクは,Formulaリンクベースのリソースとアークのためのコンテナである。xlink:roleはFormulaリンクベースにとって意味はなく,アサーション実行の分割や制御には使用されない(アサーションを管理集合に分割するアサーション集合を参照)。
<va:valueAssertion xlink:type="resource" xlink:label="assertion" id="assertion" aspectModel="dimensional" implicitFiltering="true" test="$netIncomes le $grossIncomes"/>
これは値アサーションを表す箇所である。xlink:labelは値アサーションからファクト変数へのアークの関係の起点を表すのに使われる。アスペクトモデルのdimensionalでは,ディメンションがファクトのアスペクトとして使用されることを指定している(この例にもし保護されないディメンションアスペクトがあれば,暗黙的フィルタ処理においてそれらが照合されることを指定している)。
<variable:factVariable xlink:type="resource" xlink:label="GrossIncomes" bindAsSequence="false"/>
総収入のファクト変数を指定しているが,”変数名”は割り当てていない(変数名はアサーションからファクト変数への関係を定義するアーク上で割り当てられる)。このファクト変数に割り当てられるフィルタ処理されたファクトは,bindAsSequenceがfalseのため,1つずつ処理される。
<variable:factVariable xlink:type="resource" xlink:label="NetIncomes" bindAsSequence="false"/>
同上。純利益のファクト変数を指定。
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="assertion" xlink:to="GrossIncomes" order="1.0" name="grossIncomes"/>
アサーションからファクト変数へのアークでは,このアサーションでファクト変数が参照される際の名前(grossIncomes)が付与される(仮にファクト変数が他のアサーションに共有されていたとしても,他のアサーションからのアークとは異なる名前を付与できる)。
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="assertion" xlink:to="NetIncomes" order="2.0" name="netIncomes"/>
同上。アサーションから純利益のファクト変数へのアークでは,ファクト変数に名前(netIncomes)を割り当てている。
<cf:conceptName xlink:type="resource" xlink:label="GrossIncomesFilter">
<cf:concept>
<cf:qname>
concept:GrossIncomes
</cf:qname>
</cf:concept>
</cf:conceptName>
総収入に対するファクト変数で使用されるフィルタ。 コンセプト名concept:GrossIncomesを持つファクトを通過させ,その他の名前を持つファクトはすべて排除する。
<cf:conceptName xlink:type="resource" xlink:label="NetIncomesFilter">
<cf:concept>
<cf:qname>
concept:NetIncomes
</cf:qname>
</cf:concept>
</cf:conceptName>
同上。純利益のコンセプト名フィルタ。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" xlink:from="GrossIncomes" xlink:to="GrossIncomesFilter" complement="false" cover="true" order="1.0"/>
総収入のファクト変数からそのフィルタ(GrossIncomesの名前を持つコンセプトに限定)へのアーク。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" xlink:from="NetIncomes" xlink:to="NetIncomesFilter" complement="false" cover="true" order="1.0"/>
同上。純利益のアーク。
</generic:link> 拡張リンクでの,Formulaリソースとアークの構成の終わり。

7.2 残高の変動を検証する例

ここでの例は,期首残高,期中変動額,及び期末残高の各報告期間における資産変動のパターンを検証し,期末残高が,期首残高に期中変動分を足したものの許容差内に収まっているかの妥当性を検証することを目的としている。この場合,期首残高,期末残高は報告区分が特定時点であり,期中変動額の報告区分が継続期間であるためXBRL計算リンクベースは適用できず,値アサーションが必要となる。

ファクトの例を図13に示す。2008年の場合,2007年の期末残高600ドルと2008年の期中変動額400ドルを合わせると1,000ドルとなり,アサーションは成功する。2009年の場合,1,000ドル + 800ドル ≠ 1,790ドル(許容差は1ドル以内)であり,このアサーションは失敗する。2010年の場合,1,790ドル + 900ドル = 2,690ドルとなりアサーションは成功する。

図13:残高及び期中変動額における変動のファクトの例


当該のアサーションを図14に示す。1番上の行は$beginningBalance + $changes = $endingBalance(許容差は1.00)として表されるアサーションで,| $beginningBalance + $changes - $endingBalance | ≤ 1.00,あるいはXPath2.0では,abs( $beginningBalance + $changes - $endingBalance ) le 1.00,とコーディングされる。この例では,残高の報告期間アスペクトに対する明示的フィルタ処理を取り入れている(報告期間フィルタ処理が暗黙的に行われる7.1節と比較)。明示的フィルタ処理では,残高の期首時点が期中変動額の期間の開始時点と合致し,期末時点が期中変動額の継続期間の終了時点に合致させる必要がある。

図14:期首残高,期中変動額,期末残高を検証するアサーション

図15は,値アサーション式とそのファクト変数及びそれらのフィルタによって,アサーションがどのように表現されるかを示す概念図である。

図15:値アサーションの概念図(ファクト変数に依存関係が存在する場合)

この例では,期中変動額に対するファクト変数と残高に対するファクト変数の間に依存関係が存在する。期首及び期末の残高がそれぞれ期中変動額のファクトの開始時点及び終了時点に結びつけられるように,最初に期中変動額に対するファクト変数changesのファクトを求めなければならない。またこの図では,両方の残高に対するファクト変数で同じコンセプト名フィルタを使用するため,どのようにフィルタが共有されるかも示している。

例3は上記のインスタンス文書及びアサーションをFormulaプロセッサで実行した場合の詳細なトレースログである(オープンソースのプロセッサ,Arelleを使用)。

例3:値アサーション実行のトレースログ詳細(ファクト変数に依存関係がある場合)

トレースログ 意味
Fact Variable changes filtering: start with 7 facts インスタンス文書内のすべてのファクトを候補として$changesの処理を開始する。
Fact Variable changes conceptName filter filter_changes passes 3 facts QName(c:changes)に基づくコンセプト名フィルタ処理。
Fact Variable changes: filters result [fact(concept:changes, D2008, unit, '400'), fact(concept:changes, D2009, unit, '800'), fact(concept:changes, D2010, unit, '900')] 処理結果は3つの期中変動額のファクト($changesに1つずつ結びつけられる)。
Fact Variable changes: bound value fact(concept:changes, D2008, unit, '400') 最初に,2008年の期中変動額のファクトで評価を開始。
Fact Variable beginningBalance filtering: start with 7 facts すべてのファクトを候補として$beginningBalanceの処理を開始する。
Fact Variable beginningBalance conceptName filter filter_balance passes 4 facts コンセプト名c:balanceに基づくコンセプト名フィルタ処理。
Fact Variable beginningBalance instantDuration filter filter_periodStart passes 1 facts 期首フィルタによって,$changesの開始時点に適合する1つのファクトが抽出される。
Fact Variable beginningBalance: filters result [fact(concept:balance, I2007, unit, '600')]  
Fact Variable beginningBalance: bound value fact(concept:balance, I2007, unit, '600')  
Fact Variable endingBalance filtering: start with 7 facts ($beginningBalanceと同様の処理を開始)
Fact Variable endingBalance conceptName filter filter_balance passes 4 facts  
Fact Variable endingBalance instantDuration filter filter_periodEnd passes 1 facts ($changesの終了日付と合致)
Fact Variable endingBalance: filters result [fact(concept:balance, I2008, unit, '1,000')]  
Fact Variable endingBalance: bound value fact(concept:balance, I2008, unit, '1,000')  
Value Assertion assertion Result: True 2008年の期中変動額のファクトに関しては,アサーション成功。
Fact Variable changes: bound value fact(concept:changes, D2009, unit, '800') $changesには2番目の期中変動額のファクトが結びつけられて2009年に対する処理が続く (期中変動額のファクトの選択順は任意であり重要ではない。例でのプロセッサは文書での出現順に処理しているが,たまたまその順番が年代順となっている)。
Fact Variable beginningBalance filtering: start with 7 facts  
Fact Variable beginningBalance conceptName filter filter_balance passes 4 facts  
Fact Variable beginningBalance instantDuration filter filter_periodStart passes 1 facts  
Fact Variable beginningBalance: filters result [fact(concept:balance, I2008, unit, '1,000')]  
Fact Variable beginningBalance: bound value fact(concept:balance, I2008, unit, '1,000')  
Fact Variable endingBalance filtering: start with 7 facts  
Fact Variable endingBalance conceptName filter filter_balance passes 4 facts  
Fact Variable endingBalance instantDuration filter filter_periodEnd passes 1 facts  
Fact Variable endingBalance: filters result [fact(concept:balance, I2009, unit, '1,790')]  
Fact Variable endingBalance: bound value fact(concept:balance, I2009, unit, '1,790')  
Value Assertion assertion Result: False  
Fact Variable changes: bound value fact(concept:changes, D2010, unit, '900')  
Fact Variable beginningBalance filtering: start with 7 facts  
Fact Variable beginningBalance conceptName filter filter_balance passes 4 facts  
Fact Variable beginningBalance instantDuration filter filter_periodStart passes 1 facts  
Fact Variable beginningBalance: filters result [fact(concept:balance, I2009, unit, '1,790')]  
Fact Variable beginningBalance: bound value fact(concept:balance, I2009, unit, '1,790')  
Fact Variable endingBalance filtering: start with 7 facts  
Fact Variable endingBalance conceptName filter filter_balance passes 4 facts  
Fact Variable endingBalance instantDuration filter filter_periodEnd passes 1 facts  
Fact Variable endingBalance: filters result [fact(concept:balance, I2010, unit, '2,690')]  
Fact Variable endingBalance: bound value fact(concept:balance, I2010, unit, '2,690')  
Value Assertion assertion Result: True  
Value Assertion assertion evaluations : 2 satisfied, 1 not satisfied  

例4はリンクベースの構文を示している。

例4:値アサーションのリンクベース構文(ファクト変数に依存関係がある場合)

リンクベース構文 意味
<va:valueAssertion test="abs( $beginningBalance + $changes - $endingBalance ) le 1.00"/>
変動する残高を検証するXPath式を持つ値アサーション。
<variable:factVariable xlink:type="resource" xlink:label="variable_beginningBalance" bindAsSequence="false"/>
期首残高のファクト変数。
<variable:factVariable xlink:type="resource" xlink:label="variable_endingBalance" bindAsSequence="false"/>
期末残高のファクト変数。
<variable:factVariable xlink:type="resource" xlink:label="variable_changes" bindAsSequence="false"/>
期中変動額のファクト変数。
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="assertion" xlink:to="variable_changes" order="1.0" name="changes"/>
アサーションからファクト変数への関係。
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="assertion" xlink:to="variable_beginningBalance" order="2.0" name="beginningBalance"/>
 
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="assertion" xlink:to="variable_endingBalance" order="2.0" name="endingBalance"/>
 
<cf:conceptName xlink:type="resource" xlink:label="filter_balance">
<cf:concept>
<cf:qname>
c:balance
</cf:qname>
</cf:concept>
</cf:conceptName>
残高に対するファクト変数のどちらにも共有されるコンセプト名フィルタ。
<cf:conceptName xlink:type="resource" xlink:label="filter_changes">
<cf:concept>
<cf:qname>
c:changes
</cf:qname>
</cf:concept>
</cf:conceptName>
期中変動額のファクト変数に対するコンセプト名フィルタ。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" complement="false" cover="true" xlink:from="variable_changes" xlink:to="filter_changes" order="1.0"/>
期中変動額のファクト変数からコンセプト名フィルタへの関係。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" complement="false" cover="true" xlink:from="variable_beginningBalance" xlink:to="filter_balance" order="1.0"/>
期首残高のファクト変数から共用コンセプト名フィルタへの関係。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" complement="false" cover="true" xlink:from="variable_endingBalance" xlink:to="filter_balance" order="1.0"/>
期末残高のファクト変数から共用コンセプト名フィルタへの関係。
<pf:instantDuration xlink:type="resource" xlink:label="filter_periodStart" variable="changes" boundary="start"/>
期首残高を$changesの開始時点に合わせる期首フィルタ。
<pf:instantDuration xlink:type="resource" xlink:label="filter_periodEnd" variable="changes" boundary="end"/>
期末残高を$changesの終了時点に合わせる期末フィルタ。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" complement="false" cover="true" xlink:from="variable_beginningBalance" xlink:to="filter_periodStart" order="6.0"/>
期首残高のファクト変数から報告期間フィルタへの関係。
<variable:variableFilterArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-filter" complement="false" cover="true" xlink:from="variable_endingBalance" xlink:to="filter_periodEnd" order="6.0"/>
 

7.3 ディメンションの処理例

ここでの例では,ブリュッセルで開かれた第22回XBRL International Conferenceで行われ,YouTubeでも配信されたVictor Morilla氏のXBRL Formulaのプレゼンテーションにおいて使用されたディメンションの処理例について検証する。ファクトの例を図16に示す。1年間の貸借対照表のファクトであるが,ヨーロッパとアメリカの内訳,そしてヨーロッパを構成する国の一部としてフランス,ドイツ,スペインの内訳に加え,総計ディメンション(Totalディメンション,ディメンションデフォルト)に対するファクトが示される。このディメンションの例を使って,ディメンションのアスペクトによる暗黙的フィルタ処理,アスペクトにディメンションを伴う場合のフォーミュラによる妥当性検証,ディメンションによる集約を説明する。図17では,コンセプト(ディメンション対応型)とともにファクトの一覧を示しており,ディメンションの値に対するコンセプトの使われ方を示している。総計ディメンションはディメンションデフォルトである(コンテキストには出現しない)。

図16:ディメンション毎のディメンション対応型ファクト表の例



図17:contextRef毎のディメンション対応型ファクト一覧の例


7.3.1 ディメンション毎に”資産=負債及び純資産”であることを検証する

最初のアサーションでは,各ディメンションにおいて”資産=負債及び純資産($assets eq $liabilitiesAndEquities)”であることを検証する。図18は,そのアサーションの概念図である。2つのファクト変数があり,1番目の$assetsは資産のファクトに1つずつ結びつけられる。資産の各ファクトは,CountriesAxisディメンションについてデフォルト又は明示的なメンバ値を持っている。2番目のファクト変数は,$assetsにおける保護されていないすべてのアスペクトについて,とりわけCountriesAxisディメンションについて,暗黙的に照合される。図16に見られるように,フランスの事例の場合,負債及び純資産は0ユーロであり,資産の10,000ユーロと比較されてフランスのアサーションは失敗することになる。スペインは,負債及び純資産のファクトが無いため,評価においてファクトを結びつけることができず(下記トレースを参照),結果的にスペインについてのアサーションは試行されない。

図18:値アサーションの概念図(ディメンション毎に検証する場合)

例5は,上記インスタンス文書及びアサーションのFormulaプロセッサの実行結果のトレースログからの抜粋である。

例5:値アサーション実行のトレースログ抜粋(ディメンション毎に検証する場合)

トレースログ 意味
Fact Variable assets filtering: start with 41 facts $assetsは,インスタンス文書内のすべてのファクトに対して処理を開始する。
Fact Variable assets conceptName filter filter_assets passes 6 facts  
Fact Variable assets: filters result [fact(ex:Assets, I-2007, EUR, '100,000'), fact(ex:Assets, I-2007-EU, EUR, '50,000'), fact(ex:Assets, I-2007-FR, EUR, '10,000'), fact(ex:Assets, I-2007-DE, EUR, '5,000'), fact(ex:Assets, I-2007-ES, EUR, '35,000'), fact(ex:Assets, I-2007-US, EUR, '50,000')] ここで,結びつけられるファクトは名前がAssetsである資産のファクトに限定される。
Fact Variable assets: bound value fact(ex:Assets, I-2007, EUR, '100,000') 資産の各ファクトに対して1つずつ結びつけられる。
Fact Variable liabilitiesAndEquity filtering: start with 41 facts  
Fact Variable liabilitiesAndEquity conceptName filter filter_liabilitiesAndEquity passes 5 facts  
Fact Variable assets implicit filter ex:CountriesAxis passes 1 facts CountriesAxisディメンションに対する暗黙的フィルタによって,資産のファクトと同じディメンションを持つ負債及び純資産のファクト(名前がLiabilitiesAndEquityのファクト)を照合している。
Fact Variable liabilitiesAndEquity: filters result [fact(ex:LiabilitiesAndEquity, I-2007, EUR, '100,000')]  
Fact Variable liabilitiesAndEquity: bound value fact(ex:LiabilitiesAndEquity, I-2007, EUR, '100,000')  
Value Assertion assertion Result: True  
Fact Variable assets: bound value fact(ex:Assets, I-2007-EU, EUR, '50,000') 次のCountriesAxisディメンションメンバを処理(詳細なトレースの結果は省略)。
Value Assertion assertion Result: True  
Fact Variable assets: bound value fact(ex:Assets, I-2007-FR, EUR, '10,000') フランスにおける資産のファクト。
Fact Variable liabilitiesAndEquity filtering: start with 41 facts  
Fact Variable liabilitiesAndEquity conceptName filter filter_liabilitiesAndEquity passes 5 facts  
Fact Variable assets implicit filter ex:CountriesAxis passes 1 facts  
Fact Variable liabilitiesAndEquity: filters result [fact(ex:LiabilitiesAndEquity, I-2007-FR, EUR, '0')]  
Fact Variable liabilitiesAndEquity: bound value fact(ex:LiabilitiesAndEquity, I-2007-FR, EUR, '0') フランスの負債及び純資産のファクトは0であり,これは資産のファクトに合致しない。
Value Assertion assertion Result: False 資産のファクトが10,000であるのに対して,負債及び純資産のファクトの値が0であるため値アサーションは失敗する。
Fact Variable assets: bound value fact(ex:Assets, I-2007-DE, EUR, '5,000')  
Fact Variable liabilitiesAndEquity filtering: start with 41 facts ドイツ。詳細は省略。
Value Assertion assertion Result: True  
Fact Variable assets: bound value fact(ex:Assets, I-2007-ES, EUR, '35,000') スペインについては資産のファクトはあるが,負債及び純資産のファクトは存在しない。
Fact Variable liabilitiesAndEquity filtering: start with 41 facts  
Fact Variable liabilitiesAndEquity conceptName filter filter_liabilitiesAndEquity passes 5 facts  
Fact Variable assets implicit filter ex:CountriesAxis passes 0 facts CountriesAxisディメンションの暗黙的フィルタ処理では,スペインの資産のファクトに合致する,スペインをメンバとする負債及び純資産のファクトが見つからなかった。
Fact Variable liabilitiesAndEquity: filters result [] スペインについては,負債及び純資産のファクト変数に空のシーケンスが入る。負債及び純資産のファクト変数に結びつくファクトは無いため,アサーションの評価は行われないことに注意。
Fact Variable assets: bound value fact(ex:Assets, I-2007-US, EUR, '50,000') 次は,アメリカ合衆国のディメンションメンバについて試行。
Fact Variable liabilitiesAndEquity filtering: start with 41 facts  
Fact Variable assets implicit filter ex:CountriesAxis passes 1 facts  
Fact Variable liabilitiesAndEquity: filters result [fact(ex:LiabilitiesAndEquity, I-2007-US, EUR, '50,000')]  
Fact Variable liabilitiesAndEquity: bound value fact(ex:LiabilitiesAndEquity, I-2007-US, EUR, '50,000')  
Value Assertion assertion Result: True アメリカ合衆国のディメンションメンバに対しては,値アサーションは成功。
Value Assertion assertion evaluations : 4 satisfied, 1 not satisfied  

7.3.2 代替値を使用して”資産=流動資産+固定資産”であることを検証する

ここでのアサーションでは,各ディメンションにおいて,”資産= 流動資産+ 固定資産($assets eq $currentAssets + $fixedAssets)”であることを検証する際に,欠落しているファクトに対して代替値を取り入れている。図16に戻ってスペインのファクト表を見てみると,固定資産のエントリがないことが分かる。ファクト変数で代替値を使用しない場合は評価自体が行われないが(上記のスペインの例),失敗の結果が欲しい場合の処理は,ファクト変数に値がない時の代替値を宣言することで実現でき,0を代替値とすればよい。
例6はその宣言をするリンクベース構文であり,アサーションの概念図は図19に示す。

例6:代替値を設定したファクト変数のリンクベース構文

リンクベース構文 意味
<variable:factVariable xlink:type="resource" xlink:label="variable_assets" bindAsSequence="false" fallbackValue="0"/>
ファクト変数には,それぞれ代替値として0が設定(fallbackValue="0")されている。
<variable:factVariable xlink:type="resource" xlink:label="variable_currentAssets" bindAsSequence="false" fallbackValue="0"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_fixedAssets" bindAsSequence="false" fallbackValue="0"/>
図19:値アサーションの概念図(代替値を用いて,ディメンション毎に検証する場合)

例7は,上記インスタンス文書及びアサーションのFormulaプロセッサの実行結果のトレースログからの抜粋である。

例7:値アサーション実行のトレースログ抜粋(代替値を使用した場合)

トレースログ 意味
Value Assertion assertion Result: True 総計(CountriesAxisのディメンションデフォルトのTotalメンバ)に対する値アサーションの結果。
Value Assertion assertion Result: True ヨーロッパの場合の値アサーションの結果。
Value Assertion assertion Result: True フランスの場合の値アサーションの結果。
Value Assertion assertion Result: True ドイツの場合の値アサーションの結果。
Value Assertion assertion Result: True アメリカ合衆国の場合の値アサーションの結果。
Fact Variable fixedAssets: bound value [[0]] スペインに対する値アサーションの評価において,既に行われたファクトの評価と重複することなく,固定資産に代替値を入れて照合できるファクトはないか確認(多数のトレースログを省略)。
Fact Variable assets: bound value fact(ex:Assets, I-2007-ES, EUR, '35,000') 既に行われたファクトの評価と重複することなく,資産のファクト変数に結びつくファクトを発見。
Fact Variable currentAssets: bound value fact(ex:CurrentAssets, I-2007-ES, EUR, '4,000') 流動資産も同様。
Value Assertion assertion Result: False スペインのアサーション(固定資産のファクト変数には代替値)は失敗。
Value Assertion assertion evaluations : 5 satisfied, 1 not satisfied  

7.3.3 特定のディメンションメンバのたな卸資産を検証する(変数フィルタに1つのディメンションメンバ)

このアサーションでは,特定のディメンションメンバ(例ではフランス)のみに限定して”たな卸資産 > 流動資産の15%($inventories > 0.15 * $currentAssets)”であることを検証する,ディメンションに対するフィルタ処理を紹介する。図20は,そのアサーションの概念図である。明示的ディメンションフィルタが共有されており,構文は次のとおりである。

例8:ディメンションフィルタのリンクベース構文(1つのディメンションメンバ)

リンクベース構文 意味
<df:explicitDimension xlink:type="resource" xlink:label="filter_countries">
<df:dimension>
<df:qname>
ex:CountriesAxis
</df:qname>
</df:dimension>
<df:member>
<df:qname>
ex:France
</df:qname>
</df:member>
</df:explicitDimension>
単一メンバ,フランスに対するディメンションフィルタ。
図20:値アサーションの概念図(変数フィルタを用いて,特定のディメンションメンバ1つについて検証する場合)

値アサーションの評価結果は,次のように1つである(想定どおり)。

Value Assertion assertion evaluations : 1 satisfied, 0 not satisfied

7.3.4 特定のディメンションメンバのたな卸資産を検証する(変数フィルタに2つのディメンションメンバ)

このアサーションでは,前の例にスペインを追加し,フランス及びスペインのみに限定して”たな卸資産 > 流動資産の15%”であることを検証する,ディメンションに対するフィルタ処理を紹介する。図21は,そのアサーションの概念図である。明示的ディメンションフィルタが共有されており,構文は次のとおりである。

例9:ディメンションフィルタのリンクベース構文(2つのディメンションメンバ)

リンクベース構文 意味
<df:explicitDimension xlink:type="resource" xlink:label="filter_countries">
<df:dimension>
<df:qname>
ex:CountriesAxis
</df:qname>
</df:dimension>
<df:member>
<df:qname>
ex:France
</df:qname>
</df:member>
<df:member>
<df:qname>
ex:Spain
</df:qname>
</df:member>
</df:explicitDimension>
2つのメンバ,フランスとスペインに対するディメンションフィルタ。
図21:値アサーションの概念図(変数フィルタを用いて,特定のディメンションメンバ2つについて検証する場合)

理屈としては2つの変数それぞれに対して2つの国が該当する可能性があるためクロス積が考慮される。フィルタのディメンションアスペクトは保護され,ディメンションに対する暗黙的フィルタ処理は行われないため,次の4つの評価結果が得られる。

Value Assertion assertion evaluations : 3 satisfied, 1 not satisfied

7.3.5 特定のディメンションメンバのたな卸資産を検証する(グループフィルタに2つのディメンションメンバ)

このアサーションでは,ディメンションフィルタをアサーションに移動している。そこでは,フィルタはファクト変数フィルタに代わってグループフィルタと呼ばれる。図22は,そのアサーションの概念図である。グループフィルタを使用すると,そのアスペクト(例ではCountriesAxisディメンション)は保護されない。そのため,Formulaプロセッサはファクト変数に暗黙的フィルタ処理を行うことができ,相互のCountriesAxisディメンションアスペクトが照合される。

図22:値アサーションの概念図(グループフィルタを用いて,特定のディメンションメンバ2つについて検証する場合)

ディメンションフィルタはアサーションに移動される(グループフィルタになる)ため,CountriesAxisディメンションは保護されないままとなる。ファクト変数は暗黙的にCountriesAxisディメンションによって照合されるため,次の2つの評価結果が得られる。

Value Assertion assertion evaluations : 1 satisfied, 1 not satisfied

8 アスペクトモデル

アスペクトとは,ファクトの値に付随するXBRLインスタンス文書のファクトについての情報で,コンセプトや報告期間,又はディメンションなどがある。ファクトのアスペクトに基づいてファクトの照合及びフィルタ処理が行われる。アスペクトモデルは,ファクトに適用される各アスペクトと,それをそれぞれ異なるアスペクト群に分類する方法の記述によって形成される。XBRL formulaでは,将来のアスペクトモデルの拡張も考慮しつつ,ディメンション対応型(dimensional)ディメンション非対応型(non-dimensional)の2つのアスペクトモデルを定義している。表1は,ディメンション対応型及びディメンション非対応型の各アスペクトモデルにおいて,どのアスペクトが,タプル,数値項目,非数値項目に対して存在するかを示している。

表1:アスペクトモデル
アスペクト アスペクトモデル
名前 ディメンション対応型(dimensional) ディメンション非対応型(non-dimensional)
タプル 項目 タプル 項目
数値 非数値 数値 非数値
位置(Location) タプル内の入れ子(適用可能な場合)
コンセプト(Concept) 要素名,タイプ,代替グループ
エンティティ識別子(Entity identifier) スキーマ及び識別子,値及びパターン    
報告期間(Period) 開始時点,終了時点,特定時点,永遠    
単位(Unit) 単一計量単位,分母単位及び分子単位        
全セグメント(Complete segment) XMLフラグメント        
全シナリオ(Complete scenario) XMLフラグメント        
ディメンション除外セグメント(Non-XDT segment) XMLフラグメント        
ディメンション除外シナリオ(Non-XDT scenario) XMLフラグメント        
ディメンション(Dimension) 初期設定で使用されるものを含む明示的及び型付ディメンション        

アスペクトはファクトを照合及びフィルタ処理するための基盤となるものである。フィルタ処理は明示的な場合と暗黙的な場合がある。明示的なフィルタ処理は,アサーションやその他の変数集合に適用される各ファクト変数,又は特定のファクト変数に対して実行される。例えば,ファクト変数フィルタでは,あるファクト変数に対して特定のコンセプト要素名を結びつけたり,特定の報告期間に関連付けたりできる(期中変動額の継続期間の開始時点及び終了時点における残高をフィルタするなど)。一方,グループフィルタでは,データ全体を特定の報告期間やディメンションの値に限定できる。暗黙的フィルタ処理では,保護されているアスペクトを除いたアスペクトを照合できる。例えば,コンセプト名を除いて,暗黙的フィルタを適用可能な日付,ディメンション,エンティティ,単位を照合するような場合である。

各アスペクトには,アスペクト毎に暗黙に定義される特定の照合テストがある。コンセプトアスペクトは要素のQName,報告期間はその日付,エンティティ識別子はそのスキーム及び値,単位はその計量単位,ディメンションは(ディメンション対応型の場合)その明示的メンバ及び型付コンテンツ,そしてセグメントやシナリオはXMLコンテンツ(Open Context Component,すなわちOCCと呼ばれる)によって照合する。

8.1 カスタムのアスペクト照合テスト

型付ディメンションアスペクトの場合,ユーザ定義のXPath式によって,カスタムの照合テストを指定できる。これは,照合を目的とする場合において,型付ディメンションがXML構造となっており,そのXML構造が同じ型付ディメンションの他の値と比較するためにXPath2.0式を必要とするときに役に立つ。

9 明示的フィルタ

明示的フィルタとは,Formulaリンクベースにおけるフィルタのリソースによって宣言されたものである。このフィルタは変数集合(値アサーション,存在アサーション,又は出力ファクトを生成するフォーミュラの値とルール)に関連付けられたときには,グループフィルタとして動作する。反対に,ファクト変数に関連付けられた場合は,ファクト変数フィルタとして動作する。同じフィルタが複数のファクト変数に関連付けられる場合もあるし,ある変数集合(アサーション)ではグループフィルタとして動作し,他の変数集合ではファクト変数フィルタとして動作するといったこともある。

フィルタは補集合を選択するように示されることがあり,その場合はブール型の結果は反転する。

ブール型フィルタを使うと論理積(AND)論理和(OR)の関係によってフィルタを結合することができ,プログラミング言語内で括弧による式で項をグループ化して表現するように,フィルタの条件をグループ化することができる。

表2にて,フィルタ名,保護可能なアスペクト,フィルタの条件及びフィルタの用法とともに,フィルタを列挙する。順序はフィルタの動作の分類順である。

表2:フィルタ
基本動作 規格 保護可能なアスペクト フィルタ名 フィルタの条件及びフィルタの用法
ファクトのアスペクトに対するフィルタ処理 コンセプトフィルタ コンセプト コンセプト名フィルタ 要素のQNameによってファクトを照合する。複数のQNameから選ぶ場合,又は式の場合がある。
コンセプト期間時点区分フィルタ スキーマで宣言されたコンセプトの期間時点区分である,報告時点(instant)又は継続期間(duration)によってファクトを照合する。
コンセプト貸借区分フィルタ スキーマで宣言されたコンセプトの貸借区分である,貸方(credit)又は借方(debit)によってファクトを照合する。
コンセプトカスタム属性フィルタ スキーマでのコンセプトの要素宣言のカスタム属性値によってファクトを照合する。
コンセプトデータ型フィルタ スキーマで宣言されたコンセプトのデータ型によってファクトを照合する。
コンセプト代替グループフィルタ スキーマで宣言されたコンセプトの代替グループによってファクトを照合する。
ディメンションフィルタ 特定のディメンション 明示的ディメンションフィルタ ディメンションの有無,ディメンションの特定のメンバ,又は特定のメンバに対する軸関係(子である,子孫である等)のオプションによってファクトを選択する。
型付ディメンションフィルタ 型付ディメンションに対するXPath2.0のテスト式によってファクトを照合する。
エンティティフィルタ エンティティ識別子 エンティティ識別子フィルタ エンティティ識別子に対するXPath2.0のテスト式によってファクトを照合する。
特定エンティティスキームフィルタ 値によってファクトを照合する。
正規表現エンティティスキームフィルタ スキームの正規表現によってファクトを照合する。
特定エンティティ識別子フィルタ 値によってファクトを照合する。
正規表現エンティティ識別子フィルタ エンティティ識別子の正規表現によってファクトを照合する。
汎用フィルタ (なし) 汎用フィルタ ファクトに対するXPath2.0のテスト式によってファクトを照合する。
報告期間フィルタ 報告期間 報告期間フィルタ 報告期間に対するXPath2.0のテスト式によってファクトを照合する。
期首フィルタ 開始時点の日時の値によってファクトを照合する。
期末フィルタ 終了時点の日時の値によってファクトを照合する。
時点フィルタ 報告時点の日時の値によってファクトを照合する。
永遠フィルタ 永遠の報告期間によってファクトを照合する。
時点期間フィルタ 期間時点区分が時点期間である他方の変数のファクトの開始時点又は終了時点の値によって,期間時点区分が特定時点であるファクトを照合する。
セグメント及びシナリオフィルタ 全セグメント セグメントフィルタ セグメントに対するXPath2.0のテスト式によってファクトを照合する。
全シナリオ シナリオフィルタ シナリオに対するXPath2.0のテスト式によってファクトを照合する。
タプルフィルタ 位置 親フィルタ ファクトの親要素のQNameによってファクトを照合する。QName又は式を指定できる。
先祖フィルタ ファクトのいずれかの先祖要素のQNameによってファクトを照合する。QName又は式を指定できる。
兄弟フィルタ 他方の変数のファクトと兄弟関係があるファクトを照合する。
位置フィルタ 他方の変数のファクトに対して,相対パス(XPath2.0)によって関係付けられるファクトを照合する。
単位フィルタ 単位 単一計量単位フィルタ ファクトの単位における計量単位のQNameによってファクトを照合する。QName又は式を指定できる。
汎用計量単位フィルタ 単位に対するXPath2.0のテスト式によってファクトを照合する。
値フィルタ (なし) nil値フィルタ nil値として報告されたファクトを照合する。
精度フィルタ 報告される又は推測される精度の最小値に対するXPath2.0のテスト式によってファクトを照合する。
サブフィルタの条件をブール論理で結合するフィルタ処理 ブール型フィルタ (なし) 論理積フィルタ 関連するサブフィルタの条件の論理積によってファクトを照合する。
論理和フィルタ 関連するサブフィルタの条件の論理和によってファクトを照合する。
DTS関係によるフィルタ処理 コンセプト関係フィルタ コンセプト コンセプト関係フィルタ 指定する基本集合において,他方の変数値と指定する軸関係があるコンセプトのファクトを照合する。
アスペクトの保護 アスペクト保護フィルタ リクエストに応じて アスペクト保護フィルタ 指定されるアスペクトをフィルタ処理することなく保護する。
変数の照合によるフィルタ処理 照合フィルタ コンセプト コンセプト照合フィルタ 他方の変数に結びつけられたファクトとコンセプトが同じファクトを照合する。
位置 位置照合フィルタ 他方の変数に結びつけられたファクトと位置が同じファクトを照合する。
単位 単位照合フィルタ 他方の変数に結びつけられたファクトと単位が同じファクトを照合する。
エンティティ識別子 エンティティ識別子照合フィルタ 他方の変数に結びつけられたファクトとエンティティ識別子が同じファクトを照合する。
報告期間 報告期間照合フィルタ 他方の変数に結びつけられたファクトと報告期間が同じファクトを照合する。
ディメンション ディメンション照合フィルタ 他方の変数に結びつけられたファクトと指定されたディメンションが同じファクトを照合する。
全セグメント 全セグメント照合フィルタ 他方の変数に結びつけられたファクトと全セグメントが同じファクトを照合する。
ディメンション除外セグメント ディメンション除外セグメント照合フィルタ 他方の変数に結びつけられたファクトとディメンション除外セグメントが同じファクトを照合する。
全シナリオ 全シナリオ照合フィルタ 他方の変数に結びつけられたファクトと全シナリオが同じファクトを照合する。
ディメンション除外シナリオ ディメンション除外シナリオ照合フィルタ 他方の変数に結びつけられたファクトとディメンション除外シナリオが同じファクトを照合する。
相対するアスペクトに対するフィルタ処理 相対フィルタ 保護されていないアスペクトすべて 相対フィルタ 暗黙的フィルタ処理を代替するフィルタで,他方の変数に結びつけられたファクトに対して,保護されていないすべてのアスペクトを照合し,これらのアスペクトを保護する。

9.1 グループフィルタ(変数集合に対するフィルタ)

グループフィルタは,変数集合のファクト変数に結びつけられるすべてのファクトをフィルタ(限定)する。グループフィルタでは,フィルタが適用されるアスペクトと変数集合によって評価されているファクトの暗黙的フィルタ処理の間に相互作用はない。グループフィルタはいずれのアスペクトも保護しないため,フィルタが変数フィルタであったなら保護されることになるアスペクトは,暗黙的フィルタでの照合の対象になるか,又は相対フィルタでの照合の対象になる。

9.2 変数フィルタ(レンダリングにも使用)

ファクト変数フィルタは,当該フィルタのアスペクトによって,このフィルタが接続されるファクト変数に結びつくファクトを限定する。

9.2.1 アスペクト保護

ファクト変数フィルタによってアスペクトが保護される場合,保護されたアスペクトは,フィルタが接続されるファクト変数に対する暗黙的フィルタ処理又は相対フィルタの照合の対象から外される(グループフィルタでは,アスペクトは保護されない)。

10 暗黙的フィルタ処理

暗黙的フィルタ処理は,変数集合のファクト変数に結びつけるファクトを照合するときに行われ,指定されるアスペクトモデルに基づいて,各ファクト変数のファクト(複数の場合もある)が持つ保護されていないアスペクトのそれぞれに対して行われる処理である。暗黙的フィルタ処理は保護されたアスペクトに対しては,いかなる照合もしない(2つのファクトを比較するときに,いずれかのアスペクトが保護されている場合)。

暗黙的フィルタ処理は,変数集合の属性によって無効にできる。無効にした場合は,明示的なフィルタ処理及びユーザのXPath式のみでファクト変数に結びつく入力インスタンス文書のファクトが限定される。

図15の例を用い,暗黙的フィルタ処理がどのように動作するのかを概念図で示す。図15の例では,期中変動額に対するファクト変数($changes)ではそのコンセプト名でのみフィルタ処理を行い,期首残高及び期末残高に対する2つの変数($beginningBalance及び$endingBalance)ではコンセプト名と継続期間の特定時点に対する明示的フィルタ処理を行った後,(暗黙的フィルタ処理により)期中変動額のファクトと照合される。$beginningBalance及び$endingBalanceでは,$changesに結びつけられたファクトに対して,コンセプトと報告期間を除くすべてのアスペクトを照合する。

ファクトを結びつける最初のファクト変数は$changesである。なぜなら,$beginningBalance及び$endingBalanceは両方ともファクト変数$changesに依存するためである($changesのファクトの情報を利用して,それぞれの報告期間に対する明示的フィルタ処理をする必要がある)。図23では,はじめは暗黙的に検索するアスペクトに制約がないことを示している。2番目の列では,コンセプトフィルタによってアスペクトの保護が取り入れられて,コンセプトのアスペクトが保護されている(コンセプト名は他のファクト変数と比較されるべきではないので”保護”される)。3番目の列は,次に,ファクト変数にファクトを結びつける処理で検索対象として’繰り越される’(比喩的表現)アスペクトであるが,コンセプト'changes'の他は検索条件に制約のないアスペクトであることを示している。4番目の列に示すように,$changesに対してファクトが合致すると,次のファクトを結びつける処理に繰り越されるアスペクトとして,$changesに結びつけられたファクトのすべてのアスペクトが反映される(コンセプト名は保護された状態である)。

図23:暗黙的フィルタ処理(ファクト変数$changes)

次にファクトに結びつけられるファクト変数は,ファクト変数$beginningBalance及び$endingBalance(のどちらか)である。ここでの説明では,図24に示すとおり,はじめに$beginningBalanceにファクトが結びつけられると仮定する。$beginningBalanceの検索基準は,図23において$changesの処理によって繰り越されたフィルタ対象のアスペクト,及び報告期間に対する明示的なフィルタ($changesの継続期間の開始時点との照合)である。結果として求まる検索基準は,3番目の列に示す。この列の右側の値は結びつけられるファクトのアスペクトを示している。

図24:暗黙的フィルタ処理(ファクト変数$beginningBalance)

図25に示すとおり,最後にファクトを結びつけるファクト変数は,残るファクト変数$endingBalanceである。

これらの図は説明のためだけに使われるもので,暗黙的フィルタ処理と明示的フィルタ処理で使用される実際の論理は省かれているところがある。実際の例のトレースログや,トレースログを取得するために利用したオープンソースプロジェクトの該当するソースコードは,考えられる実装方法の一つを示している(が,その他の実装方法を禁止するものではない)。

図25:暗黙的フィルタ処理(ファクト変数$endingBalance)

11 ファクト変数の代替値

7.3.2節の例では,ファクトが1つでも欠落する場合には評価されないアサーションが,代替値の考え方を導入することで評価可能になることを示している。代替値は,ファクトが欠落する状況であってもアサーションやフォーミュラを評価させたい場合に有用である。

代替値は,変数が空のシーケンスに結びつけられたときにfallbackValue属性を持つファクト変数に割り当てられる。変数が空のシーケンスになる場合とは,ファクト変数の場合,明示的フィルタ及び暗黙的フィルタを通過するファクトが1つも無い場合を意味している。

変数を持つ評価処理では,少なくとも1つの変数に対して値を持つシーケンスが結びつけられないと評価は実行されないため,すべての変数が同じ評価内で代替値を持つような状況では,代替値は意味をなさない。

ファクト変数に値が結びつく同等の評価が他にある場合,そのファクト変数に代替値が割り当てられることはない。これにより,ファクト変数に結びつくファクトが見つかる評価において,同じファクト変数に代替値が割り当たり,ほぼまったく同じ評価が繰り返されることを防げる。これを実装するのに必要な論理は,”実行済み”評価の履歴を管理する,その他の述語論理のコンピュータサイエンスの言語と似ている。

代替値を指定する式は,他のファクト変数又は汎用変数を参照することができない(しかし,パラメータは参照してもよい)。他の変数を参照できない理由は,代替値の役割として求められるのは欠落する任意のファクトを代替できることであるのに対して,代替値が他の変数を参照してしまうと代替の際に参照変数への順序依存が生じるからである。

ファクト変数に対する代替値は,常に不可分(スカラー値であり,ノード値ではない)である。代替値にはアスペクトはなく,その他の変数の暗黙的フィルタ処理に組み込まれることはない(また,相対フィルタ,照合フィルタ,ディメンションフィルタにおいて,アスペクト値の算出の際に参照するファクト変数が代替値の場合も機能しない)。

12 存在アサーション

存在アサーションは,様式タイプ,企業識別,そして提出書類の識別などの文書記述に関するファクトの存在を確認するといったような,静的な存在を確認する場合に有用である。存在アサーションは一度だけ入力全体に対して実行されるため,ディメンション,報告期間,及びその他の照会条件に依存して存在するファクトの存在確認には適していない(値アサーションは,このような場合でも使用可能である)。存在アサーションの処理モデルを図26に示す。存在アサーションのテスト式では変数集合において完了した評価の数を検証する。テスト式では,個別の完了した評価に対応するファクト変数又は汎用変数の値を取得することはできない。

図26:存在アサーションの処理モデル

12.1 純利益のファクトの存在を検証する例

最初の例は7.1節の例と対になるもので,こちらの例では純利益のファクトが報告されているかを検証している。対応するアサーションのツール上の表示を図27に示す。1番上の行は存在アサーションで,テスト式は与えられていない。この場合,存在アサーションの変数集合の評価が1回でも行われると,存在アサーションは成功する(Formula 1.0の補足文書として提供されているConformance Suiteの例20のサンプルデータの場合である)。この宣言を行うアサーションを表現する概念図を図28に示す。

図27:純利益のファクトの存在を検証するアサーション

UML状態記号の表記を基にした存在アサーションの概念図である。この概念図では,存在アサーションは変数集合の評価を表す内部状態に対する,ステートフルな外部カウンタであることを表す。

図28:存在アサーションの概念図

13 出力XBRLインスタンス文書のファクトの項目を生成するフォーミュラ

フォーミュラはファクトの項目を生成するFormulaリンクベースの構成体である(タプルも生成可能 - 19節を参照)。

フォーミュラ(構成体)は変数集合であり,その変数集合の各評価に対して出力ファクトの項目が生成される。ファクトの項目の値は,XPath式によって指定される。 XPath式では,評価においてファクトが結びつけられた変数を参照できる(通常は参照している)。ファクトの項目の値は,数値ファクトの精度,出力ファクトの各アスペクトの値を指定するルールを持つ。アスペクトには,コンセプト,報告期間,エンティティ識別子,数値の単位,場合に応じてディメンション又はセグメント/シナリオ,がある。アスペクトルールは,ファクト変数に結びつけられたファクトのアスペクトを単純に再利用する機能から,宣言的なルールによって各アスペクトを生成する機能に及ぶ様々な機能を提供する。

ファクトの項目は,単一の標準出力XBRLインスタンス文書に生成されるか,又は1つ以上のXBRLインスタンス文書を生成するというような,特定の複数出力XBRLインスタンス文書に向けて出力される場合もある(18節参照)。出力XBRLインスタンス文書は,ファイルに保存されることもあれば,チェイニングに使用されることもある(18.1節参照)。

一貫性アサーションを使用して許容差に対して値を比較する場合,フォーミュラから生成されるファクトの項目は,入力XBRLインスタンス文書中のファクトの項目と比較されることがある(14節参照)。値アサーションでは入力ファクトについて何かをアサートするフィルタベースの仕組みが提供されているのに対し,一貫性アサーションとともにフォーミュラを使用する場合は,アスペクトルールに基づいて,ファクトを構成,生成,照合する仕組みが提供される。一貫性アサーションでの入力ファクトとの照合を目的として生成されるファクトは,比較処理のためプロセッサメモリ内に格納される(格納方法はアプリケーションの実装による)。さらに,メモリに格納されたファクトはXBRLインスタンス文書のファイルに出力されたり,チェイニングによって依存する変数集合へ提供される場合がある。

フォーミュラのファクト生成の概念図を図29に示す。このフォーミュラの概念図では,値アサーションと始まり方は同じだが,値アサーションが評価されていたところで,値及び出力ファクトが生成されている。共通の動作は,パラメータに値を格納し,フィルタ処理を実施して,各項を表す評価対象の変数を入力XBRLインスタンス文書のファクトに結びつけ,前提条件をテストする部分である。異なるのは,フォーミュラは出力XBRLインスタンス文書のためのファクトの項目を仕上げるために,値,小数点以下の桁数又は有効桁数による精度,及びアスペクトを指定するルールを次に評価しなければならないことである。

図29:ファクト生成の処理モデル

13.1 値ルール

値ルールは,ファクトに割り当てる値を生成するXPath式である。定数のように簡単な式の場合もあれば,そのフォーミュラの変数集合の変数やパラメータを参照する項,他の変数集合からチェイニングで渡される値,カスタム関数及びビルトイン関数で算出する値を含む場合がある。xsi:nil値は,値に空のシーケンスを割り当てることで生成できる。

例10:フォーミュラにおける値ルールのリンクベース構文

リンクベース構文 意味
<formula:formula xlink:type="resource" xlink:label="formula1" value="1.2" source="total" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
1
</formula:decimals>
</formula:formula>
数値ファクトは値1.2を持ち,精度は小数点第1位(decimals=1)が指定されている。全てのアスペクトは,コンセプト名,報告期間,エンティティ,単位,ディメンションを含め,他方の変数($total)からコピーされる。
<formula:formula xlink:type="resource" xlink:label="formula1" value="'hello world'" source="formula:uncovered" aspectModel="dimensional" implicitFiltering="true"/>
文字列のファクトの項目に文字列定数が割り当てられている。XPath式内で文字列と認識させるために,文字列定数は引用符で囲む必要がある。この項目は文字列なので,精度ルールは適用されない。アスペクトは,該当アスペクトが保護されないファクト変数のいずれかから引き継がれる。
<formula:formula xlink:type="resource" xlink:label="formula1" value="sum($children)" source="children" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
2
</formula:decimals>
</formula:formula>
$childrenに結びつけられる一連のファクトは,合算されて1つの総計として書き出される。精度は小数点第2位までと指定される。コンセプト名を含むアスペクトは,$childrenからコピーされる(つまり出力ファクトは$childrenのファクトと同じコンセプト名,報告期間,エンティティ,そしてディメンションを持つ)。

13.1.1 精度ルール

分数ではない数値項目を生成するフォーミュラには,ファクトの精度を小数点以下の桁数(decimals)又は有効桁数(precision)で指定する精度ルールがある。精度ルールが省略されると,ファクトはprecisionが0で生成され,”精度については不明”という指定がされたことになる。精度ルール自体はXPath式であり,定数を指定してもよいし(decimals="2"など),またはその他の方法で精度を指定してよい(ファクトから精度をコピーするなど。例:$total/@decimals)。

13.2 アスペクトルール

アスペクトルールは,formula:formula(又はtuple:tuple)構成体の中で入れ子になったXML構成体である(これはファクト変数へアークの関係で接続されるファクト変数フィルタとは異なる)。アスペクトはルールとして明示的に指定,又はソースによって指定できる。又は指定しなくてもよい場合もある。常に初期設定が適用されるformula:locationアスペクトを除いて,それ以外のアスペクトはソース(評価時にファクトが結びつけられた変数からアスペクトを取得する方法を指定するルール)を指定する場合に限り,デフォルトの値を設定できる。一部のアスペクト(ディメンション,セグメント及びシナリオのフラグメント,そして単位など)では,複数のルールを組み合わせることができる。なぜなら,これらのアスペクトでは,ソース(複数の場合もある)及び明示したルール,又はそのいずれか一方で指定した,アスペクト値に関する条件を累算できるからである。

表3:アスペクトルール
アスペクトルール
名前 説明 組み合わせ可能
フォーミュラの項目出力におけるルール
formula:location このルールはフォーミュラで定義されることはない。初期設定では常にルートに位置するファクトであると指定される。  
formula:concept 出力ファクトにおけるコンセプトの要素名を生成するルール。直近ソースから継承されるか,又はQName又はQName式によって明示的に指定される。  
formula:entityIdentifier 出力ファクトにおけるエンティティ識別子(スキーム及び識別子)を生成するルール。直近ソースから継承されるか,又はルールとして明示的に指定される。  
formula:period 出力ファクトにおける報告期間(継続期間における開始時点及び終了時点,報告時点,又は永遠)を生成するルール。直近ソースから継承されるか,又はルールとして明示的に指定される。  
formula:explicitDimension 出力ファクトにおける明示的及び型付ディメンションの値を生成するルール。直近ソースから継承されるか,又はルールとして明示的に指定される。ディメンションの値を生成するルールは組み合わせ可能。
formula:typedDimension
formula:occFragments 出力ファクトにおけるセグメント及びシナリオを構成するXMLフラグメントを生成するルール。
formula:occXpath
formula:unit 出力ファクトにおける単位(単一計量単位,分子,分母)を生成するルール。値は直近ソースから継承されるか,又はルールとして明示的に指定される。乗算及び除算のルールは組み合わせ可能。
フォーミュラのタプル出力におけるルール
tuple:location タプル内の部位であることを指定する拡張アスペクトルール。通常,variables-scope関係によるチェイニングで用いられる。明示的にルールとして指定されるか,又はソースから継承される。生成される項目/タプルの親(タプル)が値。  

13.2.1 ソース

アスペクトは,ソースを指定することによって,評価においてファクトが結びついた変数から(一部又は全体が)取得される。ソースはルールに指定してもよいし,フォーミュラ(又はタプル)要素のソースから継承してもよい。複数のソースがある場合は,アスペクトルールに直近のソースが優先される。

例11:直近ソースの算出

<formula:formula xlink:type="resource" xlink:label="formula" implicitFiltering="true" aspectModel="dimensional" source="eg:variableA">
<formula:aspects>
<formula:entityIdentifier value="'ABCD-1234'"/>
</formula:aspects>
<formula:aspects source="eg:variableB">
<formula:period/>
<formula:unit source="eg:variableC">
<formula:multiplyBy source="eg:variableD"/>
</formula:unit>
</formula:aspects>
</formula:formula>
アスペクトルール 直近ソース
エンティティ識別子(entityIdentifier) eg:variableA
報告期間(period) eg:variableB
単位(unit) eg:variableC
単位(unit)の乗算(multiplication) eg:variableD

フォーミュラのソースは変数のQName又はformula:uncoveredのいずれかである。formula:uncoveredを指定すると,プロセッサは,変数集合において,該当アスペクトが保護されないファクト変数のいずれかをアスペクトのソースとなる変数として取得する(どのファクト変数を選択してもよい理由は,評価時の各変数において保護されないアスペクトについては,暗黙的フィルタ処理によって値が合致するファクトのみが結びつけられるからである)。

13.2.2 組み合わせ不可能なルール

ファクトに対して単一値であるアスペクトでは,出力アスペクトの値に関するルールを組み合わせて使用することができない。位置,コンセプト,エンティティ識別子,及び報告期間などのアスペクトが該当する。

位置ルールは,tuple:locationルールを使って,タプルを親とするファクトに対してのみ指定することができる。19節参照。位置ルールは,必ずsource属性を使用し,(variables-scope関係によるチェイニングによって)親となるタプルが結びつけられた変数を参照する。

コンセプトルールは,通常,出力ファクトとその値を出力する式における項の変数のファクトにおいて,コンセプトが異なる場合に必要になる。例えば,sum( $parts )からtotalを生成するtotal = sum( $parts ) のような場合,又は$a + $bからcを生成するc = $a + $bのような場合などがある。

例12:コンセプトルールのリンクベース構文

リンクベース構文 意味
<formula:formula xlink:type="resource" xlink:label="formula" implicitFiltering="true" aspectModel="dimensional" source="parts" value="sum($parts)">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
eg:total
</formula:qname>
</formula:concept>
</formula:aspects>
</formula:formula>
フォーミュラの結果は,コンセプトeg:totalで,QNameの定数として指定される。
<formula:formula xlink:type="resource" xlink:label="formula" implicitFiltering="true" aspectModel="dimensional" source="parts" value="$a + $b">
<formula:decimals>
2
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qnameExpression>
node-name($c)
</formula:qnameExpression>
</formula:concept>
</formula:aspects>
</formula:formula>
フォーミュラの結果は,$cに結びつけられているファクトから動的に取得するQNameが示すコンセプトになる。

13.2.3 組み合わせ可能なルール

ファクトに対して複数の値を持つアスペクトでは,出力アスペクトの値に関するルールを組み合わせて使用することができる。ディメンション,セグメント及びシナリオ,そして単位などのアスペクトが該当する。組み合わせ可能なルールは,ソース(ファクトが結びつけられたファクト変数)からアスペクトの値をコピーすることから始めてもよいし,追加のアスペクトをルールによって追加してもよい(例:複数のmultiplyBy及びdivideByの計量単位を単位アスペクトに追加する)。直近ソースから継承した特定の組み合わせ可能なアスペクトの値を相殺する(削除する)ことから始めてもよい。

単位の値に関するルールを組み合わせる場合,multiplyBy及びdivideByの計量単位は,両方に存在する計量単位を相殺することで正規化される。

14 一貫性アサーション

一貫性アサーションでは,関連するフォーミュラにより生成される出力ファクトと,出力ファクトと全てのアスペクトが合致する入力XBRLインスタンス文書中のファクトとが,一貫性を持つかを判定する方法を指定する。例えば,フォーミュラ $c = $a + $bが出力ファクト項目eg:cを生成する場合,一貫性アサーションでは,出力のeg:cは対応する入力ファクトの値に対して許容差(容認半径と呼ばれる)の範囲内でなければならない,と宣言できる。対応する入力ファクトとは,出力ファクトと同じアスペクトを持つファクトである。例えば同じコンセプト名,同じ報告期間,同じエンティティ識別子,同じ単位,そして同じディメンションを持つ。

数値のファクトについては,容認半径を割合(0.05であれば5%以内)又は絶対値(単位がUSDであれば$5.00以内)で指定できる。

アスペクトが合致するファクトが入力インスタンス文書に複数ある場合,一貫性の評価に成功するには,それらすべてのファクトについて一貫性がある必要がある。一貫性がないファクトが1つでもあれば,評価は失敗になる。

strict属性は,生成された出力ファクトに合致する入力ファクトがない場合,一貫性アサーションを評価するかどうかを指定する。strict属性がtrueであり,合致する入力ファクトがなく,生成されたファクトの値がnil値ではない場合,アサーションは失敗する(生成されたファクトがnil値であった場合は成功する)。strict属性がfalseである場合は,入力ファクトがなければ一貫性アサーションは評価されない。つまり,単純に評価されないので,ユーザには一貫性があるのかないのかは分からないということである。

図30:一貫性アサーションの処理モデル

15 検証メッセージ

検証メッセージの目的は,Formulaプロセッサによる報告をユーザにとってより分かりやすくすることである。メッセージは,変数やアスペクトの値がメッセージテキストに組込まれて構成され,次のような評価結果メッセージとなる。“Your submission of form {$formType} is missing a {$omission} for context {$formType/@contextRef} (あなたの提出データは様式 {$formType}が求めるコンテキスト {$formType/@contextRef}に対して{$omission} を含んでいません。)”。

検証メッセージは,メッセージを1つのアサーションに対して関連付けることができ,評価が成功したか失敗したかを知らせるテキスト(又は構造化されたXML)で構成される。成功(又は失敗)について,様々な言語で複数のメッセージがあってもよい(もし異なる言語で実装されるなら,リンクベース内の代替言語はアプリケーションにより選択される)。

アサーションの成功に関連付けるのか,失敗に関連付けるのかを特定するアークロールを持つ関係を使って,アサーションはメッセージに接続される。実装によって,ユーザにアサーションの結果を通知するために,メッセージの報告先を選択してもよい。報告先には,ユーザインタフェース,ログシステム,又は他の手段がある。

メッセージには,該当する評価に関連した重要なメッセージを構成するために,テキスト内にXPath2.0の式を組み込める。値アサーション及び一貫性アサーションでは,XPath式は評価における変数及びパラメータを参照できる。存在アサーションでは,アサーションはすべての存在数を計数し終わった後で一度だけ評価されるので,変数集合のいずれの変数もXPath式からは参照することはできない。

このアサーションに対するメッセージは,どのファクト及び状況が報告されたのかを識別するXPath式を使用することで,複数のアサーションに適用できるように設計できる。

例13:検証メッセージのリンクベース構文

リンクベース構文 意味
<msg:message xlink:type="resource" xlink:label="test-assertion-unsatisfied-message" xlink:role="http://www.xbrl.org/2010/role/message" xml:lang="en">
Not satisfied error: Fact { node-name($var) } in context { $var/@contextRef }, reported value { $var }, for the period starting { xs:date( xfi:period-start( xfi:period($var) ) ) } and ending { xs:date( xfi:period-end( xfi:period($var) ) - xs:dayTimeDuration('P1D') ) }
</msg:message>
このメッセージではXPath式を使用して, 次のようなテキストメッセージを生成している。"Not satisfied error:Fact tax:grossProfits in context D-2008-Totals, reported value 1234.56, for the period starting 2010-01-01 and ending 2010-12-31.(未充足エラー:D-2008-Totalsコンテキストのファクトtax:grossProfits,期間の開始時点2010-01-01及び終了時点2010-12-31における報告値1234.56)"。期間の日付は,時刻部分が無い形で報告される(xfi:period 関数はxs:date-time型の値を返すが,利用者は時刻なしの日付を期待している)。終了日付は,次の日の午前0時となる場合もある (例えば,2011-01-01T00:00:00)。時刻部分を取る場合,日付は1日前とする必要がある。なお,この例ではメッセージは”決めうち”で特定の変数$varを参照している。
<msg:message xlink:type="resource" xlink:label="test-assertion-unsatisfied-message" xlink:role="http://www.xbrl.org/2010/role/message" xml:lang="en">
Not satisfied error: Fact { xff:uncovered-aspect('concept') }, for the period starting { xs:date( xfi:period-start( xff:uncovered-aspect('period') ) ) } and ending { xs:date( xfi:period-end( xff:uncovered-aspect('period')) ) - xs:dayTimeDuration('P1D') }
</msg:message>
コンテキストデータの取得関数を使用する例である。xff:uncovered-aspect関数を使うと,アサーション内の変数名に依存することなくメッセージを生成できる。例えば,1つのメッセージが複数のアサーションで共有される場合に,それぞれのアサーションが異なる変数名の項を持つ場合に対応できる。この例では,xff:uncovered-aspect関数によって,コンセプト名,報告期間の開始時点,終了時点を取得している。これらは評価時の暗黙的フィルタ処理で照合した,保護されていないアスペクトの値に基づく。

16 関数レジストリ概観

関数レジストリでは,Formulaプロセッサ内に実装される標準関数が提供される。

表4:関数レジストリの登録関数
レジストリ番号 名前 説明
80101 xfi:context(schema-element(xbrli:item)) 項目のコンテキスト要素を返す。:element(xbrli:context)
80102 xfi:unit(schema-element(xbrli:item)) 項目の単位を返す(存在する場合)。:element(xbrli:unit)?
80103 xfi:unit-numerator(element(xbrli:unit)) 単位における分子単位を返す。:element(xbrli:measure)+
80104 xfi:unit-denominator(element(xbrli:unit)) 単位における分母単位を返す。:element(xbrli:measure)*
80105 xfi:measure-name(element(xbrli:measure)) 計量単位要素のQNameを返す。
80120 xfi:period(schema-element(xbrli:item)) 項目の報告期間要素を返す。:element(xbrli:period)
80121 xfi:context-period(element(xbrli:context)) コンテキスト要素の報告期間要素を返す。:element(xbrli:period)
80122 xfi:is-start-end-period(element(xbrli:period)) 報告期間が開始及び終了がある期間であれば真。
80123 xfi:is-forever-period(element(xbrli:period)) 報告期間が永遠であれば真。
80124 xfi:is-duration-period(element(xbrli:period)) 報告期間が継続期間(開始及び終了がある期間又は永遠)であれば真。
80125 xfi:is-instant-period(element(xbrli:period)) 報告期間が特定時点であれば真。
80126 xfi:period-start(element(xbrli:period)) 報告期間の開始時点の日時を返す。
80127 xfi:period-end(element(xbrli:period)) 報告期間の終了時点(又は特定時点)の日時を返す。時刻の指定がない日付で報告された場合は,次の日の午前0時になる。
80129 xfi:period-instant(element(xbrli:period)) 特定時点の日時を返す。時刻の指定がない日付で報告された場合は,次の日の午前0時になる。
80130 xfi:entity(schema-element(xbrli:item)) 項目のコンテキストのエンティティ要素を返す。
80131 xfi:context-entity(element(xbrli:context)) コンテキストのエンティティ要素を返す。
80132 xfi:identifier(schema-element(xbrli:item)) 項目のコンテキストの識別子要素を返す。
80133 xfi:context-identifier(element(xbrli:context)) コンテキストの識別子要素を返す。
80134 xfi:entity-identifier(element(xbrli:entity)) エンティティの識別子要素を返す。
80135 xfi:identifier-value(element(xbrli:identifier)) 識別子要素の識別子の値を返す。
80136 xfi:identifier-scheme(element(xbrli:identifier)) 識別子要素のスキームを返す。
80137 xfi:segment(schema-element(xbrli:item)) 項目のコンテキストのセグメント要素を返す(存在する場合)。
80138 xfi:entity-segment(element(xbrli:entity)) エンティティ要素のセグメント要素を返す(存在する場合)。
80139 xfi:context-segment(element(xbrli:context)) コンテキスト要素のセグメント要素を返す(存在する場合)。
80140 xfi:scenario(schema-element(xbrli:item)) 項目のコンテキストのシナリオ要素を返す(存在する場合)。
80141 xfi:context-scenario(element(xbrli:context)) コンテキスト要素のシナリオ要素を返す(存在する場合)。
80142 xfi:fact-identifier-value(schema-element(xbrli:item)) 項目のコンテキストのエンティティ識別子の値を返す。
80143 xfi:fact-identifier-scheme(schema-element(xbrli:item)) 項目のコンテキストのエンティティ識別子のスキームを返す。
80150 xfi:is-non-numeric(xs:QName) QNameが非数値の項目のコンセプト名であり,かつ,タプルでも分数の項目でもない場合に,真を返す。
80151 xfi:is-numeric(xs:QName) QNameが数値(分数を含む)の項目のコンセプト名であり,かつ,タプルではない場合に真を返す。
80152 xfi:is-fraction(xs:QName) QNameが分数の数値項目のコンセプト名である場合に真を返す。
80153 xfi:precision(schema-element(xbrli:item)) ファクトの数値項目の精度(precision)について実際の値又は推定値を返す。ファクトが数値項目ではない場合,例外が発生する。
80154 xfi:decimals(schema-element(xbrli:item)) ファクトの数値項目の精度(decimals)について実際の値又は推定値を返す。ファクトが数値項目ではない場合,例外が発生する。
80155 xff:uncovered-aspect(xs:token, xs:QName?) 指定する保護されないアスペクトの値を返す。一貫性アサーション,値アサーション,フォーミュラのアスペクトルール,又は汎用メッセージにおけるXPath式で用いられる。この関数は変数集合の変数評価及びフィルタ式には適用できない。
80156 xff:has-fallback-value(xs:QName) ファクト変数に代替値が割り当てられる場合に真を返す。前提条件,一貫性アサーション,値アサーション,フォーミュラのアスペクトルール,又は汎用メッセージにおけるXPath式で用いられる。この関数は変数集合の変数及びフィルタ式には適用できない。
80157 xff:uncovered-non-dimensional-aspects() 保護されていないディメンション非対応型のアスペクトを含むシーケンスを返す。一貫性アサーション,値アサーション,フォーミュラのアスペクトルール,又は汎用メッセージにおけるXPath式で用いられる。この関数は変数集合の変数評価及びフィルタ式には適用できない。
80158 xff:uncovered-dimensional-aspects() 保護されていないディメンション対応型のアスペクトを含むシーケンスを返す。一貫性アサーション,値アサーション,フォーミュラのアスペクトルール,又は汎用メッセージにおけるXPath式で用いられる。この関数は変数集合の変数評価及びフィルタ式には適用できない。
80200 xfi:identical-nodes(node()*, node()*) 引数として与えられる2つのノードシーケンスに対して,XBRL 2.1仕様で定義された同一ノードの比較が真である場合に真を返す。
80201 xfi:s-equal(node()*, node()*) 2つのノードシーケンスがs-同等である場合に真を返す。
80202 xfi:u-equal(node()*, node()*) 2つの項目シーケンスがu-同等である場合に真を返す。
80203 xfi:v-equal(node()*, node()*) 2つの項目シーケンスがv-同等である場合に真を返す。
80204 xfi:c-equal(node()*, node()*) 2つの項目シーケンスがc-同等である場合に真を返す。
80205 xfi:identical-node-set(node()*, node()*) 左のシーケンスのいずれのノードに対しても,右のシーケンスに同一のノードが存在し,かつ,シーケンスのメンバ数は同じである場合に真を返す。
80206 xfi:s-equal-set(node()*, node()*) 左のシーケンスのいずれのノードに対しても,右のシーケンスにs-同等のノードが存在し,かつ,シーケンスのメンバ数は同じである場合に真を返す。
80207 xfi:v-equal-set(node()*, node()*) 左のシーケンスのいずれの項目に対しても,右のシーケンスにv-同等の項目が存在し,かつ,シーケンスのメンバ数は同じである場合に真を返す。
80208 xfi:c-equal-set(node()*, node()*) 左のシーケンスのいずれの項目に対しても,右のシーケンスにc-同等の項目が存在し,かつ,シーケンスのメンバ数は同じである場合に真を返す。
80209 xfi:u-equal-set(node()*, node()*) 左のシーケンスのいずれの項目に対しても,右のシーケンスにu-同等の項目が存在し,かつ,シーケンスのメンバ数は同じである場合に真を返す。
80210 xfi:x-equal(node()*, node()*) 2つのノードシーケンスがx-同等である場合に真を返す。
80211 xfi:duplicate-item(schema-element(xbrli:item), schema-element(xbrli:item)) 2つの項目が重複している場合に真を返す。
80212 xfi:duplicate-tuple(schema-element(xbrli:tuple), schema-element(xbrli:tuple)) 2つのタプルが重複している場合に真を返す。
80213 xfi:p-equal(element()+, element()+) 2つのノード(各項目又は各タプル)が同一の親に対する子であった場合に真を返す。
80214 xfi:cu-equal(node()*, node()*) 2つのシーケンスが,c-同等かつu-同等である項目を持つ場合に真を返す。
80215 xfi:pc-equal(node()*, node()*) 2つのシーケンスが,c-同等かつp-同等である項目を持つ場合に真を返す。
80216 xfi:pcu-equal(node()*, node()*) 2つのシーケンスが,c-同等かつu-同等かつp-同等である項目を持つ場合に真を返す。
80217 xfi:start-equal(xbrldi:dateUnion, xbrldi:dateUnion) 2つの引数において,報告期間の開始時点の日時が等しい場合に真を返す。各引数は,xs:date又はxs:dateTimeのいずれかであってよい。引数が混在(一方はxs:dateで他方はxs:dateTime)する場合は,xs:dateはその日の始点となる午前0時(その日の00:00時)のxs:dateTimeとして定義される。
80218 xfi:end-equal(xbrldi:dateUnion, xbrldi:dateUnion) 2つの引数において,報告期間の終了時点又は特定時点の日時が等しい場合に真を返す。各引数は,xs:date又はxs:dateTimeのいずれかであってよい。引数が混在(一方はxs:dateで他方はxs:dateTime)する場合は,xs:dateはその日の終点となる午前0時(その日の24:00時)のxs:dateTimeとして定義される。
80219 xfi:nodes-correspond(node(), node()) 2つの引数ノードが,どちらも一致する属性ノード,又はどちらも一致する要素ノードである場合に,かつ,それらの場合にのみ真を返す。そうでない場合は,偽のブール値を返す。XPath2.0のeq演算子を使用して,原子化された非IDである属性を任意の順で,原子化された要素を出現順に比較する。
90101 xfi:facts-in-instance(element(xbrli:xbrl)) XBRLインスタンス文書内のすべてのファクトのシーケンスを取得する。
90102 xfi:items-in-instance(element(xbrli:xbrl)) XBRLインスタンス文書におけるルート要素の直接の子であるすべてのファクトの項目のシーケンスを返す(タプル内に入れ子になった項目は除く)。それぞれのファクトの項目のデータ型は,PSVI(Post Schema Validation Infoset:スキーマ検証後情報セット)に基づく適切な型である。
90103 xfi:tuples-in-instance(element(xbrli:xbrl)) XBRLインスタンス文書におけるルート要素の直接の子であるすべてのタプルのシーケンスを返す(タプル内に入れ子になったタプルは除く)。
90104 xfi:items-in-tuple(element(xbrli:tuple)) XBRLインスタンス文書におけるタプル要素の直接の子であるすべてのファクトの項目のシーケンスを返す(子であるタプルにおいて更に入れ子となる項目は除く)。
90105 xfi:tuples-in-tuple(element(xbrli:tuple)) XBRLインスタンス文書におけるタプル要素の直接の子であるすべてのタプルのシーケンスを返す(子であるタプルにおいて更に入れ子となるタプルは除く)。
90106 xfi:non-nil-facts-in-instance(element(xbrli:xbrl)) XBRLインスタンス文書内で値がnilではないすべてのファクトのシーケンスを取得する。
90201 xfi:concept-balance(xs:QName) XBRLのコンセプトに関するxbrli:balance属性の値を取得する。
90202 xfi:concept-period-type(xs:QName) QNameで指定するXBRLのコンセプトに関するxbrli:periodType属性の値を取得する。
90203 xfi:concept-custom-attribute(xs:QName, xs:QName) XBRLのコンセプトの宣言において,XBRLインスタンス又はXMLスキーマの名前空間に属さない属性の値を取得する。
90204 xfi:concept-data-type(xs:QName) XBRLのコンセプトに関するデータ型のQNameを取得する。
90205 xfi:concept-data-type-derived-from(xs:QName, xs:QName) コンセプトのXMLスキーマのデータ型が別のXMLスキーマのデータ型からの派生であるかを検証する。
90206 xfi:concept-substitutions(xs:QName) コンセプトに対する代替グループである複数の要素のQNameを順序付きのシーケンスで取得する。
90213 xfi:filter-member-network-selection(xs:QName, xs:QName, xs:string, xs:string, xs:string) 指定アークロール,指定リンクロールにおいて有効な関係のネットワークの中で,指定する起点メンバと指定する関係軸を持つディメンションメンバのみを対象として,指定する明示的ディメンションにおいて選択したディメンションメンバのQName集合を含むシーケンスを返す。ディメンションメンバのQName集合での並び順は任意(実際のツリー関係の順である必要はない)。
90214 xfi:filter-member-DRS-selection(xs:QName, xs:QName, xs:QName, xs:string?, xs:string) 指定アークロール,指定リンクロールにおいて有効な関係のネットワークの中で,指定する起点メンバと指定する関係軸を持つディメンションメンバのみを対象として,指定する明示的ディメンションにおいて選択したディメンションメンバのQName集合を含むシーケンスを返す。ディメンションメンバのQName集合での並び順は任意(実際のツリー関係の順である必要はない)。本関数で考慮される関係は,XBRLディメンション仕様において規定された要件を満たすアーク要素によって表現されるものであることに留意してほしい。
90304 xfi:fact-segment-remainder(schema-element(xbrli:item)) XBRLディメンション仕様に基づくディメンション値ではないセグメントの内容を返す。
90305 xfi:fact-scenario-remainder(schema-element(xbrli:item)) XBRLディメンション仕様に基づくディメンション値ではないシナリオの内容を返す。
90306 xfi:fact-has-explicit-dimension(schema-element(xbrli:item), xs:QName) 指定するファクトの項目がセグメントまたはシナリオのいずれかにおいて指定する明示的ディメンションの値を報告しているか検証する。
90307 xfi:fact-has-typed-dimension(schema-element(xbrli:item), xs:QName) 指定するファクトの項目がセグメントまたはシナリオのいずれかにおいて指定する型付ディメンションの値を報告しているか検証する。
90308 xfi:fact-has-explicit-dimension-value(schema-element(xbrli:item), xs:QName, xs:QName) 指定するファクトの項目がセグメントまたはシナリオのいずれかにおいて指定する明示的ディメンションの指定メンバを報告しているか検証する。
90309 xfi:fact-explicit-dimension-value(schema-element(xbrli:item), xs:QName) 指定する項目がセグメントまたはシナリオのいずれかにおいて指定する明示的ディメンションの報告されるメンバのQNameを返す(存在する場合)。
90310 xfi:fact-typed-dimension-value(schema-element(xbrli:item), xs:QName) 指定する項目のセグメント又はシナリオのいずれかにおいて指定する型付ディメンションの値があれば,型付ディメンションの値を含むセグメント又はシナリオの子要素を返し,そうでなければ空のシーケンスを返す。
90403 xfi:fact-dimension-s-equal2(schema-element(xbrli:item), schema-element(xbrli:item), xs:QName) 指定するディメンションにおいて(セグメントかシナリオかに関係なく),両方の項目が同じ値(初期設定あるいは明示値)を持つ場合に真を返す。
90501 xfi:linkbase-link-roles(xs:string, element(xbrli:xbrl)) 指定するアークロールURIのアークを含む拡張リンクロールURIの集合を含むシーケンスを返す。
90503 xfi:concept-label(xs:QName, xs:string?, xs:string?, xs:string, element(xbrli:xbrl)) 指定するリンクロール,リソースロール,及び言語を持つラベルを含む文字列を返す。
90504 xfi:arcrole-definition(xs:string, element(xbrli:xbrl)) アークロールの定義を含む文字列を返し,定義がない場合は空のシーケンスを返す。
90505 xfi:role-definition(xs:string, element(xbrli:xbrl)) ロールの定義を含む文字列を返し,定義がない場合は空のシーケンスを返す。
90506 xfi:fact-footnotes(element(), xs:string?, xs:string?, xs:string?, xs:string) 指定するリンクロール,リソースロール,及び言語を持つ脚注を含む文字列を返す。
90507 xfi:concept-relationships(xs:QName, xs:string?, xs:string, xs:string, xs:nonNegativeInteger?, xs:QName?, xs:QName?, element(xbrli:xbrl)) ソースコンセプトに対して指定する関係を持つ,有効な関係の集合を含むシーケンスを返す。有効な関係のシーケンスは,処理系に依存したオブジェクトあるいは関係の代用物であったりする。これらのオブジェクトは不明瞭であるが,関数の引数として使用されるだけで,直接XPathで走査したり値を参照したりはしない。処理系に依存したオブジェクトあるいは関係の代用物は,他の関数(xfi:relationship-from-concept,xfi:relationship-to-concept,xfi:relationship-attribute,xfi:relationship-element,xfi:link-attribute,及びxfi:link-elementなど)の引数に使用されることだけを目的としている。
90508 xfi:relationship-from-concept(xfi:relationship.type) 有効な関係の元(from)(起点)となるコンセプトのQNameを返す。
90509 xfi:relationship-to-concept(xfi:relationship.type) 有効な関係の先(to)(対象)となるコンセプトのQNameを返す。
90510 xfi:distinct-nonAbstract-parent-concepts(xs:string?, xs:string, element(xbrli:xbrl)) 非抽象コンセプトを表し,非抽象の子を持つ親となるコンセプト名のシーケンスを返す。
90511 xfi:relationship-attribute(xfi:relationship.type, xs:QName) 有効な関係のアークにおいて指定する属性の型付(PSVI)値を返す。
90512 xfi:relationship-link-attribute(xfi:relationship.type, xs:QName) 有効な関係の親のリンク要素において指定する属性の型付(PSVI)値を返す。
90513 xfi:relationship-name(xfi:relationship.type) 有効な関係のアークにおけるアーク要素のQNameを返す。複数のアーク要素が,同じリンク要素内のあるアークロールで使用される場合,基本集合の指定に役に立つ場合がある。
90514 xfi:relationship-link-name(xfi:relationship.type) 有効な関係のアークにおけるリンク親要素のQNameを返す。複数のリンク要素が,あるアークロールで使用される場合,基本集合を指定するのに役立つ場合がある。
90601 xfi:format-number(numeric?, xs:string) XSLT 2.0のformat-number関数(XPath2.0の関数ではない)の実装を,XBRLプロセッサに対応する形で提供する。

17 カスタム関数

Formulaプロセッサに組み込まれている関数には,xs:time()やxs:QNameなどのXMLスキーマコンストラクタ,XPath2.0に組み込まれたnode-nameやindex-ofなどの関数,そして関数レジストリの一部の関数がある。さらに,カスタム関数ではそれらの組み込み関数集合を拡張できる。

カスタム関数は,関数シグネチャのグローバル宣言により宣言される。宣言することで,パラメータ,変数,フィルタ,及びその他の実行可能なXPath式を含む,FormulaリンクベースのすべてのXPath式でその関数が使用できるようになる。

カスタム関数は,Formulaプロセッサ内に実装してもよい。例えば,Formulaプロセッサの実装に使用されている言語に合わせてJavaやPythonでコーディングするか,又は,XPathのカスタム関数実装のステップを使い,Formulaリンクベース内でカスタム関数を実装する。リンクベース内での実装はFormulaプロセッサ製品間で可搬性があるのに対して,JavaやPythonのコードで実装された場合は個々の製品のインタフェースやプロセッサのアーキテクチャに依存する(しかし,実行速度はリンクベース内での実装より早い。インスタンスではないDTSオブジェクトにもアクセスしやすい利点はあると考えられる)。

17.1 リンクベース内に実装されたカスタム関数

リンクベース内に実装されるカスタム関数は,一連のXPath2.0式のステップから構成される。XPath式に加えて構造的な作法が提供されており,各ステップの結果は値になり,次に続くステップから名前によって参照できる。

式のステップは,文書に記載された順に実行される。関数は他の関数を呼び出したり,再帰呼出しもできる。

例14:カスタム関数の実装(CFI)

説明 CFIの識別名 CFIの実装
入力文字列の先頭及び末尾の空白を削除する。 eg:trim ($input as xs:string?) as xs:string
<cfi:implementation>
<cfi:input name="arg"/>
<cfi:output>
replace(replace($arg,'\s+$',''),'^\s+','')
</cfi:output>
</cfi:implementation>
入力が数値型にキャストできるときに真を返す。 eg:isNumeric ($input as xs:anyAtomicType?) as xs:boolean
<cfi:implementation>
<cfi:input name="value"/>
<cfi:output>
string(number($value)) != 'NaN'
</cfi:output>
</cfi:implementation>
金額の現在価値を計算する式。$amountDue * my-fn:power((1 + $interestRate), $numYears) my-fn:power($y as xs:decimal, $exp as xs:decimal) as xs:decimal
<!-- positive integer power function -->
<variable:function xlink:type="resource" xlink:label="cust-fn-power-sig" name="my-fn:power" output="xs:decimal">
<variable:input type="xs:decimal"/>
<variable:input type="xs:decimal"/>
</variable:function>
<!-- Arc from formula 1 to the implementation -->
<generic:arc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/function-implementation" xlink:from="cust-fn-power-sig" xlink:to="cust-fn-power-impl" order="1.0"/>
<!-- positive integer power function -->
<cfi:implementation xlink:type="resource" xlink:label="cust-fn-power-impl">
<cfi:input name="y"/>
<cfi:input name="exp"/>
<cfi:output>
if ($exp lt 0) then ( 1 div my-fn:power($y, - $exp) ) else ( if ($exp lt 1) then 1 else ($y * my-fn:power($y,$exp - 1)) )
</cfi:output>
</cfi:implementation>

17.2 外部プログラムのカスタム関数

外部でプログラミングされるカスタム関数は,Formulaプロセッサを実装する言語や,その実装におけるオブジェクトモデル及びAPIに依存する。そのため,難しい計算が必要になるような場面では高効率で,Formulaプロセッサのすべてのオブジェクトモデルにもアクセスすることができる。これによって,DTS(スキーマファイル及びリンクベース)のオブジェクトモデルや,プロセッサ環境であるビジネスシステム(SQLデータベース,ビジネスウェアハウス,そしてビジネスインテリジェンス分析)に対して,あらゆるアクセスが可能になる。

18 複数インスタンス処理の概観

複数インスタンス処理に対する要件は,フォーミュラにおけるチェイニングに対するユースケースと,チェイニングに必要な要件を満たす同様の技術に端を発している。チェイニングでは,一連の処理の出力で,次に続く処理で参照できるファクト変数を生成する。

複数インスタンス処理のユースケースでは,次のような報告を処理する必要がある。

Formulaリンクベースの初期のモジュールにおいて提案された方法は,図31で示すように,Formula処理前に複数のインスタンス文書を統合して,中立のタクソノミ及び集約したインスタンス文書にするというものであった。しかし統合する段階で多くの問題が発生した。通常は,複数四半期,複数年のデータがあるが,年毎にタクソノミは異なる。タクソノミの名前空間はしばしば変更され,リンクベースは特に構造的に以前とは相容れないほどに異なるものになる。そして,報告のセマンティクスを定義するサブツリーは(提示される全コンセプト,ディメンションメンバの集約のいずれの観点においても)報告期間ごとに異なるものとなる。開発者は,この段階の処理を必要としない複数インスタンス処理における解決策を見つける必要があった。

図31:インスタンス統合の処理モデル

統合における(技術的ではない)意味的な問題は,法律改正や事例に伴うコンセプトの変更,ディメンションの変更,プレゼンテーション及びディメンションの定義における異なるツリー関係,contextRefの変更に関連する。

複数インスタンス処理の解決策として,インスタンスをそれ自身のDTSのまま個別にFormulaプロセッサに読み込み,他のインスタンスのDTSのスキーマやリンクベースと混在させない方法がとられた(DTSが異なる場合に限る)。図32は,この方法を示している。

図32:複数インスタンスの個別処理モデル

この方法では,フォーミュラのチェイニングも実現されている。これは複数インスタンス処理及びチェイニングにおける共通の解決策となっている。そこでは処理中,複数のインスタンスは”作業用記憶域”のように振舞う(18.1節を参照)。

インスタンスはパラメータから派生したリソースによって表現されるので,プロセッサからの呼び出しや外部インタフェース機構を利用しやすい。instance-variable関係によって,各インスタンスは変数と関連付けられる(変数が標準の入力XBRLインスタンス文書ではなく,関連するインスタンスからそのファクトを取得することを認識できるようにするため)。同様に,formula-instance関係によって,フォーミュラから生成された出力ファクトは特定の(標準出力のXBRLインスタンス文書とは異なる)インスタンスに直接関連付けられる。上記の使用法におけるリンクベースの内容は,図33に示すとおりである。

図33:複数インスタンス処理におけるリンクベース内容物

アスペクト処理については複数インスタンス処理の実装を伴った場合も変更はない。フォーミュラのアスペクトはその変数に結びつけられるファクトのアスペクトに由来する。つまり,変数に結びつく異なるインスタンスに存在するファクトは,それぞれがアスペクトを提供するが,そのアスペクトは,由来するインスタンスからは独立している。アスペクトの”保護”は,アスペクトによるもので,インスタンスによるものではない。

ここでの例は,簡単なテストケースを示している。

図34:複数インスタンス処理の概念図(複数インスタンスをまたいでアスペクトが一致するファクトの総計値を求める場合)

例15:複数インスタンスをまたいでアスペクトが一致するファクトの総計値を求めるリンクベース構文

リンクベース構文 意味
<instance:instance name="i:inst-b" xlink:type="resource" xlink:label="inst-b"/>
入力インスタンスBは,2番目の入力インスタンス文書である。Formulaプロセッサは,このインスタンスを2番目の入力XBRLインスタンス文書ファイルと関連付ける(定義上のインスタンスと実インスタンス文書との関連付けは,適合性テストではテストケースのXMLファイルによって実現されるが,商用環境ではアプリケーションによって実現される)。
<instance:instance name="i:inst-c" xlink:type="resource" xlink:label="inst-c"/>
入力インスタンスCは3番目の入力インスタンス文書である。Formulaプロセッサは,このインスタンスを3番目の入力XBRLインスタンス文書ファイルに関連付ける。
<formula:formula xlink:type="resource" xlink:label="formula1" value="$inst-a-item + $inst-b-item + $inst-c-item" source="inst-a-item" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
</formula:formula>
このフォーミュラは,3つのインスタンス(標準入力のインスタンス,インスタンスB,そしてインスタンスC)を入力として,暗黙的に符合するファクト変数の項目をそれぞれ評価して出力を生成する。
<variable:factVariable xlink:type="resource" xlink:label="inst-a-item" bindAsSequence="false"/>
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" name="inst-a-item" xlink:from="formula1" xlink:to="inst-a-item" order="1.0"/>
ファクト変数inst-a-itemには,標準入力のインスタンス文書のファクトに結びつけられる。このファクト変数は,たった1つの関係,(1)のフォーミュラからのvariable-set関係における対象である。標準入力のインスタンス文書から取得されるためinstance-variable関係はない。
<variable:factVariable xlink:type="resource" xlink:label="inst-b-item" bindAsSequence="false"/>
<generic:arc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/instance-variable" xlink:from="inst-b" xlink:to="inst-b-item" order="1.0"/>
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" name="inst-b-item" xlink:from="formula1" xlink:to="inst-b-item" order="1.0"/>
ファクト変数inst-b-itemは入力インスタンスBのファクトに結びつけられる。ファクト変数は(1)インスタンスBからinstance-variable関係,及び(2)フォーミュラからのvariable-set関係の2つの関係における対象である。
<variable:factVariable xlink:type="resource" xlink:label="inst-c-item" bindAsSequence="false"/>
<generic:arc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/instance-variable" xlink:from="inst-c" xlink:to="inst-c-item" order="1.0"/>
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" name="inst-c-item" xlink:from="formula1" xlink:to="inst-c-item" order="1.0"/>
ファクト変数inst-c-itemは入力インスタンスCからのファクトに結びつけられる。

18.1 インスタンスの関係によるチェイニング

ここでの例は,チェイニングによって関連付けられた,A = B + C及びC = D + E,の2つのフォーミュラを示している。

  • フォーミュラ1(A=B+C):BとCはファクト変数。結果はA。ファクト変数Bは標準入力のインスタンス文書(初期設定)からファクトが取得される。ファクト変数Cは一時インスタンス文書からファクトが取得される(アークによる関連付けあり)。
  • フォーミュラ2(C=D+E):DとEはファクト変数。結果はC。ファクト変数D及びEは標準入力のインスタンス文書からファクトが取得される。出力ファクトの出力先は一時インスタンス文書。

図35:インスタンスの関係によるチェイニングの概念図

例16:インスタンスの関係によるC = D + EからA = B + Cへのチェイニングのリンクベース構文

リンクベース構文 意味
<formula:formula xlink:type="resource" xlink:label="formulaC" value="$d + $e" source="d" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:c
</formula:qname>
</formula:concept>
</formula:aspects>
</formula:formula>
(1) このフォーミュラでは,c = d + eが生成される。このcは,一時インスタンス文書temp-c-instanceに出力される。
<instance:instance name="instance:temp-c-instance" xlink:type="resource" xlink:label="temp-c-instance"/>
temp-c-instanceの宣言。フォーミュラ(1)の出力を保持する作業用記憶域であり,フォーミュラ(2)のvariable_cへの入力になる。
<generic:arc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/formula-instance" xlink:from="formulaC" xlink:to="temp-c-instance" order="1.0"/>
<generic:arc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/instance-variable" xlink:from="temp-c-instance" xlink:to="variable_c" order="1.0"/>
各リソースを接続するアークである。上記フォーミュラ(1)とtemp-c-instance,フォーミュラ(2)の変数variable_cと temp-c-instanceをそれぞれ接続している。変数variable_cは,入力されるtemp-c-instanceのファクトに対して結びつく。これらの結果として ”チェイニング”が実施される。ファクトtemp:cは,(1)によってtemp-c-instance内で生成され,(2)のvariable_cによってtemp-c-instanceから利用される。
<formula:formula xlink:type="resource" xlink:label="formulaA" value="$b + $c" source="b" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:a
</formula:qname>
</formula:concept>
</formula:aspects>
</formula:formula>
(2) このフォーミュラでは,(1)によって生成された一時インスタンスを入力とする変数cを使用して,a = b + cを生成する。
<variable:factVariable xlink:type="resource" xlink:label="variable_b" bindAsSequence="false"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_c" bindAsSequence="false"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_d" bindAsSequence="false"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_e" bindAsSequence="false"/>
上記フォーミュラのファクト変数。この例では汎用変数は使用していないことに留意すること。
コンセプト名フィルタはこの例の説明では省かれているが,SVNテストケースのファイルabcde-formula1.xml(ディレクトリ60400 Chaining-Processing配下)で見ることができる。
出力ファクトAは,標準出力XBRLインスタンス文書の中に生成され,通常,出力XBRLインスタンス文書ファイルに保存される。しかし,出力ファクトCはtemp-c-instance内にあり,標準出力XBRLインスタンス文書ファイルには保存されない。出力ファクトCを標準出力のインスタンス文書に保存したい場合は,ファクトCを標準出力のインスタンス文書にコピーする必要がある。インスタンスのチェイニングでは,出力ファクトが別のフォーミュラの他の変数に利用される前にすべてのファクトを単一のインスタンス文書に生成しておく必要があり,標準出力のインスタンス文書をファクト生成先又はファクトの参照元の両方で使用できないようにしている。そうでないと,生成結果を入力インスタンス文書自体に追加することになるためである。

19 タプル出力の生成概観

タプルは<tuple:tuple>を使用することで出力インスタンス文書に生成される。これは<formula:formula>と似ているが,<tuple:tuple>では値や精度,その他ファクトの項目のアスペクトについてのいずれのルールも定義しない。入れ子になったタプル及び項目の要素は,親の<tuple:tuple>からvariables-scope関係で接続される<tuple:tuple>及び<formula:formula>要素によって,タプル内に生成される。また,そのvariables-scope関係によって,親である変数集合の変数,及び,親のタプルにおける変数名が伝播される。親のタプルから伝播される変数名は,variables-scope関係を経由して位置アスペクトを伝播する。これによって,子タプル又は子項目では,<tuple:location>ルールのsource属性において,図36で示すような方法によって伝播された変数の位置アスペクトを参照できる。

図36:タプルを出力するチェイニングされたフォーミュラの概念図(タプルに複数のファクトの項目を含む場合)

この例は,テストケースである入力ファクトからタプルを生成する簡単なテストケースを示している。タプルが使用される多くの場合,個々の要素が密接に関係しあってかなり複雑な構成になる傾向にある。例えば,入力Global Ledgerインスタンス文書を正規化,総計,又は検証して出力Global Ledgerインスタンス文書を生成する場合などが挙げられる。単純化したテストケースを,SVNディレクトリ60500 FormulaTuples-Processing配下のファイルregionProductSalesToTuple-formula.xmlに見ることができる。ここではディメンション対応型の入力インスタンス文書をディメンション非対応型のタプル出力インスタンス文書に変換している。さらに単純化されたテストケース(taub-formula1.xml)が,同じテストケースディレクトリ内にある。単純な単一の入力項目からのタプル出力をうまく実証している。

図37:タプルを出力するチェイニングされたフォーミュラの概念図(入れ子になった各タプルに,それぞれ1つのファクトの項目を含む場合)

例17:それぞれに1つのファクトの項目を含む入れ子になったタプルを生成するリンクベース構文

リンクベース構文 意味
<tuple:tuple xlink:type="resource" xlink:label="formulaTupleT" aspectModel="non-dimensional" implicitFiltering="true">
<formula:aspects>
<formula:concept>
<formula:qname>
test:t
</formula:qname>
</formula:concept>
<!-- as a tuple, no other aspects are applicable -->
</formula:aspects>
</tuple:tuple>
(1) タプルtを生成するフォーミュラはtest:aが変数aに入力されたときに評価される。つまり,test:aが2つあれば,タプルtの結果は2つになる(テストケースtaub-formula1.xmlを参照)。
<varsscope:variablesScopeArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/variables-scope" name="outputInstanceTupleT" xlink:from="formulaTupleT" xlink:to="formulaItemA" order="1.0"/>
出力インスタンス文書のタプルt(1),及び入力インスタンス文書を入力とする変数aは,どちらも入れ子になる項目Aを出力するフォーミュラ(2)から参照可能である。
<formula:formula xlink:type="resource" xlink:label="formulaItemA" value="$inputInstanceFactItemA" source="inputInstanceFactItemA" aspectModel="non-dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:a
</formula:qname>
</formula:concept>
<tuple:location source="outputInstanceTupleT"/>
</formula:aspects>
</formula:formula>
(2) フォーミュラ(formulaItemA)は,タプルt内に配置されるファクトの項目<test:a>を1つ生成する。
<varsscope:variablesScopeArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/variables-scope" name="outputInstanceItemA" xlink:from="formulaItemA" xlink:to="formulaTupleU" order="1.0"/>
フォーミュラ(formulaItemA)から伝播する出力タプルt(1),及びタプルt内の出力ファクトの項目a,入力インスタンス文書を入力とする変数は,すべてフォーミュラ(formulaTupleU)(3)から参照可能である。
<tuple:tuple xlink:type="resource" xlink:label="formulaTupleU" aspectModel="non-dimensional" implicitFiltering="true">
<formula:aspects>
<formula:concept>
<formula:qname>
test:u
</formula:qname>
</formula:concept>
<tuple:location source="outputInstanceTupleT"/>
<!-- as a tuple, no other aspects are applicable -->
</formula:aspects>
</tuple:tuple>
(3) フォーミュラ(formulaTupleU)は,タプルt内の項目aのあとに,入れ子になるタプルuを生成する。
<varsscope:variablesScopeArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/variables-scope" name="outputInstanceTupleU" xlink:from="formulaTupleU" xlink:to="formulaItemB" order="1.0"/>
フォーミュラ(formulaTupleU)(3)の結果は,variables-scope関係によって,下記フォーミュラ(formulaItemB)(4)から参照可能であり,ファクトの項目bをタプルu内に配置できる。タプルu及びフォーミュラ(formulaTupleU)(3)の全ての変数はフォーミュラ(4)から参照可能である。
<formula:formula xlink:type="resource" xlink:label="formulaItemB" value="$outputInstanceItemA + 1" source="inputInstanceFactItemA" aspectModel="non-dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:b
</formula:qname>
</formula:concept>
<tuple:location source="outputInstanceTupleU"/>
</formula:aspects>
</formula:formula>
(4) フォーミュラであり,タプルu内に配置されるファクトの項目test:b(= 項目a + 1)を1つ生成する。
<variable:factVariable xlink:type="resource" xlink:label="variable_a" bindAsSequence="false"/>
<variable:variableArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2008/variable-set" xlink:from="formulaTupleT" xlink:to="variable_a" order="1.0" name="inputInstanceFactItemA"/>
唯一のファクト変数であり,入力ファクト<test:a>に結びつけられる。このファクト変数の評価毎に,タプルtと,tに入れ子になる項目a,タプルu,uに入れ子になる項目bを生成する。

19.1 変数スコープの関係によるチェイニング

この例では,18.1節のインスタンスのチェイニングで使用した同じ事例,チェイニングにより関連付けられた2つのフォーミュラ(A = B + C及びC = D + E)を示しているが,こちらはvariables-scope関係によるチェイニングを使用した実装になる。

  • フォーミュラ1(A=B+C):BとCはファクト変数。結果はA。ファクト変数Bは入力XBRLインスタンス文書で評価される。ファクト変数Cはフォーミュラ(2)の結果Cとvariables-scope関係で関連付けられる。
  • フォーミュラ2(C=D+E):DとEはファクト変数。結果はC。結果CはAを算出するフォーミュラ(1)とvariables-scope関係で関連付けられる。

図38:変数スコープの関係によるチェイニングの概念図

例18:変数スコープの関係によるC = D + EからA = B + Cへのチェイニングのリンクベース構文

リンクベース構文 意味
<formula:formula xlink:type="resource" xlink:label="formulaC" value="$d + $e" source="d" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:c
</formula:qname>
</formula:concept>
</formula:aspects>
</formula:formula>
(1) フォーミュラであり,結果のファクトの項目test:cを1つ生成する。
<varsscope:variablesScopeArc xlink:type="arc" xlink:arcrole="http://xbrl.org/arcrole/2010/variables-scope" name="c" xlink:from="formulaC" xlink:to="formulaA" order="1.0"/>
フォーミュラ(formulaC)(1)の結果は,次の(2)のフォーミュラ(formulaA)から参照できる。
<formula:formula xlink:type="resource" xlink:label="formulaA" value="$b + $c" source="b" aspectModel="dimensional" implicitFiltering="true">
<formula:decimals>
0
</formula:decimals>
<formula:aspects>
<formula:concept>
<formula:qname>
test:a
</formula:qname>
</formula:concept>
</formula:aspects>
</formula:formula>
(2) フォーミュラであり,a = b + cを生成する。項cはvariables-scope関係によって上記フォーミュラ(1)の出力に関連付けられる。
<variable:factVariable xlink:type="resource" xlink:label="variable_b" bindAsSequence="false"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_d" bindAsSequence="false"/>
<variable:factVariable xlink:type="resource" xlink:label="variable_e" bindAsSequence="false"/>
これらはファクト変数であり,入力インスタンス文書のファクトの項目に結びつけられる。
コンセプト名フィルタはこの例の説明では省かれているが,SVNテストケースのファイルabcde-formula1.xml (ディレクトリ60600 VariablesScope-Processing配下)で見ることができる。

附属書A(参考)原文書の知的財産の状態

この附属書は,本体及び附属書に関連する事柄を補足するもので,規定の一部ではない。 原文書(英文)及びその翻訳を他へ複写及び供給してもよい。原文書(英文)の論評,その他の説明又はその実装の援助といった二次的な著作物も,この著作権宣言及び次の段落のすべてをこうした複写物及びその二次的著作物に含むという条件の下で,原文書(英文)及びその翻訳の全部又は一部を,どのような制限もなく,用意し,複写し,公表し,配布してもよい。しかしながら,英語以外の言語への翻訳で必要とする場合を除き,原文書(英文)自体は,著作権宣言及びXBRL Internationalへの参照又はXBRL組織への参照を削除するなどの,いかなる修正も行ってはならない。XBRL Internationalの会員は,XBRL Internationalの知的財産方針(www.xbrl.org/legal)の下で,特定の使用許諾を供与することに合意する。

原文書(英文)及びこれに含まれる情報は,“現状有姿(AS IS)”で提供する。XBRL Internationalは,明示的にせよ又は暗黙的にせよ,ここに含まれる情報の利用が,何らかの権利,商品性についての暗黙的な保障又は特定の目的に対する適合性について侵害していないことを含むがこれに限定されるものではないことに関して,すべての保障を否認する。

原文書(英文)の利用者は,XBRL International規定への適合又は採用には,特許権で保護されている発明を必要とするかもしれないことに注意しなければならない。XBRL Internationalは,XBRL International規定によっては,使用許可が必要となるかもしれない特許を識別することに関して責任を負わないし,目に留まったこれらの特許の法的妥当性若しくは適用範囲について法的な審問を主導することに関しても責任を負わない。XBRL International規定は,単に目処をあたえ助言するにすぎない。採用を予定する利用者は,特許権を侵害してないことについて自らの責任で自らを護らなければならない。XBRL Internationalは,原文書(英文)に記述されている技術の実装若しくは使用に付随していると主張されるかもしれない知的財産若しくはその他の権利の妥当性若しくは適用範囲又はそうした権利の下にどんな範囲の使用許諾権が有るのか無いのかについては,どのような立場もとらないだけでなく,その権利を明確にするために,なんらかの努力をしたとの表明もしない。XBRL Internationalの会員は,XBRL Internationalの知的財産方針(www.xbrl.org/legal)の下で,特定の使用許諾を供与することに合意する。

附属書B(参考)謝辞

この規定は,Formulaワーキンググループの参加者を含む多くの方々の協力なしには作成され得なかったものである。

附属書C(参考)文書履歴

日付著者詳細
2011年10月12日Herm Fischer

最初の草案を作成。

2011年12月06日Herm Fischer

13節から19.1節を加筆。

2011年12月16日Herm Fischer

6節へUMLクラス図を追加,3節及び16節を修正。

附属書D 原文書の改訂履歴

この附属書はこの文書に加えられた加筆修正の一覧である。ここには,2011年12月21日時点までにXBRL InternationalのFormulaワーキンググループによって承認された改訂内容をすべて記載している。

この文書に改訂履歴はなし。