Class: SPARQL::Algebra::Operator::Round

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

Overview

The SPARQL logical round operator.

Returns the number with no fractional part that is closest to the argument. If there are two such numbers, then the one that is closest to positive infinity is returned. An error is raised if arg is not a numeric value.

[121] BuiltInCall ::= ... 'ROUND' '(' Expression ')'

Examples:

SPARQL Grammar

PREFIX : <http://example.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?num (ROUND(?num) AS ?round) WHERE {
 ?s :num ?num
}

SSE

(prefix
 ((: <http://example.org/>)
  (xsd: <http://www.w3.org/2001/XMLSchema#>))
 (project (?s ?num ?round)
  (extend ((?round (round ?num)))
   (bgp (triple ?s :num ?num)))))

See Also:

Constant Summary collapse

NAME =
[:round]

Instance Method Summary collapse

Methods included from Evaluatable

#evaluate, #memoize, #replace_aggregate!, #replace_vars!

Instance Method Details

#apply(operand, **options) ⇒ RDF::Literal

Returns the number with no fractional part that is closest to the argument. If there are two such numbers, then the one that is closest to positive infinity is returned. An error is raised if arg is not a numeric value.

Parameters:

  • operand (RDF::Literal)

    the operand

Returns:

  • (RDF::Literal)

    literal of same type

Raises:

  • (TypeError)

    if the operand is not a numeric value



39
40
41
42
43
44
# File 'lib/sparql/algebra/operator/round.rb', line 39

def apply(operand, **options)
  case operand
    when RDF::Literal::Numeric then operand.round
    else raise TypeError, "expected an RDF::Literal::Numeric, but got #{operand.inspect}"
  end
end