pho 0.4.1 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/CHANGES +18 -1
  2. data/README +10 -0
  3. data/Rakefile +2 -1
  4. data/doc/rdoc/classes/Pho.html +33 -22
  5. data/doc/rdoc/classes/Pho/DatatypeProperty.html +12 -12
  6. data/doc/rdoc/classes/Pho/{RDF_JSON.html → Enrichment.html} +8 -7
  7. data/doc/rdoc/classes/Pho/Enrichment/ResourceEnricher.html +310 -0
  8. data/doc/rdoc/classes/Pho/Etags.html +42 -42
  9. data/doc/rdoc/classes/Pho/Facet/Results.html +19 -19
  10. data/doc/rdoc/classes/Pho/Facet/Term.html +6 -6
  11. data/doc/rdoc/classes/Pho/FieldPredicateMap.html +110 -105
  12. data/doc/rdoc/classes/Pho/FieldWeighting.html +12 -12
  13. data/doc/rdoc/classes/Pho/FileManagement.html +121 -0
  14. data/doc/rdoc/classes/Pho/FileManagement/AbstractFileManager.html +443 -0
  15. data/doc/rdoc/classes/Pho/FileManagement/FileManager.html +258 -0
  16. data/doc/rdoc/classes/Pho/FileManagement/RDFManager.html +271 -0
  17. data/doc/rdoc/classes/Pho/Job.html +64 -64
  18. data/doc/rdoc/classes/Pho/Jobs.html +60 -60
  19. data/doc/rdoc/classes/Pho/QueryProfile.html +60 -60
  20. data/doc/rdoc/classes/Pho/RDFCollection.html +4 -378
  21. data/doc/rdoc/classes/Pho/ResourceHash.html +123 -0
  22. data/doc/rdoc/classes/Pho/ResourceHash/Converter.html +323 -0
  23. data/doc/rdoc/classes/Pho/{RDF_JSON → ResourceHash}/SetAlgebra.html +18 -18
  24. data/doc/rdoc/classes/Pho/Snapshot.html +35 -35
  25. data/doc/rdoc/classes/Pho/Sparql.html +137 -0
  26. data/doc/rdoc/classes/Pho/Sparql/SparqlClient.html +515 -0
  27. data/doc/rdoc/classes/Pho/Sparql/SparqlHelper.html +575 -0
  28. data/doc/rdoc/classes/Pho/Status.html +26 -26
  29. data/doc/rdoc/classes/Pho/Store.html +271 -241
  30. data/doc/rdoc/classes/Pho/Update/Changeset.html +73 -73
  31. data/doc/rdoc/classes/Pho/Update/ChangesetBuilder.html +34 -34
  32. data/doc/rdoc/classes/Pho/Update/Changesets.html +14 -14
  33. data/doc/rdoc/classes/Pho/Update/LiteralStatement.html +31 -23
  34. data/doc/rdoc/classes/Pho/Update/ResourceStatement.html +45 -21
  35. data/doc/rdoc/classes/Pho/Update/Statement.html +29 -29
  36. data/doc/rdoc/classes/String.html +1 -1
  37. data/doc/rdoc/created.rid +1 -1
  38. data/doc/rdoc/files/CHANGES.html +49 -3
  39. data/doc/rdoc/files/README.html +15 -1
  40. data/doc/rdoc/files/lib/pho/changeset_builder_rb.html +1 -1
  41. data/doc/rdoc/files/lib/pho/changeset_rb.html +1 -1
  42. data/doc/rdoc/files/lib/pho/converter_rb.html +108 -0
  43. data/doc/rdoc/files/lib/pho/enrichment_rb.html +101 -0
  44. data/doc/rdoc/files/lib/pho/etags_rb.html +1 -1
  45. data/doc/rdoc/files/lib/pho/field_predicate_map_rb.html +1 -1
  46. data/doc/rdoc/files/lib/pho/file_management_rb.html +101 -0
  47. data/doc/rdoc/files/lib/pho/file_manager_rb.html +108 -0
  48. data/doc/rdoc/files/lib/pho/rdf_collection_rb.html +1 -1
  49. data/doc/rdoc/files/lib/pho/resource_hash_rb.html +101 -0
  50. data/doc/rdoc/files/lib/pho/{rdf_json_rb.html → sparql_rb.html} +4 -4
  51. data/doc/rdoc/files/lib/pho/store_rb.html +1 -1
  52. data/doc/rdoc/files/lib/pho_rb.html +7 -2
  53. data/doc/rdoc/fr_class_index.html +12 -2
  54. data/doc/rdoc/fr_file_index.html +6 -1
  55. data/doc/rdoc/fr_method_index.html +176 -139
  56. data/examples/sparql_construct_hash.rb +26 -0
  57. data/examples/sparql_select.rb +18 -0
  58. data/lib/pho.rb +6 -1
  59. data/lib/pho/changeset.rb +24 -9
  60. data/lib/pho/changeset_builder.rb +10 -10
  61. data/lib/pho/converter.rb +74 -0
  62. data/lib/pho/enrichment.rb +81 -0
  63. data/lib/pho/etags.rb +1 -0
  64. data/lib/pho/field_predicate_map.rb +6 -1
  65. data/lib/pho/file_management.rb +102 -0
  66. data/lib/pho/file_manager.rb +61 -0
  67. data/lib/pho/rdf_collection.rb +54 -120
  68. data/lib/pho/{rdf_json.rb → resource_hash.rb} +3 -4
  69. data/lib/pho/sparql.rb +332 -0
  70. data/lib/pho/store.rb +20 -14
  71. data/tests/tc_changeset.rb +46 -0
  72. data/tests/tc_changeset_builder.rb +122 -1
  73. data/tests/tc_converter.rb +95 -0
  74. data/tests/tc_enrichment.rb +83 -0
  75. data/tests/tc_file_manager.rb +88 -0
  76. data/tests/tc_rdf_collection.rb +3 -0
  77. data/tests/{tc_rdf_json.rb → tc_resource_hash.rb} +23 -23
  78. data/tests/tc_search.rb +1 -1
  79. data/tests/tc_sparql.rb +131 -6
  80. data/tests/tc_sparql_helper.rb +214 -0
  81. data/tests/ts_pho.rb +6 -2
  82. metadata +47 -8
