lib/sparql/grammar/parser11.rb in sparql-1.99.1 vs lib/sparql/grammar/parser11.rb in sparql-2.0.0.beta1
- old
+ new
@@ -4,11 +4,11 @@
module SPARQL::Grammar
##
# A parser for the SPARQL 1.1 grammar.
#
- # @see http://www.w3.org/TR/rdf-sparql-query/#grammar
+ # @see http://www.w3.org/TR/sparql11-query/#grammar
# @see http://en.wikipedia.org/wiki/LR_parser
class Parser
include SPARQL::Grammar::Meta
include SPARQL::Grammar::Terminals
include EBNF::LL1::Parser
@@ -488,23 +488,23 @@
start_production(:DeleteData) do |input, data, callback|
# Generate BNodes instead of non-distinguished variables. BNodes are not legal, but this will generate them rather than non-distinguished variables so they can be detected.
self.gen_bnodes
end
production(:DeleteData) do |input, data, callback|
- raise Error, "DeleteData contains BNode operands: #{data[:pattern].to_sse}" if data[:pattern].first.node?
- input[:update_op] = SPARQL::Algebra::Expression(:deleteData, data[:pattern])
+ raise Error, "DeleteData contains BNode operands: #{data[:pattern].to_sse}" if Array(data[:pattern]).any?(&:node?)
+ input[:update_op] = SPARQL::Algebra::Expression(:deleteData, Array(data[:pattern]))
end
# [40] DeleteWhere ::= "DELETE WHERE" QuadPattern
start_production(:DeleteWhere) do |input, data, callback|
# Generate BNodes instead of non-distinguished variables. BNodes are not legal, but this will generate them rather than non-distinguished variables so they can be detected.
self.gen_bnodes
end
production(:DeleteWhere) do |input, data, callback|
- raise Error, "DeleteWhere contains BNode operands: #{data[:pattern].to_sse}" if data[:pattern].first.node?
+ raise Error, "DeleteWhere contains BNode operands: #{data[:pattern].to_sse}" if Array(data[:pattern]).any?(&:node?)
self.gen_bnodes(false)
- input[:update_op] = SPARQL::Algebra::Expression(:deleteWhere, data[:pattern])
+ input[:update_op] = SPARQL::Algebra::Expression(:deleteWhere, Array(data[:pattern]))
end
# [41] Modify ::= ("WITH" iri)? ( DeleteClause InsertClause? | InsertClause) UsingClause* "WHERE" GroupGraphPattern
start_production(:Modify) do |input, data, callback|
self.clear_bnode_cache
@@ -521,23 +521,23 @@
start_production(:DeleteClause) do |input, data, callback|
# Generate BNodes instead of non-distinguished variables. BNodes are not legal, but this will generate them rather than non-distinguished variables so they can be detected.
self.gen_bnodes
end
production(:DeleteClause) do |input, data, callback|
- raise Error, "DeleteClause contains BNode operands: #{data[:pattern].to_sse}" if data[:pattern].first.node?
+ raise Error, "DeleteClause contains BNode operands: #{Array(data[:pattern]).to_sse}" if Array(data[:pattern]).any?(&:node?)
self.gen_bnodes(false)
- input[:delete] = SPARQL::Algebra::Expression(:delete, data[:pattern])
+ input[:delete] = SPARQL::Algebra::Expression(:delete, Array(data[:pattern]))
end
# [43] InsertClause ::= "INSERT" QuadPattern
start_production(:InsertClause) do |input, data, callback|
# Generate BNodes instead of non-distinguished variables.
self.gen_bnodes
end
production(:InsertClause) do |input, data, callback|
self.gen_bnodes(false)
- input[:insert] = SPARQL::Algebra::Expression(:insert, data[:pattern])
+ input[:insert] = SPARQL::Algebra::Expression(:insert, Array(data[:pattern]))
end
# [44] UsingClause ::= "USING" ( iri | "NAMED" iri)
production(:UsingClause) do |input, data, callback|
add_prod_data(:using, data[:iri])
@@ -566,24 +566,23 @@
# Generate BNodes instead of non-distinguished variables
self.gen_bnodes
end
production(:QuadData) do |input, data, callback|
# Transform using statements instead of patterns, and verify there are no variables
- raise Error, "QuadData empty" unless data[:pattern]
- raise Error, "QuadData contains variable operands: #{data[:pattern].to_sse}" if data[:pattern].first.variable?
+ raise Error, "QuadData contains variable operands: #{Array(data[:pattern]).to_sse}" if Array(data[:pattern]).any?(&:variable?)
self.gen_bnodes(false)
- input[:pattern] = data[:pattern]
+ input[:pattern] = Array(data[:pattern])
end
# [51] QuadsNotTriples ::= "GRAPH" VarOrIri "{" TriplesTemplate? "}"
production(:QuadsNotTriples) do |input, data, callback|
- add_prod_datum(:pattern, [SPARQL::Algebra::Expression.for(:graph, data[:VarOrIri].last, data[:pattern])])
+ add_prod_datum(:pattern, [SPARQL::Algebra::Expression.for(:graph, data[:VarOrIri].last, Array(data[:pattern]))])
end
# [52] TriplesTemplate ::= TriplesSameSubject ("." TriplesTemplate? )?
production(:TriplesTemplate) do |input, data, callback|
- add_prod_datum(:pattern, data[:pattern])
+ add_prod_datum(:pattern, Array(data[:pattern]))
end
# [54] GroupGraphPatternSub ::= TriplesBlock? (GraphPatternNotTriples "."? TriplesBlock? )*
production(:GroupGraphPatternSub) do |input, data, callback|
debug("GroupGraphPatternSub") {"q #{data[:query].inspect}"}
@@ -601,11 +600,11 @@
end
# [55] TriplesBlock ::= TriplesSameSubjectPath
# ( '.' TriplesBlock? )?
production(:TriplesBlock) do |input, data, callback|
- if data[:pattern]
+ if !Array(data[:pattern]).empty?
query = SPARQL::Algebra::Operator::BGP.new
Array(data[:pattern]).each {|p| query << p}
# Append triples from ('.' TriplesBlock? )?
Array(data[:query]).each {|q| query += q}
@@ -802,10 +801,10 @@
self.gen_bnodes
end
production(:ConstructTemplate) do |input, data, callback|
# Generate BNodes instead of non-distinguished variables
self.gen_bnodes(false)
- add_prod_datum(:ConstructTemplate, data[:pattern])
+ add_prod_datum(:ConstructTemplate, Array(data[:pattern]))
add_prod_datum(:ConstructTemplate, data[:ConstructTemplate])
end
# [75] TriplesSameSubject ::= VarOrTerm PropertyListNotEmpty
# | TriplesNode PropertyList