uCosminexus Business Reporting Processor 開発者ガイド

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

4.7.7 IDの採番をするインスタンス文書の作成

インスタンス文書に記述されているIDは,XML文書内で一意にする必要があります。IDには,アイテムやタプルのid属性,脚注リンクのロケータのxlink:loc属性,リソースのxlink:label属性など,複数あります。XBRL2.1の場合,uCosminexus Business Reporting Processorでは,ユーザー任意の形式でこれらのIDを付けることができます。

任意の形式でid属性を付ける場合,あらかじめID採番クラスをユーザーが作成しておきます。IDを採番したいインスタンス文書の新規作成時,インスタンス文書を表すXBRLInstanceDocumentオブジェクトにID採番クラスのオブジェクトを設定することで,インスタンス文書にIDを付けることができます。

ここでは,使用するインターフェース,ID採番クラスの作成例,およびインスタンス文書の新規作成時にID採番クラスを設定する例を示します。

<この項の構成>
(1) 使用するクラスおよびインターフェース
(2) ID採番クラスの作成
(3) ID採番クラスのインスタンス文書への組み込み

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

IDの採番で使用するクラスおよびインターフェースを次の表に示します。

表4-33 IDの採番で使用するクラスおよびインターフェース

項番 使用するクラスおよびインターフェース 説明
1 com.hitachi.xbrl.util.XBRLIdCreator XBRL文書のIDを生成するためのインターフェースです。ユーザーはこのインターフェースを実装して,ID採番クラスを作成します。
2 com.hitachi.xbrl.util.XBRLIdManager XBRL文書に記述されたIDを管理します。ユーザーが新規にインスタンスを生成できます。また,インスタンス文書を表すXBRLInstanceDocumentオブジェクトのgetIdManager()メソッドを使用して,IDを管理するXBRLIdManagerオブジェクトを取得できます。

(2) ID採番クラスの作成

XBRLIdCreatorインターフェースを実装して,ユーザー独自のID採番クラスを作成します。実装したID採番クラスのオブジェクトを,IDを一元管理するXBRLIdManagerオブジェクトに設定します。その結果,IDが必要になったときに採番オブジェクトがコールバックされ,指定した形式でIDが採番されます。

ID採番クラスのオブジェクトをXBRLIdManagerオブジェクトに設定するには,XBRLIdManagerクラスのsetIdCreator()メソッドを使用します。

XBRLIdCreatorインターフェースを実装したサンプルコード(MyIdCreator.java)は次のとおりです。

import java.text.NumberFormat;
 
import com.hitachi.xbrl.util.XBRLIdCreator;
import com.hitachi.xbrl.util.XBRLIdManager;
 
/**
 * XBRLIdCreator の実装クラス
 */
public class MyIdCreator implements XBRLIdCreator {
 
    // 要素別カウンター
    private int fnt_counter = 0;
    private int loc_counter = 0;
    private int id_counter = 0;
 
    // コンストラクタ
    public MyIdCreator() {
    }
 
    /**
     * IDを生成する
     * フォーマット:{要素を識別する文字列}_{要素別の通し番号}
     */
    public String createId(int type, XBRLIdManager idManager) {
        String rtnValue = null;
 
        switch (type) {
        case FOOTNOTE_LABEL:
            rtnValue = createFootnoteLabel(idManager);
            break;
        case LOC_LABEL:
            rtnValue = createLocatorLabel(idManager);
            break;
        case ITEM_ID:
        case TUPLE_ID:
        case XBRL_ID:
        case CONTEXT_ID:
        case UNIT_ID:
        case FOOTNOTE_LINK_ID:
        case FOOTNOTE_ID:
            rtnValue = createElementId(idManager);
            break;
        }
 
        return rtnValue;
    }
 
    /**
     * ID の重複を調べて重複しない ID を返す
     */
    private static String checkId(String str, int counter, XBRLIdManager idManager) {
        String rtnValue = null;
 
        NumberFormat nf = NumberFormat.getInstance();
        nf.setGroupingUsed(false);
        nf.setMinimumIntegerDigits(3);
 
        rtnValue = str + nf.format(counter);
 
        if (idManager.isId(rtnValue)) {
            rtnValue = null;
        }
 
        return rtnValue;
    }
 
    /**
     * 脚注のラベルを生成
     */
    private String createFootnoteLabel(XBRLIdManager idManager) {
        final String prefix = "FNT";
        String rtnValue = null;
 
        while (null == rtnValue) {
            fnt_counter++;
            rtnValue = checkId(prefix, fnt_counter, idManager);
        }
 
        return rtnValue;
    }
 
    /**
     * ロケータのラベルを生成
     */
    private String createLocatorLabel(XBRLIdManager idManager) {
        final String prefix = "LOC";
        String rtnValue = null;
 
        while (null == rtnValue) {
            loc_counter++;
            rtnValue = checkId(prefix, loc_counter, idManager);
        }
 
        return rtnValue;
    }
 
    /**
     * 要素の ID を生成
     */
    private String createElementId(XBRLIdManager idManager) {
        final String prefix = "ID";
        String rtnValue = null;
 
        while (null == rtnValue) {
            id_counter++;
            rtnValue = checkId(prefix, id_counter, idManager);
        }
 
        return rtnValue;
    }
}

(3) ID採番クラスのインスタンス文書への組み込み

作成したID採番クラスをインスタンス文書に組み込みます。

ID採番クラスの組み込みでは,次が必要です。

一つのXML文書内に複数のインスタンス文書がある場合
XBRLIdManagerは,複数のXBRLInstanceDocumentオブジェクトを管理できます。その結果,一つのXML文書内にある複数のインスタンス文書間で,IDを一意にできます。
一つのXML文書内にある複数のインスタンス文書間でIDを一意にしたい場合,同じID採番クラスのオブジェクトをXBRLIdManagerオブジェクトに設定し,すべてのXBRLInstanceDocumentオブジェクトを同じXBRLIdManagerオブジェクトに登録します。

ID採番クラスを組み込むサンプルコードは次のとおりです。

:
(中略)
:
// 新たなインスタンス文書の作成
XBRLInstanceDocument idoc = ib.newInstanceDocument(tdoc);
 
/*
 * === ID採番方法の設定 ===
 * XBRLIdManagerを生成し,作成した自動採番方法を設定
 * このXBRLIdManagerでインスタンス文書を管理させ,以降設定した自動採番方法でIDを採番する
 */
MyIdCreator myCreator = new MyIdCreator();
XBRLIdManager im = new XBRLIdManager();
im.setIdCreator((XBRLIdCreator) myCreator);
im.registerDocument(idoc);
:
(中略)
: