ruby で DSL (その2)
http://svn.sourceforge.jp/view/trunk/Edinet/tools/parser/?root=ruby-xbrl
に parser_schema.rb を commit した。
この中では、メイン処理は次のようになっている。
xml = '../data/td-net/081220090203088072/tdnet-qcedjpfr-33500-2008-11-30-01-2009-02-20.xsd'
xsd = Xsd.new.parse(xml)
if xsd.has_element?('ResearchAndDevelopmentExpense_Div_OperatingRevenue_OneYearDelta')
pp xsd.ResearchAndDevelopmentExpense_Div_OperatingRevenue_OneYearDelta
end
ここで指定している xsd ファイルでは、1つの element だけが定義されている。
そして このプログラムからの出力は、こんなふうになる。
#<Element:0x07fe66c
@id=
:"tdnet-qcedjpfr-33500_ReversalOfAccumulatedImpairmentLossOnLeasedAssetsOpeCF",
@name=:ReversalOfAccumulatedImpairmentLossOnLeasedAssetsOpeCF,
@nillable=:true,
@periodtype=:duration,
@substitutiongroup=:"xbrli:item",
@type=:"xbrli:monetaryItemType">
つまり、このプログラムでは、
xsd ファイルを処理して、あるインスタンスを得るのだが、
そのインスタンスは、
1. xsd ファイル中で定義された element 名を名前に持つ method が定義されている。
2. その method の返値は、 Element というクラスのインスタンスであり、
該当する element の属性を保持している。
のである。
いまは、タクソノミーの import 処理をしていないし、
各種リンクベースも処理していない。
でも、これらを クラスの多重継承、複合として処理し、
かつ、XBRL インスタンスファイルの対しても行うなら、
XBRL文書から ruby クラス/インスタンスを生成できたことになる。
最近のコメント