pho 0.5 → 0.6

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 (80) hide show
  1. data/CHANGES +17 -0
  2. data/Rakefile +10 -2
  3. data/bin/talis_store +37 -92
  4. data/doc/rdoc/classes/Pho.html +11 -0
  5. data/doc/rdoc/classes/Pho/CommandLine.html +508 -0
  6. data/doc/rdoc/classes/Pho/DatatypeProperty.html +15 -15
  7. data/doc/rdoc/classes/Pho/Enrichment.html +1 -1
  8. data/doc/rdoc/classes/Pho/Enrichment/{ResourceEnricher.html → StoreEnricher.html} +158 -58
  9. data/doc/rdoc/classes/Pho/Etags.html +36 -36
  10. data/doc/rdoc/classes/Pho/Facet/Results.html +19 -19
  11. data/doc/rdoc/classes/Pho/Facet/Term.html +6 -6
  12. data/doc/rdoc/classes/Pho/FieldPredicateMap.html +94 -94
  13. data/doc/rdoc/classes/Pho/FieldWeighting.html +14 -14
  14. data/doc/rdoc/classes/Pho/FileManagement/AbstractFileManager.html +126 -91
  15. data/doc/rdoc/classes/Pho/FileManagement/FileManager.html +68 -62
  16. data/doc/rdoc/classes/Pho/FileManagement/RDFManager.html +22 -57
  17. data/doc/rdoc/classes/Pho/Job.html +68 -67
  18. data/doc/rdoc/classes/Pho/Jobs.html +62 -62
  19. data/doc/rdoc/classes/Pho/QueryProfile.html +64 -64
  20. data/doc/rdoc/classes/Pho/RDF.html +120 -0
  21. data/doc/rdoc/classes/Pho/RDF/Parser.html +277 -0
  22. data/doc/rdoc/classes/Pho/ResourceHash.html +1 -1
  23. data/doc/rdoc/classes/Pho/ResourceHash/Converter.html +48 -46
  24. data/doc/rdoc/classes/Pho/ResourceHash/SetAlgebra.html +15 -14
  25. data/doc/rdoc/classes/Pho/Snapshot.html +36 -36
  26. data/doc/rdoc/classes/Pho/Sparql.html +50 -0
  27. data/doc/rdoc/classes/Pho/Sparql/SparqlClient.html +147 -68
  28. data/doc/rdoc/classes/Pho/Sparql/SparqlHelper.html +195 -114
  29. data/doc/rdoc/classes/Pho/Status.html +26 -26
  30. data/doc/rdoc/classes/Pho/Store.html +271 -264
  31. data/doc/rdoc/classes/Pho/StoreSparqlClient.html +183 -0
  32. data/doc/rdoc/classes/Pho/Update.html +1 -0
  33. data/doc/rdoc/classes/Pho/Update/Changeset.html +69 -68
  34. data/doc/rdoc/classes/Pho/Update/ChangesetBuilder.html +24 -24
  35. data/doc/rdoc/classes/Pho/Update/Changesets.html +15 -14
  36. data/doc/rdoc/classes/Pho/Update/LiteralStatement.html +18 -18
  37. data/doc/rdoc/classes/Pho/Update/ResourceStatement.html +24 -24
  38. data/doc/rdoc/classes/Pho/Update/Statement.html +28 -27
  39. data/doc/rdoc/classes/String.html +1 -1
  40. data/doc/rdoc/created.rid +1 -1
  41. data/doc/rdoc/files/CHANGES.html +53 -1
  42. data/doc/rdoc/files/lib/pho/changeset_rb.html +1 -1
  43. data/doc/rdoc/files/lib/pho/command_line_rb.html +101 -0
  44. data/doc/rdoc/files/lib/pho/converter_rb.html +1 -1
  45. data/doc/rdoc/files/lib/pho/enrichment_rb.html +1 -1
  46. data/doc/rdoc/files/lib/pho/file_management_rb.html +1 -1
  47. data/doc/rdoc/files/lib/pho/file_manager_rb.html +1 -1
  48. data/doc/rdoc/files/lib/pho/rdf_collection_rb.html +1 -1
  49. data/doc/rdoc/files/lib/pho/rdf_rb.html +108 -0
  50. data/doc/rdoc/files/lib/pho/sparql_rb.html +1 -1
  51. data/doc/rdoc/files/lib/pho/store_rb.html +8 -1
  52. data/doc/rdoc/files/lib/pho_rb.html +4 -2
  53. data/doc/rdoc/fr_class_index.html +6 -1
  54. data/doc/rdoc/fr_file_index.html +2 -0
  55. data/doc/rdoc/fr_method_index.html +192 -172
  56. data/examples/calais/bio.txt +7 -0
  57. data/examples/calais/dump.rb +17 -0
  58. data/examples/calais/enlighten.rb +23 -0
  59. data/examples/calais/output.rdf +25 -0
  60. data/examples/sinatra/viewer.rb +20 -0
  61. data/lib/pho.rb +4 -1
  62. data/lib/pho/changeset.rb +17 -1
  63. data/lib/pho/command_line.rb +166 -0
  64. data/lib/pho/converter.rb +8 -3
  65. data/lib/pho/enrichment.rb +93 -28
  66. data/lib/pho/file_management.rb +32 -19
  67. data/lib/pho/file_manager.rb +22 -26
  68. data/lib/pho/rdf.rb +74 -0
  69. data/lib/pho/rdf_collection.rb +2 -17
  70. data/lib/pho/sparql.rb +150 -38
  71. data/lib/pho/store.rb +28 -2
  72. data/tests/tc_contentbox.rb +41 -0
  73. data/tests/tc_enrichment.rb +41 -4
  74. data/tests/tc_file_manager.rb +97 -7
  75. data/tests/tc_rdf_collection.rb +25 -13
  76. data/tests/tc_rdf_parser.rb +37 -0
  77. data/tests/tc_sparql.rb +72 -2
  78. data/tests/tc_sparql_helper.rb +16 -0
  79. data/tests/ts_pho.rb +2 -1
  80. metadata +20 -3
