4.12.2 インスタンス文書とリンクベースの参照(プライマリー・アイテムのディメンジョンとアイテムの値を参照する場合)

XBRL Dimensions1.0に準拠したタクソノミー文書の読み込み時に生成したXBRL DOMから,プライマリー・アイテムのディメンジョンとアイテムの情報を参照するサンプルコードについて説明します。プライマリー・アイテムおよびディメンジョンの表示名には,ラベルを使用します。

<この項の構成>
(1) 使用するインターフェース
(2) サンプルコード
(3) サンプルコードの実行結果

(1) 使用するインターフェース

インスタンス文書とリンクベースの参照で使用するインターフェースを次の表に示します。

表4-50 インスタンス文書とリンクベースの参照で使用するインターフェース

項番使用するインターフェース説明
1com.hitachi.xbrl.instance.XBRLInstanceDocumentインスタンス文書全体を表します。
2com.hitachi.xbrl.taxonomy.XBRLTaxonomyDocumentタクソノミー文書全体を表します。
3com.hitachi.xbrl.instance.XBRLInstanceElementインスタンス文書に記述される要素を表します。
4com.hitachi.xbrl.instance.XBRLInstanceItemアイテムを表します。
5com.hitachi.xbrl.instance.XBRLContextコンテキスト要素を表します。
6com.hitachi.xbrl.instance.XBRLEntityエンティティ要素を表します。
7com.hitachi.xbrl.instance.XBRLSegmentセグメント要素を表します。
8com.hitachi.xbrl.instance.XBRLExplicitMemberxbrldi:explicitDimension要素を表します。
9com.hitachi.xbrl.taxonomy.XBRLLabel要素のラベルを表します。
10com.hitachi.xbrl.taxonomy.XBRLTaxonomyElementタクソノミー文書に記述される要素の要素宣言を表します。
11com.hitachi.xbrl.types.XBRLQNameXML Schemaのデータ型QNameを表します。

(2) サンプルコード

インスタンス文書とリンクベースを参照するコードは次のとおりです。

/*
* ここから内容を表示する
*/
// タクソノミー文書を取得
XBRLTaxonomyDocument tdoc = idoc.getTaxonomyDocument();

// 売上高の一覧を取得する
List<XBRLInstanceElement> elemList =
   idoc.getElements(
           "http://www.hitachi.com/2008/XBRL/dim/sample",
           "NumbersOfSales");
for (int i = 0; i < elemList.size(); i++) {

   System.out.print("(" + i + ")");

   XBRLInstanceItem item = (XBRLInstanceItem) elemList.get(i);

   // コンテキスト要素を取得する
   XBRLContext context = item.getContext();

   // エンティティ要素を取得する
   XBRLEntity entity = context.getEntity();

   // セグメント要素を取得する
   XBRLSegment segment = entity.getSegment();

   // explicitMember要素の一覧を取得する
   List<XBRLExplicitMember> expMemList =
       segment.getExplicitMembers();
   for (XBRLExplicitMember expMem : expMemList) {

       // dimension属性値からディメンジョンを求める
       XBRLQName dimension = expMem.getDimension();
       XBRLTaxonomyElement dimElem =
           tdoc.getElement(
                   dimension.getNamespaceURI(),
                   dimension.getLocalPart());

       // ディメンジョンの日本語ラベルを取得する
       XBRLLabel dimLabel = dimElem.getLabel("ja", null);

       // explicitMember要素の値からメンバを求める
       XBRLQName member = expMem.getValue();
       XBRLTaxonomyElement memElem =
           tdoc.getElement(
                   member.getNamespaceURI(),
                   member.getLocalPart());

       // メンバの日本語ラベルを取得する
       XBRLLabel memLabel = memElem.getLabel("ja", null);

       // ディメンジョンとそのメンバを表示
       System.out.print(
               " " + dimLabel.getValue() +
               ":" + memLabel.getValue() + ",");
   }
   // プライマリー・アイテムの日本語ラベルを取得する
   XBRLLabel label = item.getLabel("ja", null);

   // アイテムとその値を表示
   System.out.println(
           " " + label.getValue() +
           ":" + item.getValue());
}

(3) サンプルコードの実行結果

サンプルのインスタンス文書を参照したときの実行結果を次に示します。

インスタンス文書のパースに成功しました。
(0) 地域:東京, 製品:液晶, 売上高:10000000
(1) 地域:東京, 製品:プラズマ, 売上高:8000000
(2) 地域:神奈川, 製品:液晶, 売上高:8000000
(3) 地域:神奈川, 製品:プラズマ, 売上高:5000000
(4) 地域:大阪, 製品:液晶, 売上高:9000000
(5) 地域:大阪, 製品:プラズマ, 売上高:8000000
(6) 地域:京都, 製品:液晶, 売上高:7500000
(7) 地域:京都, 製品:プラズマ, 売上高:5500000