Class: SPARQL::Algebra::Operator::If

Inherits:
Operator::Ternary
  • Object
show all
Includes:
Evaluatable
Defined in:
lib/sparql/algebra/operator/if.rb

Overview

The SPARQL if function.

[121] BuiltInCall ::= ... | 'IF' '(' Expression ',' Expression ',' Expression ')'

Examples:

SPARQL Grammar

BASE <http://example.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?o (IF(lang(?o) = "ja", true, false) AS ?integer)
WHERE { ?s ?p ?o }

SSE

(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))))))

See Also:

Constant Summary collapse

NAME =
:if

Instance Method Summary collapse

Methods included from Evaluatable

#apply, #memoize, #replace_aggregate!, #replace_vars!

Instance Method Details

#evaluate(bindings, **options) ⇒ RDF::Term

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.

Evaluates the first operand and returns the evaluation of either the second or third operands

Examples:


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

Parameters:

Returns:

Raises:

  • (TypeError)


44
45
46
47
48
49
50
# File 'lib/sparql/algebra/operator/if.rb', line 44

def evaluate(bindings, **options)
  operand(0).evaluate(bindings, **options.merge(depth: options[:depth].to_i + 1)) == RDF::Literal::TRUE ?
    operand(1).evaluate(bindings, **options.merge(depth: options[:depth].to_i + 1)) :
    operand(2).evaluate(bindings, **options.merge(depth: options[:depth].to_i + 1))
rescue
  raise TypeError
end

#to_sparql(**options) ⇒ String

Returns a partial SPARQL grammar for this operator.

Returns:

  • (String)


57
58
59
# File 'lib/sparql/algebra/operator/if.rb', line 57

def to_sparql(**options)
  "IF(" + operands.to_sparql(delimiter: ', ', **options) + ")"
end