/
issue7.rb
executable file
·57 lines (49 loc) · 1.72 KB
/
issue7.rb
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
#!/usr/bin/env ruby
# encoding: utf-8
require 'rdf'
require 'rdf/turtle'
require 'sparql'
graph = RDF::Graph.new 'urn:graph1'
reader = RDF::Turtle::Reader.new <<'TTL'
@prefix ex: <urn:example#>.
ex:Subject1 a ex:MyClass;
ex:pred1 'Predicate 1';
ex:pred2 'Predicate 2';
ex:pred3 'Predicate 3';
ex:pred4 'Predicate 4';
ex:pred5 'Predicate 5';
ex:pred6 'Predicate 6';
ex:pred7 'Predicate 7'.
TTL
reader.each_statement {|stmt| graph << stmt }
solutions = ::SPARQL.execute(<<-'QRY', graph)
PREFIX ex: <urn:example#>
SELECT ?subj ?pred ?obj
WHERE {
?subj ?pred ?obj . {
{ ?subj ex:pred1 ?obj } UNION
{ ?subj ex:pred2 ?obj } UNION
{ ?subj ex:pred3 ?obj } UNION
{ ?subj ex:pred4 ?obj } UNION
{ ?subj ex:pred5 ?obj } UNION
{ ?subj ex:pred6 ?obj } UNION
{ ?subj ex:pred7 ?obj }
}
}
QRY
# Print out solutions
solutions.each do |sln|
puts sln.to_h.inspect
end
### Output
#> :subj=>urn:example#Subject1, :obj=>"Predicate 1", :pred=>urn:example#pred1
#> :subj=>urn:example#Subject1, :obj=>"Predicate 2", :pred=>urn:example#pred2
#> :subj=>urn:example#Subject1, :obj=>"Predicate 3", :pred=>urn:example#pred3
### Output expected
#> :subj=>urn:example#Subject1, :obj=>"Predicate 1", :pred=>urn:example#pred1
#> :subj=>urn:example#Subject1, :obj=>"Predicate 2", :pred=>urn:example#pred2
#> :subj=>urn:example#Subject1, :obj=>"Predicate 3", :pred=>urn:example#pred3
#> :subj=>urn:example#Subject1, :obj=>"Predicate 4", :pred=>urn:example#pred4
#> :subj=>urn:example#Subject1, :obj=>"Predicate 5", :pred=>urn:example#pred5
#> :subj=>urn:example#Subject1, :obj=>"Predicate 6", :pred=>urn:example#pred6
#> :subj=>urn:example#Subject1, :obj=>"Predicate 7", :pred=>urn:example#pred7