@@ -92,8 +92,8 @@ Captures information about a mapped datatype from a Field Predicate Map
92
92
  <h3 class="section-bar">Methods</h3>
93
93
 
94
94
  <div class="name-list">
95
- <a href="#M000120">new</a>&nbsp;&nbsp;
96
- <a href="#M000121">to_rdf</a>&nbsp;&nbsp;
95
+ <a href="#M000138">new</a>&nbsp;&nbsp;
96
+ <a href="#M000139">to_rdf</a>&nbsp;&nbsp;
97
97
  </div>
98
98
  </div>
99
99
 
@@ -133,7 +133,7 @@ Short name for the property
133
133
  <td class="context-item-name">property_uri</td>
134
134
  <td class="context-item-value">&nbsp;[R]&nbsp;</td>
135
135
  <td class="context-item-desc">
136
- RDF predicate URI for the mapped property
136
+ <a href="RDF.html">RDF</a> predicate URI for the mapped property
137
137
 
138
138
  </td>
139
139
  </tr>
@@ -155,19 +155,19 @@ URI for this mapping
155
155
  <div id="methods">
156
156
  <h3 class="section-bar">Public Class methods</h3>
157
157
 
158
- <div id="method-M000120" class="method-detail">
159
- <a name="M000120"></a>
158
+ <div id="method-M000138" class="method-detail">
159
+ <a name="M000138"></a>
160
160
 
161
161
  <div class="method-heading">
162
- <a href="#M000120" class="method-signature">
162
+ <a href="#M000138" class="method-signature">
163
163
  <span class="method-name">new</span><span class="method-args">(uri, property_uri, name, analyzer=nil)</span>
164
164
  </a>
165
165
  </div>
166
166
 
167
167
  <div class="method-description">
168
168
  <p><a class="source-toggle" href="#"
169
- onclick="toggleCode('M000120-source');return false;">[Source]</a></p>
170
- <div class="method-source-code" id="M000120-source">
169
+ onclick="toggleCode('M000138-source');return false;">[Source]</a></p>
170
+ <div class="method-source-code" id="M000138-source">
171
171
  <pre>
172
172
  <span class="ruby-comment cmt"># File lib/pho/field_predicate_map.rb, line 64</span>
173
173
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">property_uri</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">analyzer</span>=<span class="ruby-keyword kw">nil</span>)
@@ -183,19 +183,19 @@ URI for this mapping
183
183
 
184
184
  <h3 class="section-bar">Public Instance methods</h3>
185
185
 
186
- <div id="method-M000121" class="method-detail">
187
- <a name="M000121"></a>
186
+ <div id="method-M000139" class="method-detail">
187
+ <a name="M000139"></a>
188
188
 
189
189
  <div class="method-heading">
190
- <a href="#M000121" class="method-signature">
190
+ <a href="#M000139" class="method-signature">
191
191
  <span class="method-name">to_rdf</span><span class="method-args">(ns=true)</span>
192
192
  </a>
193
193
  </div>
194
194
 
195
195
  <div class="method-description">
196
196
  <p>
