rtm 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/DISCLAIMER +3 -1
- data/README +0 -0
- data/lib/rtm.rb +0 -1
- data/lib/rtm/axes/topic.rb +0 -3
- data/lib/rtm/axes/topics.rb +0 -3
- data/lib/rtm/connection.rb +4 -4
- data/lib/rtm/engine.rb +6 -5
- data/lib/rtm/extensions.rb +1 -1
- data/lib/rtm/helpers/no_output.rb +1 -1
- data/lib/rtm/io/from_xtm2_libxml.rb +2 -2
- data/lib/rtm/io/tmapix_from.rb +11 -24
- data/lib/rtm/io/tmapix_to.rb +38 -7
- data/lib/rtm/navigation/topic/characteristics.rb +7 -9
- data/lib/rtm/navigation/topic/supertypes.rb +1 -5
- data/lib/rtm/sugar.rb +16 -1
- data/lib/rtm/sugar/association/remove.rb +21 -0
- data/lib/rtm/sugar/name/remove.rb +18 -0
- data/lib/rtm/sugar/occurrence/external.rb +1 -0
- data/lib/rtm/sugar/occurrence/remove.rb +15 -0
- data/lib/rtm/sugar/topic/remove.rb +23 -0
- data/lib/rtm/sugar/topic/topic_ref.rb +111 -7
- data/lib/rtm/sugar/topic_map/readable.rb +19 -0
- data/lib/rtm/sugar/topic_map/remove.rb +15 -6
- data/lib/rtm/sugar/topic_map/resolve.rb +44 -0
- data/lib/rtm/sugar/topic_map/scoped.rb +42 -0
- data/lib/rtm/sugar/topic_map/types.rb +46 -0
- data/lib/rtm/sugar/variant/remove.rb +15 -0
- data/lib/rtm/version.rb +1 -2
- data/spec/rtm/axes/topic_spec.rb +4 -4
- data/spec/rtm/axes/topics_spec.rb +4 -4
- data/spec/rtm/engine_spec.rb +10 -1
- data/spec/rtm/io/tmapix_from_spec.rb +41 -9
- data/spec/rtm/io/tmapix_to_spec.rb +58 -32
- data/spec/rtm/io/to_rdf_spec.rb +8 -4
- data/spec/rtm/javatmapi_spec.rb +39 -29
- data/spec/rtm/navigation/topic/characteristics_spec.rb +11 -16
- data/spec/rtm/navigation/topic/supertypes_spec.rb +32 -89
- data/spec/rtm/navigation/topic_spec.rb +4 -4
- data/spec/rtm/sugar/association/hash_access_spec.rb +1 -1
- data/spec/rtm/sugar/topic/counterparts_spec.rb +18 -2
- data/spec/rtm/sugar/topic/remove_spec.rb +46 -0
- data/spec/rtm/sugar/topic/topic_ref_spec.rb +99 -26
- data/spec/rtm/sugar/topic_map/readable_spec.rb +25 -0
- data/spec/rtm/sugar/topic_map/remove_spec.rb +4 -1
- data/spec/rtm/sugar/topic_map/resolve_spec.rb +56 -0
- data/spec/rtm/sugar/topic_map/types_spec.rb +31 -0
- data/spec/rtm/tmapi/core/reifiable_spec.rb +0 -1
- data/spec/rtm/tmapi/core/topic_map_spec.rb +13 -8
- data/spec/rtm/tmapi/core/topic_spec.rb +17 -6
- data/spec/rtm/tmapi_spec.rb +2 -2
- data/spec/rtm_spec.rb +3 -3
- data/spec/spec_helper.rb +34 -6
- data/test/javalibs/junit-4.8.1.jar +0 -0
- data/test/javalibs/tmapi-tests-2.0.3-SNAPSHOT.jar +0 -0
- metadata +175 -165
- data/test/javalibs/junit-4.5.jar +0 -0
- data/test/javalibs/tmapi-2.0-tests.jar +0 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
2
|
+
# License: Apache License, Version 2.0
|
3
|
+
|
4
|
+
module RTM::Sugar::Topic
|
5
|
+
module Remove
|
6
|
+
|
7
|
+
# Forcibly removes this topic from the topic map:
|
8
|
+
#
|
9
|
+
# * Forcibly removes all associations in which this topic is a player.
|
10
|
+
# * Forcibly removes all names and occurrences of this topic.
|
11
|
+
# * Removes the type-instance relations this topic occurrs in.
|
12
|
+
def force_remove
|
13
|
+
# TODO extend this, maybe allow for a removal of any topic no matter how important
|
14
|
+
# it may be for the whole topic map
|
15
|
+
self.roles_played.to_a.clone.each{ |role| role.parent.force_remove}
|
16
|
+
self.names.to_a.clone.each{ |name| name.force_remove}
|
17
|
+
self.occurrences.to_a.clone.each{ |occ| occ.force_remove}
|
18
|
+
self.types.each{ |type| self.remove_type(type) }
|
19
|
+
self.remove
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -25,7 +25,7 @@ module RTM::Sugar::Topic
|
|
25
25
|
# references(params = {}) -> Array of Strings
|
26
26
|
#
|
27
27
|
def references(params = {})
|
28
|
-
default_hash = {:outputstyle => :ctm, :resolve_qnames => :false, :resolve_base_iri => :false, :sort_by_length => :
|
28
|
+
default_hash = {:outputstyle => :ctm, :resolve_qnames => :false, :resolve_base_iri => :false, :sort_by_length => :true}
|
29
29
|
params = default_hash.merge(params) if params.is_a? Hash
|
30
30
|
prefixes = topic_map.prefixes
|
31
31
|
|
@@ -56,7 +56,7 @@ module RTM::Sugar::Topic
|
|
56
56
|
end
|
57
57
|
|
58
58
|
case params[:outputstyle]
|
59
|
-
when :yaml
|
59
|
+
when :yaml, :jtm
|
60
60
|
identifiers = set_of_si.map{ |si| "si:#{si}"} +
|
61
61
|
set_of_sl.map{ |sl| "sl:#{sl}"} +
|
62
62
|
set_of_ii.map{ |ii| "ii:#{ii}"}
|
@@ -95,7 +95,7 @@ module RTM::Sugar::Topic
|
|
95
95
|
# reference(params = {}) -> String
|
96
96
|
#
|
97
97
|
def reference(params = {})
|
98
|
-
return references(params).
|
98
|
+
return references(params).first
|
99
99
|
end
|
100
100
|
|
101
101
|
# Returns all identifiers of this Topic as Array of Locators.
|
@@ -116,14 +116,118 @@ module RTM::Sugar::Topic
|
|
116
116
|
if topic_map.create_locator(short_form).reference == identifier
|
117
117
|
return short_form
|
118
118
|
end
|
119
|
-
# if short_form[0] == "/"
|
120
|
-
# short_form = short_form.sub("/", "")
|
121
|
-
#
|
122
|
-
# end
|
119
|
+
# if short_form[0] == "/"
|
120
|
+
# short_form = short_form.sub("/", "")
|
121
|
+
#
|
122
|
+
# end
|
123
123
|
else
|
124
124
|
return identifier #nothing happened
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
|
+
# Returns true if this topic has a subject identifer equal to the
|
129
|
+
# given identifier. Returns false otherwise.
|
130
|
+
#
|
131
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
132
|
+
# QNames are resolved beforehand.
|
133
|
+
#
|
134
|
+
# Identifier may be a String or Locator.
|
135
|
+
#
|
136
|
+
# :call-seq:
|
137
|
+
# has_si?(identifier) -> true or false
|
138
|
+
#
|
139
|
+
def has_si?(identifier)
|
140
|
+
identifier = topic_map.create_locator(identifier)
|
141
|
+
return subject_identifiers.include?(identifier)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Returns true if this topic has an item identifer equal to the
|
145
|
+
# given identifier. Returns false otherwise.
|
146
|
+
#
|
147
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
148
|
+
# QNames are resolved beforehand.
|
149
|
+
#
|
150
|
+
# Identifier may be a String or Locator.
|
151
|
+
#
|
152
|
+
# :call-seq:
|
153
|
+
# has_ii?(identifier) -> true or false
|
154
|
+
#
|
155
|
+
def has_ii?(identifier)
|
156
|
+
identifier = topic_map.create_locator(identifier)
|
157
|
+
return item_identifiers.include?(identifier)
|
158
|
+
end
|
159
|
+
|
160
|
+
# Returns true if this topic has a subject locator equal to the
|
161
|
+
# given identifier. Returns false otherwise.
|
162
|
+
#
|
163
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
164
|
+
# QNames are resolved beforehand.
|
165
|
+
#
|
166
|
+
# Identifier may be a String or Locator.
|
167
|
+
#
|
168
|
+
# :call-seq:
|
169
|
+
# has_sl?(identifier) -> true or false
|
170
|
+
#
|
171
|
+
def has_sl?(identifier)
|
172
|
+
identifier = topic_map.create_locator(identifier)
|
173
|
+
return subject_locators.include?(identifier)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Returns true if this topic is instance of another topic,
|
177
|
+
# that has a subject identifer equal to the
|
178
|
+
# given identifier. Returns false otherwise.
|
179
|
+
#
|
180
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
181
|
+
# QNames are resolved beforehand.
|
182
|
+
#
|
183
|
+
# Identifier may be a String or Locator.
|
184
|
+
#
|
185
|
+
# :call-seq:
|
186
|
+
# has_type_with_si?(identifier) -> true or false
|
187
|
+
#
|
188
|
+
def has_type_with_si?(identifier)
|
189
|
+
types.each do |type|
|
190
|
+
return true if type.has_si?(identifier)
|
191
|
+
end
|
192
|
+
return false
|
193
|
+
end
|
194
|
+
|
195
|
+
# Returns true if this topic is instance of another topic,
|
196
|
+
# that has an item identifer equal to the
|
197
|
+
# given identifier. Returns false otherwise.
|
198
|
+
#
|
199
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
200
|
+
# QNames are resolved beforehand.
|
201
|
+
#
|
202
|
+
# Identifier may be a String or Locator.
|
203
|
+
#
|
204
|
+
# :call-seq:
|
205
|
+
# has_type_with_ii?(identifier) -> true or false
|
206
|
+
#
|
207
|
+
def has_type_with_ii?(identifier)
|
208
|
+
types.each do |type|
|
209
|
+
return true if type.has_ii?(identifier)
|
210
|
+
end
|
211
|
+
return false
|
212
|
+
end
|
213
|
+
|
214
|
+
# Returns true if this topic is instance of another topic,
|
215
|
+
# that has a subject locator equal to the
|
216
|
+
# given identifier. Returns false otherwise.
|
217
|
+
#
|
218
|
+
# A relative identifier is resolved against the base_iri of the topic map.
|
219
|
+
# QNames are resolved beforehand.
|
220
|
+
#
|
221
|
+
# Identifier may be a String or Locator.
|
222
|
+
#
|
223
|
+
# :call-seq:
|
224
|
+
# has_type_with_sl?(identifier) -> true or false
|
225
|
+
#
|
226
|
+
def has_type_with_sl?(identifier)
|
227
|
+
types.each do |type|
|
228
|
+
return true if type.has_sl?(identifier)
|
229
|
+
end
|
230
|
+
return false
|
231
|
+
end
|
128
232
|
end
|
129
233
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
2
|
+
# License: Apache License, Version 2.0
|
3
|
+
|
4
|
+
module RTM::Sugar
|
5
|
+
module TopicMap
|
6
|
+
module Readable
|
7
|
+
|
8
|
+
def read_only?
|
9
|
+
begin
|
10
|
+
answer = engine.feature("http://tmapi.org/features/readOnly")
|
11
|
+
rescue org.tmapi.core.FeatureNotRecognizedException
|
12
|
+
answer = false
|
13
|
+
end
|
14
|
+
return answer
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -7,28 +7,37 @@ module RTM::Sugar::TopicMap
|
|
7
7
|
# Removes all variants, names, occurrences, roles, asssociations and
|
8
8
|
# topics (esp. reifier) from this topic map.
|
9
9
|
def clear
|
10
|
+
# This is supported by some backends (e.g. Ontopia) and should be faster than the procedure below.
|
11
|
+
if self.respond_to?(:wrapped) && self.wrapped.respond_to?(:clear)
|
12
|
+
self.wrapped.clear
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
raise("should not be called on majortom topic maps") if self.respond_to?(:store)
|
17
|
+
|
10
18
|
set_reifier(nil)
|
11
|
-
|
19
|
+
|
12
20
|
variants.to_a.each do |v|
|
13
21
|
v.set_reifier(nil)
|
14
22
|
v.remove
|
15
23
|
end
|
16
|
-
|
24
|
+
|
17
25
|
names.to_a.each do |n|
|
18
26
|
n.set_reifier(nil)
|
19
27
|
n.remove
|
20
28
|
end
|
21
|
-
|
29
|
+
|
22
30
|
occurrences.to_a.each do |o|
|
23
31
|
o.set_reifier(nil)
|
24
32
|
o.remove
|
25
33
|
end
|
26
|
-
|
34
|
+
|
27
35
|
roles.to_a.each do |r|
|
28
36
|
r.set_reifier(nil)
|
29
|
-
|
37
|
+
# Roles should not be removed here! They are removed when the association is removed
|
38
|
+
#r.remove
|
30
39
|
end
|
31
|
-
|
40
|
+
|
32
41
|
associations.to_a.each do |a|
|
33
42
|
a.set_reifier(nil)
|
34
43
|
a.remove
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
2
|
+
# License: Apache License, Version 2.0
|
3
|
+
|
4
|
+
module RTM::Sugar::TopicMap
|
5
|
+
module Resolve
|
6
|
+
|
7
|
+
def deresolve(iri)
|
8
|
+
if iri.is_a?(RTM::Locator)
|
9
|
+
iri = iri.reference
|
10
|
+
elsif iri.is_a?(String)
|
11
|
+
iri = strip_identifier(iri)
|
12
|
+
else
|
13
|
+
raise("iri should be a String or Locator")
|
14
|
+
end
|
15
|
+
prefixes.each do |identifier, reference|
|
16
|
+
if iri.index(reference) == 0 && iri.length > reference.length
|
17
|
+
return iri.sub(reference, identifier + ":")
|
18
|
+
elsif iri.index(base_iri) == 0
|
19
|
+
_iri = iri.sub(base_iri, "")
|
20
|
+
return _iri if locator.resolve(_iri) == create_locator(iri)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return iri
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def strip_identifier(identifier)
|
29
|
+
case identifier
|
30
|
+
when /^(si:|sl:|ii:|=|\^)$/
|
31
|
+
return ""
|
32
|
+
when /^(\^|ii:)\s*(.*)/ #identifiers starts with ^ or ii:
|
33
|
+
return $2
|
34
|
+
when /^(=|sl:)\s*(.+)/ #identifier starts with = or sl:
|
35
|
+
return $2
|
36
|
+
when /^(si:)\s*(.+)/ #identifier starts with si:
|
37
|
+
return $2
|
38
|
+
else #identifier does not start with a special character
|
39
|
+
return identifier.lstrip #lstrip: leading whitespace chars removed
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -17,6 +17,18 @@ module RTM::Sugar
|
|
17
17
|
scoped_index.getAssociationThemes
|
18
18
|
end
|
19
19
|
|
20
|
+
# Returns all topics in the topic map used
|
21
|
+
# in the scope property of Associations sorted by their best names.
|
22
|
+
#
|
23
|
+
# The result may be empty.
|
24
|
+
#
|
25
|
+
# :call-seq:
|
26
|
+
# association_themes -> Array of Topics sorted by their best_name
|
27
|
+
#
|
28
|
+
def association_themes_sorted(by_what = :best_name)
|
29
|
+
scoped_index.getAssociationThemes.sort_by(&by_what)
|
30
|
+
end
|
31
|
+
|
20
32
|
# Returns all topics in the topic map used
|
21
33
|
# in the scope property of Names.
|
22
34
|
#
|
@@ -27,6 +39,16 @@ module RTM::Sugar
|
|
27
39
|
scoped_index.getNameThemes
|
28
40
|
end
|
29
41
|
|
42
|
+
# Returns all topics in the topic map used
|
43
|
+
# in the scope property of Names sorted by their best names.
|
44
|
+
#
|
45
|
+
# :call-seq:
|
46
|
+
# name_themes -> Array of Topics sorted by their best_name
|
47
|
+
#
|
48
|
+
def name_themes_sorted(by_what = :best_name)
|
49
|
+
scoped_index.getNameThemes.sort_by(&by_what)
|
50
|
+
end
|
51
|
+
|
30
52
|
# Returns all topics in the topic map used
|
31
53
|
# in the scope property of Occurrences.
|
32
54
|
#
|
@@ -37,6 +59,16 @@ module RTM::Sugar
|
|
37
59
|
scoped_index.getOccurrenceThemes
|
38
60
|
end
|
39
61
|
|
62
|
+
# Returns all topics in the topic map used
|
63
|
+
# in the scope property of Occurrences sorted by their best names.
|
64
|
+
#
|
65
|
+
# :call-seq:
|
66
|
+
# occurrence_themes -> Array of Topics sorted by their best_name
|
67
|
+
#
|
68
|
+
def occurrence_themes_sorted(by_what = :best_name)
|
69
|
+
scoped_index.getOccurrenceThemes.sort_by(&by_what)
|
70
|
+
end
|
71
|
+
|
40
72
|
# Returns all topics in the topic map used
|
41
73
|
# in the scope property of Variants.
|
42
74
|
#
|
@@ -47,6 +79,16 @@ module RTM::Sugar
|
|
47
79
|
scoped_index.getVariantThemes
|
48
80
|
end
|
49
81
|
|
82
|
+
# Returns all topics in the topic map used
|
83
|
+
# in the scope property of Variants sorted by their best names.
|
84
|
+
#
|
85
|
+
# :call-seq:
|
86
|
+
# variant_themes -> Array of Topics sorted by their best_name
|
87
|
+
#
|
88
|
+
def variant_themes_sorted(by_what = :best_name)
|
89
|
+
scoped_index.getVariantThemes.sort_by(&by_what)
|
90
|
+
end
|
91
|
+
|
50
92
|
end
|
51
93
|
end
|
52
94
|
end
|
@@ -15,6 +15,16 @@ module RTM::Sugar
|
|
15
15
|
type_instance_index.getAssociationTypes
|
16
16
|
end
|
17
17
|
|
18
|
+
# Returns all topics in this topic map that are used
|
19
|
+
# as types of associations sorted by their best names.
|
20
|
+
#
|
21
|
+
# :call-seq:
|
22
|
+
# association_types -> Array of Topics sorted by their best names
|
23
|
+
#
|
24
|
+
def association_types_sorted(by_what = :best_name)
|
25
|
+
type_instance_index.getAssociationTypes.sort_by(&by_what)
|
26
|
+
end
|
27
|
+
|
18
28
|
# Returns the all Topics in this TopicMap that are used
|
19
29
|
# as types of Roles.
|
20
30
|
#
|
@@ -25,6 +35,16 @@ module RTM::Sugar
|
|
25
35
|
type_instance_index.getRoleTypes
|
26
36
|
end
|
27
37
|
|
38
|
+
# Returns the all Topics in this TopicMap that are used
|
39
|
+
# as types of Roles sorted by their best names.
|
40
|
+
#
|
41
|
+
# :call-seq:
|
42
|
+
# role_types -> Array of Topics sorted by their best names
|
43
|
+
#
|
44
|
+
def role_types_sorted(by_what = :best_name)
|
45
|
+
type_instance_index.getRoleTypes.sort_by(&by_what)
|
46
|
+
end
|
47
|
+
|
28
48
|
# Returns all Topics in this TopicMap that are used
|
29
49
|
# as types of Names.
|
30
50
|
#
|
@@ -35,6 +55,16 @@ module RTM::Sugar
|
|
35
55
|
type_instance_index.getNameTypes
|
36
56
|
end
|
37
57
|
|
58
|
+
# Returns all Topics in this TopicMap that are used
|
59
|
+
# as types of Names sorted by their best names.
|
60
|
+
#
|
61
|
+
# :call-seq:
|
62
|
+
# name_types -> Array of Topics sorted by their best names
|
63
|
+
#
|
64
|
+
def name_types_sorted(by_what = :best_name)
|
65
|
+
type_instance_index.getNameTypes.sort_by(&by_what)
|
66
|
+
end
|
67
|
+
|
38
68
|
# Returns all Topics in this TopicMap that are used
|
39
69
|
# as types of Occurrences.
|
40
70
|
#
|
@@ -45,6 +75,22 @@ module RTM::Sugar
|
|
45
75
|
type_instance_index.getOccurrenceTypes
|
46
76
|
end
|
47
77
|
|
78
|
+
# Returns all Topics in this TopicMap that are used
|
79
|
+
# as types of Occurrences sorted by their best names.
|
80
|
+
#
|
81
|
+
# :call-seq:
|
82
|
+
# occurrence_types -> Array of Topics sorted by their best names
|
83
|
+
#
|
84
|
+
def occurrence_types_sorted(by_what = :best_name)
|
85
|
+
type_instance_index.getOccurrenceTypes.sort_by(&by_what)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns all Topics that are no type of any kind
|
89
|
+
def individuals
|
90
|
+
all_types = types.to_a + association_types.to_a + role_types.to_a + name_types.to_a + occurrence_types.to_a
|
91
|
+
topics.to_a - all_types
|
92
|
+
end
|
93
|
+
|
48
94
|
end
|
49
95
|
end
|
50
96
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
2
|
+
# License: Apache License, Version 2.0
|
3
|
+
|
4
|
+
module RTM::Sugar::Variant
|
5
|
+
module Remove
|
6
|
+
|
7
|
+
def force_remove
|
8
|
+
if variant_reifier = self.reifier
|
9
|
+
self.reifier = nil
|
10
|
+
variant_reifier.force_remove
|
11
|
+
end
|
12
|
+
remove
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/rtm/version.rb
CHANGED
@@ -23,10 +23,9 @@ module RTM # :nodoc:
|
|
23
23
|
|
24
24
|
MAJOR = 0
|
25
25
|
MINOR = 3
|
26
|
-
TINY =
|
26
|
+
TINY = 1
|
27
27
|
BUILD = ENV['BUILD_NUMBER'] || COMPACTDATE
|
28
28
|
|
29
|
-
#STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
|
30
29
|
STRING = [MAJOR, MINOR, TINY].compact.join('.')
|
31
30
|
|
32
31
|
SUMMARY = "rtm #{STRING}"
|