rtm-javatmapi 0.3.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/DISCLAIMER +15 -0
- data/LICENSE +201 -0
- data/README +4 -0
- data/lib/rtm-javatmapi.rb +4 -0
- data/lib/rtm/javatmapi.rb +229 -0
- data/lib/rtm/javatmapi/aliases.rb +43 -0
- data/lib/rtm/javatmapi/core.rb +16 -0
- data/lib/rtm/javatmapi/core/association.rb +71 -0
- data/lib/rtm/javatmapi/core/construct.rb +92 -0
- data/lib/rtm/javatmapi/core/datatype_aware.rb +60 -0
- data/lib/rtm/javatmapi/core/locator.rb +20 -0
- data/lib/rtm/javatmapi/core/name.rb +127 -0
- data/lib/rtm/javatmapi/core/occurrence.rb +32 -0
- data/lib/rtm/javatmapi/core/reifiable.rb +38 -0
- data/lib/rtm/javatmapi/core/role.rb +49 -0
- data/lib/rtm/javatmapi/core/scoped.rb +93 -0
- data/lib/rtm/javatmapi/core/topic.rb +504 -0
- data/lib/rtm/javatmapi/core/topic_map.rb +677 -0
- data/lib/rtm/javatmapi/core/typed.rb +31 -0
- data/lib/rtm/javatmapi/core/variant.rb +19 -0
- data/lib/rtm/javatmapi/ext.rb +4 -0
- data/lib/rtm/javatmapi/ext/java_util_set.rb +10 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-collections-2.5.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-concurrent-2.4.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-i18n-1.1.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-io-2.6.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-iteration-2.5.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-lang-2.6.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-net-2.4.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-text-2.4.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/aduna-commons-xml-2.4.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/commons-collections-3.2.1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/ctm-writer-1.0.8-SNAPSHOT.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/java-tools-0.0.3-SNAPSHOT.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/jcl-over-slf4j-1.6.1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/mio-syntaxpack-nodeps-0.1.1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-model-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-query-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryalgebra-evaluation-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryalgebra-model-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryparser-api-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryparser-sparql-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryresultio-api-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-queryresultio-sparqlxml-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-repository-api-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-repository-sail-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-rio-api-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-rio-n3-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-rio-rdfxml-2.2.4.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-rio-turtle-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-sail-api-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-sail-inferencer-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/sesame-sail-memory-2.3-pr1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/slf4j-api-1.6.1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/slf4j-nop-1.6.1.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/tmapi-2.0.3-SNAPSHOT.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/tmapix-core-0.2.0-SNAPSHOT.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/tmapix-io-1.0.0.jar +0 -0
- data/lib/rtm/javatmapi/javalibs/trove-2.0.4.jar +0 -0
- data/lib/rtm/javatmapi/superiseable.rb +33 -0
- metadata +137 -0
@@ -0,0 +1,677 @@
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
2
|
+
# License: Apache License, Version 2.0
|
3
|
+
|
4
|
+
module Java::OrgTmapiCore::TopicMap
|
5
|
+
|
6
|
+
URI_PATTERN = ":"
|
7
|
+
|
8
|
+
include RTM::TopicMap
|
9
|
+
extend Superiseable
|
10
|
+
|
11
|
+
attr_reader :prefixes #hash
|
12
|
+
attr_reader :engine
|
13
|
+
|
14
|
+
def set_engine(engine)
|
15
|
+
@engine = engine
|
16
|
+
end
|
17
|
+
|
18
|
+
# returns the base iri of this topic map
|
19
|
+
def base_iri
|
20
|
+
getLocator.reference
|
21
|
+
end
|
22
|
+
alias :base_locator :base_iri
|
23
|
+
|
24
|
+
def prefixes
|
25
|
+
@prefixes ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# Adds the identifier (key) and reference (value) to the prefixes-Hash and
|
30
|
+
# returns all prefixes. Qnames consisting of "identifier:localpart"
|
31
|
+
# will be converted to "referencelocalpart".
|
32
|
+
#
|
33
|
+
# @param [String] identifier
|
34
|
+
# @param [String] reference
|
35
|
+
# @example
|
36
|
+
# add_prefix("tml", "http://www.topicmapslab.de/")
|
37
|
+
# @return void
|
38
|
+
def add_prefix(identifier, reference)
|
39
|
+
unless identifier.is_a?(String) && reference.is_a?(String)
|
40
|
+
raise("add_prefix: identifier and reference must be Strings")
|
41
|
+
# TODO @raise in yardoc
|
42
|
+
end
|
43
|
+
if identifier.empty? || reference.empty?
|
44
|
+
raise("add_prefix: identifier or reference may not be empty")
|
45
|
+
end
|
46
|
+
if (identifier == "sl") || (identifier == "si") || (identifier == "ii")
|
47
|
+
raise("add_prefix: identifier 'sl', 'si' or 'ii' not allowed for prefixes")
|
48
|
+
end
|
49
|
+
unless reference.include?(URI_PATTERN)
|
50
|
+
raise("add_prefix: reference must be absulute")
|
51
|
+
end
|
52
|
+
# prefix xsd is allowed
|
53
|
+
prefixes[identifier]= reference
|
54
|
+
prefixes
|
55
|
+
end
|
56
|
+
|
57
|
+
# Deletes a prefix (given the identifier) from the prefixes-Hash and
|
58
|
+
# returnes the remaining prefixes.
|
59
|
+
#
|
60
|
+
# If reference is given, it must match the value of the identifier (key)
|
61
|
+
# in the prefixes-Hash -
|
62
|
+
# if not, the prefix is not deleted.
|
63
|
+
#
|
64
|
+
# The result may be empty.
|
65
|
+
#
|
66
|
+
# :call-seq:
|
67
|
+
# delete_prefix(identifier) -> Hash
|
68
|
+
# delete_prefix(identifier,reference) -> Hash
|
69
|
+
#
|
70
|
+
def delete_prefix(identifier,reference = :any)
|
71
|
+
#warn("delete_prefix: identifier not found") unless prefixes.has_key?(identifier)
|
72
|
+
#warn("delete_prefix: reference does not match") unless reference == :any || reference == prefixes[identifier]
|
73
|
+
if reference == :any
|
74
|
+
prefixes.delete(identifier)
|
75
|
+
else
|
76
|
+
prefixes.delete_if{|k,v| k == identifier && v == reference}
|
77
|
+
end
|
78
|
+
prefixes
|
79
|
+
end
|
80
|
+
alias :del_prefix :delete_prefix
|
81
|
+
|
82
|
+
# Returns the prefixes that match the given the
|
83
|
+
# identifier and/or reference.
|
84
|
+
#
|
85
|
+
# :call-seq:
|
86
|
+
# find_prefix -> Hash
|
87
|
+
# find_prefix({:identifier => String}) -> Hash
|
88
|
+
# find_prefix({:reference => String}) -> Hash
|
89
|
+
# find_prefix({:identifier => String, :reference => String}) -> Hash
|
90
|
+
#
|
91
|
+
def find_prefix(filter = {})
|
92
|
+
#TODO Specs
|
93
|
+
identifier = filter[:identifier]
|
94
|
+
reference = filter[:reference]
|
95
|
+
if identifier && reference
|
96
|
+
return prefixes.select{|k,v| k == identifier && v == reference}
|
97
|
+
end
|
98
|
+
if identifier
|
99
|
+
return prefixes.select{|k,v| k == identifier}
|
100
|
+
elsif reference
|
101
|
+
return prefixes.select{|k,v| v == reference}
|
102
|
+
else
|
103
|
+
prefixes
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
def show_prefixes
|
109
|
+
#TODO to be implemented?
|
110
|
+
prefixes
|
111
|
+
end
|
112
|
+
public
|
113
|
+
|
114
|
+
superised
|
115
|
+
# Returns nil.
|
116
|
+
#
|
117
|
+
# :call-seq:
|
118
|
+
# parent -> nil
|
119
|
+
#
|
120
|
+
def parent
|
121
|
+
getParent
|
122
|
+
end
|
123
|
+
alias :reverse_children :parent
|
124
|
+
|
125
|
+
# Returns all Associations and Topics contained in this TopicMap.
|
126
|
+
#
|
127
|
+
# :call-seq:
|
128
|
+
# children -> Array of Associations and/or Topics
|
129
|
+
#
|
130
|
+
def children
|
131
|
+
getAssociations.to_a + getTopics.to_a
|
132
|
+
end
|
133
|
+
alias :reverse_parent :children
|
134
|
+
|
135
|
+
superised
|
136
|
+
# Creates an Association in this TopicMap.
|
137
|
+
#
|
138
|
+
# Type specifies the Association type.
|
139
|
+
#
|
140
|
+
# If given, scope specifies the association scope;
|
141
|
+
# else the Association is in the unconstrained scope.
|
142
|
+
# Scope must be an Array of identifiers.
|
143
|
+
#
|
144
|
+
# The last argument - a roles-Hash - is optional. If given,
|
145
|
+
# all specified roles will be created additionally. A role is
|
146
|
+
# specified by the role type: the key in the Hash and
|
147
|
+
# the role player: the corresponding value in the Hash.
|
148
|
+
#
|
149
|
+
# Each identifier (type, scope-identifier, roletype-identifier and
|
150
|
+
# player-identifier) may be a topic reference.
|
151
|
+
#
|
152
|
+
# :call-seq:
|
153
|
+
# create_association(type) -> Association
|
154
|
+
# create_association(type, scope-Array) -> Association
|
155
|
+
# create_association(type, roletype-identifier => player-identifier, ...) -> Association
|
156
|
+
# create_association(type, scope-Array, roletype-identifier => player-identifier, ...) -> Association
|
157
|
+
#
|
158
|
+
def create_association(type, *args)
|
159
|
+
roles = {}
|
160
|
+
if args.size == 0
|
161
|
+
# no args -> no scope and no roles given
|
162
|
+
scope = :ucs
|
163
|
+
elsif args.size == 1
|
164
|
+
# args may be an array (scope) or hash (roles)
|
165
|
+
argument = args[0]
|
166
|
+
if argument.is_a?(Array)
|
167
|
+
scope = argument
|
168
|
+
elsif argument.is_a?(Hash)
|
169
|
+
scope = :ucs
|
170
|
+
roles = argument
|
171
|
+
else
|
172
|
+
raise("create_association: arguments after type may be an Array or Hash")
|
173
|
+
end
|
174
|
+
else
|
175
|
+
# several arguments after type
|
176
|
+
argument1 = args[0]
|
177
|
+
argument2 = args[1]
|
178
|
+
if argument1.is_a?(Array)
|
179
|
+
scope = argument1
|
180
|
+
roles = argument2
|
181
|
+
elsif argument1.is_a?(Hash)
|
182
|
+
scope = :ucs
|
183
|
+
roles = argument1
|
184
|
+
else
|
185
|
+
raise("create_association: arguments after type may be an Array or Hash")
|
186
|
+
end
|
187
|
+
end
|
188
|
+
raise("create_association: type must be a Topic or Topic-Reference") unless type.is_a?(Java::OrgTmapiCore::Topic) || type.is_a?(String) || type.is_a?(Java::OrgTmapiCore::Locator)
|
189
|
+
if scope == :ucs
|
190
|
+
assoc = createAssociation(get!(type),[].to_java(Java::OrgTmapiCore::Topic))
|
191
|
+
else
|
192
|
+
raise("create_association: scope must be an Array") unless scope.is_a?(Array)
|
193
|
+
assoc = scope.empty? ? createAssociation(get!(type),[].to_java(Java::OrgTmapiCore::Topic)) : createAssociation(get!(type),get!(scope))
|
194
|
+
end
|
195
|
+
raise("create_association: roles must be a Hash") unless roles.is_a?(Hash)
|
196
|
+
roles.each do |k,v|
|
197
|
+
if v.is_a?(Array)
|
198
|
+
v.each{|player| assoc.create_role(k,player)}
|
199
|
+
else
|
200
|
+
assoc.create_role(k,v)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
yield assoc if block_given?
|
204
|
+
return assoc
|
205
|
+
end
|
206
|
+
|
207
|
+
# Calls TMAPI TopicMap.getIndex which
|
208
|
+
# returns the index for the TypeInstanceIndex.
|
209
|
+
#
|
210
|
+
# :call-seq:
|
211
|
+
# type_instance_index -> TypeInstanceIndex
|
212
|
+
#
|
213
|
+
def type_instance_index
|
214
|
+
# Equals _index(:TypeInstanceIndex), which doesn't work yet
|
215
|
+
index = getIndex(Java::OrgTmapiIndex::TypeInstanceIndex.java_class)
|
216
|
+
index.open unless index.is_open
|
217
|
+
return index
|
218
|
+
end
|
219
|
+
|
220
|
+
# Calls TMAPI TopicMap.getIndex which
|
221
|
+
# returns the index for the LiteralIndex.
|
222
|
+
#
|
223
|
+
# :call-seq:
|
224
|
+
# literal_index -> LiteralIndex
|
225
|
+
#
|
226
|
+
def literal_index
|
227
|
+
# Equals _index(:LiteralIndex), which doesn't work yet
|
228
|
+
index = getIndex(Java::OrgTmapiIndex::LiteralIndex.java_class)
|
229
|
+
index.open unless index.is_open
|
230
|
+
return index
|
231
|
+
end
|
232
|
+
|
233
|
+
# Calls TMAPI TopicMap.getIndex which
|
234
|
+
# returns the index for the ScopedIndex.
|
235
|
+
#
|
236
|
+
# :call-seq:
|
237
|
+
# scoped_index -> ScopedIndex
|
238
|
+
#
|
239
|
+
def scoped_index
|
240
|
+
# Equals _index(:ScopedIndex), which doesn't work yet
|
241
|
+
index = getIndex(Java::OrgTmapiIndex::ScopedIndex.java_class)
|
242
|
+
index.open unless index.is_open
|
243
|
+
return index
|
244
|
+
end
|
245
|
+
|
246
|
+
# Returns all topics in the topic map that are used as instance
|
247
|
+
# in an "type-instance"-relationship.
|
248
|
+
#
|
249
|
+
# The optional argument specifies the type the instances should have.
|
250
|
+
# Type may be a topic reference. This method equals topics(type).
|
251
|
+
#
|
252
|
+
# The result may be empty.
|
253
|
+
#
|
254
|
+
# :call-seq:
|
255
|
+
# instances -> Array of Topics
|
256
|
+
# instances(type) -> Array of Topics
|
257
|
+
#
|
258
|
+
def instances(type = :any)
|
259
|
+
return types.map{|t| t.instances.to_a}.flatten.uniq if type == :any
|
260
|
+
type = self.get(type) unless type.is_a?(RTM::Topic)
|
261
|
+
return type ? type_instance_index.getTopics(type).to_a : []
|
262
|
+
end
|
263
|
+
|
264
|
+
# Returns all topics in the topic map that are used as type
|
265
|
+
# in an "type-instance"-relationship.
|
266
|
+
#
|
267
|
+
# :call-seq:
|
268
|
+
# types -> Set of Topics
|
269
|
+
#
|
270
|
+
def types
|
271
|
+
type_instance_index.getTopicTypes
|
272
|
+
end
|
273
|
+
|
274
|
+
superised
|
275
|
+
# Returns all associations contained in this topic map.
|
276
|
+
#
|
277
|
+
# The optional argument specifies the type the associations should have,
|
278
|
+
# i.e. all instances of the specified type are returned. Type may be a
|
279
|
+
# topic reference.
|
280
|
+
#
|
281
|
+
# The return value may be empty.
|
282
|
+
#
|
283
|
+
# :call-seq:
|
284
|
+
# associations -> Set of Associations
|
285
|
+
# associations(type) -> Array of Associations
|
286
|
+
#
|
287
|
+
def associations(type = :any)
|
288
|
+
return getAssociations if type == :any
|
289
|
+
raise("associations(type): type must be a topic reference.") unless (type.is_a?(RTM::Topic) || type.is_a?(RTM::Locator) || type.is_a?(String))
|
290
|
+
type = self.get(type) unless type.is_a?(RTM::Topic)
|
291
|
+
return type ? type_instance_index.getAssociations(type).to_a : []
|
292
|
+
end
|
293
|
+
|
294
|
+
superised
|
295
|
+
# Returns all topics contained in this topic map.
|
296
|
+
#
|
297
|
+
# The optional argument specifies the type of the topics should have,
|
298
|
+
# i.e. all instances of the specified type are returned. Type may be a
|
299
|
+
# topic reference. This method equals instances (type).
|
300
|
+
#
|
301
|
+
# The return value may be empty.
|
302
|
+
#
|
303
|
+
# :call_spec:
|
304
|
+
# topics -> Set of Topics
|
305
|
+
# topics(type) -> Array of Topics
|
306
|
+
#
|
307
|
+
def topics(type = :any)
|
308
|
+
return getTopics if type == :any
|
309
|
+
return instances(type)
|
310
|
+
end
|
311
|
+
|
312
|
+
superised
|
313
|
+
# Returns a Locator representing the identifier.
|
314
|
+
# Identifier may be a String (IRI).
|
315
|
+
#
|
316
|
+
# :call-seq:
|
317
|
+
# create_locator(identifier) -> Locator
|
318
|
+
#
|
319
|
+
def create_locator(identifier)
|
320
|
+
return identifier if identifier.is_a?(Java::OrgTmapiCore::Locator)
|
321
|
+
raise("create_locator: identifier must be a String") unless identifier.is_a?(String)
|
322
|
+
qname = check_for_qname(identifier)
|
323
|
+
if qname
|
324
|
+
identifier = qname
|
325
|
+
else
|
326
|
+
unless identifier.include?(URI_PATTERN)
|
327
|
+
begin
|
328
|
+
identifier = getLocator.resolve(identifier)
|
329
|
+
rescue org.tmapi.core.MalformedIRIException => mie
|
330
|
+
raise(mie.message)
|
331
|
+
end
|
332
|
+
return identifier
|
333
|
+
end
|
334
|
+
end
|
335
|
+
begin
|
336
|
+
identifier = createLocator(identifier)
|
337
|
+
rescue org.tmapi.core.MalformedIRIException => mie
|
338
|
+
raise(mie.message)
|
339
|
+
end
|
340
|
+
return identifier
|
341
|
+
end
|
342
|
+
|
343
|
+
superised
|
344
|
+
# Assumes identifier is an item identifier (Locator or String)
|
345
|
+
# or an Array of item identifiers (Locators and/or Strings)
|
346
|
+
# and returns a Construct or an Array of Constructs
|
347
|
+
# by its/their item identifier/s.
|
348
|
+
#
|
349
|
+
# :call-seq:
|
350
|
+
# get_construct_by_item_identifier(identifier) -> Construct
|
351
|
+
# get_construct_by_item_identifier(identifier-Array) -> Array of Constructs
|
352
|
+
#
|
353
|
+
def get_construct_by_item_identifier(identifier)
|
354
|
+
identifier = create_locator(identifier) if identifier.is_a?(String)
|
355
|
+
return getConstructByItemIdentifier(identifier) if identifier.is_a?(Java::OrgTmapiCore::Locator)
|
356
|
+
return identifier.map{|i| get_topic_by_subject_locator(i)} if identifier.is_a?(Array)
|
357
|
+
return nil
|
358
|
+
end
|
359
|
+
|
360
|
+
superised
|
361
|
+
# Assumes identifier is a subject identifier (Locator or String)
|
362
|
+
# or an Array of subject identifiers (Locators and/or Strings)
|
363
|
+
# and returns a Topic or an Array of Topics
|
364
|
+
# by its/their subject identifier/s.
|
365
|
+
#
|
366
|
+
# :call-seq:
|
367
|
+
# get_topic_by_subject_identifier(identifier) -> Topic
|
368
|
+
# get_topic_by_subject_identifier(identifier-Array) -> Array of Topics
|
369
|
+
#
|
370
|
+
def get_topic_by_subject_identifier(identifier)
|
371
|
+
identifier = create_locator(identifier) if identifier.is_a?(String)
|
372
|
+
return getTopicBySubjectIdentifier(identifier) if identifier.is_a?(Java::OrgTmapiCore::Locator)
|
373
|
+
return identifier.map{|i| get_topic_by_subject_locator(i)} if identifier.is_a?(Array)
|
374
|
+
return nil
|
375
|
+
end
|
376
|
+
|
377
|
+
superised
|
378
|
+
# Assumes identifier is a subject locator (Locator or String)
|
379
|
+
# or an Array of subject locators (Locators and/or Strings)
|
380
|
+
# and returns a Topic or an Array of Topics
|
381
|
+
# by its/their subject locator/s.
|
382
|
+
#
|
383
|
+
# :call-seq:
|
384
|
+
# get_topic_by_subject_locator(identifier) -> Topic
|
385
|
+
# get_topic_by_subject_locator(identifier-Array) -> Array of Topics
|
386
|
+
#
|
387
|
+
def get_topic_by_subject_locator(identifier)
|
388
|
+
identifier = create_locator(identifier) if identifier.is_a?(String)
|
389
|
+
return getTopicBySubjectLocator(identifier) if identifier.is_a?(Java::OrgTmapiCore::Locator)
|
390
|
+
return identifier.map{|i| get_topic_by_subject_locator(i)} if identifier.is_a?(Array)
|
391
|
+
return nil
|
392
|
+
end
|
393
|
+
|
394
|
+
superised
|
395
|
+
# Assumes identifier is a subject identifier (Locator or String)
|
396
|
+
# or an Array of subject identifiers (Locators and/or Strings).
|
397
|
+
# Either returns an existing Topic (or Array of Topics) or creates a/
|
398
|
+
# new Topic instance/s with the specified subject identifier/s.
|
399
|
+
#
|
400
|
+
# :call-seq:
|
401
|
+
# create_topic_by_subject_identifier(identifier) -> Topic
|
402
|
+
# create_topic_by_subject_identifier(identifier-Array) -> Array of Topics
|
403
|
+
#
|
404
|
+
# If a topic with the specified subject identifier exists in the topic map,
|
405
|
+
# that topic is returned. If a topic with an item identifier equals to the
|
406
|
+
# specified subject identifier exists, the specified subject identifier is
|
407
|
+
# added to that topic and the topic is returned. If neither a topic with
|
408
|
+
# the specified subject identifier nor with an item identifier equals to
|
409
|
+
# the subject identifier exists, a topic with the subject identifier is
|
410
|
+
# created.
|
411
|
+
def create_topic_by_subject_identifier(identifier)
|
412
|
+
get_stuff(identifier){|x| createTopicBySubjectIdentifier(x)}
|
413
|
+
end
|
414
|
+
|
415
|
+
superised
|
416
|
+
# Assumes identifier is a subject locator (Locator or String)
|
417
|
+
# or an Array of subject locators (Locators and/or Strings).
|
418
|
+
# Either returns an existing Topic (or Array of Topics) or creates a/
|
419
|
+
# new Topic instance/s with the specified subject locators/s.
|
420
|
+
#
|
421
|
+
# :call-seq:
|
422
|
+
# create_topic_by_subject_locator(identifier) -> Topic
|
423
|
+
# create_topic_by_subject_locator(identifier-Array) -> Array of Topics
|
424
|
+
#
|
425
|
+
def create_topic_by_subject_locator(identifier)
|
426
|
+
get_stuff(identifier){|x| createTopicBySubjectLocator(x)}
|
427
|
+
end
|
428
|
+
|
429
|
+
superised
|
430
|
+
# Assumes identifier is a item identifier (Locator or String)
|
431
|
+
# or an Array of item identifiers (Locators and/or Strings).
|
432
|
+
# Either returns an existing Topic (or Array of Topics) or creates a/
|
433
|
+
# new Topic instance/s with the specified item identifier/s.
|
434
|
+
#
|
435
|
+
# :call-seq:
|
436
|
+
# create_topic_by_item_identifier(identifier) -> Topic
|
437
|
+
# create_topic_by_item_identifier(identifier-Array) -> Array of Topics
|
438
|
+
#
|
439
|
+
# If a topic with the specified item identifier exists in the topic map,
|
440
|
+
# that topic is returned. If a topic with a subject identifier equals to
|
441
|
+
# the specified item identifier exists, the specified item identifier is
|
442
|
+
# added to that topic and the topic is returned. If neither a topic with
|
443
|
+
# the specified item identifier nor with a subject identifier equals to
|
444
|
+
# the subject identifier exists, a topic with the item identifier is created.
|
445
|
+
def create_topic_by_item_identifier(identifier)
|
446
|
+
get_stuff(identifier){|x| createTopicByItemIdentifier(x)}
|
447
|
+
end
|
448
|
+
|
449
|
+
# Assumes identifier is an IRI (Locator or String) or an Array of IRIs.
|
450
|
+
# Returns an existing or created Topic or an Array of Topics according
|
451
|
+
# to the nature of the IRI.
|
452
|
+
#
|
453
|
+
# :call-seq:
|
454
|
+
# create_topic_by(identifier) -> Topic
|
455
|
+
# create_topic_by(identifier-Array) -> Array of Topics
|
456
|
+
#
|
457
|
+
def create_topic_by(identifier)
|
458
|
+
case identifier
|
459
|
+
when Java::OrgTmapiCore::Locator
|
460
|
+
return create_topic_by_subject_identifier(identifier)
|
461
|
+
when String
|
462
|
+
reroute_for_create(identifier)
|
463
|
+
when Array
|
464
|
+
return identifier.map{|i| create_topic_by(i)}
|
465
|
+
else
|
466
|
+
return nil
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
470
|
+
# If identifier is a Topic, returns this Topic.
|
471
|
+
#
|
472
|
+
# If identifier is a Locator, returns the Topic specified by the Locator (as item
|
473
|
+
# identifier or subject identifier).
|
474
|
+
#
|
475
|
+
# If identifier is a String, returnes the Topic which has this
|
476
|
+
# String as subject identifier (by default or if the String starts with "si:")
|
477
|
+
# or as subject locator (if the String starts with a "=" or "sl:")
|
478
|
+
# or as item identifier (if the String starts with a "^" or "ii:").
|
479
|
+
#
|
480
|
+
# Returns an Array of Topics if an Array of identifiers is given according to the
|
481
|
+
# rules above.
|
482
|
+
#
|
483
|
+
# Given one identifier, if no Topic is found, returns nil.
|
484
|
+
#
|
485
|
+
# Given an Array of identifiers, if no Topics are found, returnes an empty Array.
|
486
|
+
#
|
487
|
+
# :call-seq:
|
488
|
+
# get(identifier) -> Topic or nil
|
489
|
+
# get(identifier-Array) -> Array of Topics or empty Array
|
490
|
+
#
|
491
|
+
def get(identifier)
|
492
|
+
self.cached(self, :get, identifier) {
|
493
|
+
case identifier
|
494
|
+
when nil
|
495
|
+
nil
|
496
|
+
when Java::OrgTmapiCore::Topic
|
497
|
+
identifier
|
498
|
+
when Java::OrgTmapiCore::Locator
|
499
|
+
if get_construct_by_item_identifier(identifier).is_a?(Java::OrgTmapiCore::Topic)
|
500
|
+
get_construct_by_item_identifier(identifier)
|
501
|
+
elsif get_topic_by_subject_identifier(identifier)
|
502
|
+
get_topic_by_subject_identifier(identifier)
|
503
|
+
else
|
504
|
+
#return get_topic_by_subject_locator(identifier) if get_topic_by_subject_locator(identifier) #not allowed because Topics with equals si and ii are merged but sl not
|
505
|
+
nil
|
506
|
+
end
|
507
|
+
when String
|
508
|
+
reroute_for_get(identifier)
|
509
|
+
when Array
|
510
|
+
# in: multi array -> out: multi array
|
511
|
+
identifier.map{|i| get(i)}
|
512
|
+
#when Hash
|
513
|
+
#TODO: use case for getting Topics if argument is a hash
|
514
|
+
else
|
515
|
+
raise("get(#{identifier.inspect}): arguments do not match")
|
516
|
+
end
|
517
|
+
}
|
518
|
+
end
|
519
|
+
alias :topic :get
|
520
|
+
# alias :[] :get # not sure if this is a good idea, for now we leave it out
|
521
|
+
|
522
|
+
# Calls get(identifier) and returns the Topic or Array of Topics according
|
523
|
+
# to the nature of the identifier (Topic/Topic-References or
|
524
|
+
# Array of those types).
|
525
|
+
#
|
526
|
+
# Calls create_topic_by(identifier) if a Topic specified by identifier does
|
527
|
+
# not exist in the TopicMap. Returns the created and/our found Topic/s.
|
528
|
+
#
|
529
|
+
# If identifier is a String, returnes/creates the Topic which has this
|
530
|
+
# String as subject identifier (by default or if the String starts with "si:")
|
531
|
+
# or as subject locator (if the String starts with a "=" or "sl:")
|
532
|
+
# or as item identifier (if the String starts with a "^" or "ii:").
|
533
|
+
#
|
534
|
+
# :call-seq:
|
535
|
+
# get!(identifier) -> Topic
|
536
|
+
# get!(identifier-Array) -> Array of Topics
|
537
|
+
#
|
538
|
+
def get!(identifier)
|
539
|
+
return nil unless identifier
|
540
|
+
if identifier.is_a?(Array)
|
541
|
+
return identifier.map{|i| get!(i)}
|
542
|
+
end
|
543
|
+
found = get(identifier)
|
544
|
+
return found ? found : create_topic_by(identifier)
|
545
|
+
end
|
546
|
+
alias :topic! :get!
|
547
|
+
|
548
|
+
def construct_by_id(id)
|
549
|
+
getConstructById(id)
|
550
|
+
end
|
551
|
+
|
552
|
+
# Returns all names occurring in the topic map
|
553
|
+
def names
|
554
|
+
name_types.map{|type| type.typed_names.to_a}.flatten
|
555
|
+
end
|
556
|
+
|
557
|
+
# Returns all occurrences occurring in the topic map
|
558
|
+
def occurrences
|
559
|
+
occurrence_types.map{|type| type.typed_occurrences.to_a}.flatten
|
560
|
+
end
|
561
|
+
|
562
|
+
# Returns all roles occurring in the topic map
|
563
|
+
def roles
|
564
|
+
role_types.map{|type| type.typed_roles.to_a}.flatten
|
565
|
+
end
|
566
|
+
|
567
|
+
# Returns all variants occurring in the topic map
|
568
|
+
def variants
|
569
|
+
names.map{|name| name.variants.to_a}.flatten
|
570
|
+
end
|
571
|
+
|
572
|
+
private
|
573
|
+
|
574
|
+
# If the identifier is a qname (= "prefix_identifier" + ":" + "localpart"),
|
575
|
+
# substitutes the prefix_identifier with the reference
|
576
|
+
# (=> "reference" + "localpart") if the prefix_identifier is
|
577
|
+
# found in the prefixes-Hash.
|
578
|
+
#
|
579
|
+
# Returnes the enhanced identifier if successfull.
|
580
|
+
# Returns the nil if no substitution occured.
|
581
|
+
#
|
582
|
+
# :call-seq:
|
583
|
+
# check_for_qname(identifier) -> String
|
584
|
+
#
|
585
|
+
def check_for_qname(identifier)
|
586
|
+
return nil if prefixes.empty?
|
587
|
+
|
588
|
+
sections = identifier.split(":")
|
589
|
+
prefix_identifier = sections[0]
|
590
|
+
if (sections.size > 1) && prefixes.has_key?(prefix_identifier)
|
591
|
+
localpart = identifier.sub("#{prefix_identifier}:", "")
|
592
|
+
# check localpart
|
593
|
+
unless localpart.include?("/") # no / allowed in localpart
|
594
|
+
return prefixes[prefix_identifier] + localpart
|
595
|
+
end
|
596
|
+
end
|
597
|
+
return nil
|
598
|
+
end
|
599
|
+
|
600
|
+
# Calls TMAPI TopicMap.getIndex which
|
601
|
+
# returns the specified index for the
|
602
|
+
# indexInterface i.
|
603
|
+
#
|
604
|
+
# :call-seq:
|
605
|
+
# _index(i) -> extended index
|
606
|
+
#
|
607
|
+
# doesn't work;
|
608
|
+
# JRuby doesn't seem to like "send" there;
|
609
|
+
# solution: use getIndex directly
|
610
|
+
def _index(i)
|
611
|
+
index = getIndex(Java::OrgTmapiIndex::send(i).java_class)
|
612
|
+
index.open unless index.is_open
|
613
|
+
return index
|
614
|
+
end
|
615
|
+
|
616
|
+
# If identifier is not a String or Locator -> assumes it is an Array.
|
617
|
+
# If Array entries are not locators -> create_locator(entry).
|
618
|
+
# Calls yield on each Array entry and returns Array.
|
619
|
+
#
|
620
|
+
# If identifier is not a Locator -> assumes it is a String and
|
621
|
+
# calls create_locator(idenifier).
|
622
|
+
# Executes yield on locator and returns the result.
|
623
|
+
def get_stuff(identifier)
|
624
|
+
unless (identifier.is_a?(String)) || (identifier.is_a?(Java::OrgTmapiCore::Locator))
|
625
|
+
identifier_in_use = identifier.map{|x|(x.is_a? Java::OrgTmapiCore::Locator)? x : create_locator(x)}
|
626
|
+
return identifier_in_use.map{|y| yield y}
|
627
|
+
else
|
628
|
+
unless identifier.is_a? Java::OrgTmapiCore::Locator
|
629
|
+
identifier = create_locator(identifier)
|
630
|
+
end
|
631
|
+
return (yield identifier)
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
# Identifies the identifier as item identifier, subject locator or
|
636
|
+
# subject identifier and calls create_topic_by_.. accordingly. Creates
|
637
|
+
# new topic if topic does not exist yet. Returns the topic.
|
638
|
+
#
|
639
|
+
# :call-seq:
|
640
|
+
# reroute_for_create(identifier) -> Topic
|
641
|
+
#
|
642
|
+
def reroute_for_create(identifier)
|
643
|
+
case identifier
|
644
|
+
when /^(\^|ii:)\s*(.*)/ #identifiers starts with ^ or ii:
|
645
|
+
create_topic_by_item_identifier(create_locator($2))
|
646
|
+
when /^(=|sl:)\s*(.*)/ #identifier starts with = or sl:
|
647
|
+
create_topic_by_subject_locator(create_locator($2))
|
648
|
+
when /^(si:)\s*(.*)/ #identifier starts with si:
|
649
|
+
create_topic_by_subject_identifier(create_locator($2))
|
650
|
+
else #identifier does not start with a special character
|
651
|
+
create_topic_by_subject_identifier(create_locator(identifier.lstrip))#lstrip: leading whitespace chars removed
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
655
|
+
# Identifies the identifier as item identifier, subject locator or
|
656
|
+
# subject identifier and calls get_construct/topic_by_.. accordingly.
|
657
|
+
# Returns the topic.
|
658
|
+
#
|
659
|
+
# :call-seq:
|
660
|
+
# reroute_for_get(identifier) -> Topic
|
661
|
+
#
|
662
|
+
def reroute_for_get(identifier)
|
663
|
+
case identifier
|
664
|
+
when /^(si:|sl:|ii:|=|\^)$/
|
665
|
+
return nil
|
666
|
+
when /^(\^|ii:)\s*(.*)/ #identifiers starts with ^ or ii:
|
667
|
+
get_construct_by_item_identifier(create_locator($2))
|
668
|
+
when /^(=|sl:)\s*(.+)/ #identifier starts with = or sl:
|
669
|
+
get_topic_by_subject_locator(create_locator($2))
|
670
|
+
when /^(si:)\s*(.+)/ #identifier starts with si:
|
671
|
+
get_topic_by_subject_identifier(create_locator($2))
|
672
|
+
else #identifier does not start with a special character
|
673
|
+
get_topic_by_subject_identifier(create_locator(identifier.lstrip)) #lstrip: leading whitespace chars removed
|
674
|
+
end
|
675
|
+
end
|
676
|
+
|
677
|
+
end
|