197
- Convert this object into an RDF representation. Generates a simple
198
- rdf:Description, optionally including namespaces
197
+ Convert this object into an <a href="RDF.html">RDF</a> representation.
198
+ Generates a simple rdf:Description, optionally including namespaces
199
199
  </p>
200
200
  <table>
201
201
  <tr><td valign="top">ns:</td><td>include namespace declarations
@@ -203,8 +203,8 @@ rdf:Description, optionally including namespaces
203
203
  </td></tr>
204
204
  </table>
205
205
  <p><a class="source-toggle" href="#"
206
- onclick="toggleCode('M000121-source');return false;">[Source]</a></p>
207
- <div class="method-source-code" id="M000121-source">
206
+ onclick="toggleCode('M000139-source');return false;">[Source]</a></p>
207
+ <div class="method-source-code" id="M000139-source">
208
208
  <pre>
209
209
  <span class="ruby-comment cmt"># File lib/pho/field_predicate_map.rb, line 73</span>
210
210
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_rdf</span>(<span class="ruby-identifier">ns</span>=<span class="ruby-keyword kw">true</span>)
@@ -95,7 +95,7 @@ endpoints and services
95
95
  <div id="class-list">
96
96
  <h3 class="section-bar">Classes and Modules</h3>
97
97
 
98
- Class <a href="Enrichment/ResourceEnricher.html" class="link">Pho::Enrichment::ResourceEnricher</a><br />
98
+ Class <a href="Enrichment/StoreEnricher.html" class="link">Pho::Enrichment::StoreEnricher</a><br />
99
99
 
100
100
  </div>
101
101
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
7
  <head>
8
- <title>Class: Pho::Enrichment::ResourceEnricher</title>
8
+ <title>Class: Pho::Enrichment::StoreEnricher</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
11
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
@@ -50,7 +50,7 @@
50
50
  <table class="header-table">
51
51
  <tr class="top-aligned-row">
52
52
  <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">Pho::Enrichment::ResourceEnricher</td>
53
+ <td class="class-name-in-header">Pho::Enrichment::StoreEnricher</td>
54
54
  </tr>
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
@@ -86,10 +86,10 @@
86
86
  <h3 class="section-bar">Methods</h3>
87
87
 
88
88
  <div class="name-list">
89
- <a href="#M000072">enrich</a>&nbsp;&nbsp;
90
- <a href="#M000070">infer</a>&nbsp;&nbsp;
91
- <a href="#M000071">merge</a>&nbsp;&nbsp;
92
- <a href="#M000069">new</a>&nbsp;&nbsp;
89
+ <a href="#M000075">enrich</a>&nbsp;&nbsp;
90
+ <a href="#M000073">infer</a>&nbsp;&nbsp;
91
+ <a href="#M000074">merge</a>&nbsp;&nbsp;
92
+ <a href="#M000072">new</a>&nbsp;&nbsp;
93
93
  </div>
94
94
  </div>
95
95
 
@@ -129,12 +129,12 @@
129
129
  <div id="methods">
130
130
  <h3 class="section-bar">Public Class methods</h3>
131
131
 
132
- <div id="method-M000070" class="method-detail">
133
- <a name="M000070"></a>
132
+ <div id="method-M000073" class="method-detail">
133
+ <a name="M000073"></a>
134
134
 
135
135
  <div class="method-heading">
136
- <a href="#M000070" class="method-signature">
137
- <span class="method-name">infer</span><span class="method-args">(store, query)</span>
136
+ <a href="#M000073" class="method-signature">
137
+ <span class="method-name">infer</span><span class="method-args">(store, query, &amp;block)</span>
138
138
  </a>
139
139
  </div>
140
140
 
@@ -144,32 +144,38 @@ Enrich a store against itself
144
144
  </p>
145
145
  <p>
146
146
  For the common case where a store needs to be enriched against itself by
147
- inferring <a href="ResourceEnricher.html#M000069">new</a> data from old
148
- using a CONSTRUCT query
147
+ inferring <a href="StoreEnricher.html#M000072">new</a> data from old using
148
+ a CONSTRUCT query
149
149
  </p>
150
- <pre>
151
- store:: the store to be updated
152
- query:: the SPARQL CONSTRUCT query to be used to infer the new data
153
- </pre>
150
+ <table>
151
+ <tr><td valign="top">store:</td><td>the store to be updated
152
+
153
+ </td></tr>
154
+ <tr><td valign="top">query:</td><td>the SPARQL CONSTRUCT query to be used to <a
155
+ href="StoreEnricher.html#M000073">infer</a> the <a
156
+ href="StoreEnricher.html#M000072">new</a> data
157
+
158
+ </td></tr>
159
+ </table>
154
160
  <p><a class="source-toggle" href="#"
