rtm 0.1.6 → 0.2.0

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.
Files changed (146) hide show
  1. data/DISCLAIMER +10 -33
  2. data/LICENSE +201 -0
  3. data/README +3 -3
  4. data/lib/rtm.rb +148 -74
  5. data/lib/rtm/axes.rb +295 -0
  6. data/lib/rtm/axes/association.rb +76 -0
  7. data/lib/rtm/axes/associations.rb +96 -0
  8. data/lib/rtm/axes/assocs_names_occs.rb +56 -0
  9. data/lib/rtm/axes/characteristic.rb +68 -0
  10. data/lib/rtm/axes/characteristics.rb +93 -0
  11. data/lib/rtm/axes/string.rb +76 -0
  12. data/lib/rtm/axes/strings.rb +87 -0
  13. data/lib/rtm/axes/topic.rb +233 -0
  14. data/lib/rtm/axes/topics.rb +280 -0
  15. data/lib/rtm/{backward_compatibility.rb → deprecated/index_property_set.rb} +3 -0
  16. data/lib/rtm/engine.rb +58 -0
  17. data/lib/rtm/extensions.rb +11 -1
  18. data/lib/rtm/{locator_helpers.rb → helpers/locator.rb} +15 -4
  19. data/lib/rtm/{helpers.rb → helpers/no_output.rb} +3 -0
  20. data/lib/rtm/helpers/uri.rb +13 -0
  21. data/lib/rtm/io.rb +18 -0
  22. data/lib/rtm/io/from_xtm2_libxml.rb +2 -1
  23. data/lib/rtm/io/ontopia_io.rb +25 -0
  24. data/lib/rtm/io/tmapix.rb +234 -0
  25. data/lib/rtm/io/to_hash.rb +116 -0
  26. data/lib/rtm/io/to_jtm.rb +53 -103
  27. data/lib/rtm/io/to_rdf.rb +30 -0
  28. data/lib/rtm/io/to_string.rb +8 -6
  29. data/lib/rtm/io/to_xtm1.rb +6 -4
  30. data/lib/rtm/io/to_xtm2.rb +10 -8
  31. data/lib/rtm/io/to_yaml.rb +29 -98
  32. data/lib/rtm/navigation.rb +37 -0
  33. data/lib/rtm/navigation/association/players.rb +25 -0
  34. data/lib/rtm/navigation/name/atomify.rb +19 -0
  35. data/lib/rtm/navigation/name/characteristics.rb +33 -0
  36. data/lib/rtm/navigation/occurrence/atomify.rb +19 -0
  37. data/lib/rtm/navigation/occurrence/characteristics.rb +33 -0
  38. data/lib/rtm/navigation/topic/characteristics.rb +33 -0
  39. data/lib/rtm/navigation/topic/indicators.rb +31 -0
  40. data/lib/rtm/navigation/topic/items.rb +31 -0
  41. data/lib/rtm/navigation/topic/locators.rb +31 -0
  42. data/lib/rtm/navigation/topic/players.rb +27 -0
  43. data/lib/rtm/navigation/topic/supertypes.rb +162 -0
  44. data/lib/rtm/navigation/topic/traverse.rb +51 -0
  45. data/lib/rtm/navigation/topic/types.rb +107 -0
  46. data/lib/rtm/psi.rb +33 -2
  47. data/lib/rtm/sugar.rb +34 -0
  48. data/lib/rtm/sugar/association/hash_access.rb +46 -0
  49. data/lib/rtm/sugar/occurrence/dynamic_value.rb +75 -0
  50. data/lib/rtm/{pimp_my_api.rb → sugar/occurrence/externalize.rb} +3 -0
  51. data/lib/rtm/sugar/role/counterparts.rb +133 -46
  52. data/lib/rtm/sugar/topic/characteristics.rb +126 -12
  53. data/lib/rtm/sugar/topic/counterparts.rb +130 -7
  54. data/lib/rtm/sugar/topic/hash_access.rb +140 -30
  55. data/lib/rtm/sugar/topic/scoped.rb +65 -0
  56. data/lib/rtm/sugar/topic/topic_ref.rb +35 -0
  57. data/lib/rtm/sugar/topic/typed.rb +159 -0
  58. data/lib/rtm/sugar/typed/types.rb +38 -0
  59. data/lib/rtm/validation.rb +8 -5
  60. data/lib/rtm/version.rb +18 -0
  61. data/spec/helpers/spec_exampleexamplegroup.rb +14 -0
  62. data/spec/rtm/axes/association_spec.rb +88 -0
  63. data/spec/rtm/axes/associations_spec.rb +60 -0
  64. data/spec/rtm/axes/assocs_names_occs_spec.rb +9 -0
  65. data/spec/rtm/axes/characteristic_spec.rb +90 -0
  66. data/spec/rtm/axes/characteristics_spec.rb +85 -0
  67. data/spec/rtm/axes/string_spec.rb +145 -0
  68. data/spec/rtm/axes/strings_spec.rb +168 -0
  69. data/spec/rtm/axes/topic_spec.rb +124 -0
  70. data/spec/rtm/axes/topics_spec.rb +103 -0
  71. data/spec/rtm/base_spec.rb +32 -0
  72. data/spec/rtm/io/tmapix_spec.rb +85 -0
  73. data/spec/rtm/navigation/association/players_spec.rb +58 -0
  74. data/spec/rtm/navigation/association_spec.rb +52 -0
  75. data/spec/rtm/navigation/name/atomify_spec.rb +27 -0
  76. data/spec/rtm/navigation/name/characteristics_spec.rb +34 -0
  77. data/spec/rtm/navigation/name_spec.rb +52 -0
  78. data/spec/rtm/navigation/occurrence/atomify_spec.rb +27 -0
  79. data/spec/rtm/navigation/occurrence/characteristics_spec.rb +34 -0
  80. data/spec/rtm/navigation/occurrence_spec.rb +52 -0
  81. data/spec/rtm/navigation/string_spec.rb +51 -0
  82. data/spec/rtm/navigation/topic/characteristics_spec.rb +55 -0
  83. data/spec/rtm/navigation/topic/indicators_spec.rb +43 -0
  84. data/spec/rtm/navigation/topic/items_spec.rb +44 -0
  85. data/spec/rtm/navigation/topic/locators_spec.rb +44 -0
  86. data/spec/rtm/navigation/topic/players_spec.rb +48 -0
  87. data/spec/rtm/navigation/topic/scope_spec.rb +41 -0
  88. data/spec/rtm/navigation/topic/supertypes_spec.rb +376 -0
  89. data/spec/rtm/navigation/topic/traverse_spec.rb +64 -0
  90. data/spec/rtm/navigation/topic/types_spec.rb +195 -0
  91. data/spec/rtm/navigation/topic_spec.rb +153 -0
  92. data/spec/rtm/sugar/association/hash_access_spec.rb +55 -0
  93. data/spec/rtm/sugar/occurrence/dynamic_value_spec.rb +16 -0
  94. data/spec/rtm/sugar/role/counterparts_spec.rb +191 -0
  95. data/spec/rtm/sugar/topic/characteristics_spec.rb +318 -0
  96. data/spec/rtm/sugar/topic/counterparts_spec.rb +184 -0
  97. data/spec/rtm/sugar/topic/hash_access_spec.rb +234 -0
  98. data/spec/rtm/sugar/topic/scoped_spec.rb +131 -0
  99. data/spec/rtm/sugar/topic/topic_ref_spec.rb +44 -0
  100. data/spec/rtm/sugar/topic/typed_spec.rb +155 -0
  101. data/spec/rtm/sugar/typed/types_spec.rb +24 -0
  102. data/spec/rtm/tmapi/core/association_spec.rb +169 -0
  103. data/spec/rtm/tmapi/core/construct_spec.rb +25 -0
  104. data/spec/rtm/tmapi/core/name_spec.rb +85 -0
  105. data/spec/rtm/tmapi/core/occurrence_spec.rb +96 -0
  106. data/spec/rtm/tmapi/core/reifiable_spec.rb +168 -0
  107. data/spec/rtm/tmapi/core/role_spec.rb +73 -0
  108. data/spec/rtm/tmapi/core/scoped_spec.rb +403 -0
  109. data/spec/rtm/tmapi/core/topic_map_spec.rb +648 -0
  110. data/spec/rtm/tmapi/core/topic_spec.rb +992 -0
  111. data/spec/rtm/tmapi/core/typed_spec.rb +112 -0
  112. data/spec/rtm/tmapi/core/variant_spec.rb +52 -0
  113. data/spec/rtm/tmapi/ext/java_util_set_spec.rb +34 -0
  114. data/spec/rtm/tmapi_spec.rb +44 -0
  115. data/spec/rtm/utils/sparql_spec.rb +26 -0
  116. data/spec/rtm_spec.rb +94 -0
  117. data/spec/spec_helper.rb +23 -0
  118. data/test/base_unit_test.rb +161 -0
  119. data/test/{base_test.rb → base_unit_test_tmapi.rb} +46 -43
  120. metadata +122 -66
  121. data/COPYRIGHT +0 -4
  122. data/lib/Rakefile.rb +0 -42
  123. data/lib/activetopicmaps.rb +0 -278
  124. data/lib/rtm/backend/active_record.rb +0 -58
  125. data/lib/rtm/backend/active_record/001_initial_schema.rb +0 -116
  126. data/lib/rtm/backend/active_record/association_and_role.rb +0 -33
  127. data/lib/rtm/backend/active_record/locators.rb +0 -55
  128. data/lib/rtm/backend/active_record/name_variant_occurrence.rb +0 -45
  129. data/lib/rtm/backend/active_record/quaaxtm2rtm.rb +0 -113
  130. data/lib/rtm/backend/active_record/quaaxtm2rtmviews.rb +0 -134
  131. data/lib/rtm/backend/active_record/set_wrapper.rb +0 -98
  132. data/lib/rtm/backend/active_record/tm_construct.rb +0 -62
  133. data/lib/rtm/backend/active_record/tm_delegator.rb +0 -345
  134. data/lib/rtm/backend/active_record/tm_set_delegator.rb +0 -195
  135. data/lib/rtm/backend/active_record/tmdm.rb +0 -298
  136. data/lib/rtm/backend/active_record/topic.rb +0 -87
  137. data/lib/rtm/backend/active_record/topic_map.rb +0 -314
  138. data/lib/rtm/backend/active_record/traverse_associations.rb +0 -87
  139. data/lib/rtm/base.rb +0 -92
  140. data/lib/rtm/connect.rb +0 -92
  141. data/lib/rtm/core_ext.rb +0 -6
  142. data/lib/rtm/io/from_xtm2.rb +0 -263
  143. data/lib/rtm/merging/merging.rb +0 -307
  144. data/lib/rtm/sugar/topic/identifier_direct.rb +0 -11
  145. data/lib/rtm/sugar/topic/predefined_associations.rb +0 -42
  146. data/lib/run_main_project.rb +0 -16
