class SPARQL::Algebra::Operator::If
The SPARQL
`if` function.
@example
(base <http://example.org/> (prefix ((xsd: <http://www.w3.org/2001/XMLSchema#>)) (project (?o ?integer) (extend ((?integer (if (= (lang ?o) "ja") true false))) (bgp (triple ?s ?p ?o))))))
Constants
- NAME
Public Instance Methods
evaluate(bindings, **options)
click to toggle source
The IF function form evaluates the first argument, interprets it as a effective boolean value, then returns the value of `expression2` if the EBV is true, otherwise it returns the value of `expression3`. Only one of `expression2` and `expression3` is evaluated. If
evaluating the first argument raises an error, then an error is raised for the evaluation of the IF expression.
@example
IF(?x = 2, "yes", "no") #=> "yes" IF(bound(?y), "yes", "no") #=> "no" IF(?x=2, "yes", 1/?z) #=> "yes", the expression 1/?z is not evaluated IF(?x=1, "yes", 1/?z) #=> raises an error IF("2" > 1, "yes", "no") #=> raises an error
Evaluates the first operand and returns the evaluation of either the second or third operands
@param [RDF::Query::Solution] bindings
a query solution containing zero or more variable bindings
@return [RDF::Term] @raise [TypeError]
# File lib/sparql/algebra/operator/if.rb, line 36 def evaluate(bindings, **options) operand(0).evaluate(bindings, depth: options[:depth].to_i + 1, **options) == RDF::Literal::TRUE ? operand(1).evaluate(bindings, depth: options[:depth].to_i + 1, **options) : operand(2).evaluate(bindings, depth: options[:depth].to_i + 1, **options) rescue raise TypeError end