155
- onclick="toggleCode('M000070-source');return false;">[Source]</a></p>
156
- <div class="method-source-code" id="M000070-source">
161
+ onclick="toggleCode('M000073-source');return false;">[Source]</a></p>
162
+ <div class="method-source-code" id="M000073-source">
157
163
  <pre>
158
- <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 27</span>
159
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">ResourceEnricher</span>.<span class="ruby-identifier">infer</span>(<span class="ruby-identifier">store</span>, <span class="ruby-identifier">query</span>)
160
- <span class="ruby-identifier">enricher</span> = <span class="ruby-constant">ResourceEnricher</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">store</span>, <span class="ruby-identifier">store</span>.<span class="ruby-identifier">sparql_client</span>() )
161
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">enricher</span>.<span class="ruby-identifier">merge</span>( <span class="ruby-identifier">query</span> )
164
+ <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 28</span>
165
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">StoreEnricher</span>.<span class="ruby-identifier">infer</span>(<span class="ruby-identifier">store</span>, <span class="ruby-identifier">query</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
166
+ <span class="ruby-identifier">enricher</span> = <span class="ruby-constant">StoreEnricher</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">store</span>, <span class="ruby-identifier">store</span>.<span class="ruby-identifier">sparql_client</span>() )
167
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">enricher</span>.<span class="ruby-identifier">merge</span>( <span class="ruby-identifier">query</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
162
168
  <span class="ruby-keyword kw">end</span>
163
169
  </pre>
164
170
  </div>
165
171
  </div>
166
172
  </div>
167
173
 
168
- <div id="method-M000069" class="method-detail">
169
- <a name="M000069"></a>
174
+ <div id="method-M000072" class="method-detail">
175
+ <a name="M000072"></a>
170
176
 
171
177
  <div class="method-heading">
172
- <a href="#M000069" class="method-signature">
178
+ <a href="#M000072" class="method-signature">
173
179
  <span class="method-name">new</span><span class="method-args">(store, sparql_client)</span>
174
180
  </a>
175
181
  </div>
@@ -178,15 +184,20 @@ using a CONSTRUCT query
178
184
  <p>
179
185
  Constructor
180
186
  </p>
181
- <pre>
182
- store:: the store containing resource(s) to enrich
183
- sparql_client:: SparqlClient object to be used as client for retrieving enrichments
184
- </pre>
187
+ <table>
188
+ <tr><td valign="top">store:</td><td>the store containing resource(s) to <a
189
+ href="StoreEnricher.html#M000075">enrich</a>
190
+
191
+ </td></tr>
192
+ <tr><td valign="top">sparql_client:</td><td>SparqlClient object to be used as client for retrieving enrichments
193
+
194
+ </td></tr>
195
+ </table>
185
196
  <p><a class="source-toggle" href="#"
186
- onclick="toggleCode('M000069-source');return false;">[Source]</a></p>
187
- <div class="method-source-code" id="M000069-source">
197
+ onclick="toggleCode('M000072-source');return false;">[Source]</a></p>
198
+ <div class="method-source-code" id="M000072-source">
188
199
  <pre>
189
- <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 15</span>
200
+ <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 16</span>
190
201
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">store</span>, <span class="ruby-identifier">sparql_client</span>)
191
202
  <span class="ruby-ivar">@store</span> = <span class="ruby-identifier">store</span>
192
203
  <span class="ruby-ivar">@sparql_client</span> = <span class="ruby-identifier">sparql_client</span>
@@ -198,12 +209,12 @@ Constructor
198
209
 
199
210
  <h3 class="section-bar">Public Instance methods</h3>
200
211
 
201
- <div id="method-M000072" class="method-detail">
202
- <a name="M000072"></a>
212
+ <div id="method-M000075" class="method-detail">
213
+ <a name="M000075"></a>
203
214
 
204
215
  <div class="method-heading">
205
- <a href="#M000072" class="method-signature">
206
- <span class="method-name">enrich</span><span class="method-args">(locator_query, enrichment_query)</span>
216
+ <a href="#M000075" class="method-signature">
217
+ <span class="method-name">enrich</span><span class="method-args">(locator_query, enrichment_query, callback=nil) {|:query, query_response| ...}</span>
207
218
  </a>
208
219
  </div>
209
220
 
@@ -231,28 +242,110 @@ of the query to the metabox. <a href="../Enrichment.html">Enrichment</a>
231
242
  queries should therefore be CONSTRUCT or DESCRIBE queries. The SPARQL
232
243
  protocol request will be sent with an Accept header of application/rdf+xml
233
244
  </p>
