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

Inherits:
Binary 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

Constants inherited from Binary

Binary::ARITY

Constants inherited from SPARQL::Algebra::Operator

ARITY, IsURI, URI

Constants included from Expression

Expression::PATTERN_PARENTS

Instance Attribute Summary

Attributes inherited from SPARQL::Algebra::Operator

#operands

Instance Method Summary collapse

Methods included from Evaluatable

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

Methods inherited from Binary

#initialize

Methods inherited from SPARQL::Algebra::Operator

#aggregate?, arity, #base_uri, base_uri, base_uri=, #bind, #boolean, #constant?, #deep_dup, #each_descendant, #eql?, #evaluatable?, evaluate, #executable?, #first_ancestor, for, #initialize, #inspect, #ndvars, #node?, #operand, #optimize, #optimize!, #parent, #parent=, #prefixes, prefixes, prefixes=, #rewrite, #to_binary, to_sparql, #to_sxp, #to_sxp_bin, #validate!, #variable?, #variables, #vars

Methods included from Expression

cast, #constant?, #evaluate, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #valid?, #validate!, #variable?

Constructor Details

This class inherits a constructor from SPARQL::Algebra::Operator::Binary

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