xbrlware-ce 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Copying.txt +13 -0
- data/License.txt +13 -0
- data/Rakefile.rb +124 -0
- data/Readme.txt +15 -0
- data/doc/classes/Edgar.html +144 -0
- data/doc/classes/Edgar/HTMLFeedDownloader.html +199 -0
- data/doc/classes/Edgar/RSSFeedDownloader.html +225 -0
- data/doc/classes/Xbrlware.html +350 -0
- data/doc/classes/Xbrlware/Context.html +429 -0
- data/doc/classes/Xbrlware/Entity.html +323 -0
- data/doc/classes/Xbrlware/Identifier.html +191 -0
- data/doc/classes/Xbrlware/Instance.html +742 -0
- data/doc/classes/Xbrlware/Item.html +278 -0
- data/doc/classes/Xbrlware/LBConstants.html +144 -0
- data/doc/classes/Xbrlware/Linkbase.html +131 -0
- data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase.html +212 -0
- data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation.html +172 -0
- data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation/CalculationArc.html +166 -0
- data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase.html +210 -0
- data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition.html +204 -0
- data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition/DefinitionArc.html +160 -0
- data/doc/classes/Xbrlware/Linkbase/LabelLinkbase.html +239 -0
- data/doc/classes/Xbrlware/Linkbase/LabelLinkbase/Label.html +189 -0
- data/doc/classes/Xbrlware/Linkbase/Linkbase.html +172 -0
- data/doc/classes/Xbrlware/Linkbase/Linkbase/Link.html +217 -0
- data/doc/classes/Xbrlware/Linkbase/Linkbase/Link/Arc.html +284 -0
- data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase.html +224 -0
- data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation.html +222 -0
- data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation/PresentationArc.html +160 -0
- data/doc/classes/Xbrlware/Taxonomy.html +369 -0
- data/doc/classes/Xbrlware/TaxonomyDefintion.html +177 -0
- data/doc/classes/Xbrlware/Unit.html +179 -0
- data/doc/classes/Xbrlware/Unit/Divide.html +165 -0
- data/doc/created.rid +1 -0
- data/doc/files/Readme_txt.html +124 -0
- data/doc/files/lib/edgar/edgar_data_downloader_rb.html +129 -0
- data/doc/files/lib/edgar/util_rb.html +129 -0
- data/doc/files/lib/edgar_rb.html +141 -0
- data/doc/files/lib/xbrlware/constants_rb.html +129 -0
- data/doc/files/lib/xbrlware/context_rb.html +129 -0
- data/doc/files/lib/xbrlware/date_util_rb.html +129 -0
- data/doc/files/lib/xbrlware/float_patch_rb.html +129 -0
- data/doc/files/lib/xbrlware/hash_util_rb.html +129 -0
- data/doc/files/lib/xbrlware/instance_rb.html +129 -0
- data/doc/files/lib/xbrlware/item_rb.html +129 -0
- data/doc/files/lib/xbrlware/linkbase/calculation_linkbase_rb.html +129 -0
- data/doc/files/lib/xbrlware/linkbase/definition_linkbase_rb.html +129 -0
- data/doc/files/lib/xbrlware/linkbase/label_linkbase_rb.html +129 -0
- data/doc/files/lib/xbrlware/linkbase/linkbase_rb.html +129 -0
- data/doc/files/lib/xbrlware/linkbase/presentation_linkbase_rb.html +129 -0
- data/doc/files/lib/xbrlware/meta_util_rb.html +129 -0
- data/doc/files/lib/xbrlware/taxonomy_rb.html +129 -0
- data/doc/files/lib/xbrlware/unit_rb.html +129 -0
- data/doc/files/lib/xbrlware/util_rb.html +129 -0
- data/doc/files/lib/xbrlware/xml_parser_rb.html +129 -0
- data/doc/files/lib/xbrlware_rb.html +163 -0
- data/doc/fr_class_index.html +55 -0
- data/doc/fr_file_index.html +48 -0
- data/doc/fr_method_index.html +104 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/example/benchmark/instance_parser_benchmark.rb +25 -0
- data/example/case_study/buy_strategy.rb +34 -0
- data/example/case_study/c-20091230.xml +29 -0
- data/example/case_study/c_sell_strategy.rb +29 -0
- data/example/lang_integration/thrift/rating-client.py +21 -0
- data/example/lang_integration/thrift/rating-impl.rb +13 -0
- data/example/lang_integration/thrift/rating-server.rb +25 -0
- data/example/lang_integration/thrift/rating.thrift +52 -0
- data/example/quick_start/foo.rb +10 -0
- data/example/quick_start/foo.xml +29 -0
- data/example/quick_start/print_item.rb +27 -0
- data/lib/edgar.rb +30 -0
- data/lib/edgar/edgar_data_downloader.rb +126 -0
- data/lib/edgar/util.rb +30 -0
- data/lib/xbrlware.rb +65 -0
- data/lib/xbrlware/constants.rb +29 -0
- data/lib/xbrlware/context.rb +148 -0
- data/lib/xbrlware/date_util.rb +35 -0
- data/lib/xbrlware/float_patch.rb +26 -0
- data/lib/xbrlware/hash_util.rb +175 -0
- data/lib/xbrlware/instance.rb +406 -0
- data/lib/xbrlware/item.rb +115 -0
- data/lib/xbrlware/linkbase/calculation_linkbase.rb +137 -0
- data/lib/xbrlware/linkbase/definition_linkbase.rb +186 -0
- data/lib/xbrlware/linkbase/label_linkbase.rb +128 -0
- data/lib/xbrlware/linkbase/linkbase.rb +170 -0
- data/lib/xbrlware/linkbase/presentation_linkbase.rb +160 -0
- data/lib/xbrlware/meta_util.rb +45 -0
- data/lib/xbrlware/taxonomies/us_gaap_taxonomy_20090131.rb +40365 -0
- data/lib/xbrlware/taxonomy.rb +133 -0
- data/lib/xbrlware/unit.rb +42 -0
- data/lib/xbrlware/util.rb +83 -0
- data/lib/xbrlware/xml_parser.rb +122 -0
- data/setup.rb +1585 -0
- data/test/lib/edgar/edgar_data_downloader_test.rb +35 -0
- data/test/lib/edgar/resources/0000930413-09-005485-index.htm +331 -0
- data/test/lib/edgar/resources/usgaap.rss.xml +2861 -0
- data/test/lib/xbrlware/411_footnotes_test.rb +65 -0
- data/test/lib/xbrlware/42_schemaref_test.rb +20 -0
- data/test/lib/xbrlware/46_item_test.rb +253 -0
- data/test/lib/xbrlware/47_context_test.rb +129 -0
- data/test/lib/xbrlware/48_unit_test.rb +45 -0
- data/test/lib/xbrlware/49_tuple_test.rb +12 -0
- data/test/lib/xbrlware/date_util_test.rb +24 -0
- data/test/lib/xbrlware/dimension/context_explicit_dimension_test.rb +40 -0
- data/test/lib/xbrlware/dimension/resources/context_explicit_dimension.xml +84 -0
- data/test/lib/xbrlware/float_patch_test.rb +10 -0
- data/test/lib/xbrlware/hash_util_test.rb +29 -0
- data/test/lib/xbrlware/instance_test.rb +250 -0
- data/test/lib/xbrlware/linkbase/calculation_linkbase_test.rb +39 -0
- data/test/lib/xbrlware/linkbase/definition_linkbase_test.rb +35 -0
- data/test/lib/xbrlware/linkbase/label_linkbase_test.rb +22 -0
- data/test/lib/xbrlware/linkbase/linkbase_test.rb +36 -0
- data/test/lib/xbrlware/linkbase/linkbase_test_util.rb +98 -0
- data/test/lib/xbrlware/linkbase/presentation_linkbase_test.rb +33 -0
- data/test/lib/xbrlware/linkbase/report.html +62 -0
- data/test/lib/xbrlware/linkbase/resources/cal.xml +219 -0
- data/test/lib/xbrlware/linkbase/resources/def.xml +186 -0
- data/test/lib/xbrlware/linkbase/resources/def_with_multiple_dimension.xml +41 -0
- data/test/lib/xbrlware/linkbase/resources/instance.xml +5822 -0
- data/test/lib/xbrlware/linkbase/resources/lab.xml +782 -0
- data/test/lib/xbrlware/linkbase/resources/pre.xml +485 -0
- data/test/lib/xbrlware/linkbase/resources/report_10_q.htm +12327 -0
- data/test/lib/xbrlware/linkbase/resources/taxonomy.xsd +178 -0
- data/test/lib/xbrlware/linkbase/sample_html_report.html +40 -0
- data/test/lib/xbrlware/meta_util_test.rb +23 -0
- data/test/lib/xbrlware/resources/411/411_footnotes.xml +66 -0
- data/test/lib/xbrlware/resources/42/42_schema_ref_with_base.xml +7 -0
- data/test/lib/xbrlware/resources/42/42_schema_ref_without_base.xml +7 -0
- data/test/lib/xbrlware/resources/46/46_item_value.xml +61 -0
- data/test/lib/xbrlware/resources/47/472_period_forever.xml +29 -0
- data/test/lib/xbrlware/resources/47/472_period_instant.xml +24 -0
- data/test/lib/xbrlware/resources/47/472_period_start_dt_and_end_dt.xml +30 -0
- data/test/lib/xbrlware/resources/47/4731_entity_identifier.xml +29 -0
- data/test/lib/xbrlware/resources/47/4732_entity_segment_not_present.xml +24 -0
- data/test/lib/xbrlware/resources/47/4732_entity_segment_present.xml +30 -0
- data/test/lib/xbrlware/resources/47/474_scenario_not_present.xml +26 -0
- data/test/lib/xbrlware/resources/47/474_scenario_present.xml +30 -0
- data/test/lib/xbrlware/resources/47/47_multiple_contexts.xml +36 -0
- data/test/lib/xbrlware/resources/48/482_unit_measure.xml +32 -0
- data/test/lib/xbrlware/resources/48/483_unit_divide.xml +39 -0
- data/test/lib/xbrlware/resources/48/48_multiple_units.xml +43 -0
- data/test/lib/xbrlware/resources/49/49_tuple.xml +61 -0
- data/test/lib/xbrlware/resources/49_tuple.xsd +44 -0
- data/test/lib/xbrlware/resources/instance.xml +128 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/cal.xml +219 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/def.xml +186 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/instance.xml +5822 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/lab.xml +782 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/pre.xml +485 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/report/report_index.html +62 -0
- data/test/lib/xbrlware/resources/report_test_xbrl_files/taxonomy.xsd +178 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/1/cal.xml +223 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/1/def.xml +190 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/1/lab.xml +786 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/1/pre.xml +489 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/1/taxonomy.xsd +177 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/cal.xml +223 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/def.xml +190 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/lab.xml +786 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/2/linkbases/pre.xml +489 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/2/taxonomy.xsd +175 -0
- data/test/lib/xbrlware/resources/taxonomy_test_files/3/taxonomy.xsd +175 -0
- data/test/lib/xbrlware/resources/us_gaap_schema.xsd +8 -0
- data/test/lib/xbrlware/resources/us_gaap_schema_local.xsd +10 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/cal.xml +219 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/def.xml +186 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/instance.xml +5822 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/lab.xml +782 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/pre.xml +485 -0
- data/test/lib/xbrlware/resources/util_test_xbrl_files/taxonomy.xsd +178 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/dei-2009-01-31.xsd +162 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/dei-std-2009-01-31.xsd +23 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/negated-2008-03-31.xsd +23 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/ref-2006-02-27.xsd +121 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/us-gaap-2009-01-31.xsd +13474 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/us-roles-2009-01-31.xsd +2283 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/us-types-2009-01-31.xsd +368 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xbrl-instance-2003-12-31.xsd +772 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xbrl-linkbase-2003-12-31.xsd +477 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xbrldi-2006.xsd +41 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xbrldt-2005.xsd +53 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xl-2003-12-31.xsd +246 -0
- data/test/lib/xbrlware/resources/xbrl_xsd/xlink-2003-12-31.xsd +117 -0
- data/test/lib/xbrlware/taxonomy_test.rb +124 -0
- data/test/lib/xbrlware/util_test.rb +18 -0
- data/test/lib/xbrlware/xml_parser_test.rb +142 -0
- data/test/schema_validator_jruby.rb +40 -0
- data/test/schema_validator_ruby.rb +7 -0
- data/test/scratchpad/block.rb +36 -0
- data/test/test_helper.rb +21 -0
- data/xbrlware.iml +30 -0
- metadata +261 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Author:: xbrlware@bitstat.com
|
4
|
+
#
|
5
|
+
# Copyright:: 2009, 2010 bitstat (http://www.bitstat.com). All Rights Reserved.
|
6
|
+
#
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
module Xbrlware
|
21
|
+
module Linkbase
|
22
|
+
class CalculationLinkbase < Linkbase
|
23
|
+
# Creates a CalculationLinkbase.
|
24
|
+
#
|
25
|
+
# linkbase_path::
|
26
|
+
# XBRL Calculation Linkbase source. Tries to load and parse calculationlinkbase from path.
|
27
|
+
#
|
28
|
+
# instance::
|
29
|
+
# Instance object
|
30
|
+
#
|
31
|
+
# label_linkbase::
|
32
|
+
# optional parameter, LabelLinkbase object
|
33
|
+
def initialize(linkbase_path, instance, label_linkbase=nil)
|
34
|
+
super linkbase_path
|
35
|
+
@instance=instance
|
36
|
+
@label_linkbase=label_linkbase
|
37
|
+
end
|
38
|
+
|
39
|
+
def calculation(role=nil)
|
40
|
+
calculations=[]
|
41
|
+
calc_content=@linkbase_content["calculationLink"]
|
42
|
+
calc_content.each do |cal|
|
43
|
+
|
44
|
+
next unless cal["xlink:role"]==role unless role.nil?
|
45
|
+
|
46
|
+
if cal["calculationArc"].nil?
|
47
|
+
calculations << Calculation.new(@instance.entity_details, cal["xlink:title"], cal["xlink:role"], @role_map[cal["xlink:role"]])
|
48
|
+
else
|
49
|
+
contexts_and_arcs=arcs(cal)
|
50
|
+
calculations << Calculation.new(@instance.entity_details, cal["xlink:title"], cal["xlink:role"], @role_map[cal["xlink:role"]], contexts_and_arcs["arcs"], contexts_and_arcs["contexts"])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
return calculations[0] unless role.nil?
|
54
|
+
calculations
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def arcs(calc)
|
59
|
+
locators={}
|
60
|
+
calc["loc"].each do |loc|
|
61
|
+
href = loc["xlink:href"]
|
62
|
+
unless href.index("#").nil?
|
63
|
+
locators[loc["xlink:label"]]= href[href.index("#")+1, href.length]
|
64
|
+
else
|
65
|
+
locators[loc["xlink:label"]]=href
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
arc_map={}
|
70
|
+
contexts = Set.new()
|
71
|
+
|
72
|
+
calc["calculationArc"].each do |arc|
|
73
|
+
to_label = nil
|
74
|
+
unless @label_linkbase.nil?
|
75
|
+
to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], arc["preferredLabel"]) unless arc["preferredLabel"].nil?
|
76
|
+
to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], "http://www.xbrl.org/2003/role/label") if arc["preferredLabel"].nil?
|
77
|
+
to_label = to_label_obj.value unless to_label_obj.nil?
|
78
|
+
end
|
79
|
+
|
80
|
+
to = Calculation::CalculationArc.new(arc["xlink:to"], locators[arc["xlink:to"]], arc["xlink:arcrole"], arc["order"], arc["weight"], arc["priority"], arc["use"], to_label)
|
81
|
+
from = Calculation::CalculationArc.new(arc["xlink:from"], locators[arc["xlink:from"]])
|
82
|
+
|
83
|
+
to_item_name = locators[arc["xlink:to"]].gsub(/.*_/, "")
|
84
|
+
from_item_name = locators[arc["xlink:from"]].gsub(/.*_/, "")
|
85
|
+
|
86
|
+
to_item_map=item_map(@instance.item(to_item_name))
|
87
|
+
to.items=to_item_map.values
|
88
|
+
contexts.merge(to_item_map.keys)
|
89
|
+
|
90
|
+
from_item_map=item_map(@instance.item(from_item_name))
|
91
|
+
from.items=from_item_map.values
|
92
|
+
contexts.merge(from_item_map.keys)
|
93
|
+
|
94
|
+
if arc_map.has_key?(from)
|
95
|
+
arc_map[from] << to
|
96
|
+
else
|
97
|
+
arc_map[from]=[to]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
return {"contexts" => contexts, "arcs" => Linkbase.build_relationship(arc_map)}
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
def item_map(items)
|
106
|
+
item_map={}
|
107
|
+
items.each do |item|
|
108
|
+
item_map[item.context]=item
|
109
|
+
end unless items.nil?
|
110
|
+
item_map
|
111
|
+
end
|
112
|
+
|
113
|
+
public
|
114
|
+
class Calculation < Linkbase::Link
|
115
|
+
|
116
|
+
attr_reader :contexts, :entity_details
|
117
|
+
|
118
|
+
def initialize(entity_details, title, role, href=nil, arcs=nil, contexts=nil)
|
119
|
+
super(title, role, href, arcs)
|
120
|
+
@contexts=contexts
|
121
|
+
@entity_details=entity_details
|
122
|
+
end
|
123
|
+
|
124
|
+
class CalculationArc < Linkbase::Link::Arc
|
125
|
+
attr_reader :weight, :use
|
126
|
+
|
127
|
+
def initialize(item_id, href, role=nil, order=nil, weight=nil, priority=nil, use=nil, label=nil)
|
128
|
+
super item_id, href, role, order, priority, label
|
129
|
+
@weight=weight.to_i
|
130
|
+
@use=use
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Author:: xbrlware@bitstat.com
|
4
|
+
#
|
5
|
+
# Copyright:: 2009, 2010 bitstat (http://www.bitstat.com). All Rights Reserved.
|
6
|
+
#
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
module Xbrlware
|
21
|
+
module Linkbase
|
22
|
+
class DefinitionLinkbase < Linkbase
|
23
|
+
|
24
|
+
@@constants = {"primaryItem-hypercube" => "http://xbrl.org/int/dim/arcrole/all",
|
25
|
+
"hypercube-dimension" => "http://xbrl.org/int/dim/arcrole/hypercube-dimension",
|
26
|
+
"dimension-domain" => "http://xbrl.org/int/dim/arcrole/dimension-domain",
|
27
|
+
"domain-member" => "http://xbrl.org/int/dim/arcrole/domain-member"}
|
28
|
+
|
29
|
+
# Creates a DefinitionLinkbase.
|
30
|
+
#
|
31
|
+
# linkbase_path::
|
32
|
+
# XBRL Definition Linkbase source. Tries to load and parse definition linkbase from path.
|
33
|
+
#
|
34
|
+
# label_linkbase::
|
35
|
+
# optional parameter, takes LabelLinkbase object
|
36
|
+
def initialize(linkbase_path, label_linkbase=nil)
|
37
|
+
super linkbase_path
|
38
|
+
@label_linkbase=label_linkbase
|
39
|
+
end
|
40
|
+
|
41
|
+
def definition(role=nil)
|
42
|
+
|
43
|
+
definitions=[]
|
44
|
+
def_content=@linkbase_content["definitionLink"]
|
45
|
+
def_content.each do |def_|
|
46
|
+
|
47
|
+
next unless def_["xlink:role"]==role unless role.nil?
|
48
|
+
|
49
|
+
if def_["definitionArc"].nil?
|
50
|
+
definitions << Definition.new(def_["xlink:title"], def_["xlink:role"], @role_map[def_["xlink:role"]])
|
51
|
+
else
|
52
|
+
arcs=arcs(def_)
|
53
|
+
definitions << Definition.new(def_["xlink:title"], def_["xlink:role"], @role_map[def_["xlink:role"]], primary_items(arcs))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
return definitions[0] unless role.nil?
|
57
|
+
definitions
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def primary_items(arcs)
|
62
|
+
items=Set.new
|
63
|
+
arcs.each do |arc|
|
64
|
+
arc.children.each do |child|
|
65
|
+
if child.role==@@constants["primaryItem-hypercube"]
|
66
|
+
items << arc
|
67
|
+
break
|
68
|
+
end
|
69
|
+
end if arc.has_children?
|
70
|
+
end
|
71
|
+
|
72
|
+
items.each do |primary_item|
|
73
|
+
|
74
|
+
hypercubes=[]
|
75
|
+
primary_item.children.each do |p_child|
|
76
|
+
hypercubes << p_child if p_child.role==@@constants["primaryItem-hypercube"]
|
77
|
+
end if primary_item.has_children?
|
78
|
+
primary_item.children = hypercubes
|
79
|
+
MetaUtil::introduce_instance_alias(primary_item, "hypercubes", "children")
|
80
|
+
|
81
|
+
primary_item.hypercubes.each do |hypercube|
|
82
|
+
dimensions=[]
|
83
|
+
hypercube.children.each do |h_child|
|
84
|
+
dimensions << h_child if h_child.role==@@constants["hypercube-dimension"]
|
85
|
+
end if hypercube.has_children?
|
86
|
+
hypercube.children=dimensions
|
87
|
+
MetaUtil::introduce_instance_alias(hypercube, "dimensions", "children")
|
88
|
+
|
89
|
+
hypercube.dimensions.each do |dimension|
|
90
|
+
domains=[]
|
91
|
+
dimension.children.each do |di_child|
|
92
|
+
domains << di_child if di_child.role==@@constants["dimension-domain"]
|
93
|
+
end if dimension.has_children?
|
94
|
+
dimension.children=domains
|
95
|
+
MetaUtil::introduce_instance_alias(dimension, "domains", "children")
|
96
|
+
|
97
|
+
dimension.domains.each do |domain|
|
98
|
+
members=[]
|
99
|
+
domain.children.each do |do_child|
|
100
|
+
members << do_child if do_child.role==@@constants["domain-member"]
|
101
|
+
end if domain.has_children?
|
102
|
+
MetaUtil::introduce_instance_alias(domain, "members", "children")
|
103
|
+
MetaUtil::introduce_instance_writer(domain, "members", "children")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
items
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
def arcs(def_)
|
113
|
+
|
114
|
+
locators={}
|
115
|
+
def_["loc"].each do |loc|
|
116
|
+
href = loc["xlink:href"]
|
117
|
+
unless href.index("#").nil?
|
118
|
+
locators[loc["xlink:label"]]= href[href.index("#")+1, href.length]
|
119
|
+
else
|
120
|
+
locators[loc["xlink:label"]]=href
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
arc_map={}
|
125
|
+
|
126
|
+
def_["definitionArc"].each do |arc|
|
127
|
+
|
128
|
+
to_label = nil
|
129
|
+
unless @label_linkbase.nil?
|
130
|
+
to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], arc["preferredLabel"]) unless arc["preferredLabel"].nil?
|
131
|
+
to_label_obj=@label_linkbase.label(locators[arc["xlink:to"]], "http://www.xbrl.org/2003/role/label") if arc["preferredLabel"].nil?
|
132
|
+
to_label = to_label_obj.value unless to_label_obj.nil?
|
133
|
+
end
|
134
|
+
|
135
|
+
to = Definition::DefinitionArc.new(arc["xlink:to"], locators[arc["xlink:to"]], arc["xlink:arcrole"], arc["order"], arc["priority"], to_label, arc["xbrldt:contextElement"])
|
136
|
+
from = Definition::DefinitionArc.new(arc["xlink:from"], locators[arc["xlink:from"]])
|
137
|
+
|
138
|
+
if arc_map.has_key?(from)
|
139
|
+
arc_map[from] << to
|
140
|
+
else
|
141
|
+
arc_map[from]=[to]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
return Linkbase.build_relationship(arc_map)
|
146
|
+
end
|
147
|
+
|
148
|
+
public
|
149
|
+
class Definition < Linkbase::Link
|
150
|
+
|
151
|
+
attr_reader :primary_items
|
152
|
+
|
153
|
+
def initialize(title, role, href=nil, primary_items=nil)
|
154
|
+
super(title, role, href, primary_items)
|
155
|
+
@primary_items=primary_items
|
156
|
+
end
|
157
|
+
|
158
|
+
def dimension_domain_map
|
159
|
+
dim_dom_map={}
|
160
|
+
@primary_items.each do |primary_item|
|
161
|
+
primary_item.hypercubes.each do |hypercube|
|
162
|
+
hypercube.dimensions.each do |dimension|
|
163
|
+
domains=[]
|
164
|
+
dimension.domains.each do |domain|
|
165
|
+
domains << domain.href.sub("_", ":")
|
166
|
+
end
|
167
|
+
dim_dom_map[dimension.href.sub("_", ":")]=domains
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end unless @primary_items.nil?
|
171
|
+
dim_dom_map
|
172
|
+
end
|
173
|
+
|
174
|
+
class DefinitionArc < Linkbase::Link::Arc
|
175
|
+
attr_reader :ctx_element
|
176
|
+
|
177
|
+
def initialize(item_id, href, role=nil, order=nil, priority=nil, label=nil, ctx_element=nil)
|
178
|
+
super item_id, href, role, order, priority, label
|
179
|
+
@ctx_element=ctx_element
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Author:: xbrlware@bitstat.com
|
4
|
+
#
|
5
|
+
# Copyright:: 2009, 2010 bitstat (http://www.bitstat.com). All Rights Reserved.
|
6
|
+
#
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
module Xbrlware
|
21
|
+
module Linkbase
|
22
|
+
class LabelLinkbase < Linkbase
|
23
|
+
# Creates a LabelLinkbase.
|
24
|
+
#
|
25
|
+
# linkbase_path::
|
26
|
+
# XBRL Label Linkbase source. Tries to load and parse label linkbase from path.
|
27
|
+
def initialize(linkbase_path)
|
28
|
+
super linkbase_path
|
29
|
+
@label_map={}
|
30
|
+
parse_content
|
31
|
+
end
|
32
|
+
|
33
|
+
def label(item_name, label_role=nil, language=["en-US", "en"])
|
34
|
+
return @label_map[item_name] if label_role.nil?
|
35
|
+
return @label_map[item_name][label_role] unless @label_map[item_name].nil? if language.nil?
|
36
|
+
return @label_map[item_name][label_role][language] unless @label_map[item_name].nil? || @label_map[item_name][label_role].nil? if language.is_a?(String)
|
37
|
+
language.each do |lang|
|
38
|
+
lab = @label_map[item_name][label_role][lang] unless @label_map[item_name].nil? || @label_map[item_name][label_role].nil?
|
39
|
+
return lab unless lab.nil?
|
40
|
+
end if language.is_a?(Array)
|
41
|
+
return nil
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def inspect(verbose_flag="q")
|
46
|
+
str = StringIO.new
|
47
|
+
@label_map.each do |key, value|
|
48
|
+
str << key
|
49
|
+
if verbose_flag=="v"
|
50
|
+
value.each do |k, v|
|
51
|
+
str << "\n" << "\t"
|
52
|
+
str << " role [" << k << "]"
|
53
|
+
str << "\n" << "\t\t"
|
54
|
+
v.each do |lang, label|
|
55
|
+
str << " lang [" << lang << "] label [" << label.value << "]"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
str << "\n"
|
60
|
+
end
|
61
|
+
puts str.string
|
62
|
+
return self.to_s
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
def parse_content()
|
67
|
+
|
68
|
+
label_links=@linkbase_content["labelLink"]
|
69
|
+
label_links.each do |label_content|
|
70
|
+
loc_map=locator_map(label_content["loc"])
|
71
|
+
arc_map=linkarc_map(label_content["labelArc"])
|
72
|
+
|
73
|
+
labels=label_content["label"]
|
74
|
+
labels.each do |label|
|
75
|
+
l=Label.new(label["xlink:type"], label["xlink:role"], label["xlink:label"], label["xml:lang"], label["content"], @role_map[label["xlink:role"]])
|
76
|
+
item_name=loc_map[arc_map[label["xlink:label"]]]
|
77
|
+
if @label_map[item_name].nil?
|
78
|
+
@label_map[item_name]={l.role => {l.lang => l}}
|
79
|
+
else
|
80
|
+
if @label_map[item_name][l.role].nil?
|
81
|
+
@label_map[item_name][l.role] = {l.lang => l}
|
82
|
+
else
|
83
|
+
@label_map[item_name][l.role][l.lang] = l
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def linkarc_map(arcs)
|
91
|
+
arc_map={}
|
92
|
+
arcs.each do |arc|
|
93
|
+
arc_map[arc["xlink:to"]]=arc["xlink:from"]
|
94
|
+
end
|
95
|
+
arc_map
|
96
|
+
end
|
97
|
+
|
98
|
+
def locator_map(locators)
|
99
|
+
locator_map={}
|
100
|
+
locators.each do |loc|
|
101
|
+
href = loc["xlink:href"]
|
102
|
+
unless href.index("#").nil?
|
103
|
+
locator_map[loc["xlink:label"]]=href[href.index("#")+1, href.length]
|
104
|
+
else
|
105
|
+
locator_map[loc["xlink:label"]]=href
|
106
|
+
end
|
107
|
+
end
|
108
|
+
locator_map
|
109
|
+
end
|
110
|
+
|
111
|
+
public
|
112
|
+
class Label
|
113
|
+
|
114
|
+
attr_reader :type, :role, :href, :label, :lang, :value
|
115
|
+
|
116
|
+
def initialize(type, role, label, lang, value, href=nil)
|
117
|
+
@type=type
|
118
|
+
@role=role
|
119
|
+
@label=label
|
120
|
+
@lang=lang
|
121
|
+
@value=value
|
122
|
+
@href=href
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|