uCosminexus Business Reporting Processor 開発者ガイド

[目次][用語][索引][前へ][次へ]

4.4.2 非数値コンテキスト要素の追加

XBRL2.0に準拠したインスタンス文書に,非数値コンテキストを追加するサンプルコードについて説明します。

ここでは,「4.4.1 インスタンス文書の新規作成」で生成したインスタンス文書のXBRL DOMに,非数値コンテキストを追加します。非数値コンテキスト要素を追加する場合,非数値コンテキスト要素の子要素(entity,periodなど)を作成する必要があります。

ここで説明するサンプルコードでは,次の内容の非数値コンテキストを追加します。表中の「名称」欄のインデントは,コーディング結果のインデントを示しています。

表4-6 非数値コンテキストの値

項番 名称 要素/属性
1 コンテキストID 属性 NNC01
2 時期 要素 2003-03-31
3 エンティティ(組織) 要素
4   識別子 要素 SAMP
5   スキーム 属性 指定しない
6   セグメント 要素
7     prefecture 要素 Tokyo

(凡例)−:値を持つことができません。

注※ "prefecture"の名前空間URIは"http://www.hitachi.com/2003/XBRL"とします。


このサンプルコードでは,セグメント要素の子要素として<prefecture>要素を追加し,値をTokyoにしています。セグメント要素作成時に,org.w3c.dom.Elementオブジェクトも同時に作成されます。org.w3c.dom.Elementオブジェクトはorg.w3c.dom.Nodeオブジェクトから派生されているため,getContainerNode()メソッドを使用すると,org.w3c.dom.Elementオブジェクトを取得できます。

子要素の追加方法を次に示します。この方法を使用して,シナリオ要素などにも任意の子要素を追加できます。ここでは,セグメント要素に<prefecture>要素を追加する例を使用して説明します。

  1. getW3CDOMNode()メソッドを使用して,インスタンス文書のorg.w3c.dom.Documentオブジェクトを取得します。
  2. org.w3c.dom.DocumentオブジェクトのcreateElement()メソッドを使用して,<prefecture>要素を作成します。
  3. org.w3c.dom.NodeオブジェクトのappendChild()メソッドを使用して,親子関係を設定します。

ここで使用するcreateElement()メソッド,およびappendChild()メソッドは,org.w3c.domのAPIです。

<この項の構成>
(1) 使用するクラスおよびインターフェース
(2) サンプルコード
(3) コーディング結果

(1) 使用するクラスおよびインターフェース

非数値コンテキスト要素の追加で使用するクラスおよびインターフェースを次の表に示します。

表4-7 非数値コンテキスト要素の追加で使用するクラスおよびインターフェース

項番 使用するクラスおよびインターフェース 説明
1 com.hitachi.xbrl.types.XBRLDateUnion XBRLのデータ型dateUnionを表します。
2 com.hitachi.xbrl.instance.XBRLPeriod 時期要素を表します。
3 com.hitachi.xbrl.instance.XBRLSegment セグメント要素を表します。
4 com.hitachi.xbrl.instance.XBRLIdentifier 識別子要素を表します。
5 com.hitachi.xbrl.instance.XBRLEntity エンティティ要素を表します。
6 com.hitachi.xbrl.instance.XBRLNonNumericContext 非数値コンテキストを表します。
7 com.hitachi.xbrl.instance.XBRLInstanceDocument インスタンス文書全体を表します。

(2) サンプルコード

非数値コンテキストをXBRL DOMに追加するコードは次のとおりです。

// period要素の作成
XBRLDateUnion date1 = new XBRLDateUnion("2003-03-31");
XBRLPeriod period1 =
    idoc.createPeriod(XBRLPeriod.INSTANT, date1, null, null, null);
// identifier要素の作成
XBRLIdentifier identifier1 = idoc.createIdentifier("", "SAMP");
// segment要素の作成
XBRLSegment segment1 = idoc.createSegment(null);
 
// segment要素に対応するorg.w3c.dom.Elementの取得
Node container1 = segment1.getContainerNode();
// インスタンス文書に対応するorg.w3c.dom.Documentの取得
Document doc = (Document) idoc.getW3CDOMNode();
// prefecture要素の作成
Element prefecture1 =
    doc.createElementNS(
        "http://www.hitachi.com/2003/XBRL",
        "prefecture");
prefecture1.appendChild(doc.createTextNode("Tokyo"));
// segment要素の子要素にprefecture要素を追加
container1.appendChild(prefecture1);
 
// entity要素の作成
XBRLEntity entity1 = idoc.createEntity(identifier1, segment1);
 
// 非数値コンテキストの作成
XBRLNonNumericContext nonNumericContext =
    idoc.createNonNumericContext(
        entity1,
        period1,
        null,   // unit要素なし
        null);  // scenario要素なし
// インスタンス文書に非数値コンテキストを追加
idoc.addContext(nonNumericContext);

(3) コーディング結果

コーディング結果として,生成されるインスタンス文書は次のとおりです。

<xbrli:nonNumericContext id="NNC01">
    <xbrli:entity>
        <xbrli:identifier scheme="">SAMP</xbrli:identifier>
        <xbrli:segment>
            <prefecture xmlns="http://www.hitachi.com/2003/XBRL">Tokyo</prefecture>
        </xbrli:segment>
    </xbrli:entity>
    <xbrli:period>
        <xbrli:instant>2003-03-31</xbrli:instant>
    </xbrli:period>
</xbrli:nonNumericContext>