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

Inherits:
Binary show all
Includes:
Evaluatable
Defined in:
vendor/bundler/ruby/2.5.0/bundler/gems/sparql-b66c70fb77a0/lib/sparql/algebra/operator/strends.rb

Overview

A SPARQL contains operator.

Constant Summary collapse

NAME =
:strends

Constants inherited from Binary

Binary::ARITY

Constants inherited from SPARQL::Algebra::Operator

ARITY, IsURI, URI

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=, #boolean, #constant?, #each_descendant, #eql?, #evaluatable?, evaluate, #executable?, #first_ancestor, for, #initialize, #inspect, #ndvars, #node?, #operand, #optimize, #parent, #parent=, prefixes, #prefixes, prefixes=, #rewrite, #to_binary, #to_sxp, #to_sxp_bin, #validate!, #variable?, #vars

Methods included from Expression

cast, #constant?, #evaluate, extension, extensions, for, #invalid?, new, #node?, open, #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) ⇒ 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:

Returns:

Raises:

  • (TypeError)

    if operands are not compatible



36
37
38
39
40
41
42
43
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/sparql-b66c70fb77a0/lib/sparql/algebra/operator/strends.rb', line 36

def apply(left, right)
  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