activerdf_net7 1.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. data/CHANGELOG +79 -0
  2. data/LICENSE +504 -0
  3. data/README.rdoc +34 -0
  4. data/activerdf-jena/CHANGELOG +14 -0
  5. data/activerdf-jena/LICENSE +504 -0
  6. data/activerdf-jena/README +57 -0
  7. data/activerdf-jena/Rakefile +87 -0
  8. data/activerdf-jena/TODO +18 -0
  9. data/activerdf-jena/VERSION +1 -0
  10. data/activerdf-jena/ext/antlr-2.7.5.jar +0 -0
  11. data/activerdf-jena/ext/arq-extra.jar +0 -0
  12. data/activerdf-jena/ext/arq.jar +0 -0
  13. data/activerdf-jena/ext/aterm-java-1.6.jar +0 -0
  14. data/activerdf-jena/ext/commons-logging-1.1.jar +0 -0
  15. data/activerdf-jena/ext/concurrent.jar +0 -0
  16. data/activerdf-jena/ext/icu4j_3_4.jar +0 -0
  17. data/activerdf-jena/ext/iri.jar +0 -0
  18. data/activerdf-jena/ext/jena.jar +0 -0
  19. data/activerdf-jena/ext/jenatest.jar +0 -0
  20. data/activerdf-jena/ext/json.jar +0 -0
  21. data/activerdf-jena/ext/junit.jar +0 -0
  22. data/activerdf-jena/ext/log4j-1.2.12.jar +0 -0
  23. data/activerdf-jena/ext/lucene-core-2.0.0.jar +0 -0
  24. data/activerdf-jena/ext/ng4j.jar +0 -0
  25. data/activerdf-jena/ext/pellet.jar +0 -0
  26. data/activerdf-jena/ext/relaxngDatatype.jar +0 -0
  27. data/activerdf-jena/ext/stax-api-1.0.jar +0 -0
  28. data/activerdf-jena/ext/wstx-asl-3.0.0.jar +0 -0
  29. data/activerdf-jena/ext/xercesImpl.jar +0 -0
  30. data/activerdf-jena/ext/xml-apis.jar +0 -0
  31. data/activerdf-jena/ext/xsdlib.jar +0 -0
  32. data/activerdf-jena/lib/activerdf_jena/init.rb +26 -0
  33. data/activerdf-jena/lib/activerdf_jena/jena.rb +59 -0
  34. data/activerdf-jena/lib/activerdf_jena/jena_adapter.rb +515 -0
  35. data/activerdf-jena/lib/activerdf_jena/lucene.rb +22 -0
  36. data/activerdf-jena/lib/activerdf_jena/ng4j.rb +50 -0
  37. data/activerdf-jena/lib/activerdf_jena/ng4j_adapter.rb +379 -0
  38. data/activerdf-jena/lib/activerdf_jena/pellet.rb +25 -0
  39. data/activerdf-jena/test/bnode_org_rss.rdf +793 -0
  40. data/activerdf-jena/test/eyal-foaf.nt +39 -0
  41. data/activerdf-jena/test/fun_with_bnodes.nt +2 -0
  42. data/activerdf-jena/test/s1.n3 +18 -0
  43. data/activerdf-jena/test/test_data.nt +32 -0
  44. data/activerdf-jena/test/test_jena_adapter.rb +451 -0
  45. data/activerdf-jena/test/test_ng4j_adapter.rb +354 -0
  46. data/activerdf-rdflite/CHANGELOG +31 -0
  47. data/activerdf-rdflite/LICENSE +504 -0
  48. data/activerdf-rdflite/README +16 -0
  49. data/activerdf-rdflite/Rakefile +73 -0
  50. data/activerdf-rdflite/VERSION +1 -0
  51. data/activerdf-rdflite/lib/activerdf_rdflite/fetching.rb +34 -0
  52. data/activerdf-rdflite/lib/activerdf_rdflite/init.rb +13 -0
  53. data/activerdf-rdflite/lib/activerdf_rdflite/rdflite.rb +582 -0
  54. data/activerdf-rdflite/lib/activerdf_rdflite/suggesting.rb +87 -0
  55. data/activerdf-rdflite/test/test_bnode_data.nt +5 -0
  56. data/activerdf-rdflite/test/test_data.nt +32 -0
  57. data/activerdf-rdflite/test/test_escaped_data.nt +2 -0
  58. data/activerdf-rdflite/test/test_fetching.rb +33 -0
  59. data/activerdf-rdflite/test/test_rdflite.rb +277 -0
  60. data/activerdf-redland/CHANGELOG +12 -0
  61. data/activerdf-redland/LICENSE +504 -0
  62. data/activerdf-redland/README +9 -0
  63. data/activerdf-redland/Rakefile +72 -0
  64. data/activerdf-redland/VERSION +1 -0
  65. data/activerdf-redland/lib/activerdf_redland/init.rb +10 -0
  66. data/activerdf-redland/lib/activerdf_redland/redland.rb +362 -0
  67. data/activerdf-redland/test/test_person_data.nt +42 -0
  68. data/activerdf-redland/test/test_redland_adapter.rb +242 -0
  69. data/activerdf-sesame/CHANGELOG +6 -0
  70. data/activerdf-sesame/LICENSE +10 -0
  71. data/activerdf-sesame/LICENSE-aduna +10 -0
  72. data/activerdf-sesame/LICENSE-lgpl +504 -0
  73. data/activerdf-sesame/README +33 -0
  74. data/activerdf-sesame/Rakefile +77 -0
  75. data/activerdf-sesame/VERSION +1 -0
  76. data/activerdf-sesame/ext/commons-codec-1.3.jar +0 -0
  77. data/activerdf-sesame/ext/commons-dbcp-1.2.2.jar +0 -0
  78. data/activerdf-sesame/ext/commons-httpclient-3.1.jar +0 -0
  79. data/activerdf-sesame/ext/commons-logging-1.1.1.jar +0 -0
  80. data/activerdf-sesame/ext/commons-pool-1.3.jar +0 -0
  81. data/activerdf-sesame/ext/commons-pool-1.5.2.jar +0 -0
  82. data/activerdf-sesame/ext/junit-3.8.2.jar +0 -0
  83. data/activerdf-sesame/ext/openrdf-sesame-2.0-onejar.jar +0 -0
  84. data/activerdf-sesame/ext/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
  85. data/activerdf-sesame/ext/slf4j-api-1.4.3.jar +0 -0
  86. data/activerdf-sesame/ext/slf4j-nop-1.4.3.jar +0 -0
  87. data/activerdf-sesame/ext/wrapper-sesame2.jar +0 -0
  88. data/activerdf-sesame/java/build.number +3 -0
  89. data/activerdf-sesame/java/build.xml +313 -0
  90. data/activerdf-sesame/java/javadoc/allclasses-frame.html +31 -0
  91. data/activerdf-sesame/java/javadoc/allclasses-noframe.html +31 -0
  92. data/activerdf-sesame/java/javadoc/constant-values.html +146 -0
  93. data/activerdf-sesame/java/javadoc/deprecated-list.html +146 -0
  94. data/activerdf-sesame/java/javadoc/help-doc.html +223 -0
  95. data/activerdf-sesame/java/javadoc/index-files/index-1.html +150 -0
  96. data/activerdf-sesame/java/javadoc/index-files/index-10.html +145 -0
  97. data/activerdf-sesame/java/javadoc/index-files/index-2.html +157 -0
  98. data/activerdf-sesame/java/javadoc/index-files/index-3.html +146 -0
  99. data/activerdf-sesame/java/javadoc/index-files/index-4.html +145 -0
  100. data/activerdf-sesame/java/javadoc/index-files/index-5.html +145 -0
  101. data/activerdf-sesame/java/javadoc/index-files/index-6.html +142 -0
  102. data/activerdf-sesame/java/javadoc/index-files/index-7.html +145 -0
  103. data/activerdf-sesame/java/javadoc/index-files/index-8.html +152 -0
  104. data/activerdf-sesame/java/javadoc/index-files/index-9.html +146 -0
  105. data/activerdf-sesame/java/javadoc/index.html +36 -0
  106. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/WrapperForSesame2.html +665 -0
  107. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/class-use/WrapperForSesame2.html +144 -0
  108. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-frame.html +32 -0
  109. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-summary.html +157 -0
  110. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-tree.html +150 -0
  111. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-use.html +144 -0
  112. data/activerdf-sesame/java/javadoc/overview-summary.html +156 -0
  113. data/activerdf-sesame/java/javadoc/overview-tree.html +152 -0
  114. data/activerdf-sesame/java/javadoc/package-list +1 -0
  115. data/activerdf-sesame/java/javadoc/resources/inherit.gif +0 -0
  116. data/activerdf-sesame/java/javadoc/stylesheet.css +29 -0
  117. data/activerdf-sesame/java/lib/commons-codec-1.3.jar +0 -0
  118. data/activerdf-sesame/java/lib/commons-dbcp-1.2.2.jar +0 -0
  119. data/activerdf-sesame/java/lib/commons-httpclient-3.1.jar +0 -0
  120. data/activerdf-sesame/java/lib/commons-logging-1.1.1.jar +0 -0
  121. data/activerdf-sesame/java/lib/commons-pool-1.3.jar +0 -0
  122. data/activerdf-sesame/java/lib/commons-pool-1.5.2.jar +0 -0
  123. data/activerdf-sesame/java/lib/junit-3.8.2.jar +0 -0
  124. data/activerdf-sesame/java/lib/openrdf-sesame-2.0-onejar.jar +0 -0
  125. data/activerdf-sesame/java/lib/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
  126. data/activerdf-sesame/java/lib/slf4j-api-1.4.3.jar +0 -0
  127. data/activerdf-sesame/java/lib/slf4j-nop-1.4.3.jar +0 -0
  128. data/activerdf-sesame/java/manifest.mf +3 -0
  129. data/activerdf-sesame/java/settings.xml +135 -0
  130. data/activerdf-sesame/java/src/org/activerdf/wrapper/sesame2/WrapperForSesame2.java +145 -0
  131. data/activerdf-sesame/java/test-src/org/activerdf/wrapper/sesame2/TestWrapperForSesame2.java +41 -0
  132. data/activerdf-sesame/lib/activerdf_sesame/init.rb +11 -0
  133. data/activerdf-sesame/lib/activerdf_sesame/sesame.rb +400 -0
  134. data/activerdf-sesame/test/eyal-foaf.nt +39 -0
  135. data/activerdf-sesame/test/eyal-foaf.rdf +65 -0
  136. data/activerdf-sesame/test/test_sesame_adapter.rb +341 -0
  137. data/activerdf-sparql/CHANGELOG +35 -0
  138. data/activerdf-sparql/LICENSE +504 -0
  139. data/activerdf-sparql/README +10 -0
  140. data/activerdf-sparql/Rakefile +78 -0
  141. data/activerdf-sparql/VERSION +1 -0
  142. data/activerdf-sparql/lib/activerdf_sparql/init.rb +10 -0
  143. data/activerdf-sparql/lib/activerdf_sparql/sparql.rb +212 -0
  144. data/activerdf-sparql/lib/activerdf_sparql/sparql_result_parser.rb +55 -0
  145. data/activerdf-sparql/test/test_sparql_adapter.rb +108 -0
  146. data/activerdf-yars/LICENSE +504 -0
  147. data/activerdf-yars/README +10 -0
  148. data/activerdf-yars/Rakefile +38 -0
  149. data/activerdf-yars/lib/activerdf_yars/init.rb +10 -0
  150. data/activerdf-yars/lib/activerdf_yars/jars2.rb +119 -0
  151. data/lib/active_rdf.rb +85 -0
  152. data/lib/active_rdf/directaccess/direct_access.rb +49 -0
  153. data/lib/active_rdf/federation/active_rdf_adapter.rb +47 -0
  154. data/lib/active_rdf/federation/connection_pool.rb +156 -0
  155. data/lib/active_rdf/federation/federation_manager.rb +112 -0
  156. data/lib/active_rdf/instance_exec.rb +13 -0
  157. data/lib/active_rdf/objectmanager/bnode.rb +7 -0
  158. data/lib/active_rdf/objectmanager/literal.rb +71 -0
  159. data/lib/active_rdf/objectmanager/namespace.rb +106 -0
  160. data/lib/active_rdf/objectmanager/object_manager.rb +119 -0
  161. data/lib/active_rdf/objectmanager/ordered_set.rb +116 -0
  162. data/lib/active_rdf/objectmanager/property_list.rb +76 -0
  163. data/lib/active_rdf/objectmanager/resource.rb +609 -0
  164. data/lib/active_rdf/objectmanager/resource_like.rb +28 -0
  165. data/lib/active_rdf/queryengine/ntriples_parser.rb +90 -0
  166. data/lib/active_rdf/queryengine/query.rb +245 -0
  167. data/lib/active_rdf/queryengine/query2jars2.rb +22 -0
  168. data/lib/active_rdf/queryengine/query2sparql.rb +139 -0
  169. data/lib/active_rdf_helpers.rb +30 -0
  170. data/lib/active_rdf_log.rb +100 -0
  171. data/test/common.rb +119 -0
  172. data/test/directaccess/test_direct_access.rb +64 -0
  173. data/test/federation/test_connection_pool.rb +86 -0
  174. data/test/federation/test_federation_manager.rb +145 -0
  175. data/test/objectmanager/test_literal.rb +52 -0
  176. data/test/objectmanager/test_namespace.rb +83 -0
  177. data/test/objectmanager/test_object_manager.rb +96 -0
  178. data/test/objectmanager/test_ordered_set.rb +110 -0
  179. data/test/objectmanager/test_resource_reading.rb +150 -0
  180. data/test/objectmanager/test_resource_writing.rb +39 -0
  181. data/test/objectmanager/test_talia_syntax.rb +68 -0
  182. data/test/queryengine/my_external_resource.rb +24 -0
  183. data/test/queryengine/test_external_resource_class.rb +49 -0
  184. data/test/queryengine/test_ntriples_parser.rb +71 -0
  185. data/test/queryengine/test_query.rb +55 -0
  186. data/test/queryengine/test_query2jars2.rb +51 -0
  187. data/test/queryengine/test_query2sparql.rb +76 -0
  188. data/test/queryengine/test_query_engine.rb +52 -0
  189. data/test/test_adapters.rb +58 -0
  190. metadata +266 -0