245
+ <p>
246
+ The method supports a callback object that can be provided as an optional
247
+ parameter to the query. If provided then then object should respond to
248
+ either or both of the following methods:
249
+ </p>
250
+ <pre>
251
+ pre_process(rdf_xml)
252
+ post_process(resp, rdf_xml)
253
+ </pre>
254
+ <p>
255
+ The first of these is invoked after each enrichment query has been executed
256
+ on the configured SPARQL endpoint. It is intended to support additional
257
+ filtering or annotation. If the <tt>pre_process</tt> method returns nil,
258
+ then no data will be written to the store, otherwise the return value is
259
+ substituted instead of the original value.
260
+ </p>
261
+ <p>
262
+ The second callback method, <tt>post_process</tt> is called after data has
263
+ been written to the store and provides access to the response from the
264
+ store, and the <a href="../RDF.html">RDF</a>/XML data that had been
265
+ attempted to be stored. As the request may have been un-successful, code
266
+ should check the status on the HTTPMessage parameter.
267
+ </p>
234
268
  <pre>
235
- locator_query:: query to locate resources to be enriched
236
- enrichment_query:: query to be used to enrich the resource
269
+ class MyCallback
270
+ def pre_process(rdf)
271
+ if !should_store?(rdf)
272
+ return nil
273
+ end
274
+ return rdf
275
+ end
276
+ def post_process(resp, rdf)
277
+ puts &quot;Store returned #{resp.status} when storing: #{rdf}&quot;
278
+ end
279
+ end
280
+ callback = MyCallback.new()
281
+ enricher.enrich(&quot;SELECT ?item WHERE { ?item a ex:Class } LIMIT 10&quot;, &quot;DESCRIBE ?item&quot;, callback)
282
+ </pre>
283
+ <p>
284
+ The callback support is primarily intended to support filtering and
285
+ notification of activities. For simple logging purposes, the method also
286
+ supports a block parameter. This is invoked after each enrichment query,
287
+ and each store response. The block can receive two values: the first is a
288
+ symbol (either +:query+ or +:store+) indicating the source of the response,
289
+ and the response object itself. E.g:
290
+ </p>
291
+ <pre>
292
+ enricher.enrich(&quot;SELECT ?item WHERE { ?item a ex:Class } LIMIT 10&quot;, &quot;DESCRIBE ?item&quot;) do |source, resp|
293
+ if source == :query
294
+ puts &quot;Enrichment query returned #{resp.status}&quot;
295
+ else
296
+ puts &quot;Store returned #{resp.status} when storing data&quot;
297
+ end
298
+ end
237
299
  </pre>
300
+ <table>
301
+ <tr><td valign="top">locator_query:</td><td>query to locate resources to be enriched
302
+
303
+ </td></tr>
304
+ <tr><td valign="top">enrichment_query:</td><td>query to be used to <a href="StoreEnricher.html#M000075">enrich</a> the
305
+ resource
306
+
307
+ </td></tr>
308
+ <tr><td valign="top">callback:</td><td>optional callback object
309
+
310
+ </td></tr>
311
+ </table>
238
312
  <p><a class="source-toggle" href="#"
239
- onclick="toggleCode('M000072-source');return false;">[Source]</a></p>
240
- <div class="method-source-code" id="M000072-source">
313
+ onclick="toggleCode('M000075-source');return false;">[Source]</a></p>
314
+ <div class="method-source-code" id="M000075-source">
241
315
  <pre>
242
- <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 62</span>
243
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">enrich</span>(<span class="ruby-identifier">locator_query</span>, <span class="ruby-identifier">enrichment_query</span>)
316
+ <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 108</span>
317
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">enrich</span>(<span class="ruby-identifier">locator_query</span>, <span class="ruby-identifier">enrichment_query</span>, <span class="ruby-identifier">callback</span>=<span class="ruby-keyword kw">nil</span>)
244
318
  <span class="ruby-identifier">results</span> = <span class="ruby-constant">Pho</span><span class="ruby-operator">::</span><span class="ruby-constant">Sparql</span><span class="ruby-operator">::</span><span class="ruby-constant">SparqlHelper</span>.<span class="ruby-identifier">select</span>(<span class="ruby-identifier">locator_query</span>, <span class="ruby-ivar">@store</span>.<span class="ruby-identifier">sparql_client</span>() )
245
319
  <span class="ruby-identifier">bindings</span> = <span class="ruby-constant">Pho</span><span class="ruby-operator">::</span><span class="ruby-constant">Sparql</span><span class="ruby-operator">::</span><span class="ruby-constant">SparqlHelper</span>.<span class="ruby-identifier">results_to_query_bindings</span>(<span class="ruby-identifier">results</span>)
