2.4.2 リンク検証

インスタンス文書では単純リンクを記述できます。また,インスタンス文書には,拡張リンクの一つである脚注リンクを記述できます。このため,タクソノミー文書と同様にリンクの整合性をチェックします。

さらに,完全な妥当性検証を実行すれば,次の内容も検証できます。

<この項の構成>
(1) requires-elementアークの検証【完全な妥当性検証の場合だけ有効】
(2) essence-aliasアークの検証【完全な妥当性検証の場合だけ有効】
(3) summation-itemアークの検証【完全な妥当性検証の場合だけ有効】
(4) 精度の推測と概数【完全な妥当性検証の場合だけ有効】

(1) requires-elementアークの検証【完全な妥当性検証の場合だけ有効】

定義リンク(link:definitionLink)のrequires-elementアークで,xlink:from属性に対応するアイテムやタプルがインスタンス文書中に存在する場合,それと対になるxlink:to属性に対応するアイテムやタプルもインスタンス文書中に存在するかを検証します。存在しなければエラーとします。ただし,xlink:to属性が指すアイテムまたはタプルがあって,xlink:from属性が指すアイテムまたはタプルがない場合は,エラーとしません。

なお,この検証では,インスタンス文書の任意の位置にfrom属性およびto属性に対応するアイテムまたはタプルが存在すればよく,「それぞれのアイテムまたはタプルがp-equal,c-equalおよびu-equalでなければならない」という条件はありません。p-equal,c-equalおよびu-equalの意味は次のとおりです。これらの用語の詳細については,XBRLの仕様書を参照してください。

(2) essence-aliasアークの検証【完全な妥当性検証の場合だけ有効】

定義リンク(link:definitionLink)のessence-aliasアークで,xlink:from属性値のトラバース先であるアイテム(実名アイテム)と,それと対になるxlink:to属性値のトラバース先であるアイテム(別名アイテム)とが同一かを検証します。ここでいう同一とは,p-equalおよびc-equalの関係にあるアイテム同士がv-equal(value-equal:値が同じ,または同じ値を持つ関係)であることをいいます。また,検証の対象となるのは,リンクベースの検証結果がエラーになっていない関係ネットワークのessence-aliasアークだけです。

なお,実名アイテムが存在しても,別名アイテムが存在しない場合は検証されません。このほかに検証が実施されないケースを次に示します。

また,アイテムの有効数字がない場合等の特殊なケースを次に示します。

また,必要に応じて次の検証を実施することもできます。

(a) インスタンス文書に存在しないアイテムを推測し検証する

インスタンス文書中に,あるessence-aliasアークのxlink:to属性値に対応するアイテムBが存在し,かつ,このアイテムとp-equalおよびc-equalが成立するアイテムA(xlink:from属性値に対応)が存在しない場合,アイテムAを推測することもできます。アイテムの推測にはプロパティcbrp.parse.validate.full-checking.essence-alias.inferを使用します。

essence-aliasアークによる実名アイテムと別名アイテムの関係が連続する場合には,インスタンス文書に存在しないアイテムをすべて再帰的に推測して検証します。この機能を使用すると,推測されたアイテムはPTVI(Post-Taxonomy Validation Infoset)に含まれるため,推測したアイテムと既存アイテムとの間に検出された矛盾内容はPTVIで確認できます。

このプロパティの詳細については,「4.16.2(20) cbrp.parse.validate.full-checking.essence-alias.infer」を参照してください。PTVIの出力内容については,「2.10 PTVIの生成(XBRL2.1の場合)」を参照してください。また,PTVIの詳しい意味については,XBRLの仕様書を参照してください。

インスタンス文書に存在しないアイテムを推測する例を次に示します。

例1:アイテムA→アイテムBへのessence-aliasアーク
  • アイテムBの内容
    <B contextRef="c1" precision="3" unitRef="u1">123</B>
  • アイテムBから推測されるアイテムAの内容
    <A contextRef="c1" precision="3" unitRef="u1">123</A>
例2:アイテムA→アイテムB→アイテムCへのessence-aliasアーク
  • アイテムCの内容
    <C contextRef="c1" precision="3" unitRef="u1">100</C>
  • アイテムCから推測されるアイテムA,アイテムBの内容
    <A contextRef="c1" precision="3" unitRef="u1">100</A>
    <B contextRef="c1" precision="3" unitRef="u1">100</B>
例3:アイテムA→アイテムB,アイテムA→アイテムCへのessence-aliasアーク
  • アイテムBの内容
    <B contextRef="c1" precision="3" unitRef="u1">123</B>
  • アイテムCの内容
    <C contextRef="c1" precision="2" unitRef="u1">120</C>
  • アイテムBまたはアイテムCから推測されるアイテムAの内容
    <A contextRef="c1" precision="3" unitRef="u1">123</A>