@@ -0,0 +1,87 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006 Eyal Oren
3
+ # License:: LGPL
4
+
5
+ # The SuggestingAdapter is an extension to rdflite that can recommand
6
+ # additional predicates for a given resource, based on usage statistics in the
7
+ # whole dataset. E.g. given a dataset with FOAF data, one can ask a suggestion
8
+ # for a person and get a recommendation for this person to also use
9
+ # foaf:birthday. You can use this adapter in any collaborative editing setting:
10
+ # it leads the community to converge on terminology (everybody will use the
11
+ # same foaf:birthday to define somebody's birthday).
12
+ class SuggestingAdapter < FetchingAdapter
13
+ ConnectionPool.register_adapter(:suggesting,self)
14
+
15
+ alias _old_initialize initialize
16
+
17
+ # initialises the adapter, see RDFLite for description of possible parameters.
18
+ def initialize params
19
+ _old_initialize(params)
20
+ @db.execute('drop view if exists occurrence')
21
+ @db.execute('create view occurrence as select p, count(distinct s) as count from triple group by p')
22
+
23
+ @db.execute('drop view if exists cooccurrence')
24
+ @db.execute('create view cooccurrence as select t0.p as p1,t1.p as p2, count(distinct t0.s) as count from triple as t0 join triple as t1 on t0.s=t1.s and t0.p!=t1.p group by t0.p, t1.p')
25
+ end
26
+
27
+ # suggests additional predicates that might be applicable for the given resource
28
+ def suggest(resource)
29
+ ActiveRdfLogger::log_debug(self) { "Starting suggestions for #{size} triples" }
30
+ time = Time.now
31
+
32
+ predicates = []
33
+ own_predicates = resource.direct_predicates
34
+
35
+ construct_occurrence_matrix
36
+ construct_cooccurrence_matrix
37
+
38
+ own_predicates.each do |p|
39
+ predicates << p if occurrence(p) > 1
40
+ end
41
+
42
+ # fetch all predicates co-occurring with our predicates
43
+ candidates = predicates.collect {|p| cooccurring(p) }
44
+ return nil if candidates.empty?
45
+
46
+ # perform set intersection
47
+ candidates = candidates.inject {|intersect, n| intersect & n }.flatten
48
+ candidates = candidates - own_predicates
49
+
50
+ suggestions = candidates.collect do |candidate|
51
+ score = predicates.inject(1.0) do |score, p|
52
+ score * cooccurrence(candidate, p) / occurrence(p)
53
+ end
54
+ [candidate, score]
55
+ end
56
+ ActiveRdfLogger::log_debug(self) { "Suggestions for #{resource} took #{Time.now-time}s" }
57
+ suggestions
58
+ end
59
+
60
+ private
61
+ def construct_occurrence_matrix
62
+ @occurrence = {}
63
+ @db.execute('select * from occurrence where count > 1') do |p,count|
64
+ @occurrence[parse(p)] = count.to_i
65
+ end
66
+ end
67
+
68
+ def construct_cooccurrence_matrix
69
+ @cooccurrence = {}
70
+ @db.execute('select * from cooccurrence') do |p1, p2, count|
71
+ @cooccurrence[parse(p1)] ||= {}
72
+ @cooccurrence[parse(p1)][parse(p2)] = count.to_i
73
+ end
74
+ end
75
+
76
+ def occurrence(predicate)
77
+ @occurrence[predicate] || 0
78
+ end
79
+
80
+ def cooccurrence(p1, p2)
81
+ @cooccurrence[p1][p2] || 0
82
+ end
83
+
84
+ def cooccurring(predicate)
85
+ @cooccurrence[predicate].keys
86
+ end
87
+ end
@@ -0,0 +1,5 @@
1
+ _:1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://activerdf.org/test/Person> .
2
+ _:1 <http://activerdf.org/test/age> "27" .
3
+ _:1 <http://activerdf.org/test/name> "Eyal Oren" .
4
+ _:2 <http://activerdf.org/test/age> "27" .
5
+ _:2 <http://activerdf.org/test/eye> "blue" .
@@ -0,0 +1,32 @@
1
+ <http://activerdf.org/test/Person> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class> .
2
+ <http://activerdf.org/test/Person> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
3
+ <http://activerdf.org/test/Person> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource> .
4
+ <http://activerdf.org/test/age> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .
5
+ <http://activerdf.org/test/age> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
6
+ <http://activerdf.org/test/age> <http://www.w3.org/2000/01/rdf-schema#domain> <http://activerdf.org/test/Person> .
7
+ <http://activerdf.org/test/age> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#Resource> .
8
+ <http://activerdf.org/test/age> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal> .
9
+ <http://activerdf.org/test/car> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .
10
+ <http://activerdf.org/test/car> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
11
+ <http://activerdf.org/test/car> <http://www.w3.org/2000/01/rdf-schema#domain> <http://activerdf.org/test/Person> .
12
+ <http://activerdf.org/test/car> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#Resource> .
13
+ <http://activerdf.org/test/car> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal> .
14
+ <http://activerdf.org/test/eyal> <http://activerdf.org/test/age> "27" .
15
+ <http://activerdf.org/test/eyal> <http://activerdf.org/test/eye> "blue" .
16
+ <http://activerdf.org/test/eyal> <http://activerdf.org/test/name> "Eyal Oren" .
17
+ <http://activerdf.org/test/eyal> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://activerdf.org/test/Person> .
18
+ <http://activerdf.org/test/eyal> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
19
+ <http://activerdf.org/test/eye> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .
20
+ <http://activerdf.org/test/eye> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
21
+ <http://activerdf.org/test/eye> <http://www.w3.org/2000/01/rdf-schema#domain> <http://activerdf.org/test/Person> .
22
+ <http://activerdf.org/test/eye> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#Resource> .
23
+ <http://activerdf.org/test/eye> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal> .
24
+ <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class> .
25
+ <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
26
+ <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#Resource> .
27
+ <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class> .
28
+ <http://www.w3.org/2000/01/rdf-schema#Class> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class> .
29
+ <http://www.w3.org/2000/01/rdf-schema#Class> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
30
+ _:#1 <http://activerdf.org/test/age> "29" .
31
+ _:#1 <http://activerdf.org/test/name> "Another Person" .
32
+ _:#1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://activerdf.org/test/Person> .
@@ -0,0 +1,2 @@
1
+ <http://activerdf.org/test/eyal> <http://activerdf.org/test/comment> "ümlauts and \u00ebmlauts" .
2
+ <http://activerdf.org/test/eyal> <http://activerdf.org/test/encoded> "line\nbreaks, <p>'s and \"quotes\"" .
@@ -0,0 +1,33 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'rubygems'
6
+ require 'test/unit'
7
+ require 'active_rdf'
8
+
9
+ class TestFetchingAdapter < Test::Unit::TestCase
10
+ def setup
11
+ ConnectionPool.clear
12
+ @adapter = ConnectionPool.add(:type => :fetching)
13
+ end
14
+
15
+ def teardown
16
+ end
17
+
18
+ def test_parse_foaf
19
+ @adapter.fetch("http://eyaloren.org/foaf.rdf#me")
20
+ assert @adapter.size > 0
21
+ end
22
+
23
+ def test_sioc_schema
24
+ @adapter.fetch("http://rdfs.org/sioc/ns#")
25
+ assert_equal 560, @adapter.size
26
+ end
27
+
28
+ def test_foaf_schema
29
+ @adapter.fetch("http://xmlns.com/foaf/0.1/")
30
+ # foaf contains 563 triples but with two duplicates
31
+ assert_equal 561, @adapter.size
32
+ end
33
+ end
@@ -0,0 +1,277 @@
1
+ å# Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'rubygems'
6
+ require 'test/unit'
7
+ require 'active_rdf'
8
+ require 'federation/federation_manager'
9
+ require 'queryengine/query'
10
+
11
+ class TestRdfLiteAdapter < Test::Unit::TestCase
12
+ def setup
13
+ ConnectionPool.clear
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_registration
20
+ adapter = ConnectionPool.add_data_source(:type => :rdflite)
21
+ assert_instance_of RDFLite, adapter
22
+ end
23
+
24
+ def test_initialise
25
+ adapter = ConnectionPool.add_data_source(:type => :rdflite, :keyword => false)
26
+ assert !adapter.keyword_search?
27
+ end
28
+
29
+ def test_duplicate_registration
30
+ adapter1 = ConnectionPool.add_data_source(:type => :rdflite)
31
+ adapter2 = ConnectionPool.add_data_source(:type => :rdflite)
32
+
33
+ assert_equal adapter1, adapter2
34
+ assert_equal adapter1.object_id, adapter2.object_id
35
+ end
36
+
37
+ def test_simple_query
38
+ adapter = ConnectionPool.add_data_source(:type => :rdflite)
39
+
40
+ eyal = RDFS::Resource.new 'eyaloren.org'
41
+ age = RDFS::Resource.new 'foaf:age'
42
+ test = RDFS::Resource.new 'test'
43
+
44
+ adapter.add(eyal, age, test)
45
+
46
+ result = Query.new.distinct(:s).where(:s, :p, :o).execute(:flatten => true)
47
+ assert_instance_of RDFS::Resource, result
48
+ assert_equal 'eyaloren.org', result.uri
49
+ end
50
+
51
+ def test_escaped_literals
52
+ adapter = ConnectionPool.add_data_source(:type => :rdflite)
53
+ eyal = RDFS::Resource.new 'eyal'
54
+ comment = RDFS::Resource.new 'comment'
55
+ string = 'test\nbreak\"quoted\"'
56
+ interpreted = "test\nbreak\"quoted\""
57
+
58
+ adapter.add(eyal, comment, string)
59
+ assert_equal interpreted, eyal.comment
60
+
61
+ description = RDFS::Resource.new 'description'
62
+ string = 'ümlaut and \u00ebmlaut'
63
+ interpreted = "ümlaut and ëmlaut"
64
+
65
+ adapter.add(eyal, description, string)
66
+ assert_equal interpreted, eyal.description
67
+ end
68
+
69
+ def test_load_escaped_literals
70
+ adapter = ConnectionPool.add_data_source(:type => :rdflite)
71
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_escaped_data.nt')
72
+ eyal = RDFS::Resource.new('http://activerdf.org/test/eyal')
73
+
74
+ assert_equal 2, adapter.size
75
+ assert_equal "ümlauts and ëmlauts", eyal.comment
76
+ assert_equal "line\nbreaks, <p>'s and \"quotes\"", eyal.encoded
77
+ end
78
+
79
+ def test_federated_query
80
+ adapter1 = ConnectionPool.add_data_source(:type => :rdflite)
81
+ adapter2 = ConnectionPool.add_data_source(:type => :rdflite, :fake_symbol_to_get_unique_adapter => true)
82
+
83
+ eyal = RDFS::Resource.new 'eyaloren.org'
84
+ age = RDFS::Resource.new 'foaf:age'
85
+ test = RDFS::Resource.new 'test'
86
+ test2 = RDFS::Resource.new 'test2'
87
+
88
+ adapter1.add(eyal, age, test)
89
+ adapter2.add(eyal, age, test2)
90
+
91
+ # assert only one distinct subject is found (same one in both adapters)
92
+ assert_equal 1, Query.new.distinct(:s).where(:s, :p, :o).execute.size
93
+
94
+ # assert two distinct objects are found
95
+ results = Query.new.distinct(:o).where(:s, :p, :o).execute
96
+ assert_equal 2, results.size
97
+
98
+ results.all? {|result| assert result.instance_of?(RDFS::Resource) }
99
+ end
100
+
101
+ def test_query_with_block
102
+ adapter = ConnectionPool.add_data_source(:type => :rdflite)
103
+
104
+ eyal = RDFS::Resource.new 'eyaloren.org'
105
+ age = RDFS::Resource.new 'foaf:age'
106
+ test = RDFS::Resource.new 'test'
107
+
108
+ adapter.add(eyal, age, test)
109
+ Query.new.select(:s,:p).where(:s,:p,:o).execute(:flatten => false) do |s,p|
110
+ assert_equal 'eyaloren.org', s.uri
111
+ assert_equal 'foaf:age', p.uri
112
+ end
113
+ end
114
+
115
+ def test_loading_data
116
+ adapter = ConnectionPool.add_data_source :type => :rdflite
117
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
118
+ assert_equal 32, adapter.size
119
+
120
+ adapter.clear
121
+ adapter.load('http://www.w3.org/2000/10/rdf-tests/rdfcore/ntriples/test.nt')
122
+ assert_equal 30, adapter.size
123
+
124
+ adapter.clear
125
+ adapter.load('http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema.rdf')
126
+ assert_equal 76, adapter.size
127
+ end
128
+
129
+ def test_load_bnodes
130
+ adapter = ConnectionPool.add_data_source :type => :rdflite
131
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_bnode_data.nt')
132
+
133
+ # loaded five triples in total
134
+ assert_equal 5, adapter.size
135
+
136
+ # triples contain two distinct bnodes
137
+ assert_equal 2, Query.new.count.distinct(:s).where(:s,:p,:o).execute
138
+
139
+ # collecting the bnodes
140
+ bnodes = Query.new.distinct(:s).where(:s,:p,:o).execute
141
+ # assert that _:#1 occurs in three triples
142
+ assert_equal 3, Query.new.select(:p,:o).where(bnodes[0], :p, :o).execute.size
143
+ # assert that _:#2 occurs in two triples
144
+ assert_equal 2, Query.new.select(:p,:o).where(bnodes[1], :p, :o).execute.size
145
+ end
146
+
147
+ def test_count_query
148
+ adapter = ConnectionPool.add_data_source :type => :rdflite
149
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
150
+ assert_kind_of Fixnum, Query.new.count(:s).where(:s,:p,:o).execute
151
+ assert_equal 32, Query.new.count(:s).where(:s,:p,:o).execute
152
+ end
153
+
154
+ def test_single_context
155
+ adapter = ConnectionPool.add_data_source :type => :rdflite
156
+ file = File.dirname(File.expand_path(__FILE__)) + '/test_data.nt'
157
+ adapter.load(file)
158
+
159
+ context = Query.new.distinct(:c).where(:s,:p,:o,:c).execute(:flatten => true)
160
+ assert_instance_of RDFS::Resource, context
161
+ assert_equal RDFS::Resource.new("file:#{file}"), context
162
+ end
163
+
164
+ def test_multiple_context
165
+ adapter = ConnectionPool.add_data_source :type => :rdflite
166
+ file = File.dirname(File.expand_path(__FILE__)) + '/test_data.nt'
167
+ adapter.load(file)
168
+ file_context = RDFS::Resource.new("file:#{file}")
169
+
170
+ eyal = RDFS::Resource.new 'eyaloren.org'
171
+ age = RDFS::Resource.new 'foaf:age'
172
+ test = RDFS::Resource.new 'test'
173
+ adapter.add(eyal, age, test, 'context')
174
+
175
+ context = Query.new.distinct(:c).where(:s,:p,:o,:c).execute
176
+ assert_equal file_context, context[0]
177
+ assert_equal 'context', context[1]
178
+
179
+ assert_equal 10, Query.new.count.distinct(:s).where(:s, :p, :o, nil).execute
180
+ assert_equal 1, Query.new.count.distinct(:s).where(:s, :p, :o, 'context').execute
181
+ assert_equal 9, Query.new.count.distinct(:s).where(:s, :p, :o, file_context).execute
182
+ end
183
+
184
+ def test_person_data
185
+ adapter = ConnectionPool.add_data_source :type => :rdflite
186
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
187
+
188
+ Namespace.register(:test, 'http://activerdf.org/test/')
189
+ eyal = Namespace.lookup(:test, :eyal)
190
+ eye = Namespace.lookup(:test, :eye)
191
+ person = Namespace.lookup(:test, :Person)
192
+ type = Namespace.lookup(:rdf, :type)
193
+ resource = Namespace.lookup(:rdfs,:resource)
194
+
195
+ color = Query.new.select(:o).where(eyal, eye,:o).execute(:flatten => true)
196
+ assert 'blue', color
197
+ assert_instance_of String, color
198
+
199
+ ObjectManager.construct_classes
200
+ assert eyal.instance_of?(TEST::Person)
201
+ assert eyal.instance_of?(RDFS::Resource)
202
+ end
203
+
204
+ def test_delete_data
205
+ adapter = ConnectionPool.add_data_source :type => :rdflite
206
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
207
+ assert_equal 32, adapter.size
208
+
209
+ eyal = RDFS::Resource.new('http://activerdf.org/test/eyal')
210
+ adapter.delete(eyal, nil, nil)
211
+ assert_equal 27, adapter.size
212
+
213
+ adapter.delete(nil, nil, nil)
214
+ assert_equal 0, adapter.size
215
+ end
216
+
217
+ def test_keyword_search
218
+ adapter = ConnectionPool.add_data_source :type => :rdflite
219
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
220
+
221
+ eyal = RDFS::Resource.new('http://activerdf.org/test/eyal')
222
+
223
+ # we cant garantuee that ferret is installed
224
+ if adapter.keyword_search?
225
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"blue").execute(:flatten => true)
226
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"27").execute(:flatten => true)
227
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"eyal oren").execute(:flatten => true)
228
+ end
229
+ end
230
+
231
+ def test_bnodes
232
+ adapter = ConnectionPool.add_data_source :type => :rdflite
233
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
234
+
235
+ Namespace.register(:test, 'http://activerdf.org/test/')
236
+ ObjectManager.construct_classes
237
+ assert_equal 2, TEST::Person.find_all.size
238
+ assert_equal 29, TEST::Person.find_all[1].age.to_i
239
+ assert_equal "Another Person", TEST::Person.find_all[1].name
240
+ end
241
+
242
+ def test_multi_join
243
+ adapter = ConnectionPool.add_data_source :type => :rdflite
244
+ type = Namespace.lookup(:rdf, 'type')
245
+ transProp = Namespace.lookup(:owl, 'TransitiveProperty')
246
+
247
+ Namespace.register(:test, 'http://test.com/')
248
+ ancestor = Namespace.lookup(:test, 'ancestor')
249
+ sue = Namespace.lookup(:test, 'Sue')
250
+ mary = Namespace.lookup(:test, 'Mary')
251
+ anne = Namespace.lookup(:test, 'Anne')
252
+
253
+ adapter.add ancestor, type, transProp
254
+ adapter.add sue, ancestor, mary
255
+ adapter.add mary, ancestor, anne
256
+
257
+ # test that query with multi-join (joining over 1.p==2.p and 1.o==2.s) works
258
+ query = Query.new.select(:Sue, :p, :Anne)
259
+ query.where(:p, type, transProp)
260
+ query.where(:Sue, :p, :Mary)
261
+ query.where(:Mary, :p, :Anne)
262
+ assert_equal 1, query.execute.size
263
+ end
264
+
265
+ def test_limit_and_offset
266
+ adapter = ConnectionPool.add_data_source :type => :rdflite
267
+ adapter.load(File.dirname(File.expand_path(__FILE__)) + '/test_data.nt')
268
+ Namespace.register(:test, 'http://activerdf.org/test/')
269
+
270
+ assert_equal 7, RDFS::Resource.find(:all).size
271
+ assert_equal 5, RDFS::Resource.find(:all, :limit => 5).size
272
+ assert_equal 4, RDFS::Resource.find(:all, :limit => 4, :offset => 3).size
273
+ assert RDFS::Resource.find(:all, :limit => 4, :offset => 3) != RDFS::Resource.find(:all, :limit => 4)
274
+
275
+ assert_equal [TEST::eyal, TEST::age, TEST::car], RDFS::Resource.find(:all, :limit => 3, :order => RDF::type)
276
+ end
277
+ end
@@ -0,0 +1,12 @@
1
+ == activerdf_redland (1.2.3)
2
+ * fixed adapter#delete (Richard Dale)
3
+
4
+ == activerdf_redland (1.2.2) Tue, 16 Sep 2008 12:44:39 +0200
5
+ * added close and clear method
6
+ * added support for full Redland options (Benno Blumenthal)
7
+
8
+ == activerdf_redland (1.2.1) Sat Jun 23 09:03:43 UTC 2007
9
+ * added support for Redland on PostgreSQL (Richard Dale)
10
+
11
+ == activerdf_redland (1.2) Mon, 05 Mar 2007 20:40:55 +0000
12
+ * added loading from remote URL (Benno Blumenthal)