sparql 3.1.3 → 3.1.4
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.
- checksums.yaml +4 -4
- data/README.md +8 -7
- data/VERSION +1 -1
- data/bin/sparql +20 -11
- data/lib/sparql.rb +3 -6
- data/lib/sparql/algebra/expression.rb +35 -19
- data/lib/sparql/algebra/extensions.rb +40 -19
- data/lib/sparql/algebra/operator.rb +1 -1
- data/lib/sparql/algebra/operator/dataset.rb +1 -1
- data/lib/sparql/algebra/operator/delete.rb +2 -2
- data/lib/sparql/algebra/operator/delete_where.rb +1 -1
- data/lib/sparql/algebra/operator/graph.rb +1 -1
- data/lib/sparql/algebra/operator/insert.rb +1 -1
- data/lib/sparql/algebra/operator/with.rb +1 -1
- data/lib/sparql/grammar/meta.rb +1422 -1028
- data/lib/sparql/grammar/parser11.rb +22 -36
- data/lib/sparql/grammar/terminals11.rb +1 -0
- data/lib/sparql/results.rb +17 -9
- metadata +14 -34
@@ -586,7 +586,7 @@ module SPARQL::Grammar
|
|
586
586
|
production(:GroupGraphPatternSub) do |input, data, callback|
|
587
587
|
debug("GroupGraphPatternSub") {"q #{data[:query].inspect}"}
|
588
588
|
|
589
|
-
res = case data[:query].length
|
589
|
+
res = case Array(data[:query]).length
|
590
590
|
when 0 then SPARQL::Algebra::Operator::BGP.new
|
591
591
|
when 1 then data[:query].first
|
592
592
|
when 2
|
@@ -867,9 +867,17 @@ module SPARQL::Grammar
|
|
867
867
|
add_prod_datum(:path, data[:path])
|
868
868
|
end
|
869
869
|
|
870
|
-
# [
|
870
|
+
# [177] AnnotationPattern ::= '{|' PropertyListNotEmpty '|}'
|
871
|
+
start_production(:AnnotationPattern) do |input, data, callback|
|
872
|
+
data[:TriplesNode] = prod_data[:pattern].first
|
873
|
+
end
|
874
|
+
production(:AnnotationPattern) do |input, data, callback|
|
875
|
+
add_prod_datum(:pattern, data[:pattern])
|
876
|
+
end
|
877
|
+
|
878
|
+
# [80] Object ::= GraphNode | EmbTP
|
871
879
|
production(:Object) do |input, data, callback|
|
872
|
-
object = data[:
|
880
|
+
object = data[:GraphNode] || data[:EmbTP]
|
873
881
|
if object
|
874
882
|
if prod_data[:Verb]
|
875
883
|
add_pattern(:Object, subject: prod_data[:Subject], predicate: prod_data[:Verb], object: object)
|
@@ -1114,11 +1122,6 @@ module SPARQL::Grammar
|
|
1114
1122
|
data.values.each {|v| add_prod_datum(:VarOrIri, v)}
|
1115
1123
|
end
|
1116
1124
|
|
1117
|
-
# [107s] VarOrBlankNodeOrIriOrEmbTP ::= Var | BlankNode| iri | EmbTP
|
1118
|
-
production(:VarOrBlankNodeOrIriOrEmbTP) do |input, data, callback|
|
1119
|
-
data.values.each {|v| add_prod_datum(:VarOrBlankNodeOrIriOrEmbTP, v)}
|
1120
|
-
end
|
1121
|
-
|
1122
1125
|
# [109] GraphTerm ::= iri | RDFLiteral | NumericLiteral
|
1123
1126
|
# | BooleanLiteral | BlankNode | NIL
|
1124
1127
|
production(:GraphTerm) do |input, data, callback|
|
@@ -1129,17 +1132,22 @@ module SPARQL::Grammar
|
|
1129
1132
|
data[:NIL])
|
1130
1133
|
end
|
1131
1134
|
|
1132
|
-
# [
|
1135
|
+
# [174] EmbTP ::= '<<' EmbSubjectOrObject Verb EmbSubjectOrObject '>>'
|
1133
1136
|
production(:EmbTP) do |input, data, callback|
|
1134
|
-
subject = data[:
|
1137
|
+
subject, object = data[:EmbSubjectOrObject]
|
1135
1138
|
predicate = data[:Verb]
|
1136
|
-
object = data[:VarOrTerm]
|
1137
1139
|
add_pattern(:EmbTP,
|
1138
1140
|
subject: subject,
|
1139
1141
|
predicate: predicate,
|
1140
1142
|
object: object)
|
1141
1143
|
end
|
1142
1144
|
|
1145
|
+
# [175] EmbSubjectOrObject ::= Var | BlankNode | iri | RDFLiteral
|
1146
|
+
# | NumericLiteral | BooleanLiteral | EmbTP
|
1147
|
+
production(:EmbSubjectOrObject) do |input, data, callback|
|
1148
|
+
data.values.each {|v| add_prod_datum(:EmbSubjectOrObject, v)}
|
1149
|
+
end
|
1150
|
+
|
1143
1151
|
# [110] Expression ::= ConditionalOrExpression
|
1144
1152
|
production(:Expression) do |input, data, callback|
|
1145
1153
|
add_prod_datum(:Expression, data[:Expression])
|
@@ -1479,10 +1487,8 @@ module SPARQL::Grammar
|
|
1479
1487
|
# definitions.
|
1480
1488
|
# @option options [Boolean] :validate (false)
|
1481
1489
|
# whether to validate the parsed statements and values
|
1482
|
-
# @option options [
|
1483
|
-
#
|
1484
|
-
# @option options [Boolean] :debug
|
1485
|
-
# Detailed debug output
|
1490
|
+
# @option options [Logger, #write, #<<] :logger
|
1491
|
+
# Record error/info/debug output
|
1486
1492
|
# @yield [parser] `self`
|
1487
1493
|
# @yieldparam [SPARQL::Grammar::Parser] parser
|
1488
1494
|
# @yieldreturn [void] ignored
|
@@ -1494,10 +1500,6 @@ module SPARQL::Grammar
|
|
1494
1500
|
end
|
1495
1501
|
@input.encode!(Encoding::UTF_8) if @input.respond_to?(:encode!)
|
1496
1502
|
@options = {anon_base: "b0", validate: false}.merge(options)
|
1497
|
-
@options[:debug] ||= case
|
1498
|
-
when options[:progress] then 2
|
1499
|
-
when options[:validate] then 1
|
1500
|
-
end
|
1501
1503
|
|
1502
1504
|
debug("base IRI") {base_uri.inspect}
|
1503
1505
|
debug("validate") {validate?.inspect}
|
@@ -1558,23 +1560,7 @@ module SPARQL::Grammar
|
|
1558
1560
|
follow: FOLLOW,
|
1559
1561
|
whitespace: WS,
|
1560
1562
|
**@options
|
1561
|
-
)
|
1562
|
-
case context
|
1563
|
-
when :trace
|
1564
|
-
level, lineno, depth, *args = data
|
1565
|
-
message = args.to_sse
|
1566
|
-
d_str = depth > 100 ? ' ' * 100 + '+' : ' ' * depth
|
1567
|
-
str = "[#{lineno}](#{level})#{d_str}#{message}".chop
|
1568
|
-
case @options[:debug]
|
1569
|
-
when Array
|
1570
|
-
@options[:debug] << str unless level > 2
|
1571
|
-
when TrueClass
|
1572
|
-
$stderr.puts str
|
1573
|
-
when Integer
|
1574
|
-
$stderr.puts(str) if level <= @options[:debug]
|
1575
|
-
end
|
1576
|
-
end
|
1577
|
-
end
|
1563
|
+
)
|
1578
1564
|
|
1579
1565
|
# The last thing on the @prod_data stack is the result
|
1580
1566
|
@result = case
|
data/lib/sparql/results.rb
CHANGED
@@ -34,9 +34,9 @@ module SPARQL
|
|
34
34
|
{
|
35
35
|
type: 'triple',
|
36
36
|
value: {
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
subject: format.call(value.subject),
|
38
|
+
predicate: format.call(value.predicate),
|
39
|
+
object: format.call(value.object)
|
40
40
|
}
|
41
41
|
}
|
42
42
|
end
|
@@ -81,9 +81,9 @@ module SPARQL
|
|
81
81
|
end
|
82
82
|
when RDF::Statement
|
83
83
|
xml.triple do
|
84
|
-
xml.
|
85
|
-
xml.
|
86
|
-
xml.
|
84
|
+
xml.subject {format.call(s.subject)}
|
85
|
+
xml.predicate {format.call(s.predicate)}
|
86
|
+
xml.object {format.call(s.object)}
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -140,9 +140,8 @@ module SPARQL
|
|
140
140
|
# Generate Solutions as CSV
|
141
141
|
# @return [String]
|
142
142
|
# @see https://www.w3.org/TR/2013/REC-sparql11-results-csv-tsv-20130321/
|
143
|
-
def to_csv
|
143
|
+
def to_csv(bnode_map: {})
|
144
144
|
require 'csv' unless defined?(::CSV)
|
145
|
-
bnode_map = {}
|
146
145
|
bnode_gen = "_:a"
|
147
146
|
CSV.generate(row_sep: "\r\n") do |csv|
|
148
147
|
csv << variable_names.to_a
|
@@ -155,6 +154,10 @@ module SPARQL
|
|
155
154
|
bnode_gen = bnode_gen.succ
|
156
155
|
this
|
157
156
|
end
|
157
|
+
when RDF::Statement
|
158
|
+
RDF::Query::Solutions(
|
159
|
+
RDF::Query::Solution.new(subject: term.subject, predicate: term.predicate, object: term.object)
|
160
|
+
).to_csv(bnode_map: bnode_map).split.last.strip
|
158
161
|
else
|
159
162
|
solution[n].to_s.strip
|
160
163
|
end
|
@@ -175,10 +178,15 @@ module SPARQL
|
|
175
178
|
case term = solution[n]
|
176
179
|
when RDF::Literal::Integer, RDF::Literal::Decimal, RDF::Literal::Double
|
177
180
|
term.canonicalize.to_s
|
181
|
+
when RDF::Statement
|
182
|
+
emb_stmt = RDF::Query::Solutions(
|
183
|
+
RDF::Query::Solution.new(subject: term.subject, predicate: term.predicate, object: term.object)
|
184
|
+
).to_tsv.split("\n").last.strip
|
185
|
+
emb_stmt.gsub(/[\t\n\r]/, "\t" => '\t', "\n" => '\n', "\r" => '\r')
|
178
186
|
when nil
|
179
187
|
""
|
180
188
|
else
|
181
|
-
RDF::NTriples.serialize(term).strip
|
189
|
+
RDF::NTriples.serialize(term).strip.gsub(/[\t\n\r]/, "\t" => '\t', "\n" => '\n', "\r" => '\r')
|
182
190
|
end
|
183
191
|
end.join("\t")
|
184
192
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-12-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '3.1'
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 3.1.
|
23
|
+
version: 3.1.8
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '3.1'
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.1.
|
33
|
+
version: 3.1.8
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rdf-aggregate-repo
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,16 +49,16 @@ dependencies:
|
|
49
49
|
name: ebnf
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.1'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.1'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: builder
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,48 +177,28 @@ dependencies:
|
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: '3.
|
181
|
-
type: :development
|
182
|
-
prerelease: false
|
183
|
-
version_requirements: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '3.0'
|
188
|
-
- !ruby/object:Gem::Dependency
|
189
|
-
name: open-uri-cached
|
190
|
-
requirement: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - "~>"
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0.0'
|
195
|
-
- - ">="
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: 0.0.5
|
180
|
+
version: '3.1'
|
198
181
|
type: :development
|
199
182
|
prerelease: false
|
200
183
|
version_requirements: !ruby/object:Gem::Requirement
|
201
184
|
requirements:
|
202
185
|
- - "~>"
|
203
186
|
- !ruby/object:Gem::Version
|
204
|
-
version: '
|
205
|
-
- - ">="
|
206
|
-
- !ruby/object:Gem::Version
|
207
|
-
version: 0.0.5
|
187
|
+
version: '3.1'
|
208
188
|
- !ruby/object:Gem::Dependency
|
209
189
|
name: rspec
|
210
190
|
requirement: !ruby/object:Gem::Requirement
|
211
191
|
requirements:
|
212
192
|
- - "~>"
|
213
193
|
- !ruby/object:Gem::Version
|
214
|
-
version: '3.
|
194
|
+
version: '3.10'
|
215
195
|
type: :development
|
216
196
|
prerelease: false
|
217
197
|
version_requirements: !ruby/object:Gem::Requirement
|
218
198
|
requirements:
|
219
199
|
- - "~>"
|
220
200
|
- !ruby/object:Gem::Version
|
221
|
-
version: '3.
|
201
|
+
version: '3.10'
|
222
202
|
- !ruby/object:Gem::Dependency
|
223
203
|
name: rspec-its
|
224
204
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,14 +219,14 @@ dependencies:
|
|
239
219
|
requirements:
|
240
220
|
- - "~>"
|
241
221
|
- !ruby/object:Gem::Version
|
242
|
-
version: 0.9
|
222
|
+
version: '0.9'
|
243
223
|
type: :development
|
244
224
|
prerelease: false
|
245
225
|
version_requirements: !ruby/object:Gem::Requirement
|
246
226
|
requirements:
|
247
227
|
- - "~>"
|
248
228
|
- !ruby/object:Gem::Version
|
249
|
-
version: 0.9
|
229
|
+
version: '0.9'
|
250
230
|
description: |2-
|
251
231
|
|
252
232
|
Implements SPARQL grammar parsing to SPARQL Algebra, SPARQL Algebra processing
|