@@ -3,6 +3,8 @@ require 'pho'
3
3
  require 'test/unit'
4
4
  require 'mocha'
5
5
 
6
+ #TODO factor out tests for AbstractFileManager
7
+ #TODO alter so we're testing the non-deprecated version of the Class
6
8
  class RDFCollectionTest < Test::Unit::TestCase
7
9
 
8
10
  def setup()
@@ -56,6 +58,7 @@ class RDFCollectionTest < Test::Unit::TestCase
56
58
 
57
59
  success = collection.successes()
58
60
  success.sort!
61
+
59
62
  assert_equal(4, success.size)
60
63
  assert_equal("/tmp/0.rdf", success[0])
61
64
  assert_equal("/tmp/1.rdf", success[1])
@@ -5,7 +5,7 @@ require 'mocha'
5
5
  require 'rexml/document'
6
6
  require 'uri'
7
7
 
8
- class RDFJSONTest < Test::Unit::TestCase
8
+ class ResourceHashTest < Test::Unit::TestCase
9
9
  SINGLE_TRIPLE_RESOURCE = <<-EOL
10
10
  {
11
11
  "http://www.example.org" : {
@@ -99,7 +99,7 @@ class RDFJSONTest < Test::Unit::TestCase
99
99
 
100
100
  def test_minus_with_iso_graphs()
101
101
 
102
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
102
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
103
103
  assert_not_nil(difference)
104
104
  assert_equal(0, difference.keys.length)
105
105
 
@@ -107,7 +107,7 @@ class RDFJSONTest < Test::Unit::TestCase
107
107
 
108
108
  def test_minus_with_single_resource_value_change()
109
109
 
110
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(SINGLE_TRIPLE_RESOURCE2) )
110
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(SINGLE_TRIPLE_RESOURCE2) )
111
111
  assert_not_nil(difference)
112
112
  assert_equal(1, difference.keys.length)
