Class: RDF::N3::Algebra::ResourceOperator
- Inherits:
-
SPARQL::Algebra::Operator::Binary
- Object
- SPARQL::Algebra::Operator
- SPARQL::Algebra::Operator::Binary
- RDF::N3::Algebra::ResourceOperator
- Includes:
- Builtin, SPARQL::Algebra::Query, SPARQL::Algebra::Update
- Defined in:
- vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb
Overview
This is a generic operator where the subject is a literal or binds to a literal and the object is either a constant that equals the evaluation of the subject, or a variable to which the result is bound in a solution
Direct Known Subclasses
Log::Conclusion, Log::Content, Log::EqualTo, Log::Includes, Log::N3String, Log::OutputString, Log::ParsedAsN3, Log::Semantics, Math::ACos, Math::ACosH, Math::ASin, Math::ASinH, Math::ATan, Math::ATanH, Math::AbsoluteValue, Math::Ceiling, Math::Cos, Math::CosH, Math::EqualTo, Math::Floor, Math::GreaterThan, Math::LessThan, Math::Negation, Math::Rounded, Math::Sin, Math::SinH, Math::Tan, Math::TanH, Str::Contains, Str::ContainsIgnoringCase, Str::EndsWith, Str::EqualIgnoringCase, Str::GreaterThan, Str::LessThan, Str::Matches, Str::StartsWith, Time::Day, Time::DayOfWeek, Time::GmTime, Time::Hour, Time::InSeconds, Time::LocalTime, Time::Minute, Time::Month, Time::Second, Time::Timezone, Time::Year
Constant Summary collapse
- NAME =
:resourceOperator
Constants included from Util::Logger
Constants inherited from SPARQL::Algebra::Operator::Binary
SPARQL::Algebra::Operator::Binary::ARITY
Constants inherited from SPARQL::Algebra::Operator
SPARQL::Algebra::Operator::ARITY, SPARQL::Algebra::Operator::IsURI, SPARQL::Algebra::Operator::URI
Constants included from SPARQL::Algebra::Expression
SPARQL::Algebra::Expression::PATTERN_PARENTS
Instance Attribute Summary
Attributes included from Enumerable
Attributes included from SPARQL::Algebra::Query
Attributes inherited from SPARQL::Algebra::Operator
Instance Method Summary collapse
-
#as_literal(object) ⇒ Object
Returns a literal for the numeric argument.
-
#execute(queryable, solutions:, **options) ⇒ RDF::Query::Solutions
The operator takes a literal and provides a mechanism for subclasses to operate over (and validate) that argument.
-
#input_operand ⇒ RDF::Term
Input is generically the subject.
-
#resolve(resource, position: :subject) ⇒ RDF::Term
Subclasses implement
resolve
. -
#valid?(subject, object) ⇒ Boolean
Subclasses may override or supplement validate to perform validation on the list subject.
Methods included from Builtin
#each, #evaluate, #hash, #rank, #to_uri
Methods included from Util::Logger
#log_debug, #log_depth, #log_error, #log_fatal, #log_info, #log_recover, #log_recovering?, #log_statistics, #log_warn, #logger
Methods included from Enumerable
add_entailment, #canonicalize, #canonicalize!, #dump, #each_graph, #each_object, #each_predicate, #each_quad, #each_statement, #each_subject, #each_term, #each_triple, #entail, #enum_graph, #enum_object, #enum_predicate, #enum_quad, #enum_statement, #enum_subject, #enum_term, #enum_triple, #graph?, #graph_names, #invalid?, #method_missing, #object?, #objects, #predicate?, #predicates, #project_graph, #quad?, #quads, #respond_to_missing?, #statement?, #statements, #subject?, #subjects, #supports?, #term?, #terms, #to_a, #to_h, #to_set, #triple?, #triples, #validate!
Methods included from Util::Aliasing::LateBound
Methods included from Isomorphic
#bijection_to, #isomorphic_with?
Methods included from Countable
Methods included from SPARQL::Algebra::Update
#graph_name=, #unshift, #variables
Methods included from SPARQL::Algebra::Query
#each_solution, #empty?, #failed?, #graph_name=, #matched?, #query_yields_boolean?, #query_yields_solutions?, #query_yields_statements?, #unshift, #variables
Methods inherited from SPARQL::Algebra::Operator::Binary
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, #formulae, #initialize, #inspect, #mergable?, #ndvars, #node?, #operand, #optimize, #optimize!, #parent, #parent=, prefixes, #prefixes, prefixes=, #rewrite, #to_binary, #to_sparql, to_sparql, #to_sxp, #to_sxp_bin, #validate!, #variable?, #variables, #vars
Methods included from SPARQL::Algebra::Expression
cast, #constant?, #evaluate, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #validate!, #variable?
Constructor Details
This class inherits a constructor from SPARQL::Algebra::Operator::Binary
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RDF::Enumerable
Instance Method Details
#as_literal(object) ⇒ Object
Returns a literal for the numeric argument.
111 112 113 114 115 116 117 118 119 120 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb', line 111 def as_literal(object) case object when Float literal = RDF::Literal(object, canonicalize: true) literal.instance_variable_set(:@string, literal.to_s.downcase) literal else RDF::Literal(object, canonicalize: true) end end |
#execute(queryable, solutions:, **options) ⇒ RDF::Query::Solutions
The operator takes a literal and provides a mechanism for subclasses to operate over (and validate) that argument.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb', line 19 def execute(queryable, solutions:, **) RDF::Query::Solutions(solutions.map do |solution| subject = operand(0).evaluate(solution.bindings, formulae: formulae) || operand(0) object = operand(1).evaluate(solution.bindings, formulae: formulae) || operand(1) subject = formulae.fetch(subject, subject) if subject.node? object = formulae.fetch(object, object) if object.node? log_info(self.class.const_get(:NAME), "subject") {SXP::Generator.string(subject.to_sxp_bin).strip} log_info(self.class.const_get(:NAME), "object") {SXP::Generator.string(object.to_sxp_bin).strip} next unless valid?(subject, object) lhs = resolve(subject, position: :subject) if lhs.nil? log_error(self.class.const_get(:NAME), "subject evaluates to null") {subject.inspect} next end rhs = resolve(object, position: :object) if rhs.nil? log_error(self.class.const_get(:NAME), "object evaluates to null") {object.inspect} next end if object.variable? log_debug(self.class.const_get(:NAME), "result") {SXP::Generator.string(lhs.to_sxp_bin).strip} solution.merge(object.to_sym => lhs) elsif subject.variable? log_debug(self.class.const_get(:NAME), "result") {SXP::Generator.string(rhs.to_sxp_bin).strip} solution.merge(subject.to_sym => rhs) elsif respond_to?(:apply) res = apply(lhs, rhs) log_debug(self.class.const_get(:NAME), "result") {SXP::Generator.string(res.to_sxp_bin).strip} # Return the result applying subject and object case res when RDF::Literal::TRUE solution when RDF::Literal::FALSE nil when RDF::Query::Solution solution.merge(res) else log_error(self.class.const_get(:NAME), "unexpected result type") nil end elsif rhs != lhs log_debug(self.class.const_get(:NAME), "result: false") nil else log_debug(self.class.const_get(:NAME), "result: true") solution end end.compact.uniq) end |
#input_operand ⇒ RDF::Term
Input is generically the subject
77 78 79 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb', line 77 def input_operand operand(0) end |
#resolve(resource, position: :subject) ⇒ RDF::Term
Subclasses implement resolve
.
Returns nil if resource does not validate, given its position
88 89 90 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb', line 88 def resolve(resource, position: :subject) raise NotImplemented end |
#valid?(subject, object) ⇒ Boolean
Subclasses may override or supplement validate to perform validation on the list subject
98 99 100 101 102 103 104 105 106 107 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/resource_operator.rb', line 98 def valid?(subject, object) case subject when RDF::Query::Variable object.term? when RDF::Term object.term? || object.variable? else false end end |