class SPARQL::Algebra::Operator::Contains

A SPARQL `contains` operator.

@example

(contains ?x ?y)

@see www.w3.org/TR/sparql11-query/#func-contains @see www.w3.org/TR/xpath-functions/#func-contains

Constants

NAME

Public Instance Methods

apply(left, right, **options) click to toggle source

The `CONTAINS` function corresponds to the XPath fn:contains. The arguments must be argument compatible otherwise an error is raised.

@example

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

@param [RDF::Literal] left

a literal

@param [RDF::Literal] right

a literal

@return [RDF::Literal::Boolean] @raise [TypeError] if operands are not compatible

# File lib/sparql/algebra/operator/contains.rb, line 34
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.include?(right.to_s) then RDF::Literal::TRUE
  else RDF::Literal::FALSE
  end
end