rtm 0.1.6 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/DISCLAIMER +10 -33
- data/LICENSE +201 -0
- data/README +32 -3
- data/lib/rtm.rb +126 -74
- data/lib/rtm/axes.rb +298 -0
- data/lib/rtm/axes/association.rb +76 -0
- data/lib/rtm/axes/associations.rb +96 -0
- data/lib/rtm/axes/assocs_names_occs.rb +56 -0
- data/lib/rtm/axes/characteristic.rb +68 -0
- data/lib/rtm/axes/characteristics.rb +93 -0
- data/lib/rtm/axes/string.rb +76 -0
- data/lib/rtm/axes/strings.rb +87 -0
- data/lib/rtm/axes/topic.rb +233 -0
- data/lib/rtm/axes/topics.rb +280 -0
- data/lib/rtm/{backward_compatibility.rb → deprecated/index_property_set.rb} +3 -0
- data/lib/rtm/engine.rb +101 -0
- data/lib/rtm/extensions.rb +65 -5
- data/lib/rtm/{locator_helpers.rb → helpers/locator.rb} +15 -4
- data/lib/rtm/{helpers.rb → helpers/no_output.rb} +3 -0
- data/lib/rtm/helpers/uri.rb +13 -0
- data/lib/rtm/io.rb +19 -0
- data/lib/rtm/io/from_xtm2_libxml.rb +2 -1
- data/lib/rtm/io/tmapix_from.rb +155 -0
- data/lib/rtm/io/tmapix_to.rb +223 -0
- data/lib/rtm/io/to_hash.rb +154 -0
- data/lib/rtm/io/to_jtm.rb +53 -103
- data/lib/rtm/io/to_rdf.rb +45 -0
- data/lib/rtm/io/to_string.rb +21 -8
- data/lib/rtm/io/to_xtm1.rb +6 -4
- data/lib/rtm/io/to_xtm2.rb +10 -8
- data/lib/rtm/io/to_yaml.rb +59 -100
- data/lib/rtm/navigation.rb +23 -0
- data/lib/rtm/navigation/association/players.rb +25 -0
- data/lib/rtm/navigation/name/atomify.rb +19 -0
- data/lib/rtm/navigation/name/characteristics.rb +33 -0
- data/lib/rtm/navigation/occurrence/atomify.rb +19 -0
- data/lib/rtm/navigation/occurrence/characteristics.rb +33 -0
- data/lib/rtm/navigation/topic/characteristics.rb +33 -0
- data/lib/rtm/navigation/topic/indicators.rb +31 -0
- data/lib/rtm/navigation/topic/items.rb +31 -0
- data/lib/rtm/navigation/topic/locators.rb +31 -0
- data/lib/rtm/navigation/topic/players.rb +27 -0
- data/lib/rtm/navigation/topic/supertypes.rb +166 -0
- data/lib/rtm/navigation/topic/traverse.rb +51 -0
- data/lib/rtm/navigation/topic/types.rb +109 -0
- data/lib/rtm/psi.rb +39 -2
- data/lib/rtm/sugar.rb +47 -0
- data/lib/rtm/sugar/association/hash_access.rb +46 -0
- data/lib/rtm/sugar/occurrence/dynamic_value.rb +58 -0
- data/lib/rtm/sugar/occurrence/external.rb +53 -0
- data/lib/rtm/sugar/reifiable/reifier.rb +21 -0
- data/lib/rtm/sugar/role/counterparts.rb +139 -46
- data/lib/rtm/sugar/topic/best_name.rb +74 -0
- data/lib/rtm/sugar/topic/characteristics.rb +126 -12
- data/lib/rtm/sugar/topic/counterparts.rb +145 -10
- data/lib/rtm/sugar/topic/hash_access.rb +140 -30
- data/lib/rtm/sugar/topic/scoped.rb +114 -0
- data/lib/rtm/sugar/topic/topic_ref.rb +86 -0
- data/lib/rtm/sugar/topic/typed.rb +207 -0
- data/lib/rtm/sugar/topic_map/query_cache.rb +66 -0
- data/lib/rtm/sugar/topic_map/themes.rb +53 -0
- data/lib/rtm/sugar/typed/types.rb +38 -0
- data/lib/rtm/validation.rb +7 -4
- data/lib/rtm/version.rb +30 -0
- data/spec/helpers/spec_exampleexamplegroup.rb +14 -0
- data/spec/rtm/axes/association_spec.rb +88 -0
- data/spec/rtm/axes/associations_spec.rb +60 -0
- data/spec/rtm/axes/assocs_names_occs_spec.rb +9 -0
- data/spec/rtm/axes/characteristic_spec.rb +90 -0
- data/spec/rtm/axes/characteristics_spec.rb +85 -0
- data/spec/rtm/axes/string_spec.rb +145 -0
- data/spec/rtm/axes/strings_spec.rb +168 -0
- data/spec/rtm/axes/topic_spec.rb +124 -0
- data/spec/rtm/axes/topics_spec.rb +103 -0
- data/spec/rtm/base_spec.rb +32 -0
- data/spec/rtm/io/tmapix_from_spec.rb +76 -0
- data/spec/rtm/io/tmapix_to_spec.rb +159 -0
- data/spec/rtm/io/to_hash_spec.rb +90 -0
- data/spec/rtm/io/to_rdf_spec.rb +37 -0
- data/spec/rtm/io/to_string_spec.rb +122 -0
- data/spec/rtm/io/to_yaml_spec.rb +89 -0
- data/spec/rtm/navigation/association/players_spec.rb +58 -0
- data/spec/rtm/navigation/association_spec.rb +52 -0
- data/spec/rtm/navigation/name/atomify_spec.rb +27 -0
- data/spec/rtm/navigation/name/characteristics_spec.rb +34 -0
- data/spec/rtm/navigation/name_spec.rb +52 -0
- data/spec/rtm/navigation/occurrence/atomify_spec.rb +27 -0
- data/spec/rtm/navigation/occurrence/characteristics_spec.rb +34 -0
- data/spec/rtm/navigation/occurrence_spec.rb +52 -0
- data/spec/rtm/navigation/string_spec.rb +51 -0
- data/spec/rtm/navigation/topic/characteristics_spec.rb +55 -0
- data/spec/rtm/navigation/topic/indicators_spec.rb +43 -0
- data/spec/rtm/navigation/topic/items_spec.rb +44 -0
- data/spec/rtm/navigation/topic/locators_spec.rb +44 -0
- data/spec/rtm/navigation/topic/players_spec.rb +48 -0
- data/spec/rtm/navigation/topic/scope_spec.rb +41 -0
- data/spec/rtm/navigation/topic/supertypes_spec.rb +376 -0
- data/spec/rtm/navigation/topic/traverse_spec.rb +64 -0
- data/spec/rtm/navigation/topic/types_spec.rb +195 -0
- data/spec/rtm/navigation/topic_spec.rb +153 -0
- data/spec/rtm/sugar/association/hash_access_spec.rb +55 -0
- data/spec/rtm/sugar/occurrence/dynamic_value_spec.rb +171 -0
- data/spec/rtm/sugar/occurrence/external_spec.rb +129 -0
- data/spec/rtm/sugar/reifiable/reifier_spec.rb +41 -0
- data/spec/rtm/sugar/role/counterparts_spec.rb +193 -0
- data/spec/rtm/sugar/topic/best_name_spec.rb +25 -0
- data/spec/rtm/sugar/topic/characteristics_spec.rb +333 -0
- data/spec/rtm/sugar/topic/counterparts_spec.rb +224 -0
- data/spec/rtm/sugar/topic/hash_access_spec.rb +234 -0
- data/spec/rtm/sugar/topic/scoped_spec.rb +195 -0
- data/spec/rtm/sugar/topic/topic_ref_spec.rb +44 -0
- data/spec/rtm/sugar/topic/typed_spec.rb +217 -0
- data/spec/rtm/sugar/topic_map/themes_spec.rb +67 -0
- data/spec/rtm/sugar/typed/types_spec.rb +24 -0
- data/spec/rtm/tmapi/core/association_spec.rb +169 -0
- data/spec/rtm/tmapi/core/construct_spec.rb +25 -0
- data/spec/rtm/tmapi/core/datatype_aware_spec.rb +236 -0
- data/spec/rtm/tmapi/core/name_spec.rb +270 -0
- data/spec/rtm/tmapi/core/occurrence_spec.rb +53 -0
- data/spec/rtm/tmapi/core/reifiable_spec.rb +168 -0
- data/spec/rtm/tmapi/core/role_spec.rb +73 -0
- data/spec/rtm/tmapi/core/scoped_spec.rb +441 -0
- data/spec/rtm/tmapi/core/topic_map_spec.rb +716 -0
- data/spec/rtm/tmapi/core/topic_spec.rb +1468 -0
- data/spec/rtm/tmapi/core/typed_spec.rb +112 -0
- data/spec/rtm/tmapi/core/variant_spec.rb +52 -0
- data/spec/rtm/tmapi/ext/java_util_set_spec.rb +34 -0
- data/spec/rtm/tmapi_spec.rb +44 -0
- data/spec/rtm/utils/sparql_spec.rb +26 -0
- data/spec/rtm_spec.rb +93 -0
- data/spec/spec_helper.rb +28 -0
- data/test/javalibs/junit-4.5.jar +0 -0
- data/test/javalibs/tmapi-2.0-tests.jar +0 -0
- data/test/tmapi_tests.rb +25 -0
- metadata +169 -65
- data/COPYRIGHT +0 -4
- data/lib/Rakefile.rb +0 -42
- data/lib/activetopicmaps.rb +0 -278
- data/lib/rtm/backend/active_record.rb +0 -58
- data/lib/rtm/backend/active_record/001_initial_schema.rb +0 -116
- data/lib/rtm/backend/active_record/association_and_role.rb +0 -33
- data/lib/rtm/backend/active_record/locators.rb +0 -55
- data/lib/rtm/backend/active_record/name_variant_occurrence.rb +0 -45
- data/lib/rtm/backend/active_record/quaaxtm2rtm.rb +0 -113
- data/lib/rtm/backend/active_record/quaaxtm2rtmviews.rb +0 -134
- data/lib/rtm/backend/active_record/set_wrapper.rb +0 -98
- data/lib/rtm/backend/active_record/tm_construct.rb +0 -62
- data/lib/rtm/backend/active_record/tm_delegator.rb +0 -345
- data/lib/rtm/backend/active_record/tm_set_delegator.rb +0 -195
- data/lib/rtm/backend/active_record/tmdm.rb +0 -298
- data/lib/rtm/backend/active_record/topic.rb +0 -87
- data/lib/rtm/backend/active_record/topic_map.rb +0 -314
- data/lib/rtm/backend/active_record/traverse_associations.rb +0 -87
- data/lib/rtm/base.rb +0 -92
- data/lib/rtm/connect.rb +0 -92
- data/lib/rtm/core_ext.rb +0 -6
- data/lib/rtm/io/from_xtm2.rb +0 -263
- data/lib/rtm/merging/merging.rb +0 -307
- data/lib/rtm/pimp_my_api.rb +0 -28
- data/lib/rtm/sugar/topic/identifier_direct.rb +0 -11
- data/lib/rtm/sugar/topic/predefined_associations.rb +0 -42
- data/lib/run_main_project.rb +0 -16
- data/test/base_test.rb +0 -162
data/lib/rtm/merging/merging.rb
DELETED
@@ -1,307 +0,0 @@
|
|
1
|
-
module RTM
|
2
|
-
class MergeException < Exception; end
|
3
|
-
class TopicMergeException < MergeException; end
|
4
|
-
module Merging
|
5
|
-
module ReWrap
|
6
|
-
protected
|
7
|
-
def merge_rewrap(other)
|
8
|
-
# let the wrapper point to the new object
|
9
|
-
old_getobj = other.__getobj__
|
10
|
-
other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
11
|
-
# and destroy the old one
|
12
|
-
old_getobj.reload
|
13
|
-
__getobj__.reload
|
14
|
-
old_getobj.destroy
|
15
|
-
end
|
16
|
-
end
|
17
|
-
module MergeItemIdentifiers
|
18
|
-
protected
|
19
|
-
def merge_item_identifiers(other)
|
20
|
-
#self.item_identifiers.add_all other.item_identifiers
|
21
|
-
RTM::AR::TMDM::ItemIdentifier.move_all(
|
22
|
-
["topic_map_construct_id", other.__getobj__.id, self.__getobj__.id],
|
23
|
-
["topic_map_construct_type", other.__getobj__.class.name, self.__getobj__.class.name]
|
24
|
-
)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
module MergeReifiable
|
28
|
-
include MergeItemIdentifiers
|
29
|
-
include ReWrap
|
30
|
-
protected
|
31
|
-
def merge_reifiable(other)
|
32
|
-
if other.reifier && self.reifier
|
33
|
-
self.reifier.merge(other.reifier)
|
34
|
-
elsif other.reifier
|
35
|
-
self.reifier = other.reifier
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
module Association
|
41
|
-
include Merging::MergeReifiable
|
42
|
-
|
43
|
-
def merge(other)
|
44
|
-
# The procedure for merging two association items A and B is given below.
|
45
|
-
|
46
|
-
# 1. Create a new association item, C.
|
47
|
-
# -> we will instead just modify a
|
48
|
-
|
49
|
-
# 2. Set C's [type] property to the value of A's [type] property. B's value is equal to that of A and need not be taken into account.
|
50
|
-
# 3. Set C's [scope] property to the value of A's [scope] property. B's value is equal to that of A and need not be taken into account.
|
51
|
-
# 4. Set C's [roles] property to the value of A's [roles] property. B's value is equal to that of A and need not be taken into account.
|
52
|
-
# -> nothing to do till here
|
53
|
-
|
54
|
-
# 5. Set C's [reifier] property to the value of A's [reifier] property if it is not null, and to the value of B's [reifier] property if A's property is null. If both A and B have non-null values, the topic items shall be merged, and the topic item resulting from the merge set as the value of C's [reifier] property.
|
55
|
-
self.merge_reifiable other
|
56
|
-
|
57
|
-
# 6. Set C's [item identifiers] property to the union of the values of A's and B's [item identifiers] properties.
|
58
|
-
self.merge_item_identifiers other
|
59
|
-
|
60
|
-
# 7. Remove A and B from the [associations] property of the topic map item in their [parent] properties, and add C.
|
61
|
-
#self.parent.associations.remove other
|
62
|
-
|
63
|
-
# let the wrapper point to the new object
|
64
|
-
#other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
65
|
-
self.merge_rewrap other
|
66
|
-
|
67
|
-
self
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
module AssociationRole
|
72
|
-
include Merging::MergeReifiable
|
73
|
-
|
74
|
-
def merge(other)
|
75
|
-
# The procedure for merging two association role items A and B is given below.
|
76
|
-
# -> we will instead just modify a
|
77
|
-
|
78
|
-
# 1. Create a new association role item, C.
|
79
|
-
# 2. Set C's [player] property to the value of A's [player] property. B's value is equal to that of A and need not be taken into account.
|
80
|
-
# 3. Set C's [type] property to the value of A's [type] property. B's value is equal to that of A and need not be taken into account.
|
81
|
-
# -> nothing to do till here
|
82
|
-
|
83
|
-
# 4. Set C's [item identifiers] property to the union of the values of A's and B's [item identifiers] properties.
|
84
|
-
self.merge_item_identifiers other
|
85
|
-
|
86
|
-
# 5. Set C's [reifier] property to the value of A's [reifier] property if it is not null,
|
87
|
-
# and to the value of B's [reifier] property if A's property is null.
|
88
|
-
# If both A and B have non-null values, the topic items shall be merged,
|
89
|
-
# and the topic item resulting from the merge set as the value of C's [reifier] property.
|
90
|
-
self.merge_reifiable other
|
91
|
-
|
92
|
-
# 6. Remove A and B from the [roles] property of the association item in their [parent] properties, and add C.
|
93
|
-
#self.parent.roles.remove other
|
94
|
-
|
95
|
-
#puts "#{self.parent.object_id} and #{other.parent.object_id}"
|
96
|
-
|
97
|
-
# let the wrapper point to the new object
|
98
|
-
#other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
99
|
-
self.merge_rewrap other
|
100
|
-
|
101
|
-
self
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
module Occurrence
|
106
|
-
include Merging::MergeReifiable
|
107
|
-
|
108
|
-
def merge(other)
|
109
|
-
# 1. Create a new occurrence item, C.
|
110
|
-
# -> we will instead just modify a
|
111
|
-
|
112
|
-
# 2. Set C's [value] property to the value of A's [value] property. B's value is equal to that of A and need not be taken into account.
|
113
|
-
# 3. Set C's [datatype] property to the value of A's [datatype] property. B's value is equal to that of A and need not be taken into account.
|
114
|
-
# 4. Set C's [scope] property to the value of A's [scope] property. B's value is equal to that of A and need not be taken into account.
|
115
|
-
# 5. Set C's [type] property to the value of A's [type] property. B's value is equal to that of A and need not be taken into account.
|
116
|
-
# -> nothing to do till here
|
117
|
-
|
118
|
-
# 6. Set C's [reifier] property to the value of A's [reifier] property if it is not null, and to the value of B's [reifier] property if A's property is null. If both A and B have non-null values, the topic items shall be merged, and the topic item resulting from the merge set as the value of C's [reifier] property.
|
119
|
-
self.merge_reifiable other
|
120
|
-
|
121
|
-
# 7. Set C's [item identifiers] property to the union of the values of A's and B's [item identifiers] properties.
|
122
|
-
self.merge_item_identifiers other
|
123
|
-
|
124
|
-
# 8. Remove A and B from the [occurrences] property of the topic item in their [parent] properties, and add C.
|
125
|
-
#self.parent.occurrences.remove other
|
126
|
-
|
127
|
-
# let the wrapper point to the new object
|
128
|
-
#other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
129
|
-
self.merge_rewrap other
|
130
|
-
|
131
|
-
self
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
module Topic
|
136
|
-
include Merging::ReWrap
|
137
|
-
include Merging::MergeItemIdentifiers
|
138
|
-
|
139
|
-
def merge(other)
|
140
|
-
return unless other
|
141
|
-
# The procedure for merging two topic items A and B
|
142
|
-
# -> we will instead just modify a
|
143
|
-
# (whose [parent] properties shall contain the same topic map item) is given below.
|
144
|
-
raise TopicMergeException, "Both topics must belong to the same topic map!" if self.parent.__getobj__ != other.parent.__getobj__
|
145
|
-
# It is an error if A and B both have non-null values in their [reified] properties which are different.
|
146
|
-
raise TopicMergeException, "The Topics must not reify different things." if self.reified && other.reified && self.reified.__getobj__ != other.reified.__getobj__
|
147
|
-
|
148
|
-
# 1. Create a new topic item C.
|
149
|
-
# 2. Replace A by C wherever it appears in one of the following properties
|
150
|
-
# of an information item: [topics], [scope], [type], [player], and [reifier].
|
151
|
-
# -> nothing to do here
|
152
|
-
|
153
|
-
# 3. Repeat for B.
|
154
|
-
# [topics]
|
155
|
-
# done below, in rewrap
|
156
|
-
# [scope]
|
157
|
-
RTM::AR::TMDM::ScopedObjectsTopic.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
158
|
-
# [type]
|
159
|
-
RTM::AR::TMDM::Association.move_all(["ttype_id", other.__getobj__.id, self.__getobj__.id])
|
160
|
-
RTM::AR::TMDM::AssociationRole.move_all(["ttype_id", other.__getobj__.id, self.__getobj__.id])
|
161
|
-
RTM::AR::TMDM::TopicName.move_all(["ttype_id", other.__getobj__.id, self.__getobj__.id])
|
162
|
-
RTM::AR::TMDM::Occurrence.move_all(["ttype_id", other.__getobj__.id, self.__getobj__.id])
|
163
|
-
|
164
|
-
# [player]
|
165
|
-
RTM::AR::TMDM::AssociationRole.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
166
|
-
|
167
|
-
# [reifier]
|
168
|
-
if other.reified
|
169
|
-
self.reified = other.reified
|
170
|
-
end
|
171
|
-
# 4. Set C's [topic names] property to the union of the values of A and B's [topic names] properties.
|
172
|
-
#self.names.add_all other.names
|
173
|
-
count = RTM::AR::TMDM::TopicName.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
174
|
-
if count != 0 && count != names.size
|
175
|
-
names.each_with_index do |n,i|
|
176
|
-
(i+1).upto(names.size-1) do |j|
|
177
|
-
if n == names[j]
|
178
|
-
n.merge names[j]
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
# 5. Set C's [occurrences] property to the union of the values of A and B's [occurrences] properties.
|
185
|
-
#self.occurrences.add_all other.occurrences
|
186
|
-
RTM::AR::TMDM::Occurrence.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
187
|
-
if count != 0 && count != occurrences.size
|
188
|
-
occurrences.each_with_index do |o,i|
|
189
|
-
(i+1).upto(occurrences.size-1) do |j|
|
190
|
-
if o == occurrences[j]
|
191
|
-
o.merge occurrences[j]
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# 6. Set C's [subject identifiers] property to the union of the values of A and B's [subject identifiers] properties.
|
198
|
-
#self.subject_identifiers.add_all other.subject_identifiers
|
199
|
-
RTM::AR::TMDM::SubjectIdentifier.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
200
|
-
|
201
|
-
# 7. Set C's [subject locators] property to the union of the values of A and B's [subject locators] properties.
|
202
|
-
#self.subject_locators.add_all other.subject_locators
|
203
|
-
RTM::AR::TMDM::SubjectLocator.move_all(["topic_id", other.__getobj__.id, self.__getobj__.id])
|
204
|
-
|
205
|
-
# 8. Set C's [item identifiers] property to the union of the values of A and B's [item identifiers] properties.
|
206
|
-
#self.item_identifiers.add_all other.item_identifiers
|
207
|
-
#RTM::AR::TMDM::ItemIdentifier.update_all "topic_map_construct_id = #{self.__getobj__.id}, topic_map_construct_type = '#{self.__getobj__.class.name}'", "topic_map_construct_id = #{other.__getobj__.id} and topic_map_construct_type = '#{other.__getobj__.class.name}'"
|
208
|
-
RTM::AR::TMDM::ItemIdentifier.move_all(
|
209
|
-
["topic_map_construct_id", other.__getobj__.id, self.__getobj__.id],
|
210
|
-
["topic_map_construct_type", other.__getobj__.class.name, self.__getobj__.class.name]
|
211
|
-
)
|
212
|
-
|
213
|
-
self.merge_rewrap other
|
214
|
-
|
215
|
-
self
|
216
|
-
end
|
217
|
-
alias :merge_in :merge
|
218
|
-
end
|
219
|
-
|
220
|
-
module TopicMap
|
221
|
-
include Merging::MergeReifiable
|
222
|
-
|
223
|
-
def merge(other) # other:TopicMap
|
224
|
-
self.topics.add_all other.topics
|
225
|
-
self.associations.add_all other.associations
|
226
|
-
self.merge_reifiable other
|
227
|
-
self.merge_item_identifiers other
|
228
|
-
|
229
|
-
self.merge_rewrap other
|
230
|
-
self
|
231
|
-
end
|
232
|
-
alias :merge_in :merge
|
233
|
-
end
|
234
|
-
|
235
|
-
module TopicName
|
236
|
-
def merge(other)
|
237
|
-
# The procedure for merging two topic name items A and B is given below.
|
238
|
-
# -> we will instead just modify a
|
239
|
-
|
240
|
-
# 1. Create a new topic name item C.
|
241
|
-
# 2. Set C's [value] property to the value of the [value] property of A. B's value is equal that of A and need not be taken into account.
|
242
|
-
# 3. Set C's [type] property to the value of the [type] property of A. B's value is equal that of A and need not be taken into account.
|
243
|
-
# 4. Set C's [scope] property to the value of the [scope] property of A. B's value is equal that of A and need not be taken into account.
|
244
|
-
# -> nothing to do till here
|
245
|
-
|
246
|
-
# 5. Set C's [variants] property to the union of the [variants] properties of A and B.
|
247
|
-
#self.variants.add_all other.variants
|
248
|
-
count = RTM::AR::TMDM::Variant.move_all(["topic_name_id", other.__getobj__.id, self.__getobj__.id])
|
249
|
-
if count != 0 && count != variants.size
|
250
|
-
variants.each_with_index do |v,i|
|
251
|
-
(i+1).upto(variants.size-1) do |j|
|
252
|
-
if v == variants[j]
|
253
|
-
v.merge variants[j]
|
254
|
-
end
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
# 6. Set C's [reifier] property to the value of A's [reifier] property if it is not null, and to the value of B's [reifier] property if A's property is null. If both A and B have non-null values, the topic items shall be merged, and the topic item resulting from the merge be set as the value of C's [reifier] property.
|
260
|
-
self.merge_reifiable other
|
261
|
-
|
262
|
-
# 7. Set C's [item identifiers] property to the union of the value of the [item identifiers] properties of A and B.
|
263
|
-
self.merge_item_identifiers other
|
264
|
-
|
265
|
-
# 8. Remove A and B from the [topic names] property of the topic item in their [parent] properties, and add C.
|
266
|
-
#self.parent.names.remove other
|
267
|
-
|
268
|
-
# let the wrapper point to the new object
|
269
|
-
#other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
270
|
-
self.merge_rewrap other
|
271
|
-
|
272
|
-
self
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
module Variant
|
277
|
-
include Merging::MergeReifiable
|
278
|
-
|
279
|
-
def merge(other)
|
280
|
-
#The procedure for merging two variant items A and B is given below.
|
281
|
-
# -> we will instead just modify a
|
282
|
-
|
283
|
-
# 1. Create a new variant item, C.
|
284
|
-
# 2. Set C's [value] property to the value of A's [value] property. B's value is equal to that of A and need not be taken into account.
|
285
|
-
# 3. Set C's [datatype] property to the value of A's [datatype] property. B's value is equal to that of A and need not be taken into account.
|
286
|
-
# 4. Set C's [scope] property to the value of A's [scope] property. B's value is equal to that of A and need not be taken into account.
|
287
|
-
# -> nothing to do till here
|
288
|
-
|
289
|
-
# 5. Set C's [reifier] property to the value of A's [reifier] property if it is not null, and to the value of B's [reifier] property if A's property is null. If both A and B have non-null values, the topic items shall be merged, and the topic item resulting from the merge set as the value of C's [reifier] property.
|
290
|
-
self.merge_reifiable other
|
291
|
-
|
292
|
-
# 6. Set C's [item identifiers] property to the union of the values of A's and B's [item identifiers] properties.
|
293
|
-
self.merge_item_identifiers other
|
294
|
-
|
295
|
-
# 7. Remove A and B from the [variants] property of the topic name item in their [parent] properties, and add C.
|
296
|
-
#self.parent.variants.remove other
|
297
|
-
|
298
|
-
# let the wrapper point to the new object
|
299
|
-
#other.__setobj__(self.__getobj__) if self.respond_to?(:__getobj__) && other.respond_to?(:__setobj__)
|
300
|
-
self.merge_rewrap other
|
301
|
-
|
302
|
-
self
|
303
|
-
end
|
304
|
-
end
|
305
|
-
RTM.register_extension( self )
|
306
|
-
end
|
307
|
-
end
|
data/lib/rtm/pimp_my_api.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
module RTM
|
2
|
-
# Some useful or maybe not so useful stuff which I don't know how to put else.
|
3
|
-
module PimpMyApi
|
4
|
-
module Occurrence
|
5
|
-
|
6
|
-
# Create an association out of this occurrence
|
7
|
-
# Norwegian isa: Language
|
8
|
-
# - name: "Norwegian"
|
9
|
-
# - iso639: "no"
|
10
|
-
# iso639: "no"
|
11
|
-
# webpage: http://example.org
|
12
|
-
# to
|
13
|
-
# webpage( subject: Norwegian, occ: =http://www.example.org )
|
14
|
-
def externalize
|
15
|
-
a = parent.create_association
|
16
|
-
a.create_role parent, RTM::PSI[:subject]
|
17
|
-
a.create_role self.type, self.value # TODO what should be exactly done with value? prepend something? dependend on param?
|
18
|
-
a
|
19
|
-
end
|
20
|
-
end
|
21
|
-
def externalize!(*args)
|
22
|
-
a = externalize(*args)
|
23
|
-
remove
|
24
|
-
a
|
25
|
-
end
|
26
|
-
RTM.register_extension( self )
|
27
|
-
end
|
28
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module RTM::Sugar
|
2
|
-
module Topic
|
3
|
-
module PredefinedAssociations
|
4
|
-
extend RTM::AR::TraverseAssociations
|
5
|
-
# maybe these pairs could be declared each with a single statement and a reversible option
|
6
|
-
define_association :types, :type => :Topic, :rule => {
|
7
|
-
:transitive => false,
|
8
|
-
:role_type => RTM::PSI[:instance],
|
9
|
-
:association_type => RTM::PSI[:type_instance],
|
10
|
-
:association_arity => 2,
|
11
|
-
:other_role_type => RTM::PSI[:type],
|
12
|
-
:infer_other => :supertypes,
|
13
|
-
:add => :type,
|
14
|
-
}
|
15
|
-
define_association :instances, :type => :Topic, :rule => {
|
16
|
-
:transitive => false,
|
17
|
-
:role_type => RTM::PSI[:type],
|
18
|
-
:association_type => RTM::PSI[:type_instance],
|
19
|
-
:association_arity => 2,
|
20
|
-
:other_role_type => RTM::PSI[:instance],
|
21
|
-
:infer => :subtypes,
|
22
|
-
:add => :instance,
|
23
|
-
}
|
24
|
-
define_association :supertypes, :type => :Topic, :rule => {
|
25
|
-
:transitive => true,
|
26
|
-
:role_type => RTM::PSI[:subtype],
|
27
|
-
:association_type => RTM::PSI[:supertype_subtype],
|
28
|
-
:association_arity => 2,
|
29
|
-
:other_role_type => RTM::PSI[:supertype],
|
30
|
-
:add => :supertype,
|
31
|
-
}
|
32
|
-
define_association :subtypes, :type => :Topic, :rule => {
|
33
|
-
:transitive => true,
|
34
|
-
:role_type => RTM::PSI[:supertype],
|
35
|
-
:association_type => RTM::PSI[:supertype_subtype],
|
36
|
-
:association_arity => 2,
|
37
|
-
:other_role_type => RTM::PSI[:subtype],
|
38
|
-
:add => :subtype,
|
39
|
-
}
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/lib/run_main_project.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rtm'
|
2
|
-
RTM.connect
|
3
|
-
puts "connected"
|
4
|
-
tm = RTM.create "a:b"
|
5
|
-
bla = tm.get!("bla")
|
6
|
-
bla["-name"] = "test"
|
7
|
-
n = bla["-name"].first
|
8
|
-
puts n.inspect
|
9
|
-
|
10
|
-
bla["-"] = "defaultname yeah!"
|
11
|
-
|
12
|
-
puts tm.t.size
|
13
|
-
dm = tm.get!("delete_me")
|
14
|
-
puts tm.t.size
|
15
|
-
dm.remove
|
16
|
-
puts tm.t.size
|
data/test/base_test.rb
DELETED
@@ -1,162 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Some basic tests... feel free to add more :)
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
7
|
-
|
8
|
-
require 'test/unit'
|
9
|
-
require 'rtm'
|
10
|
-
|
11
|
-
class BaseTest < Test::Unit::TestCase
|
12
|
-
# There are a bunch of global assertions in here so it cannot be parallelized
|
13
|
-
# with other tests, that's why it is all in one. What can we do about that?
|
14
|
-
def test_connect
|
15
|
-
assert RTM.connect, "Connection to memory backend failed"
|
16
|
-
assert_equal 0, RTM[].size, "There should be no topic maps in a newly created environment."
|
17
|
-
base_locator = "http://rtm.rubyforge.org/tests/base_test"
|
18
|
-
m = RTM.create base_locator
|
19
|
-
assert_equal 1, RTM[].size, "After creation of a topic map, there should be one."
|
20
|
-
assert_kind_of RTM::TopicMap, m, "RTM.create should create something which includes RTM::TopicMap"
|
21
|
-
assert_equal base_locator, m.base_locator, "The base_locator should be initialized properly."
|
22
|
-
assert m.respond_to?(:topics), "The topic map should respond to :topics"
|
23
|
-
assert m.respond_to?(:associations), "The topic map should respond to :topics"
|
24
|
-
assert_equal 0, m.topics.size, "A new topic map should have no topics."
|
25
|
-
assert_equal 0, m.associations.size, "A new topic map should have no associations."
|
26
|
-
assert m.reifier.nil?, "A new topic map should not be reified yet."
|
27
|
-
assert_equal 0, m.item_identifiers.size, "A new topic map should "
|
28
|
-
|
29
|
-
# assigning a reifier
|
30
|
-
m.reifier = "a_topic_which_reifies_the_topic_map"
|
31
|
-
assert_equal 1, m.topics.size, "A topic should have been created to reify the topic map."
|
32
|
-
assert_kind_of RTM::Topic, m.reifier, "A reifier should be a Topic."
|
33
|
-
|
34
|
-
assert_equal m, m.topics.first.reified, "The only topic out there should reify the map (not generally, but here)."
|
35
|
-
assert_equal m.base_locator, m.topics.first.reified.base_locator, "The only topic out there should reify the map. Check base locator."
|
36
|
-
assert_equal m.__getobj__, m.topics.first.reified.__getobj__, "The only topic out there should reify the map. Look inside."
|
37
|
-
|
38
|
-
t = m.create_topic
|
39
|
-
assert_equal 2, m.topics.size, "There should be 2 topics after creating the second one."
|
40
|
-
assert_kind_of RTM::Topic, t, "The created topic should really be one."
|
41
|
-
assert_kind_of RTM::TopicMap, m
|
42
|
-
assert_equal m, t.parent, "The Topic Map should be the parent of our new topic."
|
43
|
-
# The next tests may look a bit unneeded, but they at least also test the properties be available and initialized somehow.
|
44
|
-
assert_equal 0, t.item_identifiers.size, "New topic has no item_identifiers."
|
45
|
-
assert_equal 0, t.subject_identifiers.size, "New topic has no subject_identifiers."
|
46
|
-
assert_equal 0, t.subject_locators.size, "New topic has no subject_locators."
|
47
|
-
assert !t.valid?, "Without item identifiers nor subject identifiers the topic must not be valid."
|
48
|
-
assert_equal 0, t.names.size, "New topic has no names."
|
49
|
-
assert_equal 0, t.occurrences.size, "New topic has no occurrences."
|
50
|
-
assert_equal 0, t.roles_played.size, "New topic plays no roles."
|
51
|
-
assert_nil t.reified, "New topic does not reify a statement."
|
52
|
-
|
53
|
-
n = t.create_name
|
54
|
-
assert_equal 1, t.names.size, "The topic should have one name now."
|
55
|
-
assert_kind_of RTM::TopicName, n
|
56
|
-
assert_kind_of RTM::Topic, n.parent, "You won't believe but this should be a Topic and right now it not..."
|
57
|
-
# TODO the following assertion does not work - it crashes pp... but why?
|
58
|
-
#assert_equal t, n.parent, "The parent of the name should be the topic on which it was created."
|
59
|
-
assert_equal 0, n.item_identifiers.size, "I wonder if someone will ever read that."
|
60
|
-
assert_kind_of RTM::TopicName, n, "The topic name shoud be a TopicName... makes sence, he?"
|
61
|
-
assert_equal 0, n.variants.size, "According to Lars Heuer and Robert Barta that should always be 0, not only now."
|
62
|
-
assert_nil n.value, "We haven't set a value yet, where should it come from."
|
63
|
-
assert_nil n.type, "I am really tired of writing this stuff."
|
64
|
-
assert_equal 0, n.scope.size, "Should I really be more serious with this stuff?"
|
65
|
-
assert_nil n.reifier, "No, I guess not... who could ever stand that."
|
66
|
-
|
67
|
-
v = n.create_variant
|
68
|
-
assert_equal 1, n.variants.size, "The topic should have one name now."
|
69
|
-
assert_kind_of RTM::Variant, v
|
70
|
-
assert_kind_of RTM::TopicName, v.parent, "You won't believe but this should be a Topic and right now it not..."
|
71
|
-
# TODO the following assertion does not work - it crashes pp... but why?
|
72
|
-
#assert_equal t, v.parent, "The parent of the name should be the topic on which it was created."
|
73
|
-
assert_equal 0, v.item_identifiers.size, "I wonder if someone will ever read that."
|
74
|
-
assert_kind_of RTM::Variant, v, "The variant should be a Variant... makes sence, he?"
|
75
|
-
assert_nil v.value, "We haven't set a value yet, where should it come from."
|
76
|
-
assert_nil v.datatype, "No datatype set, yet."
|
77
|
-
assert_equal 0, v.scope.size, "Should I really be more serious with this stuff?"
|
78
|
-
assert_nil v.reifier, "No, I guess not... who could ever stand that."
|
79
|
-
assert !v.valid?
|
80
|
-
|
81
|
-
o = t.create_occurrence
|
82
|
-
assert_equal 1, t.occurrences.size, "The topic should have one name now."
|
83
|
-
assert_kind_of RTM::Occurrence, o
|
84
|
-
assert_kind_of RTM::Topic, o.parent, "You won't believe but this should be a Topic and right now it not..."
|
85
|
-
# TODO the following assertion does not work - it crashes pp... but why?
|
86
|
-
#assert_equal t, o.parent, "The parent of the name should be the topic on which it was created."
|
87
|
-
assert_equal 0, o.item_identifiers.size, "I wonder if someone will ever read that."
|
88
|
-
assert_kind_of RTM::Occurrence, o, "The occurrence shoud be a Occurrence... makes sence, he?"
|
89
|
-
assert_nil o.value, "We haven't set a value yet, where should it come from."
|
90
|
-
assert_nil o.type, "I am really tired of writing this stuff."
|
91
|
-
assert_nil o.datatype
|
92
|
-
assert_equal 0, n.scope.size, "Should I really be more serious with this stuff?"
|
93
|
-
assert_nil n.reifier, "No, I guess not... who could ever stand that."
|
94
|
-
|
95
|
-
a = m.create_association
|
96
|
-
assert_nil a.type
|
97
|
-
assert_equal 0, a.roles.size
|
98
|
-
assert_kind_of RTM::Association, a
|
99
|
-
assert_kind_of RTM::TopicMap, a.parent
|
100
|
-
assert_equal m, a.parent
|
101
|
-
assert_equal 0, a.scope.size
|
102
|
-
assert !a.valid?
|
103
|
-
|
104
|
-
r1 = a.create_role
|
105
|
-
assert_nil r1.type
|
106
|
-
assert_nil r1.player
|
107
|
-
assert_kind_of RTM::AssociationRole, r1
|
108
|
-
assert_kind_of RTM::Association, r1.parent
|
109
|
-
assert_equal 1, a.roles.size
|
110
|
-
|
111
|
-
|
112
|
-
t.item_identifiers << "nr1"
|
113
|
-
assert_equal 1, t.item_identifiers.size
|
114
|
-
fii = t.item_identifiers.first
|
115
|
-
assert_equal "http://rtm.rubyforge.org/tests/base_test#nr1", fii.to_s
|
116
|
-
assert_kind_of RTM::Locator, fii
|
117
|
-
assert_kind_of RTM::ItemIdentifier, fii #needed?
|
118
|
-
# TODO: invalidate cache/reload value somehow
|
119
|
-
#assert_equal 1, m.item_identifiers.size, "If you see this, it is probably because TopicMap#item_identifiers.size is cached which is wrong in this case."
|
120
|
-
|
121
|
-
t.subject_identifiers << "si1"
|
122
|
-
fsi = t.subject_identifiers.first
|
123
|
-
assert_equal "si1", fsi.to_s
|
124
|
-
assert_kind_of RTM::Locator, fsi
|
125
|
-
assert_kind_of RTM::SubjectIdentifier, fsi #needed?
|
126
|
-
|
127
|
-
t.subject_locators << "sl1"
|
128
|
-
fsl = t.subject_locators.first
|
129
|
-
assert_equal "sl1", fsl.to_s
|
130
|
-
assert_kind_of RTM::Locator, fsl
|
131
|
-
assert_kind_of RTM::SubjectLocator, fsl #needed?
|
132
|
-
|
133
|
-
# create roles with topics
|
134
|
-
# some more stuff.
|
135
|
-
|
136
|
-
|
137
|
-
# to be in associations_test later:
|
138
|
-
tm = RTM.create "urn:/associations_test"
|
139
|
-
a1 = tm.create_association "urn:/assoc_type_with_absolute_uri"
|
140
|
-
assert_not_nil a1.type
|
141
|
-
assert_equal a1.type, tm.get("urn:/assoc_type_with_absolute_uri")
|
142
|
-
|
143
|
-
a2 = tm.create_association :type => "urn:/assoc_type_with_absolute_uri_using_hash"
|
144
|
-
assert_not_nil a2.type
|
145
|
-
assert_equal a2.type, tm.get("urn:/assoc_type_with_absolute_uri_using_hash")
|
146
|
-
|
147
|
-
a3 = tm.create_association "relative_type"
|
148
|
-
assert_not_nil a3.type
|
149
|
-
assert_equal a3.type, tm.get("relative_type")
|
150
|
-
|
151
|
-
|
152
|
-
end
|
153
|
-
def test_sugar_hash_access
|
154
|
-
RTM.connect
|
155
|
-
tm = RTM.create "a:b"
|
156
|
-
bla = tm.get!("bla")
|
157
|
-
bla["-name"] = "test"
|
158
|
-
n = bla["-name"].first
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
end
|