uCosminexus Business Reporting Processor 開発者ガイド
インスタンス文書に記述されているIDは,XML文書内で一意にする必要があります。IDには,アイテムやタプルのid属性,脚注リンクのロケータのxlink:loc属性,リソースのxlink:label属性など,複数あります。XBRL2.1の場合,uCosminexus Business Reporting Processorでは,ユーザー任意の形式でこれらのIDを付けることができます。
任意の形式でid属性を付ける場合,あらかじめID採番クラスをユーザーが作成しておきます。IDを採番したいインスタンス文書の新規作成時,インスタンス文書を表すXBRLInstanceDocumentオブジェクトにID採番クラスのオブジェクトを設定することで,インスタンス文書にIDを付けることができます。
ここでは,使用するインターフェース,ID採番クラスの作成例,およびインスタンス文書の新規作成時にID採番クラスを設定する例を示します。
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オブジェクトを取得できます。 |
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;
}
}
|
作成したID採番クラスをインスタンス文書に組み込みます。
ID採番クラスの組み込みでは,次が必要です。
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); : (中略) : |
All Rights Reserved. Copyright (C) 2006, 2008, Hitachi, Ltd.