246
320
  <span class="ruby-identifier">bindings</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">binding</span><span class="ruby-operator">|</span>
247
321
  <span class="ruby-identifier">bound_query</span> = <span class="ruby-constant">Pho</span><span class="ruby-operator">::</span><span class="ruby-constant">Sparql</span><span class="ruby-operator">::</span><span class="ruby-constant">SparqlHelper</span>.<span class="ruby-identifier">apply_initial_bindings</span>(<span class="ruby-identifier">enrichment_query</span>, <span class="ruby-identifier">binding</span>)
248
322
 
249
- <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@sparql_client</span>.<span class="ruby-identifier">query</span>(<span class="ruby-identifier">bound_query</span>, <span class="ruby-value str">&quot;application/rdf+xml&quot;</span>)
323
+ <span class="ruby-comment cmt">#TODO counting numbers of requests and responses?</span>
324
+ <span class="ruby-identifier">query_response</span> = <span class="ruby-ivar">@sparql_client</span>.<span class="ruby-identifier">query</span>(<span class="ruby-identifier">bound_query</span>, <span class="ruby-value str">&quot;application/rdf+xml&quot;</span>)
250
325
 
251
- <span class="ruby-comment cmt">#TODO error handling and callbacks </span>
252
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">200</span>
253
- <span class="ruby-identifier">resp</span> = <span class="ruby-ivar">@store</span>.<span class="ruby-identifier">store_data</span>( <span class="ruby-identifier">result</span>.<span class="ruby-identifier">content</span> )
254
- <span class="ruby-keyword kw">end</span>
326
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
327
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">query</span>, <span class="ruby-identifier">query_response</span>
328
+ <span class="ruby-keyword kw">end</span>
255
329
 
330
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query_response</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">200</span>
331
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">query_response</span>.<span class="ruby-identifier">content</span>
332
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">callback</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">callback</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:pre_process</span>)
333
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">callback</span>.<span class="ruby-identifier">pre_process</span>(<span class="ruby-identifier">result</span>)
334
+ <span class="ruby-keyword kw">end</span>
335
+
336
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">nil</span>
337
+ <span class="ruby-identifier">store_response</span> = <span class="ruby-ivar">@store</span>.<span class="ruby-identifier">store_data</span>( <span class="ruby-identifier">result</span> )
338
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">callback</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">callback</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:post_process</span>)
339
+ <span class="ruby-identifier">callback</span>.<span class="ruby-identifier">post_process</span>(<span class="ruby-identifier">store_response</span>, <span class="ruby-identifier">result</span>)
340
+ <span class="ruby-keyword kw">end</span>
341
+
342
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
343
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">store</span>, <span class="ruby-identifier">store_response</span>
344
+ <span class="ruby-keyword kw">end</span>
345
+ <span class="ruby-keyword kw">end</span>
346
+
347
+ <span class="ruby-keyword kw">end</span>
348
+ <span class="ruby-comment cmt">#end each binding</span>
256
349
  <span class="ruby-keyword kw">end</span>
257
350
  <span class="ruby-keyword kw">end</span>
258
351
  </pre>
@@ -260,12 +353,12 @@ protocol request will be sent with an Accept header of application/rdf+xml
260
353
  </div>
261
354
  </div>
262
355
 
263
- <div id="method-M000071" class="method-detail">
264
- <a name="M000071"></a>
356
+ <div id="method-M000074" class="method-detail">
357
+ <a name="M000074"></a>
265
358
 
266
359
  <div class="method-heading">
267
- <a href="#M000071" class="method-signature">
268
- <span class="method-name">merge</span><span class="method-args">(query)</span>
360
+ <a href="#M000074" class="method-signature">
361
+ <span class="method-name">merge</span><span class="method-args">(query) {|resp, data| ...}</span>
269
362
  </a>
270
363
  </div>
271
364
 
@@ -274,20 +367,27 @@ protocol request will be sent with an Accept header of application/rdf+xml
274
367
  Execute the provided query against the configured SPARQL endpoint and store
275
368
  the results in the Platform <a href="../Store.html">Store</a>
276
369
  </p>
277
- <pre>
278
- query:: the SPARQL CONSTRUCT or DESCRIBE query to execute
279
- </pre>
370
+ <table>
371
+ <tr><td valign="top">query:</td><td>the SPARQL CONSTRUCT or DESCRIBE query to execute
372
+
373
+ </td></tr>
374
+ </table>
280
375
  <p><a class="source-toggle" href="#"
