-
Notifications
You must be signed in to change notification settings - Fork 1
/
queryingPaths.sh
321 lines (277 loc) · 10.7 KB
/
queryingPaths.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#! /bin/bash
# import/query examples demonstrate the synthetic use cases.
set -e
if [[ -z $STORE_HOST ]]; then source ./define.sh; fi
curl_clear_repository_content ;
curl -v -X PUT https://${STORE_HOST}/seg/test/service -H "Content-Type: application/trig" -u ":${STORE_TOKEN}" \
--data-binary @- <<EOF
@base <http://dydra.com/> .
@prefix : <http://example.org/> .
@prefix nng: <http://nested-named-graph.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:Z {
:Y {
:X {
:Dog :eats :Fish .
THIS :says :Alice ;
nng:domain [ :name "Dodger" ]
} :says :Bob ;
:believes :Ben .
:Goat :has :Ideas .
:Beatrice :claims {" :Jake :knows :Larry .
:Larry a :Star . "} .
} :says :Carol ;
:believes :Curt ;
nng:tree :Example .
} :says :Zarathustra ;
:source :Source_1 .
EOF
curl -X POST https://${STORE_HOST}/seg/test/sparql -H "Content-Type: application/sparql-query" -H "Accept: application/sparql-results+json" \
-u ":${STORE_TOKEN}" \
--data-binary @- -o $RESULTS_OUTPUT <<EOF
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?who
from included nng:NestedGraph
where {
{ :Dog :eats :Fish . } :says ?who .
}
EOF
fgrep -i true $RESULTS_OUTPUT
cat > /dev/null <<EOF
#|
1) who *says* ':Dog :eats :Fish .' ?
> :Alice # give me only the result(s) from the THIS level
> :Alice :Bob :Carol :Zarathustra # give me results on all levels of nesting
> :Alice :Bob # give me results from the first n=2 levels of nesting
# nesting level count starts with THIS
|#
;;; below, follows a transcript of a listener internal to the query processor.
;;; this can eventually be transformed into remote requests according to the pattern, above.
(test-sparql "select ?s ?p ?o ?g
where {
{?s ?p ?o } union {graph ?g {?s ?p ?o}}
}"
:repository-id "seg/test")
;;; show the embeddings
(test-sparql "
prefix nng: <http://nested-named-graph.org/>
select ?s ?p ?o
where {
{graph nng:embeddings {?s ?p ?o}}
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
s,p,o
urn:dydra:default,http://nested-named-graph.org/transcludes,http://example.org/Z
http://example.org/Z,http://nested-named-graph.org/transcludes,http://example.org/Y
http://example.org/Y,http://nested-named-graph.org/records,_:termgraph-5
http://example.org/Y,http://nested-named-graph.org/transcludes,http://example.org/X
;;; > :Alice # give me only the result(s) from the THIS level
;;; produce the sisngle :says which is in that graph
;;; operate on the graph closure from the default graph root
;;; this include a spurious binding for the graph name
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?who
from included nng:NestedGraph
where {
{ :Dog :eats :Fish . } :says ?who .
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
?BGP7,who
http://example.org/X,http://example.org/Alice
;;; > :Alice :Bob :Carol :Zarathustra # give me results on all levels of nesting
;;; is more complex
;;; produce the immediate references intra- and inter-graph
;;; operate on all graphs as named (including the default graph)
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what ?who ?where
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph ?where { ?what :says ?who . } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what,who,where
http://example.org/X,http://example.org/Bob,http://example.org/Y
http://example.org/X,http://example.org/Alice,http://example.org/X
;;; produce all pronouncements
;;; operate on all graphs as named (including the default graph)
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what ?root
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes* ?what . } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what,root
http://example.org/X,http://example.org/X
http://example.org/X,http://example.org/Y
http://example.org/X,urn:dydra:default
http://example.org/X,http://example.org/Z
;;; extend it with the orator in each venu
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what ?root ?venue ?orator
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes* ?what . } }
{ graph ?venue { ?root :says ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what,root,venue,orator
http://example.org/X,http://example.org/X,http://example.org/Y,http://example.org/Bob
http://example.org/X,http://example.org/X,http://example.org/X,http://example.org/Alice
http://example.org/X,http://example.org/Y,http://example.org/Z,http://example.org/Carol
http://example.org/X,http://example.org/Z,urn:dydra:default,http://example.org/Zarathustra
;;; reduce it to the orator
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?orator
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes* ?what . } }
{ graph ?venue { ?root :says ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
orator
http://example.org/Bob
http://example.org/Alice
http://example.org/Carol
http://example.org/Zarathustra
;;; > :Alice :Bob # give me results from the first n=2 levels of nesting
;;; # nesting level count starts with THIS
;;; this was already produced be the query which referred to just the { :Dog :eats :Fish . } graph
;;; it can be done explicitly by limiting the embedding path length
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what ?root ?orator
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes{0,1} ?what . } }
{ graph ?root { ?about :says ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what,root,orator
http://example.org/X,http://example.org/X,http://example.org/Alice
http://example.org/X,http://example.org/Y,http://example.org/Bob
#|
2) who *believes* ':Dog :eats :Fish .' ?
> # give me only the result(s) from the THIS level
> :Ben :Curt # give me results on all levels of nesting
> :Ben # give me results from the first n=2 levels of nesting
# nesting level count starts with THIS
|#
;;; > :Ben :Curt # give me results on all levels of nesting
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?orator
from named all
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes* ?what . } }
{ graph ?venue { ?root :believes ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
orator
http://example.org/Ben
http://example.org/Curt
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?orator
from included nng:NestedGraph
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph nng:embeddings { ?root nng:transcludes ?what . } }
{ graph ?venue { ?root :believes ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
orator
http://example.org/Curt
;;; > :Ben # give me results from the first n=2 levels of nesting
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?orator
from included nng:NestedGraph
where {
{ graph ?what { :Dog :eats :Fish . } }
{ graph ?venue { ?what :believes ?orator } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
orator
http://example.org/Ben
#|
3) in which graph(s) occurs ':Goat :has ?o' ?
> # give me only results annotated with THIS
> :Y # give me only the nearest graph
> :Y :Z # give me all enclosing graphs (Olaf's case 3)
# BUT not the DEFAULT graph, because :Z is not nested
# in the default graph
# would you agree?
# or does that run counter your implementation?
|#
;;; > # give me only results annotated with THIS
;;; does not exist for :Goat :has ?o
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what
where {
{ graph ?what { :Goat :has ?o . ?what ?annotated ?with} }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what
;;; > :Y # give me only the nearest graph
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?what
where {
{ graph ?what { :Goat :has ?o . } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)
what
http://example.org/Y
;;; > :Y :Z # give me all enclosing graphs (Olaf's case 3)
(test-sparql "
prefix : <http://example.org/>
prefix nng: <http://nested-named-graph.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select distinct ?what ?root
where {
{ graph ?what { :Goat :has ?o . } }
{ graph nng:embeddings { ?root nng:transcludes* ?what . } }
}"
:repository-id "seg/test" :response-content-type mime:text/csv)what,root
http://example.org/Y,http://example.org/Y
http://example.org/Y,urn:dydra:default
http://example.org/Y,http://example.org/Z
EOF