@@ -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
5
+ module Navigation
6
+ module Occurrence
7
+
8
+ # Returns the atomic value of the Characteristic (Name/Occurrence).
9
+ #
10
+ # :call-seq:
11
+ # atomify -> String
12
+ #
13
+ def atomify
14
+ value
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Occurrence
7
+
8
+ # Returns the Topic this Characteristic (Name/Occurrence) belongs to.
9
+ # The optional argument identifier filters the
10
+ # Characteristic for its type. If the type
11
+ # does not match, nil is returned.
12
+ #
13
+ # The identifier may be a Topic or Topic-Reference.
14
+ #
15
+ # :call-seq:
16
+ # reverse_characteristics -> Topic
17
+ # reverse_characteristics(identifier) -> Topic or nil
18
+ #
19
+ def reverse_characteristics(type=:any)
20
+ return parent if type == :any
21
+ _topic = topic_map.get(type)
22
+ return nil unless _topic
23
+ #filter the Name/Occurrence for its type:
24
+ if _topic == self.type
25
+ return parent
26
+ else
27
+ return nil
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all Names and Occurrences of this Topic.
9
+ # If an identifier is given, only those Names and Occurrences are returned,
10
+ # whose type or supertypes include the identifier.
11
+ #
12
+ # Identifier may be a Topic or Topic-Reference.
13
+ #
14
+ # The result may be empty.
15
+ #
16
+ # :call-seq:
17
+ # characteristics -> Array of Names and Occurrences
18
+ # characteristics(identifier) -> Array of Names and Occurrences
19
+ #
20
+ def characteristics(type=:any)
21
+ # FIXME which version of the code?
22
+ return names.to_a + occurrences.to_a if type == :any
23
+ _topic = topic_map.get(type)
24
+ return [] unless _topic
25
+ #names.select{|n| n.type.include?(_topic) || n.type.supertypes.include?(_topic)}.to_a +
26
+ #occurrences.select{|o| o.type.include?(_topic) || o.type.supertypes.include?(_topic)}.to_a
27
+ names.select{|n| n.type.supertypes.include?(_topic)}.to_a +
28
+ occurrences.select{|o| o.type.supertypes.include?(_topic)}.to_a
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all indicators (subject identifiers) of this Topic.
9
+ #
10
+ # The result may be empty.
11
+ #
12
+ # :call-seq:
13
+ # indicators -> Array of Strings
14
+ #
15
+ def indicators
16
+ getSubjectIdentifiers.map{|locator| locator.value}
17
+ end
18
+
19
+ # Returns one indicator (subject identifier) of this Topic or nil
20
+ # if this Topic has no indicator.
21
+ #
22
+ # :call-seq:
23
+ # indicator -> String or nil
24
+ #
25
+ def indicator
26
+ return indicators.empty? ? nil : indicators.sort.first # TODO Which sorting algorithm?
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all item identifier of this Topic.
9
+ #
10
+ # The result may be empty.
11
+ #
12
+ # :call-seq:
13
+ # items -> Array of Strings
14
+ #
15
+ def items
16
+ getItemIdentifiers.map{|locator| locator.value}
17
+ end
18
+
19
+ # Returns one item identifier of this Topic or nil
20
+ # if this Topic has no item identifier.
21
+ #
22
+ # :call-seq:
23
+ # item -> String or nil
24
+ #
25
+ def item
26
+ return items.empty? ? nil : items.sort.first # TODO Which sorting algorithm?
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all subject locators of this Topic.
9
+ #
10
+ # The result may be empty.
11
+ #
12
+ # :call-seq:
13
+ # locators -> Array of Strings
14
+ #
15
+ def locators
16
+ getSubjectLocators.map{|locator| locator.value}
17
+ end
18
+
19
+ # Returns one subject locator of this Topic or nil
20
+ # if this Topic has no subject locator.
21
+ #
22
+ # :call-seq:
23
+ # locator -> String or nil
24
+ #
25
+ def locator
26
+ return locators.empty? ? nil : locators.sort.first # TODO Which sorting algorithm?
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all Associations in which this Topic plays a Role.
9
+ #
10
+ # The optional
11
+ # identifier specifies the type of the Roles to be considered.
12
+ # The identifier may be a Topic or Topic-Reference.
13
+ #
14
+ # Multiple instances of the same Association are possible.
15
+ # The result may be empty.
16
+ #
17
+ # :call-seq:
18
+ # reverse_players -> Array of Associations
19
+ # reverse_players(identifier) -> Array of Associations
20
+ #
21
+ def reverse_players(type = :any)
22
+ roles_played(type).map{|r| r.parent}
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,162 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns all Topic players that exist in binary supertype-subtype Associations
9
+ # where this Topic playes the subtype-Role.
10
+ #
11
+ # The result may be an empty Array.
12
+ #
13
+ # :call-seq:
14
+ # direct-supertypes -> Array of Topics
15
+ #
16
+ def direct_supertypes
17
+ roles_played(topic_map.get(RTM::PSI[:subtype]),topic_map.get(RTM::PSI[:supertype_subtype])).
18
+ reject{|r| r.getParent.getRoles.size!=2}.
19
+ map{|r| r.parent[RTM::PSI[:supertype]].first.player}.flatten.uniq
20
+ end
21
+
22
+ # Creates a binary supertype-subtype-Association where identifier defines
23
+ # the player of the supertype-Role. The current Topic will play the
24
+ # subtype-Role. Returns the created Association.
25
+ #
26
+ # Identifier may be a Topic or Topic-Reference.
27
+ #
28
+ # :call-seq:
29
+ # add_supertype(identifier) -> Association
30
+ #
31
+ def add_supertype(new_supertype)
32
+ asso = topic_map.create_association(RTM::PSI[:supertype_subtype])
33
+ asso.create_role(RTM::PSI[:subtype],self)
34
+ asso.create_role(RTM::PSI[:supertype],new_supertype)
35
+ asso
36
+ end
37
+
38
+ # Creates one or several binary supertype-subtype-Associations where
39
+ # each identifier defines
40
+ # the player of a supertype-Role. The current topic will play the
41
+ # subtype-Role in each association. Returns the associations.
42
+ #
43
+ # The identifier may be topic references.
44
+ #
45
+ # :call-seq:
46
+ # add_supertypes(identifier1, identifier2, ...) -> Array of Associtions
47
+ #
48
+ def add_supertypes(*args)
49
+ args.flatten!
50
+ args.map{|identifier| add_supertype(identifier)}
51
+ end
52
+
53
+ # Returns all supertypes of this Topic. The result includes
54
+ # all direct supertypes
55
+ # and the supertypes of these direct supertypes.
56
+ #
57
+ # The result may be an empty Array.
58
+ #
59
+ # :call-seq:
60
+ # transitive_supertypes -> Array of Topics
61
+ #
62
+ def transitive_supertypes
63
+ result_types = new_s_t = direct_supertypes
64
+ until new_s_t.empty?
65
+ new_s_t = new_s_t.map{|s| s.direct_supertypes}.flatten.uniq
66
+ new_s_t = new_s_t.reject{|s| result_types.include?(s)}
67
+ result_types = result_types + new_s_t
68
+ end
69
+ return result_types
70
+ end
71
+
72
+ # Returns all supertypes of this Topic. The result includes the direct_supertypes
73
+ # and the supertypes of these direct_supertypes of this Topic as well as the Topic itself.
74
+ #
75
+ # :call-seq:
76
+ # transitive_supertypes_with_self -> Array of Topics
77
+ #
78
+ def transitive_supertypes_with_self
79
+ transitive_supertypes + self
80
+ end
81
+
82
+ # Returns all Topics that exist in binary supertype-subtype Associations
83
+ # where this Topic playes the supertype-Role.
84
+ #
85
+ # The result may be an empty Array.
86
+ #
87
+ # :call-seq:
88
+ # direct-subtypes -> Array of Topics
89
+ #
90
+ def direct_subtypes
91
+ roles(topic_map.get(RTM::PSI[:supertype]),topic_map.get(RTM::PSI[:supertype_subtype])).
92
+ reject{|r| r.getParent.getRoles.size!=2}.
93
+ map {|r| r.getParent[RTM::PSI[:subtype]].first.player}.flatten.uniq
94
+ end
95
+
96
+ # Creates a binary supertype-subtype-Association where identifier defines
97
+ # the player of the subtype-Role. The current Topic will play the
98
+ # supertype-Role. Returns the created Association.
99
+ #
100
+ # Identifier may be Topic or Topic Reference.
101
+ #
102
+ # :call-seq:
103
+ # add_subtype(identifier) -> Association
104
+ #
105
+ def add_subtype(new_subtype)
106
+ asso = topic_map.create_association(RTM::PSI[:supertype_subtype])
107
+ asso.create_role(RTM::PSI[:supertype],self)
108
+ asso.create_role(RTM::PSI[:subtype],new_subtype)
109
+ asso
110
+ end
111
+
112
+ # Creates one or several binary supertype-subtype-Associations where
113
+ # each identifier defines
114
+ # the player of a subtype-Role. The current topic will play the
115
+ # supertype-Role in each association. Returns the associations.
116
+ #
117
+ # The identifier may be topic references.
118
+ #
119
+ # :call-seq:
120
+ # add_subtypes(identifier1, identifier2, ...) -> Array of Associtions
121
+ #
122
+ def add_subtypes(*args)
123
+ args.flatten!
124
+ args.map{|identifier| add_subtype(identifier)}
125
+ end
126
+
127
+ # Returns all subtypes of this Topic. The result includes the direct subtypes
128
+ # and the subtypes of these direct subtypes.
129
+ #
130
+ # The result may be an empty Array.
131
+ #
132
+ # :call-seq:
133
+ # transitive_subtypes -> Array of Topics
134
+ #
135
+ def transitive_subtypes
136
+ result_types = new_s_t = direct_subtypes
137
+ until new_s_t.empty?
138
+ new_s_t = new_s_t.map{|s| s.direct_subtypes}.flatten.uniq
139
+ new_s_t = new_s_t.reject{|s| result_types.include?(s)}
140
+ result_types = result_types + new_s_t
141
+ end
142
+ return result_types
143
+ end
144
+
145
+ # Returns all subtypes of this Topic. The result includes the direct_subtypes
146
+ # and the subtypes of these direct_subtypes of this Topic as well as the Topic itself.
147
+ #
148
+ # :call-seq:
149
+ # transitive_subtypes_with_self -> Array of Topics
150
+ #
151
+ def transitive_subtypes_with_self
152
+ transitive_subtypes + self
153
+ end
154
+
155
+ alias :supertypes :transitive_supertypes
156
+ alias :subtypes :transitive_subtypes
157
+ alias :reverse_subtypes :supertypes
158
+ alias :reverse_supertypes :subtypes
159
+
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,51 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # First computes all Associations where this Topic playes a Role.
9
+ # There, the optional identifier filters the Associations for their type.
10
+ #
11
+ # Returns all Players of all Roles in these Associations.
12
+ # The current Topic is not included in the result.
13
+ # The result may be empty.
14
+ #
15
+ # The identifier may be a Topic or Topic-Reference.
16
+ #
17
+ # :call-seq:
18
+ # traverse(identifier) -> Array of Topics
19
+ #
20
+ def traverse(type = :any)
21
+ unless type == :any
22
+ _topic = topic_map.get(type)
23
+ return [] unless _topic
24
+ end
25
+ _res = roles_played.map{|r| r.parent} #associations
26
+ _res = _res.select{|a| a.type == _topic} unless type == :any
27
+ _res = _res.map{|a| a.roles.map{ |r| r.player}}.flatten #players of all roles in these associations
28
+ # unless _res.empty?
29
+ # _res.each_with_index do |x,i|
30
+ # if x == self
31
+ # _res.delete_at(i)
32
+ # break
33
+ # end
34
+ # end
35
+ # end
36
+ _res =_res.reject{|p| p == self}
37
+ return _res
38
+ end
39
+
40
+ # Always returns an empty Array
41
+ #
42
+ # :call-seq:
43
+ # reverse_traverse -> Array
44
+ #
45
+ def reverse_traverse
46
+ Array.new
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,107 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ module RTM
5
+ module Navigation
6
+ module Topic
7
+
8
+ # Returns the topics this topic is an instance of.
9
+ #
10
+ # The result may be empty.
11
+ #
12
+ # :call-seq:
13
+ # types -> Set of Topics
14
+ #
15
+ def types
16
+ # NO SUPERISE IN Axes/NAVIGATION
17
+ raise "This method (types) should never be executed because the corresponding TMAPI function should be called"
18
+ getTypes
19
+ end
20
+
21
+ # Returns the topic this topic is an instance of. It must have
22
+ # exactly one type, else an error is raised.
23
+ #
24
+ # Returns nil if this Topic has no type.
25
+ #
26
+ # :call-seq:
27
+ # type -> Topic or nil
28
+ #
29
+ def type
30
+ raise "Topic must have exactly one type to call the type-method. Use the types-method instead." unless types.size < 2
31
+ types.size == 1 ? types.to_a.first : nil
32
+ end
33
+
34
+ # Returns the topics which are instances of this topic.
35
+ # This method uses the TMAPI TypeInstanceIndex.
36
+ #
37
+ # The result may be empty.
38
+ #
39
+ # :call-seq:
40
+ # instances -> Set of Topics
41
+ #
42
+ def instances
43
+ type_instance_index.getTopics(self)
44
+ end
45
+
46
+ # Returns the instance of this Topic. It must have exactly one
47
+ # instance, else an error is raised.
48
+ #
49
+ # Returns nil if this Topic has no instance.
50
+ #
51
+ # :call-seq:
52
+ # instance -> Topic
53
+ #
54
+ def instance
55
+ raise "Topic must have exactly one instance to call the instance-method. Use the instances-method instead." unless instances.size < 2
56
+ instances.size == 1 ? instances.to_a.first : nil
57
+ end
58
+
59
+ alias :reverse_types :instances
60
+
61
+ # Returns the types this topic is an instance of. Calls
62
+ # the TMAPI getTypes method.
63
+ #
64
+ # The result may be empty.
65
+ #
66
+ # :call-seq:
67
+ # reverse_instances -> Set of Topics
68
+ #
69
+ def reverse_instances
70
+ types
71
+ end
72
+
73
+ # Returns the types and all transitive supertypes of the types of
74
+ # this topic. No duplicates are returned.
75
+ #
76
+ # The result may be empty.
77
+ #
78
+ # :call-seq:
79
+ # transitive_types -> Array of Topics
80
+ #
81
+ def transitive_types
82
+ trans_types = types.to_a #may be empty
83
+ types.each do |type|
84
+ trans_types.concat(type.transitive_supertypes)
85
+ end
86
+ trans_types = trans_types.uniq #no duplicates outside of tmql mode
87
+ end
88
+
89
+ # Returns instances and the instances of all transitive subtypes
90
+ # of this topic. No duplicates are returned.
91
+ #
92
+ # The result may be empty.
93
+ #
94
+ # :call-seq:
95
+ # transitive_instances -> Array of Topics
96
+ #
97
+ def transitive_instances
98
+ trans_instances = instances.to_a #may be empty
99
+ transitive_subtypes.each do |subtype|
100
+ trans_instances.concat(subtype.instances.to_a)
101
+ end
102
+ trans_instances = trans_instances.uniq #no duplicates outside of tmql mode
103
+ end
104
+
105
+ end
106
+ end
107
+ end