この場合は,アイテムB・アイテムCのどちらからでもアイテムAを推測できます。アイテムB(またはアイテムC)から推測されたアイテムAは,アイテムC(またはアイテムB)とv-equalが成立するかを検証します。そのため,アイテムBとアイテムCのv-equalが成立しない場合はエラーになり,推測されたアイテムAはエラーの根拠としてPTVIに出力されます。
一方,v-equalが成立し,かつ数値アイテムの場合は,推測したアイテムAとアイテムC(またはアイテムB)のうち,precision属性値が大きい方のアイテムからアイテムAを推測し直します。そのため,アイテムAはアイテムBから推測した値となります。また,非数値アイテムの場合は,余分な空白を削除した値(XPathのnormalize-space()関数で得られる結果と同じ)が推測されるため,v-equalである場合はどちらも同じ値です。
(b) 検証結果の例
例:アイテムA→アイテムB→アイテムCへのessence-aliasアーク
これらの例のu1・u2・u3およびc1・c2・c3は,s-equal(structure-equal)でないと仮定する。
  • 次の場合はA→Bの範囲で検証する。

    <A unitRef="u1" contextRef="c1" precision="2" id="a1">10</A>
    <B unitRef="u1" contextRef="c1" precision="2" id="b1">10</B>

  • 次の場合はc-equal,p-equalのBまたはCがないため,検証しない。

    <A unitRef="u1" contextRef="c4" precision="2" id="a2">10</A>

  • 次の場合はA→Bの範囲で検証する。

    <tuple>
     <A unitRef="u1" contextRef="c2" precision="2" id="a3"></A>
     <B unitRef="u1" contextRef="c2" precision="2" id="b3"></B>
    </tuple>

  • 次の場合はxsi:nil属性にtrueが指定されているため,検証しない。

    <A unitRef="u1" contextRef="c2" precision="2" id="a4" xsi:nil='true'></A>
    <B unitRef="u2" contextRef="c2" precision="2" id="b4" xsi:nil='true'></B>

  • 次の場合は二つのアイテムが重複しているため,警告となる。

    <A unitRef="u2" contextRef="c1" precision="2" id="a7">10</A>
    <B unitRef="u2" contextRef="c1" precision="2" id="b8">10</B>

  • 次の場合は,拡張機能を利用していればA→B→Cの範囲で検証する。
    その場合,CからBを推測して検証する。

    <A unitRef="u3" contextRef="c3" precision="2" id="a9">20</A>
    <C unitRef="u3" contextRef="c3" precision="2" id="b9">20</C>

(3) summation-itemアークの検証【完全な妥当性検証の場合だけ有効】

計算リンク(link:calculationLink)のsummation-itemアークで,次の値が同じになっているかを検証します。

ただし,リンクベースの完全な妥当性検証でエラーになっていない関係ネットワークにあるsummation-itemアークだけが検証の対象になります。また,関係ネットワークに含まれても,インスタンス文書に存在しないアイテムについては検証しません。

また,検証が実施されないケースを次に示します。

また,アイテムの有効数字がない場合の特殊なケースを次に示します。

(4) 精度の推測と概数【完全な妥当性検証の場合だけ有効】

検証時に数値アイテムのv-equalを比較するには,それぞれの値を精度の小さい方に丸めた値で比較します。数値アイテムの値の精度は,precision属性(有効桁数)やdecimals属性(正確であると考えられる小数位の桁数)から決定されます。uCosminexus Business Reporting Processorでは,インスタンス文書に対して完全な妥当性検証を実行するために,次の処理をします。

次に,precision属性の推測と概数の求め方と比較の方法を示します。

(a) decimals属性値を基にprecision属性値を推測する方法

数値アイテムの値の精度はprecision属性で示されます。precision属性が省略されている場合は,decimals属性から次の要領でprecision属性値を推測します。

(b) 概数の算出方法

概数はprecision属性値(省略されている場合は,decimals属性値から推測されたprecision属性値)から得た有効桁数のあとの数字を四捨五入して算出します。次の場合には,概数は算出されません。

数値アイテム,precision属性値およびdecimals属性値を基に,概数を算出する例を次に示します。

数値アイテムprecision属性値decimals属性値概数の算出結果
12.344412.34
12.345412.35
12.335412.34
12.346412.35
12.34501412.35
12345412350
123457(decimals属性値から推測した値)212345.00
0.1e-23(decimals属性値から推測した値)50.00100

(凡例)-:該当しません。


(c) 数値アイテムの比較方法

数値アイテムがv-equalかどうかを検証するには,c-equalおよびu-equalである数値アイテムAと数値アイテムBが,次の条件を満たしている必要があります。

  1. AとBの指定(または推定される精度)を比較し,小さい方の値をNとする
  2. AとBをそれぞれN桁の有効数字で丸めた概数同士に,x-equal([XPATH]-equal)が成立する

次に例として,二つの比較値(比較値自体が概数である場合を含む)と,その比較結果を示します。表中の( )の数値内は,precision属性値(またはdecimals属性値から推測されたprecision属性値)を示します。

比較値1比較値2比較時に仮定される概数と精度結果
12345(5)12350(4)【概数1】12350(4),【概数2】12350(4)
12345.00(7)12345(5)【概数1】12345(5),【概数2】12345(5)
0.00100(3)0.001(1)【概数1】0.001(1),【概数2】0.001(1)
12345(5)12340(4)【概数1】12350(4),【概数2】12340(4)
12345.05(7)12345.0(6)【概数1】12345.1(6),【概数2】12345.0(6)
12345(5)1234(4)【概数1】12350(4),【概数2】1234(4)
0.00100(3)0.010(2)【概数1】0.0010(2),【概数2】0.010(2)
12345(0)12345(5)概数1の精度は0のため,丸め処理はしないで常に偽になる