Class: RDF::Query::Variable
- Inherits:
-
Object
- Object
- RDF::Query::Variable
- Includes:
- Term
- Defined in:
- lib/rdf/query/variable.rb
Overview
An RDF query variable.
Instance Attribute Summary collapse
-
#name ⇒ Symbol
(also: #to_sym)
The variable's name.
-
#value ⇒ RDF::Term
The variable's value.
Instance Method Summary collapse
-
#===(other) ⇒ Boolean
Compares this variable with the given value.
-
#bind(value) ⇒ Object
(also: #bind!)
Rebinds this variable to the given
value
. -
#bindings ⇒ Hash{Symbol => RDF::Term}
Returns this variable's bindings (if any) as a
Hash
. -
#bound? ⇒ Boolean
Returns
true
if this variable is bound. -
#distinguished=(value) ⇒ Boolean
Sets if variable is distinguished or non-distinguished.
-
#distinguished? ⇒ Boolean
Returns
true
if this variable is distinguished. -
#eql?(other) ⇒ Boolean
(also: #==)
Returns
true
if this variable is equivalent to a givenother
variable. -
#existential=(value) ⇒ Boolean
Sets if variable is existential or univeresal.
-
#existential? ⇒ Boolean
Returns
true
if this variable is existential. -
#hash ⇒ Integer
Returns a hash code for this variable.
-
#initialize(name = nil, value = nil, distinguished: nil, existential: nil) ⇒ Variable
constructor
A new instance of Variable.
-
#named? ⇒ Boolean
Returns
true
if this variable has a name. -
#to_s ⇒ String
(also: #to_base)
Returns a string representation of this variable.
-
#unbind ⇒ RDF::Term
(also: #unbind!)
Unbinds this variable, discarding any currently bound value.
-
#unbound? ⇒ Boolean
Returns
true
if this variable is unbound. -
#var_values(var, term) ⇒ RDF::Term
Returns term if var is the same as this variable.
- #variable?(*args) ⇒ Object
-
#variables ⇒ Hash{Symbol => RDF::Query::Variable}
(also: #to_h)
Returns this variable as
Hash
.
Methods included from Term
#<=>, #compatible?, #escape, #term?, #terms, #to_term
Methods included from Value
#anonymous?, #canonicalize, #canonicalize!, #constant?, #graph?, #inspect, #inspect!, #invalid?, #iri?, #list?, #literal?, #node?, #resource?, #start_with?, #statement?, #term?, #to_nquads, #to_ntriples, #to_rdf, #to_term, #type_error, #uri?, #valid?, #validate!
Constructor Details
#initialize(name = nil, value = nil, distinguished: nil, existential: nil) ⇒ Variable
Returns a new instance of Variable.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rdf/query/variable.rb', line 70 def initialize(name = nil, value = nil, distinguished: nil, existential: nil) name = (name || "g#{__id__.to_i.abs}").to_s if name.start_with?('??') name, dis, ex = name[2..-1], false, false elsif name.start_with?('?') name, dis, ex = name[1..-1], true, false elsif name.start_with?('$$') name, dis, ex = name[2..-1], false, true elsif name.start_with?('$') name, dis, ex = name[1..-1], true, true else dis, ex = true, false end @name = name.to_sym @value = value @distinguished = distinguished.nil? ? dis : distinguished @existential = existential.nil? ? ex : existential end |
Instance Attribute Details
#name ⇒ Symbol Also known as: to_sym
The variable's name.
54 55 56 |
# File 'lib/rdf/query/variable.rb', line 54 def name @name end |
#value ⇒ RDF::Term
The variable's value.
61 62 63 |
# File 'lib/rdf/query/variable.rb', line 61 def value @value end |
Instance Method Details
#===(other) ⇒ Boolean
Compares this variable with the given value.
257 258 259 260 261 262 263 |
# File 'lib/rdf/query/variable.rb', line 257 def ===(other) if unbound? other.is_a?(RDF::Term) # match any Term when unbound else value === other end end |
#bind(value) ⇒ self #bind(value) ⇒ RDF::Term Also known as: bind!
Rebinds this variable to the given value
.
181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/rdf/query/variable.rb', line 181 def bind(value) if value.is_a?(RDF::Query::Solution) self.value = value.to_h.fetch(name, self.value) self else warn "[DEPRECATION] RDF::Query::Variable#bind should be used with a solution, not a term.\n" + "Called from #{Gem.location_of_caller.join(':')}" old_value = self.value self.value = value old_value end end |
#bindings ⇒ Hash{Symbol => RDF::Term}
Returns this variable's bindings (if any) as a Hash
.
219 220 221 |
# File 'lib/rdf/query/variable.rb', line 219 def bindings unbound? ? {} : {name => value} end |
#bound? ⇒ Boolean
Returns true
if this variable is bound.
125 126 127 |
# File 'lib/rdf/query/variable.rb', line 125 def bound? !unbound? end |
#distinguished=(value) ⇒ Boolean
Sets if variable is distinguished or non-distinguished. By default, variables are distinguished
150 151 152 |
# File 'lib/rdf/query/variable.rb', line 150 def distinguished=(value) @distinguished = value end |
#distinguished? ⇒ Boolean
Returns true
if this variable is distinguished.
141 142 143 |
# File 'lib/rdf/query/variable.rb', line 141 def distinguished? @distinguished end |
#eql?(other) ⇒ Boolean Also known as: ==
when comparing against the default graph in an Dataset, other
will be false
and not be equal to an unbound variable.
Returns true
if this variable is equivalent to a given other
variable. Or, to another Term if bound, or to any other Term
241 242 243 244 245 246 247 248 249 |
# File 'lib/rdf/query/variable.rb', line 241 def eql?(other) if unbound? other.is_a?(RDF::Term) # match any Term when unbound elsif other.is_a?(RDF::Query::Variable) @name.eql?(other.name) else value.eql?(other) end end |
#existential=(value) ⇒ Boolean
Sets if variable is existential or univeresal. By default, variables are universal
167 168 169 |
# File 'lib/rdf/query/variable.rb', line 167 def existential=(value) @existential = value end |
#existential? ⇒ Boolean
Returns true
if this variable is existential.
158 159 160 |
# File 'lib/rdf/query/variable.rb', line 158 def existential? @existential end |
#hash ⇒ Integer
Returns a hash code for this variable.
228 229 230 |
# File 'lib/rdf/query/variable.rb', line 228 def hash @name.hash end |
#named? ⇒ Boolean
Returns true
if this variable has a name.
117 118 119 |
# File 'lib/rdf/query/variable.rb', line 117 def named? true end |
#to_s ⇒ String Also known as: to_base
Returns a string representation of this variable.
Distinguished variables are indicated with a single ?
.
Non-distinguished variables are indicated with a double ??
Existential variables are indicated using a single $
, or with $$
if also non-distinguished
290 291 292 293 |
# File 'lib/rdf/query/variable.rb', line 290 def to_s prefix = distinguished? ? (existential? ? '$' : '?') : (existential? ? '$$' : '??') unbound? ? "#{prefix}#{name}" : "#{prefix}#{name}=#{value}" end |
#unbind ⇒ RDF::Term Also known as: unbind!
Unbinds this variable, discarding any currently bound value.
199 200 201 202 203 |
# File 'lib/rdf/query/variable.rb', line 199 def unbind old_value = self.value self.value = nil old_value end |
#unbound? ⇒ Boolean
Returns true
if this variable is unbound.
133 134 135 |
# File 'lib/rdf/query/variable.rb', line 133 def unbound? value.nil? end |
#var_values(var, term) ⇒ RDF::Term
Returns term if var is the same as this variable.
271 272 273 |
# File 'lib/rdf/query/variable.rb', line 271 def var_values(var, term) term if var == name end |
#variable? ⇒ Boolean #variable?(variable) ⇒ Boolean
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/rdf/query/variable.rb', line 100 def variable?(*args) case args.length when 0 then true when 1 case variable = args.first when RDF::Query::Variable then self == variable when Symbol then to_sym == variable else false end else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)") end end |
#variables ⇒ Hash{Symbol => RDF::Query::Variable} Also known as: to_h
Returns this variable as Hash
.
210 211 212 |
# File 'lib/rdf/query/variable.rb', line 210 def variables {name => self} end |