113
113
  assert_equal( "http://www.example.org/page",
@@ -115,7 +115,7 @@ class RDFJSONTest < Test::Unit::TestCase
115
115
 
116
116
  #reverse
117
117
 
118
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE2), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
118
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE2), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
119
119
  assert_not_nil(difference)
120
120
  assert_equal(1, difference.keys.length)
121
121
  assert_equal( "http://www.example.org/other-page",
@@ -125,14 +125,14 @@ class RDFJSONTest < Test::Unit::TestCase
125
125
 
126
126
  def test_minus_with_single_literal_value_change()
127
127
 
128
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL2) )
128
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL2) )
129
129
  assert_not_nil(difference)
130
130
  assert_equal(1, difference.keys.length)
131
131
  assert_equal( "Title",
132
132
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["value"] )
133
133
 
134
134
  #reverse
135
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL2), JSON.parse(SINGLE_TRIPLE_LITERAL) )
135
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL2), JSON.parse(SINGLE_TRIPLE_LITERAL) )
136
136
  assert_not_nil(difference)
137
137
  assert_equal(1, difference.keys.length)
138
138
  assert_equal( "Other Title",
@@ -142,14 +142,14 @@ class RDFJSONTest < Test::Unit::TestCase
142
142
 
143
143
  def test_minus_with_different_typed_predicate_values()
144
144
 
145
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_DIFF_TYPE) )
145
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_DIFF_TYPE) )
146
146
  assert_not_nil(difference)
147
147
  assert_equal(1, difference.keys.length)
148
148
  assert_equal( "Title",
149
149
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["value"] )
150
150
 
151
151
  #reverse
152
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_DIFF_TYPE), JSON.parse(SINGLE_TRIPLE_LITERAL) )
152
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_DIFF_TYPE), JSON.parse(SINGLE_TRIPLE_LITERAL) )
153
153
  assert_not_nil(difference)
154
154
  assert_equal(1, difference.keys.length)
155
155
  assert_equal( "http://www.example.com",
@@ -159,12 +159,12 @@ class RDFJSONTest < Test::Unit::TestCase
159
159
 
160
160
  def test_minus_with_different_size_graphs()
161
161
 
162
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(TWO_TRIPLES) )
162
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_RESOURCE), JSON.parse(TWO_TRIPLES) )
163
163
  assert_not_nil(difference)
164
164
  assert_equal(0, difference.keys.length)
165
165
 
166
166
  #reverse
167
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(TWO_TRIPLES), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
167
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(TWO_TRIPLES), JSON.parse(SINGLE_TRIPLE_RESOURCE) )
168
168
  assert_not_nil(difference)
169
169
  assert_equal(1, difference.keys.length)
170
170
  assert_equal( "Title",
@@ -174,12 +174,12 @@ class RDFJSONTest < Test::Unit::TestCase
174
174
 
175
175
  def test_minus_with_repeated_properties()
176
176
 
177
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(REPEATED_TRIPLES) )
177
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(REPEATED_TRIPLES) )
178
178
  assert_not_nil(difference)
179
179
  assert_equal(0, difference.keys.length)
180
180
 
181
181
  #reverse
182
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(REPEATED_TRIPLES), JSON.parse(SINGLE_TRIPLE_LITERAL) )
182
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(REPEATED_TRIPLES), JSON.parse(SINGLE_TRIPLE_LITERAL) )
183
183
  assert_not_nil(difference)
184
184
  assert_equal(1, difference.keys.length)
185
185
  assert_equal( "Other Title",
@@ -189,22 +189,22 @@ class RDFJSONTest < Test::Unit::TestCase
189
189
 
190
190
  def test_minus_with_language_qualified_literals()
191
191
 
192
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL) )
192
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL) )
193
193
  assert_not_nil(difference)
194
194
  assert_equal(0, difference.keys.length)
195
195
 
196
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
196
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
197
197
  assert_not_nil(difference)
198
198
  assert_equal(0, difference.keys.length)
199
199
 
200
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
200
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
201
201
  assert_not_nil(difference)
202
202
  assert_equal(1, difference.keys.length)
203
203
  assert_equal( "Title",
204
204
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["value"] )
205
205
 
206
206
  #reverse no lang and english
207
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL) )
207
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL) )
208
208
  assert_not_nil(difference)
