Class: SPARQL::Algebra::Operator::StrEnds

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

Overview

A SPARQL strends operator.

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

Examples:

SPARQL Grammar

PREFIX : <http://example.org/>
SELECT ?s ?str WHERE {
  ?s :str ?str
  FILTER STRENDS(?str, "a")
}

SSE

(prefix
 ((: <http://example.org/>))
 (project (?s ?str)
  (filter (strends ?str "a")
   (bgp (triple ?s :str ?str)))))

See Also:

Constant Summary collapse

NAME =
:strends

Instance Method Summary collapse

Methods included from Evaluatable

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

Instance Method Details

#apply(left, right, **options) ⇒ RDF::Literal::Boolean

The STRENDS function corresponds to the XPath fn:ends-with function. The arguments must be argument compatible otherwise an error is raised.

For such input pairs, the function returns true if the lexical form of arg1 ends with the lexical form of arg2, otherwise it returns false.

Examples:

strEnds("foobar", "bar") #=> true
strEnds("foobar"@en, "bar"@en) #=> true
strEnds("foobar"^^xsd:string, "bar"^^xsd:string) #=> true
strEnds("foobar"^^xsd:string, "bar") #=> true
strEnds("foobar", "bar"^^xsd:string) #=> true
strEnds("foobar"@en, "bar") #=> true
strEnds("foobar"@en, "bar"^^xsd:string) #=> true

Parameters:

  • left (RDF::Literal)

    a literal

  • right (RDF::Literal)

    a literal

Returns:

  • (RDF::Literal::Boolean)

Raises:

  • (TypeError)

    if operands are not compatible



49
50
51
52
53
54
55
56
# File 'lib/sparql/algebra/operator/strends.rb', line 49

def apply(left, right, **options)
  case
  when !left.compatible?(right)
    raise TypeError, "expected two RDF::Literal operands, but got #{left.inspect} and #{right.inspect}"
  when left.to_s.end_with?(right.to_s) then RDF::Literal::TRUE
  else RDF::Literal::FALSE
  end
end

#to_sparql(**options) ⇒ String

Returns a partial SPARQL grammar for this operator.

Returns:

  • (String)


63
64
65
# File 'lib/sparql/algebra/operator/strends.rb', line 63

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