uCosminexus Business Reporting Processor 開発者ガイド

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

4.6.3 タクソノミー本体とリンクベースの参照(タクソノミー文書の要素の階層を参照する場合)

XBRL2.1に準拠したタクソノミー文書の読み込み時に生成したXBRL DOMから,プレゼンテーションリンクを参照して,タクソノミー文書の要素を階層表示するサンプルコードについて説明します。表示名には,ラベルを使用します。

このサンプルコードでは,リンクの関係を表すインターフェースの一つである,XBRLPresentationRelationshipインターフェースを使用しています。リンクの関係を表すインターフェース(com.hitachi.xbrl.linkパッケージ)は,XBRL2.1の場合だけ使用できます。

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

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

タクソノミー本体とリンクベースの参照で使用するインターフェースを次の表に示します。

表4-22 タクソノミー本体とリンクベースの参照で使用するインターフェース

項番 使用するインターフェース 説明
1 com.hitachi.xbrl.taxonomy.XBRLTaxonomyDocument タクソノミー文書全体を表します。
2 com.hitachi.xbrl.link.XBRLPresentationRelationship プレゼンテーションリンクに記述されている関係のうち,一つの関係を示します。
3 com.hitachi.xbrl.taxonomy.XBRLTaxonomyElement タクソノミー文書に記述される要素の要素宣言を表します。
4 com.hitachi.xbrl.taxonomy.XBRLLabel 要素のラベルを表します。
5 com.hitachi.xbrl.util.XBRLConstants ユーザーアプリケーションで利用できる定数を定義します。

(2) サンプルコード

タクソノミー本体とリンクベースを参照するコードは次のとおりです。

// タクソノミー文書のパース
String filename = "input/sample_taxonomy1_xbrl_2_1.xsd";
File[] taxonomy = { new File(filename) };
XBRLTaxonomyDocument tdoc = tb.parse(taxonomy);
 
System.out.println("タクソノミー文書のパースに成功しました。");
 
/*
 * ここからタクソノミー文書の内容を参照
 */
 
// 標準なプレゼンテーションリンクをツリー表示する
XBRLTaxonomyElement[] elements =
    tdoc.findPresentationRootElements(
        XBRLConstants.XBRL21_ROLE_LINK,
        XBRLConstants.XBRL21_ARCROLE_PARENT_CHILD);
 
if (elements != null) {
    for (int i = 0; i < elements.length; i++) {
        List<XBRLPresentationRelationship> preList =
            elements[i].getPresentationRelationships(
                XBRLConstants.XBRL21_ROLE_LINK,
                XBRLConstants.XBRL21_ARCROLE_PARENT_CHILD);
 
        // 標準なプレゼンテーションリンクのルート要素か?
        if (preList.size() > 0) {
            // 一つのツリーを表示する
            ProcessTaxonomy2.printPresentationTree(elements[i], "");
        }
    }
} else {
    System.out.println("標準なプレゼンテーションリンクはありません。");
}
 
/**
 * プレゼンテーションリンクとラベルを使ったツリー表示
 */
public static void printPresentationTree(
        XBRLTaxonomyElement element, String indent) {
 
    // 要素の表示
    XBRLLabel label = element.getLabel("ja", null);
    if (label != null) {
        // ラベルで表示
        System.out.println(indent + "+ " + label.getValue());
    } else {
        // 要素名で表示
        System.out.println(indent + "+ " + element.getName());
    }
 
    // 子孫要素の表示
    List<XBRLPresentationRelationship> preList =
        element.getPresentationRelationships(
            XBRLConstants.XBRL21_ROLE_LINK,
            XBRLConstants.XBRL21_ARCROLE_PARENT_CHILD);
 
    for (XBRLPresentationRelationship present : preList) {
        XBRLTaxonomyElement child = (XBRLTaxonomyElement) present.getTo();
        printPresentationTree(child, indent + "    ");
    }
}

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

サンプルのタクソノミー文書を参照したときの実行結果を次に示します。

タクソノミー文書のパースに成功しました。
+ 資産合計
    + 流動資産
    + 投資及び貸付金