209
209
  assert_equal(1, difference.keys.length)
210
210
  assert_equal( "English",
@@ -212,7 +212,7 @@ class RDFJSONTest < Test::Unit::TestCase
212
212
  assert_equal( "en",
213
213
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["lang"] )
214
214
 
215
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL_FRENCH) )
215
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH), JSON.parse(SINGLE_TRIPLE_LITERAL_FRENCH) )
216
216
  assert_not_nil(difference)
217
217
  assert_equal(1, difference.keys.length)
218
218
  assert_equal( "English",
@@ -221,7 +221,7 @@ class RDFJSONTest < Test::Unit::TestCase
221
221
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["lang"] )
222
222
 
223
223
  #reverse no lang and english
224
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_FRENCH), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
224
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL_FRENCH), JSON.parse(SINGLE_TRIPLE_LITERAL_ENGLISH) )
225
225
  assert_not_nil(difference)
226
226
  assert_equal(1, difference.keys.length)
227
227
  assert_equal( "French",
@@ -233,18 +233,18 @@ class RDFJSONTest < Test::Unit::TestCase
233
233
 
234
234
  def test_minus_with_typed_literals()
235
235
 
236
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
236
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
237
237
  assert_not_nil(difference)
238
238
  assert_equal(0, difference.keys.length)
239
239
 
240
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
240
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TRIPLE_LITERAL), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
241
241
  assert_not_nil(difference)
242
242
  assert_equal(1, difference.keys.length)
243
243
  assert_equal( "Title",
244
244
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["value"] )
245
245
 
246
246
  #reverse no type and int
247
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TRIPLE_LITERAL) )
247
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TRIPLE_LITERAL) )
248
248
  assert_not_nil(difference)
249
249
  assert_equal(1, difference.keys.length)
250
250
  assert_equal( "1",
@@ -252,7 +252,7 @@ class RDFJSONTest < Test::Unit::TestCase
252
252
  assert_equal( "http://www.w3.org/2001/XMLSchema#int",
253
253
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["datatype"] )
254
254
 
255
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TYPED_TRIPLE_FLOAT) )
255
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_INT), JSON.parse(SINGLE_TYPED_TRIPLE_FLOAT) )
256
256
  assert_not_nil(difference)
257
257
  assert_equal(1, difference.keys.length)
258
258
  assert_equal( "1",
@@ -261,7 +261,7 @@ class RDFJSONTest < Test::Unit::TestCase
261
261
  difference["http://www.example.org"]["http://www.example.org/ns/literal"][0]["datatype"] )
262
262
 
263
263
  #reverse float and int
264
- difference = Pho::RDF_JSON::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_FLOAT), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
264
+ difference = Pho::ResourceHash::SetAlgebra.minus( JSON.parse(SINGLE_TYPED_TRIPLE_FLOAT), JSON.parse(SINGLE_TYPED_TRIPLE_INT) )
265
265
  assert_not_nil(difference)
266
266
  assert_equal(1, difference.keys.length)
