Class: SPARQL::Algebra::Operator::StrStarts

Inherits:
Binary show all
Includes:
Evaluatable
Defined in:
lib/sparql/algebra/operator/strstarts.rb

Overview

SELECT ?s ?str WHERE { ?s :str ?str FILTER STRSTARTS(?str, "a") }

Examples:

SSE

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

See Also:

Constant Summary collapse

NAME =
:strstarts

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 STRSTARTS function corresponds to the XPath fn:starts-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 starts with the lexical form of arg2, otherwise it returns false.

Examples:

strStarts("foobar", "foo") #=> true
strStarts("foobar"@en, "foo"@en) #=> true
strStarts("foobar"^^xsd:string, "foo"^^xsd:string) #=> true
strStarts("foobar"^^xsd:string, "foo") #=> true
strStarts("foobar", "foo"^^xsd:string) #=> true
strStarts("foobar"@en, "foo") #=> true
strStarts("foobar"@en, "foo"^^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



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

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.start_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)


64
65
66
# File 'lib/sparql/algebra/operator/strstarts.rb', line 64

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