activerdf_jena 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf> <http://www.w3.org/2000/01/rdf-schema#label> "FOAF file of Eyal Oren" .
2
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf> <http://purl.org/rss/1.0/modules/syndication/updateFrequency> "1" .
3
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf> <http://purl.org/rss/1.0/modules/syndication/updatePeriod> "weekly" .
4
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
5
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/name> "Eyal Oren" .
6
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/title> "ir." .
7
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/gender> "male" .
8
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/mbox> <mailto:eyal.oren@deri.org> .
9
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/homepage> <http://www.eyaloren.org/> .
10
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/workplaceHomepage> <http://www.deri.ie/> .
11
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/img> <http://www.eyaloren.org/eyal.jpg> .
12
+ <https://launchpad.net/products/activerdf/+rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Project> .
13
+ <https://launchpad.net/products/activerdf/+rdf> <http://xmlns.com/foaf/0.1/name> "ActiveRDF" .
14
+ <https://launchpad.net/products/activerdf/+rdf> <http://xmlns.com/foaf/0.1/homepage> <http://www.activerdf.org/> .
15
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/currentProject> <https://launchpad.net/products/activerdf/+rdf> .
16
+ <https://launchpad.net/products/browserdf/+rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Project> .
17
+ <https://launchpad.net/products/browserdf/+rdf> <http://xmlns.com/foaf/0.1/name> "BrowseRDF" .
18
+ <https://launchpad.net/products/browserdf/+rdf> <http://xmlns.com/foaf/0.1/homepage> <http://www.browserdf.org/> .
19
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/currentProject> <https://launchpad.net/products/browserdf/+rdf> .
20
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.w3.org/People/Berners-Lee/card#i> .
21
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://richard.cyganiak.de/foaf.rdf#cygri> .
22
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.harth.org/~andreas/foaf.rdf#ah> .
23
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.leobard.net/rdf/foaf.xml#me> .
24
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.debruijn.net/foaf.rdf#me> .
25
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://platon.escet.urjc.es/~axel/foaf.rdf#me> .
26
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.kr.tuwien.ac.at/staff/roman/foaf.rdf#me> .
27
+ <http://sw.deri.org/~knud> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
28
+ <http://sw.deri.org/~knud> <http://xmlns.com/foaf/0.1/name> "Knud M\u00F6ller" .
29
+ <http://sw.deri.org/~knud> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://sw.deri.org/~knud/knudfoaf.rdf> .
30
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://sw.deri.org/~knud> .
31
+ <http://www-cdr.stanford.edu/~petrie/foaf.rdf#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
32
+ <http://www-cdr.stanford.edu/~petrie/foaf.rdf#me> <http://xmlns.com/foaf/0.1/name> "Charles Petrie" .
33
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www-cdr.stanford.edu/~petrie/foaf.rdf#me> .
34
+ <http://www.isi.edu/~stefan/foaf.rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
35
+ <http://www.isi.edu/~stefan/foaf.rdf> <http://xmlns.com/foaf/0.1/name> "Stefan Decker" .
36
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.isi.edu/~stefan/foaf.rdf> .
37
+ <http://www.aifb.uni-karlsruhe.de/Personen/viewPersonOWL/id2076instance> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
38
+ <http://www.aifb.uni-karlsruhe.de/Personen/viewPersonOWL/id2076instance> <http://xmlns.com/foaf/0.1/name> "Max V\u00F6lkel" .
39
+ <file:///home/metaman/workspaces/deri-workspace/activerdf/activerdf-sesame/test/eyal-foaf.rdf#me> <http://xmlns.com/foaf/0.1/knows> <http://www.aifb.uni-karlsruhe.de/Personen/viewPersonOWL/id2076instance> .
@@ -0,0 +1,18 @@
1
+ # Schema for test data
2
+ #
3
+ # This is only
4
+ @prefix daml: <http://www.daml.org/2001/03/daml+oil#> .
5
+ @prefix mech: <#> .
6
+
7
+ @prefix : <#> .
8
+
9
+ :includes a daml:TransitiveProperty .
10
+
11
+ :partOf a daml:TransitiveProperty; daml:inverseOf :includes .
12
+
13
+ :dependsOn a daml:TransitiveProperty ;
14
+ daml:hasSubProperty :includes . # Real name of subproperty?
15
+
16
+
17
+
18
+
@@ -0,0 +1,11 @@
1
+ #$: << "/Users/kph/unc/projects/activerdf_jena/lib"
2
+ require 'rubygems'
3
+ require 'active_rdf'
4
+ #require 'activerdf_jena'
5
+ p Jena::Model
6
+ p Pellet.pellet_available?
7
+ p Pellet.reasoner_factory
8
+ p LuceneARQ.lucene_available?
9
+ adapter = ConnectionPool.add_data_source(:type => :jena, :ontology => :owl, :reasoner => :pellet, :lucene => true)
10
+ puts adapter.dump
11
+ p ObjectManager.construct_classes
@@ -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,430 @@
1
+ # Authors:: Benjamin Heitmann, Karsten Huneycutt
2
+ # Copyright:: (c) 2007
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+
8
+ require "java"
9
+
10
+ require 'active_rdf'
11
+
12
+ require "pp"
13
+
14
+ require "fileutils"
15
+
16
+ class TestJenaAdapter < Test::Unit::TestCase
17
+
18
+ def setup
19
+ @adapter = ConnectionPool.add_data_source(:type => :jena, :ontology => :rdfs)
20
+ @eyal = RDFS::Resource.new 'http://eyaloren.org'
21
+ @age = RDFS::Resource.new 'foaf:age'
22
+ @mbox = RDFS::Resource.new 'foaf:mbox'
23
+ @test = RDFS::Resource.new 'test:test'
24
+ @mboxval = Literal.new 'aahfgiouhfg'
25
+ @ageval = Literal.new 23
26
+ end
27
+
28
+ def teardown
29
+ @adapter.close
30
+ # ConnectionPool.clear
31
+ end
32
+
33
+
34
+
35
+ def test_load_no_args
36
+ adapter = ConnectionPool.add_data_source(:type => :jena)
37
+ assert_instance_of JenaAdapter, adapter
38
+ end
39
+
40
+ def test_with_args_no_location
41
+ assert_instance_of JenaAdapter, @adapter
42
+ end
43
+
44
+ def test_retrieve_a_triple_with_only_uris
45
+
46
+ assert_instance_of JenaAdapter, @adapter
47
+
48
+ @adapter.add(@eyal, @age, @test)
49
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
50
+ assert_equal 1, result.flatten.size
51
+
52
+ result = Query.new.distinct(:p, :o).where(@eyal, :p, :o).execute
53
+ assert_equal 2, result.flatten.size
54
+
55
+ result = Query.new.distinct(:o).where(@eyal, @age, :o).execute
56
+ assert_equal 1, result.flatten.size
57
+
58
+ result = Query.new.distinct(:s).where(:s, @age, @test).execute
59
+ assert_equal 1, result.flatten.size
60
+
61
+ result = Query.new.distinct(:p).where(@eyal, :p, @test).execute
62
+ assert_equal 1, result.flatten.size
63
+
64
+ end
65
+
66
+ def test_retrieve_a_triple_with_string
67
+
68
+ assert_instance_of JenaAdapter, @adapter
69
+
70
+ @adapter.add(@eyal, @mbox, @mboxval)
71
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
72
+ assert_equal 1, result.flatten.size
73
+
74
+ result = Query.new.distinct(:p, :o).where(@eyal, :p, :o).execute
75
+ assert_equal 2, result.flatten.size
76
+
77
+ result = Query.new.distinct(:o).where(@eyal, @mbox, :o).execute
78
+ assert_equal 1, result.flatten.size
79
+
80
+ result = Query.new.distinct(:s).where(:s, @mbox, @mboxval).execute
81
+ assert_equal 1, result.flatten.size
82
+
83
+ result = Query.new.distinct(:p).where(@eyal, :p, @mboxval).execute
84
+ assert_equal 1, result.flatten.size
85
+
86
+ end
87
+
88
+ def test_retrieve_a_triple_with_fixnum
89
+
90
+ assert_instance_of JenaAdapter, @adapter
91
+
92
+ @adapter.add(@eyal, @age, @ageval)
93
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
94
+ assert_equal 1, result.flatten.size
95
+
96
+ result = Query.new.distinct(:p, :o).where(@eyal, :p, :o).execute
97
+ assert_equal 2, result.flatten.size
98
+
99
+ result = Query.new.distinct(:o).where(@eyal, @age, :o).execute
100
+ assert_equal 1, result.flatten.size
101
+
102
+ result = Query.new.distinct(:s).where(:s, @age, @ageval).execute
103
+ assert_equal 1, result.flatten.size
104
+
105
+ result = Query.new.distinct(:p).where(@eyal, :p, @ageval).execute
106
+ assert_equal 1, result.flatten.size
107
+
108
+ end
109
+
110
+ def test_remove
111
+ @adapter.add(@eyal, @age, @ageval)
112
+ @adapter.add(@eyal, @mbox, @mboxval)
113
+ @adapter.delete(@eyal, @age, @ageval)
114
+ assert_equal 1, @adapter.size
115
+
116
+
117
+ @adapter.add(@eyal, @age, @ageval)
118
+ @adapter.add(@eyal, @mbox, @mboxval)
119
+ @adapter.delete(:s, :p, @ageval)
120
+ assert_equal 1, @adapter.size
121
+
122
+ @adapter.add(@eyal, @age, @ageval)
123
+ @adapter.add(@eyal, @mbox, @mboxval)
124
+ @adapter.delete(:s, @age, :o)
125
+ assert_equal 1, @adapter.size
126
+
127
+ @adapter.add(@eyal, @age, @ageval)
128
+ @adapter.add(@eyal, @mbox, @mboxval)
129
+ @adapter.delete(@eyal, :p, :o)
130
+ assert_equal 0, @adapter.size
131
+ end
132
+
133
+ def test_dump
134
+ @adapter.add(@eyal, @age, @test)
135
+
136
+ stringDump = @adapter.dump
137
+
138
+ assert_not_nil stringDump
139
+ assert_kind_of String, stringDump
140
+ end
141
+
142
+ def test_size
143
+ @adapter.add(@eyal, @age, @test)
144
+
145
+ assert 0 < @adapter.size
146
+ end
147
+
148
+ def test_clear
149
+ @adapter.add(@eyal, @age, @test)
150
+ assert 0 < @adapter.size
151
+
152
+ @adapter.clear
153
+ assert_equal 0, @adapter.size
154
+ end
155
+
156
+ # may seem redundant, but nonetheless this is needed
157
+ def test_close
158
+ my_adapter = ConnectionPool.add_data_source(:type => :jena, :ontology => :rdfs)
159
+ my_adapter.add(@eyal, @age, @test)
160
+ results = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
161
+ assert results.flatten.size > 0
162
+
163
+ my_adapter.close
164
+ assert_raises ActiveRdfError do
165
+ results = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
166
+ end
167
+
168
+ my_adapter = ConnectionPool.add_data_source(:type => :jena, :ontology => :rdfs)
169
+ my_adapter.add(@eyal, @age, @test)
170
+ results = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
171
+ assert results.flatten.size > 0
172
+
173
+ my_adapter.close
174
+ assert_raises ActiveRdfError do
175
+ results = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
176
+ end
177
+ end
178
+
179
+
180
+ def test_load_ntriples
181
+ assert_equal 0, @adapter.size
182
+
183
+ this_dir = File.dirname(File.expand_path(__FILE__))
184
+ @adapter.load("file://" + this_dir + "/eyal-foaf.nt", :format => :ntriples, :into => :default_model)
185
+
186
+ assert_not_equal 0, @adapter.size
187
+
188
+ #check for <https://launchpad.net/products/browserdf/+rdf> <http://xmlns.com/foaf/0.1/name> "BrowseRDF" .
189
+ project_browserdf = RDFS::Resource.new("https://launchpad.net/products/browserdf/+rdf")
190
+ foaf_name = RDFS::Resource.new("http://xmlns.com/foaf/0.1/name")
191
+ result = Query.new.distinct(:o).where(project_browserdf, foaf_name, :o).execute
192
+ assert_equal 1, result.flatten.size
193
+ assert_equal "BrowseRDF", result[0]
194
+ end
195
+
196
+ def test_load_rdf_xml
197
+ assert_equal 0, @adapter.size
198
+
199
+ this_dir = File.dirname(File.expand_path(__FILE__))
200
+ @adapter.load("file://" + this_dir + "/bnode_org_rss.rdf", :format => :rdfxml, :into => :default_model)
201
+
202
+ assert_not_equal 0, @adapter.size
203
+
204
+ a_post = RDFS::Resource.new("http://bnode.org/blog/2007/05/29/semantic-web-gets-a-mention-in-visual-x-mag-webinale-report")
205
+ rss_title = RDFS::Resource.new("http://purl.org/rss/1.0/title")
206
+
207
+ result = Query.new.distinct(:o).where(a_post, rss_title, :o).execute
208
+ assert_equal 1, result.flatten.size
209
+ assert_equal "Semantic Web gets a mention in Visual-x mag webinale report", result[0]
210
+ end
211
+
212
+ def test_load_n3
213
+ assert_equal 0, @adapter.size
214
+
215
+ this_dir = File.dirname(File.expand_path(__FILE__))
216
+ @adapter.load("file://" + this_dir + "/s1.n3", :format => :n3, :into => :default_model)
217
+
218
+ assert_not_equal 0, @adapter.size
219
+
220
+ transy = RDFS::Resource.new("http://www.daml.org/2001/03/daml+oil#TransitiveProperty")
221
+ rdf_type = RDFS::Resource.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
222
+ result = Query.new.distinct(:s).where(:s, rdf_type, transy).execute
223
+
224
+ assert_equal 3, result.flatten.size
225
+ end
226
+
227
+ def test_persistence_file_based_anonymous
228
+ @adapter.close
229
+
230
+ this_dir = File.dirname(File.expand_path(__FILE__))
231
+ Dir.mkdir(this_dir + "/jena_persistence")
232
+ persistent_adapter = ConnectionPool.add_data_source(:type => :jena,
233
+ :file => this_dir + "/jena_persistence")
234
+ assert_equal 0, persistent_adapter.size
235
+
236
+ persistent_adapter.add(@eyal, @age, @ageval)
237
+ persistent_adapter.add(@eyal, @mbox, @mboxval)
238
+
239
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
240
+ assert_equal 2, result.flatten.size
241
+
242
+ persistent_adapter.close
243
+ ConnectionPool.clear
244
+
245
+ adapter2 = ConnectionPool.add_data_source(:type => :jena,
246
+ :file => this_dir + "/jena_persistence")
247
+
248
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
249
+ assert_equal 2, result.flatten.size
250
+
251
+ adapter2.close
252
+ FileUtils.remove_dir(this_dir + "/jena_persistence")
253
+ #File.delete(this_dir + "/jena_persistence/default")
254
+ end
255
+
256
+ def test_persistence_file_based_named_model
257
+ @adapter.close
258
+
259
+ this_dir = File.dirname(File.expand_path(__FILE__))
260
+ Dir.mkdir(this_dir + "/jena_persistence")
261
+ persistent_adapter = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky",
262
+ :file => this_dir + "/jena_persistence")
263
+ assert_equal 0, persistent_adapter.size
264
+
265
+ persistent_adapter.add(@eyal, @age, @ageval)
266
+ persistent_adapter.add(@eyal, @mbox, @mboxval)
267
+
268
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
269
+ assert_equal 2, result.flatten.size
270
+
271
+ persistent_adapter.close
272
+ ConnectionPool.clear
273
+
274
+ adapter2 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky",
275
+ :file => this_dir + "/jena_persistence")
276
+
277
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
278
+ assert_equal 2, result.flatten.size
279
+
280
+ adapter2.close
281
+ FileUtils.remove_dir(this_dir + "/jena_persistence")
282
+ #File.delete(this_dir + "/jena_persistence/superfunky")
283
+ end
284
+
285
+ def test_keyword_search
286
+ @adapter.close
287
+
288
+ this_dir = File.dirname(File.expand_path(__FILE__))
289
+ keyword_adapter = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :lucene => true)
290
+
291
+ keyword_adapter.load("file://" + this_dir + "/test_data.nt", :format => :ntriples, :into => :default_model )
292
+
293
+ eyal = RDFS::Resource.new('http://activerdf.org/test/eyal')
294
+
295
+ assert keyword_adapter.keyword_search?
296
+
297
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"blue").execute(:flatten => true)
298
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"27").execute(:flatten => true)
299
+ assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"eyal oren").execute(:flatten => true)
300
+
301
+ keyword_adapter.close
302
+ end
303
+
304
+ def test_derby_embedded_persistence
305
+ @adapter.close
306
+ this_dir = File.dirname(File.expand_path(__FILE__))
307
+
308
+ derby1 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky",
309
+ :database => {:url => "jdbc:derby:#{this_dir}/superfunky;create=true", :type => "Derby", :username => "", :password => ""})
310
+
311
+ derby1.add(@eyal, @age, @ageval)
312
+ derby1.add(@eyal, @mbox, @mboxval)
313
+
314
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
315
+ assert_equal 2, result.flatten.size
316
+
317
+ derby1.close
318
+ ConnectionPool.clear
319
+
320
+ derby2 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :id => "2",
321
+ :database => {:url => "jdbc:derby:#{this_dir}/superfunky;create=true", :type => "Derby", :username => "", :password => ""})
322
+
323
+ result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
324
+ assert_equal 2, result.flatten.size
325
+
326
+ derby2.close
327
+
328
+ begin
329
+ java.sql.DriverManager.getConnection("jdbc:derby:;shutdown=true")
330
+ rescue java.sql.SQLException
331
+ # expected
332
+ end
333
+ FileUtils.rm_rf(this_dir + "/superfunky")
334
+ end
335
+
336
+ # TODO: NOT TESTED until now, run this against a local mysql installation to confirm it
337
+ def test_mysql_persistence
338
+ # @adapter.close
339
+ #
340
+ # mysql1 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :id => "1",
341
+ # :database => {:url => "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName;create=true", :type => "MySQL", :username => "theUser", :password => "thepassword"})
342
+ #
343
+ # mysql1.add(@eyal, @age, @ageval)
344
+ # mysql1.add(@eyal, @mbox, @mboxval)
345
+ #
346
+ # result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
347
+ # assert_equal 2, result.flatten.size
348
+ #
349
+ # mysql1.close
350
+ # ConnectionPool.clear
351
+ #
352
+ # mysql2 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :id => "2",
353
+ # :database => {:url => "jdbc:mysql://MyDbComputerNameOrIP/myDatabaseName;create=true", :type => "MySQL", :username => "theUser", :password => "thepassword"})
354
+ #
355
+ # result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
356
+ # assert_equal 2, result.flatten.size
357
+ #
358
+ # mysql2.close
359
+ # this_dir = File.dirname(File.expand_path(__FILE__))
360
+ # #FileUtils.remove_dir(this_dir + "/superfunky")
361
+ end
362
+
363
+ # TODO: NOT TESTED until now, run this against a local postgres installation to confirm it
364
+ def test_postgres_embedded_persistence
365
+ # @adapter.close
366
+ #
367
+ # postgres1 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :id => "1",
368
+ # :database => {:url => "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName;create=true", :type => "PostgreSQL", :username => "theUser", :password => "thepassword"})
369
+ #
370
+ # postgres1.add(@eyal, @age, @ageval)
371
+ # postgres1.add(@eyal, @mbox, @mboxval)
372
+ #
373
+ # result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
374
+ # assert_equal 2, result.flatten.size
375
+ #
376
+ # postgres1.close
377
+ # ConnectionPool.clear
378
+ #
379
+ # postgres2 = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :id => "2",
380
+ # :database => {:url => "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName;create=true", :type => "PostgreSQL", :username => "theUser", :password => "thepassword"})
381
+ #
382
+ # result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
383
+ # assert_equal 2, result.flatten.size
384
+ #
385
+ # postgres2.close
386
+ # this_dir = File.dirname(File.expand_path(__FILE__))
387
+ # #FileUtils.remove_dir(this_dir + "/superfunky")
388
+ end
389
+
390
+
391
+
392
+
393
+
394
+ def test_contexts
395
+ # TODO
396
+ end
397
+
398
+ # TODO: querying pellet does not work right now
399
+ def test_search_with_pellet
400
+ @adapter.close
401
+
402
+ this_dir = File.dirname(File.expand_path(__FILE__))
403
+ adapter = ConnectionPool.add_data_source(:type => :jena, :model => "superfunky", :lucene => true,
404
+ :reasoner => :pellet, :ontology => :owl)
405
+
406
+ adapter.load("file://" + this_dir + "/test_data.nt", :format => :ntriples, :into => :default_model )
407
+
408
+ eyal = RDFS::Resource.new('http://activerdf.org/test/eyal')
409
+
410
+ # Keyword with pellet does not work.
411
+ # assert adapter.keyword_search?
412
+ # assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"blue").execute(:flatten => true)
413
+ # assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"27").execute(:flatten => true)
414
+ # assert_equal eyal, Query.new.distinct(:s).where(:s,:keyword,"eyal oren").execute(:flatten => true)
415
+
416
+ adapter.close
417
+ end
418
+
419
+
420
+ # TODO: need a better understanding of rdfs reasoning in Jena before I can write a test for it
421
+ # def test_rdfs_reasoning
422
+ # adapter_rdfs = ConnectionPool.add_data_source(:type => :jena, :ontology => :rdfs, :reasoner => :rdfs)
423
+ #
424
+ # adapter_rdfs.add(@eyal, @age, @test)
425
+ # result = Query.new.distinct(:o).where(@eyal, :p, :o).execute
426
+ # assert_equal 2, result.flatten.size
427
+ # adapter_rdfs.close
428
+ # end
429
+
430
+ end