281
- onclick="toggleCode('M000071-source');return false;">[Source]</a></p>
282
- <div class="method-source-code" id="M000071-source">
376
+ onclick="toggleCode('M000074-source');return false;">[Source]</a></p>
377
+ <div class="method-source-code" id="M000074-source">
283
378
  <pre>
284
- <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 36</span>
379
+ <span class="ruby-comment cmt"># File lib/pho/enrichment.rb, line 37</span>
285
380
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">merge</span>(<span class="ruby-identifier">query</span>)
286
381
  <span class="ruby-identifier">resp</span> = <span class="ruby-ivar">@sparql_client</span>.<span class="ruby-identifier">query</span>( <span class="ruby-identifier">query</span>, <span class="ruby-value str">&quot;application/rdf+xml&quot;</span> )
287
382
  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">!=</span> <span class="ruby-value">200</span>
288
383
  <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unable to execute query. Response: #{resp.status} #{resp.reason} #{resp.content}&quot;</span>
289
384
  <span class="ruby-keyword kw">end</span>
290
- <span class="ruby-identifier">resp</span> = <span class="ruby-ivar">@store</span>.<span class="ruby-identifier">store_data</span>( <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">content</span> )
385
+ <span class="ruby-identifier">data</span> = <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">content</span>
386
+ <span class="ruby-identifier">resp</span> = <span class="ruby-ivar">@store</span>.<span class="ruby-identifier">store_data</span>( <span class="ruby-identifier">data</span> )
387
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
388
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">resp</span>, <span class="ruby-identifier">data</span>
389
+ <span class="ruby-keyword kw">end</span>
390
+
291
391
  <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resp</span>
292
392
  <span class="ruby-keyword kw">end</span>
293
393
  </pre>
@@ -92,12 +92,12 @@ Simple mechanism for managing etags
92
92
  <h3 class="section-bar">Methods</h3>
93
93
 
94
94
  <div class="name-list">
95
- <a href="#M000174">add</a>&nbsp;&nbsp;
96
- <a href="#M000175">add_from_response</a>&nbsp;&nbsp;
97
- <a href="#M000176">get</a>&nbsp;&nbsp;
98
- <a href="#M000177">has_tag?</a>&nbsp;&nbsp;
99
- <a href="#M000172">new</a>&nbsp;&nbsp;
100
- <a href="#M000173">save</a>&nbsp;&nbsp;
95
+ <a href="#M000194">add</a>&nbsp;&nbsp;
96
+ <a href="#M000195">add_from_response</a>&nbsp;&nbsp;
97
+ <a href="#M000196">get</a>&nbsp;&nbsp;
98
+ <a href="#M000197">has_tag?</a>&nbsp;&nbsp;
99
+ <a href="#M000192">new</a>&nbsp;&nbsp;
100
+ <a href="#M000193">save</a>&nbsp;&nbsp;
101
101
  </div>
102
102
  </div>
103
103
 
@@ -137,19 +137,19 @@ Simple mechanism for managing etags
137
137
  <div id="methods">
138
138
  <h3 class="section-bar">Public Class methods</h3>
139
139
 
140
- <div id="method-M000172" class="method-detail">
141
- <a name="M000172"></a>
140
+ <div id="method-M000192" class="method-detail">
141
+ <a name="M000192"></a>
142
142
 
143
143
  <div class="method-heading">
144
- <a href="#M000172" class="method-signature">
144
+ <a href="#M000192" class="method-signature">
145
145
  <span class="method-name">new</span><span class="method-args">(file = nil)</span>
146
146
  </a>
147
147
  </div>
148
148
 
149
149
  <div class="method-description">
150
150
  <p><a class="source-toggle" href="#"
151
- onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
152
- <div class="method-source-code" id="M000172-source">
151
+ onclick="toggleCode('M000192-source');return false;">[Source]</a></p>
152
+ <div class="method-source-code" id="M000192-source">
153
153
  <pre>
154
154
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 11</span>
155
155
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">file</span> = <span class="ruby-keyword kw">nil</span>)
@@ -167,19 +167,19 @@ Simple mechanism for managing etags
167
167
 
168
168
  <h3 class="section-bar">Public Instance methods</h3>
169
169
 
170
- <div id="method-M000174" class="method-detail">
171
- <a name="M000174"></a>
170
+ <div id="method-M000194" class="method-detail">
171
+ <a name="M000194"></a>
172
172
 
173
173
  <div class="method-heading">
174
- <a href="#M000174" class="method-signature">
174
+ <a href="#M000194" class="method-signature">
175
175
  <span class="method-name">add</span><span class="method-args">(uri, tag)</span>
176
176
  </a>
177
177
  </div>
178
178
 
179
179
  <div class="method-description">
180
180
  <p><a class="source-toggle" href="#"
181
- onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
182
- <div class="method-source-code" id="M000174-source">
181
+ onclick="toggleCode('M000194-source');return false;">[Source]</a></p>
182
+ <div class="method-source-code" id="M000194-source">
183
183
  <pre>
184
184
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 34</span>
185
185
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">tag</span>)
@@ -193,19 +193,19 @@ Simple mechanism for managing etags
193
193
  </div>
194
194
  </div>
195
195
 
196
- <div id="method-M000175" class="method-detail">
197
- <a name="M000175"></a>
196
+ <div id="method-M000195" class="method-detail">
197
+ <a name="M000195"></a>
198
198
 
199
199
  <div class="method-heading">
200
- <a href="#M000175" class="method-signature">
200
+ <a href="#M000195" class="method-signature">
201
201
  <span class="method-name">add_from_response</span><span class="method-args">(uri, response)</span>
202
202
  </a>
203
203
  </div>
204
204
 
205
205
  <div class="method-description">
206
206
  <p><a class="source-toggle" href="#"
207
- onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
208
- <div class="method-source-code" id="M000175-source">
207
+ onclick="toggleCode('M000195-source');return false;">[Source]</a></p>
208
+ <div class="method-source-code" id="M000195-source">
209
209
  <pre>
210
210
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 41</span>
211
211
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_from_response</span>(<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">response</span>)
@@ -216,19 +216,19 @@ Simple mechanism for managing etags
216
216
  </div>
217
217
  </div>
218
218
 
219
- <div id="method-M000176" class="method-detail">
220
- <a name="M000176"></a>
219
+ <div id="method-M000196" class="method-detail">
220
+ <a name="M000196"></a>
221
221
 
222
222
  <div class="method-heading">
223
- <a href="#M000176" class="method-signature">
223
+ <a href="#M000196" class="method-signature">
224
224
  <span class="method-name">get</span><span class="method-args">(uri)</span>
225
225
  </a>
226
226
  </div>
227
227
 
228
228
  <div class="method-description">
229
229
  <p><a class="source-toggle" href="#"
230
- onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
231
- <div class="method-source-code" id="M000176-source">
230
+ onclick="toggleCode('M000196-source');return false;">[Source]</a></p>
231
+ <div class="method-source-code" id="M000196-source">
232
232
  <pre>
233
233
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 45</span>
234
234
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">uri</span>)
@@ -239,19 +239,19 @@ Simple mechanism for managing etags
239
239
  </div>
240
240
  </div>
241
241
 
242
- <div id="method-M000177" class="method-detail">
243
- <a name="M000177"></a>
242
+ <div id="method-M000197" class="method-detail">
243
+ <a name="M000197"></a>
244
244
 
245
245
  <div class="method-heading">
246
- <a href="#M000177" class="method-signature">
246
+ <a href="#M000197" class="method-signature">
247
247
  <span class="method-name">has_tag?</span><span class="method-args">(uri)</span>
248
248
  </a>
249
249
  </div>
250
250
 
251
251
  <div class="method-description">
252
252
  <p><a class="source-toggle" href="#"
253
- onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
254
- <div class="method-source-code" id="M000177-source">
253
+ onclick="toggleCode('M000197-source');return false;">[Source]</a></p>
254
+ <div class="method-source-code" id="M000197-source">
255
255
  <pre>
256
256
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 49</span>
257
257
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">has_tag?</span>(<span class="ruby-identifier">uri</span>)
@@ -262,19 +262,19 @@ Simple mechanism for managing etags
262
262
  </div>
263
263
  </div>
264
264
 
265
- <div id="method-M000173" class="method-detail">
266
- <a name="M000173"></a>
265
+ <div id="method-M000193" class="method-detail">
266
+ <a name="M000193"></a>
267
267
 
268
268
  <div class="method-heading">
269
- <a href="#M000173" class="method-signature">
269
+ <a href="#M000193" class="method-signature">
270
270
  <span class="method-name">save</span><span class="method-args">(other=nil)</span>
271
271
  </a>
272
272
  </div>
273
273
 
274
274
  <div class="method-description">
275
275
  <p><a class="source-toggle" href="#"
276
- onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
277
- <div class="method-source-code" id="M000173-source">
276
+ onclick="toggleCode('M000193-source');return false;">[Source]</a></p>
277
+ <div class="method-source-code" id="M000193-source">
278
278
  <pre>
279
279
  <span class="ruby-comment cmt"># File lib/pho/etags.rb, line 20</span>
280
280
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save</span>(<span class="ruby-identifier">other</span>=<span class="ruby-keyword kw">nil</span>)