267
267
  assert_equal( "2.5",
@@ -45,7 +45,7 @@ class SearchTest < Test::Unit::TestCase
45
45
  def test_augment
46
46
  mc = mock()
47
47
  mc.expects(:set_auth)
48
- mc.expects(:post).with("http://api.talis.com/stores/testing/services/augment", "data", nil)
48
+ mc.expects(:post).with("http://api.talis.com/stores/testing/services/augment", "data", anything)
49
49
 
50
50
  store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
51
51
  response = store.augment("data")
@@ -5,7 +5,7 @@ require 'mocha'
5
5
 
6
6
  class SparqlTest < Test::Unit::TestCase
7
7
 
8
- def test_simple_sparql
8
+ def test_simple_store_sparql
9
9
 
10
10
  mc = mock()
11
11
  mc.expects(:set_auth)
@@ -29,7 +29,7 @@ class SparqlTest < Test::Unit::TestCase
29
29
  assert_equal("RESULTS", response.content)
30
30
  end
31
31
 
32
- def test_sparql_with_mimetype
32
+ def test_store_sparql_with_mimetype
33
33
 
34
34
  mc = mock()
35
35
  mc.expects(:set_auth)
@@ -41,7 +41,7 @@ class SparqlTest < Test::Unit::TestCase
41
41
  assert_equal("RESULTS", response.content)
42
42
  end
43
43
 
44
- def test_sparql_ask
44
+ def test_store_sparql_ask
45
45
  mc = mock()
46
46
  mc.expects(:set_auth)
47
47
  mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/sparql-results+xml"} ).returns(
@@ -52,7 +52,7 @@ class SparqlTest < Test::Unit::TestCase
52
52
  assert_equal("RESULTS", response.content)
53
53
  end
54
54
 
55
- def test_sparql_select
55
+ def test_store_sparql_select
56
56
  mc = mock()
57
57
  mc.expects(:set_auth)
58
58
  mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/sparql-results+xml"} ).returns(
@@ -63,7 +63,7 @@ class SparqlTest < Test::Unit::TestCase
63
63
  assert_equal("RESULTS", response.content)
64
64
  end
65
65
 
66
- def test_sparql_construct
66
+ def test_store_sparql_construct
67
67
  mc = mock()
68
68
  mc.expects(:set_auth)
69
69
  mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/rdf+xml"} ).returns(
@@ -74,7 +74,7 @@ class SparqlTest < Test::Unit::TestCase
74
74
  assert_equal("RESULTS", response.content)
75
75
  end
76
76
 
77
- def test_sparql_describe
77
+ def test_store_sparql_describe
78
78
  mc = mock()
79
79
  mc.expects(:set_auth)
80
80
  mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/rdf+xml"} ).returns(
@@ -84,5 +84,130 @@ class SparqlTest < Test::Unit::TestCase
84
84
  response = store.sparql_describe("SPARQL")
85
85
  assert_equal("RESULTS", response.content)
86
86
  end
87
+
88
+ def test_get_store_sparql_client
89
+ store = Pho::Store.new("http://api.talis.com/stores/testing/", "user", "pass")
90
+ sparql_client = store.sparql_client()
91
+ assert_equal( true, sparql_client.supports_rdf_json )
92
+ assert_equal( true, sparql_client.supports_sparql_json )
93
+ end
94
+
95
+ def test_simple_query
96
+
97
+ mc = mock()
98
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL"}, {})
99
+
100
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
101
+ sparql_client.query("SPARQL")
102
+
103
+ end
104
+
105
+ def test_query_with_default_graph
106
+
107
+ mc = mock()
108
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL", "default-graph-uri" => ["http://www.example.com"]}, {})
109
+
110
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
111
+ sparql_client.add_default_graph("http://www.example.com")
112
+ sparql_client.query("SPARQL")
113
+
114
+ end
115
+
116
+ def test_query_with_named_graph
117
+
118
+ mc = mock()
119
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL", "named-graph-uri" => ["http://www.example.com"]}, {})
120
+
121
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
122
+ sparql_client.add_named_graph("http://www.example.com")
123
+ sparql_client.query("SPARQL")
124
+
125
+ end
126
+
127
+ def test_query_with_both_graphs
128
+
129
+ mc = mock()
130
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL", "named-graph-uri" => ["http://www.example.com"], "default-graph-uri" => ["http://www.example.org"]}, {})
131
+
132
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
133
+ sparql_client.add_named_graph("http://www.example.com")
134
+ sparql_client.add_default_graph("http://www.example.org")
135
+ sparql_client.query("SPARQL")
136
+
137
+ end
138
+
139
+ def test_sparql_with_mimetype
140
+ mc = mock()
141
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL"}, {"Accept" => "application/sparql-results+xml"})
142
+
143
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
144
+ sparql_client.query("SPARQL", "application/sparql-results+xml")
145
+
146
+ end
147
+
148
+ def test_sparql_with_output_parameter
149
+ mc = mock()
150
+ mc.expects(:get).with("http://www.example.org/sparql", {"query" => "SPARQL", "output" => "json"}, {})
151
+
152
+ sparql_client = Pho::Sparql::SparqlClient.new("http://www.example.org/sparql", mc)
153
+ sparql_client.output_parameter_name="output"
154
+ sparql_client.query("SPARQL", "json")
155
+
156
+ end
157
+
158
+ def test_ask
159
+ mc = mock()
160
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/sparql-results+xml"} ).returns(
161
+ HTTP::Message.new_response("RESULTS"))
162
+
163
+ client = Pho::Sparql::SparqlClient.new("http://api.talis.com/stores/testing/services/sparql", mc)
164
+ response = client.ask("SPARQL")
165
+ assert_equal("RESULTS", response.content)
166
+ end
167
+
168
+ def test_store_sparql_select
169
+ mc = mock()
170
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/sparql-results+xml"} ).returns(
171
+ HTTP::Message.new_response("RESULTS"))
172
+
173
+ client = Pho::Sparql::SparqlClient.new("http://api.talis.com/stores/testing/services/sparql", mc)
174
+ response = client.select("SPARQL")
175
+ assert_equal("RESULTS", response.content)
176
+ end
177
+
178
+ def test_construct
179
+ mc = mock()
180
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/rdf+xml"} ).returns(
181
+ HTTP::Message.new_response("RESULTS"))
182
+
183
+ client = Pho::Sparql::SparqlClient.new("http://api.talis.com/stores/testing/services/sparql", mc)
184
+ response = client.construct("SPARQL")
185
+ assert_equal("RESULTS", response.content)
186
+ end
187
+
188
+ def test_describe
189
+ mc = mock()
190
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql", {"query" => "SPARQL"}, {"Accept" => "application/rdf+xml"} ).returns(
191
+ HTTP::Message.new_response("RESULTS"))
192
+
193
+ client = Pho::Sparql::SparqlClient.new("http://api.talis.com/stores/testing/services/sparql", mc)
194
+ response = client.describe("SPARQL")
195
+ assert_equal("RESULTS", response.content)
196
+ end
197
+
198
+ def test_multi_describe
199
+ mc = mock()
200
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/sparql",
201
+ {"query" => "DESCRIBE <http://www.example.org> <http://www.example.com>"},
202
+ {"Accept" => "application/rdf+xml"} ).returns( HTTP::Message.new_response("RESULTS"))
203
+
204
+ client = Pho::Sparql::SparqlClient.new("http://api.talis.com/stores/testing/services/sparql", mc)
205
+ uris = []
206
+ uris << "http://www.example.org"
207
+ uris << "http://www.example.com"
208
+ response = client.multi_describe(uris)
209
+ assert_equal("RESULTS", response.content)
210
+
211
+ end
87
212
 
