Class: SPARQL::Algebra::Operator::StrLen

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

Overview

The SPARQL strlen operator.

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

Examples:

SPARQL Grammar

PREFIX : <http://example.org/>
SELECT ?str (STRLEN(?str) AS ?len) WHERE {
  ?s :str ?str
}

SSE

(prefix
 ((: <http://example.org/>))
 (project (?str ?len)
  (extend ((?len (strlen ?str)))
   (bgp (triple ?s :str ?str)))))

See Also:

Constant Summary collapse

NAME =
:strlen

Instance Method Summary collapse

Methods included from Evaluatable

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

Instance Method Details

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

The strlen function corresponds to the XPath fn:string-length function and returns an xsd:integer equal to the length in characters of the lexical form of the literal.

Examples:

strlen("chat")  4
strlen("chat"@en) 4
strlen("chat"^^xsd:string)  4

Parameters:

  • operand (RDF::Literal)

    the operand

Returns:

  • (RDF::Literal::Integer)

    length of string

Raises:

  • (TypeError)

    if the operand is not a numeric value



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

def apply(operand, **options)
  raise TypeError, "expected a plain RDF::Literal, but got #{operand.inspect}" unless operand.literal? && operand.plain?
  RDF::Literal(operand.to_s.length)
end

#to_sparql(**options) ⇒ String

Returns a partial SPARQL grammar for this operator.

Returns:

  • (String)


50
51
52
# File 'lib/sparql/algebra/operator/strlen.rb', line 50

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