Sha256: f33dffa52f6105bc5171a4d2364dfe42ffbf3e953835277befc84c06ed1a336c

Contents?: true

Size: 1.98 KB

Versions: 2

Compression:

Stored size: 1.98 KB

Contents

module SPARQL; module Algebra
  class Operator
    ##
    # 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))))))
    #
    # @see http://www.w3.org/TR/sparql11-query/#func-if
    class If < Operator::Ternary
      include Evaluatable
      
      NAME = :if

      ##
      # 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]
      def evaluate(bindings = {})
        operand(0).evaluate(bindings) == RDF::Literal::TRUE ?
          operand(1).evaluate(bindings) :
          operand(2).evaluate(bindings)
        rescue
          raise TypeError
      end
      
      ##
      # Returns an optimized version of this query.
      #
      # Return optimized query
      #
      # @return [Union, RDF::Query] `self`
      def optimize
        operands = operands.map(&:optimize)
      end
    end # If
  end # Operator
end; end # SPARQL::Algebra

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sparql-1.0.8 lib/sparql/algebra/operator/if.rb
sparql-1.0.7 lib/sparql/algebra/operator/if.rb