2.4.2 リンクの検証
(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の仕様書を参照してください。
- c-equal(context-equal):コンテキストが同じか,同じコンテキストに属する関係
- p-equal(parent-equal):親が同じか,同じ親を持つ関係
- u-equal(unit-equal):ユニット(単位)が同じか,同じユニット(単位)に属する関係
(2) essence-aliasアークの検証【完全な妥当性検証の場合だけ有効】
定義リンク(link:definitionLink)のessence-aliasアークで,xlink:from属性値のトラバース先であるアイテム(実名アイテム)と,それと対になるxlink:to属性値のトラバース先であるアイテム(別名アイテム)とが同一かを検証します。ここでいう同一とは,p-equalおよびc-equalの関係にあるアイテム同士がv-equal(value-equal:値が同じ,または同じ値を持つ関係)であることをいいます。また,検証の対象となるのは,リンクベースの検証結果がエラーになっていない関係ネットワークのessence-aliasアークだけです。
なお,実名アイテムが存在しても,別名アイテムが存在しない場合は検証されません。このほかに検証が実施されないケースを次に示します。
- アイテムが重複する場合
複数の実名アイテム(または別名アイテム)の名前空間とローカル名が同一で,さらにp-equalかつc-equalの関係にある場合は,二つ目以降のアイテムを警告とし,essence-aliasの検証は実施しません。
同様に,実名アイテムを推測する機能を使用している際に別名アイテムが重複した場合も,一つ目のアイテムについてだけ実名アイテムを推測します。二つ目以降の別名アイテムについては警告とし,アイテムの推測は実施しません。
- アイテムにnil属性が指定されている場合
実名アイテムや別名アイテムのxsi:nil属性がtrueである場合は,そのessence-aliasアークの検証は実施しません。
また,アイテムの有効数字がない場合等の特殊なケースを次に示します。
- アイテムの有効数字がない場合
実名アイテム,および別名アイテムの両方または,片方のアイテムのprecision属性値が0であるか,またはdecimals属性値から推測されるprecision属性値が0である場合は,essence-aliasアークの検証は常に不正(偽:false)となります。
ただし,プロパティ”cbrp.parse.validate.full-checking.ignoringZeroPrecision”が false の場合であり,true が設定されている場合には精度を考慮せず数値比較となります。
このプロパティの詳細については,「4.16.2(21) cbrp.parse.validate.full-checking. ignoringZeroPrecision」を参照してください。
- 数値アイテムの値がNaNである場合
実名アイテム,および別名アイテムの両方または,片方のアイテムの値がNaNである場合,実名アイテム,および別名アイテムのprecision属性値,またはdecimals属性値から推測されるprecision属性値(精度)に関係なく,常に不正(偽:false)となります。NaN==NaNも不正(偽:false)となります。
- 数値アイテムの値がINF である場合
実名アイテム,および別名アイテムの両方がINFである場合,実名アイテム,および別名アイテムのprecision属性値,またはdecimals属性値から推測されるprecision属性値(精度)に関係なく,正常(真:true)となります。
- 数値アイテムの値が-INF である場合
実名アイテム,および別名アイテムの両方が-INFである場合,実名アイテム,および別名アイテムのprecision属性値,またはdecimals属性値から推測されるprecision属性値(精度)に関係なく,正常(真:true)となります。
- 数値アイテムの値が0である場合
実名アイテム,および別名アイテムの両方が数値として0である場合,実名アイテム,および別名アイテムのprecision属性値,またはdecimals属性値から推測されるprecision属性値(精度)に関係なく,正常(真:true)となります。0.0と0も正常となります。また,0.000と0.0も正常となります。0.0と0.0001は不正となります。
また,必要に応じて次の検証を実施することもできます。
(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アークのxlink:from属性に対応するアイテム(合計値)
- summation-itemアークのxlink:to属性値に対応するアイテムの集合から算出した値(検証値)
ただし,リンクベースの完全な妥当性検証でエラーになっていない関係ネットワークにあるsummation-itemアークだけが検証の対象になります。また,関係ネットワークに含まれても,インスタンス文書に存在しないアイテムについては検証しません。
また,検証が実施されないケースを次に示します。
- アイテムが重複する場合
p-equal,u-equalおよびc-equalで重複するアイテムが検出された場合には,重複したアイテムを含むsummation-itemアークによる合計値の検証をしません。また,検証を行わなかった合計値(アイテム),および重複したアイテムについて警告を通知します。ただし,同一スコープであっても,p-equalでないアイテムについては,ともに合計値の計算に含まれるものとします。
- アイテムにnil属性が指定されている場合
summation-itemアークのxlink:from属性に対応するアイテム(合計値)のnil属性値がtrueの場合には,その合計値の検証をしません。
また,summation-itemアークの関係ネットワークにおけるxlink:to属性値に対応するアイテム(数値n)のnil属性値がtrueの場合には,検証値の算出には含まれません。
また,アイテムの有効数字がない場合の特殊なケースを次に示します。
- アイテムの有効数字がない場合
summation-itemアークのxlink:from属性に対応するアイテム(合計値)のprecision属性値が0であるか,またはdecimals属性値から推測されるprecision属性値が0である場合には,その合計値の検証は常に不正と判断します。ただし,合計値が0であった場合には,検証値との検証を行います。
また,precision属性値が0である場合に常に不正と判断するのは,プロパティ”cbrp.parse.validate.full-checking.ignoringZeroPrecision”が false に設定されている場合であり,true が設定されている場合には精度を考慮せずに数値比較となります。このプロパティの詳細については,「4.16.2(21) cbrp.parse.validate.full-checking. ignoringZeroPrecision」を参照してください。
(4) 精度の推測と概数【完全な妥当性検証の場合だけ有効】
検証時に数値アイテムのv-equalを比較するには,それぞれの値を精度の小さい方に丸めた値で比較します。数値アイテムの値の精度は,precision属性(有効桁数)やdecimals属性(正確であると考えられる小数位の桁数)から決定されます。uCosminexus Business Reporting Processorでは,インスタンス文書に対して完全な妥当性検証を実行するために,次の処理をします。
- precision属性が省略されている場合,推測されたprecision属性値を基に概数を求める。
- 比較する場合,求めた概数同士をさらにprecision属性の小さい方で丸めた値で比較し検証する。
次に,precision属性の推測と概数の求め方と比較の方法を示します。
(a) decimals属性値を基にprecision属性値を推測する方法
数値アイテムの値の精度はprecision属性で示されます。precision属性が省略されている場合は,decimals属性から次の要領でprecision属性値を推測します。
- fractionItemType型(またはその派生されたデータ型)のアイテムの場合
precision属性値として「INF」が仮定されます。
- fractionItemType型(またはその派生されたデータ型)以外のアイテムの場合
precision属性値は次の計算式で算出されます。ただし,算出結果が0以下の場合は,precision属性値は0になります。
precision属性値の計算式=n1+n2+n3
計算式のn1,n2,n3の意味を次に示します。
- n1:小数点(小数点が省略されている場合は,1の位の右に小数点を仮定します)の左側に0以外の桁がある場合は,その数値アイテムのそのままの値の小数点より左側にある,前ゼロを除いた桁数になります。
小数点の左側に0以外の桁がなく,小数点の右側に0以外の桁がある場合は,その数値アイテムのそのままの値の小数点とその右側にある,最初の0でない桁の間にある0の個数を負にした値になります。
それ以外の場合,n1は0になります。
- n2:数値アイテムの値の表現に指数表記がある場合は,その指数の値になります。
ない場合は0になります。
- n3:数値アイテムに対して指定されているdecimals属性の値です。
数値アイテムとdecimals属性値を基に,precision属性値を計算する例を次に示します。
数値アイテム | decimals属性値 | precision属性値の計算結果(n1+n2+n3) |
---|
123 | 2 | 3+0+2=5 |
123.4567 | 2 | 3+0+2=5 |
123e5 | -3 | 3+5+(-3)=5 |
123.45e5 | -3 | 3+5+(-3)=5 |
0.1e-2 | 5 | 0+(-2)+5=3 |
0.001E-2 | 5 | (-2)+(-2)+5=1 |
0.001e-3 | 4 | (-2)+(-3)+4=-1 結果が0未満のため,precision属性値は0となる。 |
なお,検証時にprecision属性値(またはdecimals属性値から推測されたprecision属性値)が0となった場合は,警告が報告されます。
(b) 概数の算出方法
概数はprecision属性値(省略されている場合は,decimals属性値から推測されたprecision属性値)から得た有効桁数のあとの数字を四捨五入して算出します。次の場合には,概数は算出されません。
- precision属性値がINFの場合
- 有効数字が存在しない場合
数値アイテム,precision属性値およびdecimals属性値を基に,概数を算出する例を次に示します。
数値アイテム | precision属性値 | decimals属性値 | 概数の算出結果 |
---|
12.344 | 4 | - | 12.34 |
12.345 | 4 | - | 12.35 |
12.335 | 4 | - | 12.34 |
12.346 | 4 | - | 12.35 |
12.34501 | 4 | - | 12.35 |
12345 | 4 | - | 12350 |
12345 | 7(decimals属性値から推測した値) | 2 | 12345.00 |
0.1e-2 | 3(decimals属性値から推測した値) | 5 | 0.00100 |
(凡例)-:該当しません。
(c) 数値アイテムの比較方法
数値アイテムがv-equalかどうかを検証するには,c-equalおよびu-equalである数値アイテムAと数値アイテムBが,次の条件を満たしている必要があります。
- AとBの指定(または推定される精度)を比較し,小さい方の値をNとする
- 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のため,丸め処理はしないで常に偽になる | 偽 |