88
213
  end
@@ -0,0 +1,214 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'mocha'
5
+
6
+ class SparqlHelperTest < Test::Unit::TestCase
7
+
8
+ SELECT_QUERY = <<-EOL
9
+ SELECT ?name WHERE { ?s rdfs:label ?name. }
10
+ EOL
11
+
12
+ ASK_QUERY = <<-EOL
13
+ ASK WHERE { ?s rdfs:label "Something". }
14
+ EOL
15
+
16
+ DESCRIBE_QUERY = <<-EOL
17
+ DESCRIBE <http://www.example.org>
18
+ EOL
19
+
20
+ CONSTRUCT_QUERY = <<-EOL
21
+ CONSTRUCT { ?s ?p ?o. } WHERE { ?s ?p ?o. }
22
+ EOL
23
+
24
+ RESULTS = <<-EOL
25
+ {
26
+ "head": { "vars": [ "name" ] } ,
27
+
28
+ "results": {
29
+ "bindings": [
30
+ { "name": { "type": "literal" , "value": "Apollo 11 Command and Service Module (CSM)" }
31
+ } ,
32
+ { "name": { "type": "literal" , "value": "Apollo 11 SIVB" }
33
+ } ,
34
+ { "name": { "type": "literal" , "value": "Apollo 11 Lunar Module / EASEP" }
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ EOL
40
+
41
+ ASK_RESULTS = <<-EOL
42
+ {
43
+ "head": {},
44
+ "boolean": "true"
45
+ }
46
+ EOL
47
+
48
+ RDF_JSON_RESULTS = <<-EOL
49
+ {
50
+ "http://www.example.org" : {
51
+ "http://www.example.org/ns/resource" : [ { "value" : "http://www.example.org/page", "type" : "uri" } ]
52
+ }
53
+ }
54
+ EOL
55
+
56
+ RDF_JSON = <<-EOL
57
+ {
58
+ "head": { "vars": [ "name" ] } ,
59
+
60
+ "results": {
61
+ "bindings": [
62
+ { "name": { "type": "literal" , "value": "Apollo 11 Command and Service Module (CSM)" },
63
+ "uri": { "type": "uri" , "value": "http://nasa.dataincubator.org/spacecraft/12345" },
64
+ "mass": { "type": "literal" , "value": "5000.5", "datatype" : "http://www.w3.org/2001/XMLSchema#float" }
65
+ } ,
66
+ { "name": { "type": "literal" , "value": "Apollo 11 SIVB" },
67
+ "uri": { "type": "uri" , "value": "http://nasa.dataincubator.org/spacecraft/12345" }
68
+ }
69
+ ]
70
+ }
71
+ }
72
+ EOL
73
+
74
+ def test_apply_initial_bindings
75
+ query = "SELECT ?p ?o WHERE { ?s ?p ?o }"
76
+ values = { "s" => "<http://www.example.org>" }
77
+
78
+ bound = Pho::Sparql::SparqlHelper.apply_initial_bindings(query, values)
79
+ assert_not_nil(bound)
80
+ assert_equal( "SELECT ?p ?o WHERE { <http://www.example.org> ?p ?o }", bound )
81
+ end
82
+
83
+ def test_apply_initial_bindings_with_dollars
84
+ query = "SELECT $p $o WHERE { $s $p $o }"
85
+ values = { "s" => "<http://www.example.org>" }
86
+
87
+ bound = Pho::Sparql::SparqlHelper.apply_initial_bindings(query, values)
88
+ assert_not_nil(bound)
89
+ assert_equal( "SELECT $p $o WHERE { <http://www.example.org> $p $o }", bound )
90
+ end
91
+
92
+ def test_apply_initial_bindings_with_literal
93
+ query = "SELECT ?s WHERE { ?s ?p ?o }"
94
+ values = { "o" => "'some value'" }
95
+
96
+ bound = Pho::Sparql::SparqlHelper.apply_initial_bindings(query, values)
97
+ assert_not_nil(bound)
98
+ assert_equal( "SELECT ?s WHERE { ?s ?p 'some value' }", bound )
99
+ end
100
+
101
+ def test_select
102
+ mc = mock()
103
+ mc.expects(:select).with(SELECT_QUERY, Pho::Sparql::SPARQL_RESULTS_JSON).returns(
104
+ HTTP::Message.new_response(RESULTS) )
105
+ json = Pho::Sparql::SparqlHelper.select(SELECT_QUERY, mc)
106
+ assert_not_nil(json)
107
+ assert_equal("name", json["head"]["vars"][0])
108
+ end
109
+
110
+ def test_failed_select
111
+ mc = mock()
112
+ resp = HTTP::Message.new_response("Error")
113
+ resp.status = 500
114
+ mc.expects(:select).with(SELECT_QUERY, Pho::Sparql::SPARQL_RESULTS_JSON).returns( resp )
115
+ assert_raises RuntimeError do
116
+ json = Pho::Sparql::SparqlHelper.select(SELECT_QUERY, mc)
117
+ end
118
+ end
119
+
120
+ def test_ask
121
+ mc = mock()
122
+ mc.expects(:select).with(ASK_QUERY, Pho::Sparql::SPARQL_RESULTS_JSON).returns(
123
+ HTTP::Message.new_response(ASK_RESULTS) )
124
+ assert_equal( true, Pho::Sparql::SparqlHelper.ask(ASK_QUERY, mc) )
125
+ end
126
+
127
+ def test_select_values
128
+ mc = mock()
129
+ mc.expects(:select).with(SELECT_QUERY, Pho::Sparql::SPARQL_RESULTS_JSON).returns(
130
+ HTTP::Message.new_response(RESULTS) )
131
+ results = Pho::Sparql::SparqlHelper.select_values(SELECT_QUERY, mc)
132
+ assert_not_nil( results )
133
+ assert_equal( 3, results.length )
134
+ end
135
+
136
+ def test_select_single_value
137
+ mc = mock()
138
+ mc.expects(:select).with(SELECT_QUERY, Pho::Sparql::SPARQL_RESULTS_JSON).returns(
139
+ HTTP::Message.new_response(RESULTS) )
140
+ result = Pho::Sparql::SparqlHelper.select_single_value(SELECT_QUERY, mc)
141
+ assert_equal( "Apollo 11 Command and Service Module (CSM)", result )
142
+ end
143
+
144
+ def test_describe_to_resource_hash
145
+ mc = mock()
146
+ mc.expects(:describe).with(DESCRIBE_QUERY, "application/json").returns( HTTP::Message.new_response(RDF_JSON_RESULTS) )
147
+ result = Pho::Sparql::SparqlHelper.describe_to_resource_hash(DESCRIBE_QUERY, mc)
148
+ assert_not_nil(result)
149
+ assert_not_nil(result["http://www.example.org"])
150
+ end
151
+
152
+ def test_failed_describe
153
+ mc = mock()
154
+ resp = HTTP::Message.new_response("Error")
155
+ resp.status = 500
156
+ mc.expects(:describe).with(DESCRIBE_QUERY, "application/json").returns( resp )
157
+ assert_raises RuntimeError do
158
+ Pho::Sparql::SparqlHelper.describe_to_resource_hash(DESCRIBE_QUERY, mc)
159
+ end
160
+ end
161
+
162
+ def test_construct_to_resource_hash
163
+ mc = mock()
164
+ mc.expects(:construct).with(CONSTRUCT_QUERY, "application/json").returns( HTTP::Message.new_response(RDF_JSON_RESULTS) )
165
+ result = Pho::Sparql::SparqlHelper.construct_to_resource_hash(CONSTRUCT_QUERY, mc)
166
+ assert_not_nil(result)
167
+ assert_not_nil(result["http://www.example.org"])
168
+ end
169
+
170
+ def test_failed_construct
171
+ mc = mock()
172
+ resp = HTTP::Message.new_response("Error")
173
+ resp.status = 500
174
+ mc.expects(:construct).with(CONSTRUCT_QUERY, "application/json").returns( resp )
175
+ assert_raises RuntimeError do
176
+ Pho::Sparql::SparqlHelper.construct_to_resource_hash(CONSTRUCT_QUERY, mc)
177
+ end
178
+ end
179
+
180
+ def test_multi_describe
181
+ uris = []
182
+ uris << "http://www.example.org"
183
+ uris << "http://www.example.com"
184
+ mc = mock()
185
+ mc.expects(:multi_describe).with(uris, "application/json").returns(
186
+ HTTP::Message.new_response(RDF_JSON_RESULTS) )
187
+
188
+ result = Pho::Sparql::SparqlHelper.multi_describe(uris, mc)
189
+ assert_not_nil(result)
190
+ assert_not_nil(result["http://www.example.org"])
191
+ end
192
+
193
+ def test_binding_to_hash
194
+ json = JSON.parse(RDF_JSON)
195
+ binding = json["results"]["bindings"][0]
196
+
197
+ hash = Pho::Sparql::SparqlHelper.result_to_query_binding(binding)
198
+ assert_equal(3, hash.size)
199
+ assert_equal("\"Apollo 11 Command and Service Module (CSM)\"", hash["name"])
200
+ assert_equal("<http://nasa.dataincubator.org/spacecraft/12345>", hash["uri"])
201
+ assert_equal("\"5000.5\"^^http://www.w3.org/2001/XMLSchema#float", hash["mass"])
202
+ end
203
+
204
+ def test_results_to_bindings
205
+ json = JSON.parse(RDF_JSON)
206
+ bindings = Pho::Sparql::SparqlHelper.results_to_query_bindings(json)
207
+ assert_equal(2, bindings.size)
208
+ hash = bindings[0]
209
+ assert_equal("\"Apollo 11 Command and Service Module (CSM)\"", hash["name"])
210
+ assert_equal("<http://nasa.dataincubator.org/spacecraft/12345>", hash["uri"])
211
+ assert_equal("\"5000.5\"^^http://www.w3.org/2001/XMLSchema#float", hash["mass"])
212
+ end
213
+
214
+ end