Class: RDF::Query::Variable

Inherits:
Object
  • Object
show all
Includes:
Term
Defined in:
lib/rdf/query/variable.rb

Overview

An RDF query variable.

Examples:

Creating a named unbound variable

var = RDF::Query::Variable.new(:x)
var.unbound?   #=> true
var.value      #=> nil

Creating an anonymous unbound variable

var = RDF::Query::Variable.new
var.name       #=> :g2166151240

Unbound variables match any value

var === 42     #=> true

Creating a bound variable

var = RDF::Query::Variable.new(:y, 123)
var.bound?     #=> true
var.value      #=> 123

Bound variables match only their actual value

var === 42     #=> false
var === 123    #=> true

Getting the variable name

var.named?     #=> true
var.name       #=> :y
var.to_sym     #=> :y

Rebinding a variable returns the previous value

var.bind!(456) #=> 123
var.value      #=> 456

Unbinding a previously bound variable

var.unbind!
var.unbound?   #=> true

Getting the string representation of a variable

var = RDF::Query::Variable.new(:x)
var.to_s       #=> "?x"
var = RDF::Query::Variable.new(:y, 123)
var.to_s       #=> "?y=123"

Since:

  • 0.3.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Term

#<=>, #constant?

Methods included from Value

#graph?, #inspect, #inspect!, #iri?, #literal?, #node?, #resource?, #statement?, #to_ntriples, #to_quad, #to_rdf, #type_error, #uri?

Constructor Details

#initialize(name = nil, value = nil) ⇒ Variable

Returns a new instance of Variable.

Parameters:

  • name (Symbol, #to_sym) (defaults to: nil)

    the variable name

  • value (RDF::Term) (defaults to: nil)

    an optional variable value

Since:

  • 0.3.0



66
67
68
69
# File 'lib/rdf/query/variable.rb', line 66

def initialize(name = nil, value = nil)
  @name  = (name || "g#{__id__.to_i.abs}").to_sym
  @value = value
end

Instance Attribute Details

#nameSymbol Also known as: to_sym

The variable’s name.

Returns:

  • (Symbol)

Since:

  • 0.3.0



52
53
54
# File 'lib/rdf/query/variable.rb', line 52

def name
  @name
end

#valueRDF::Term

The variable’s value.

Returns:

Since:

  • 0.3.0



59
60
61
# File 'lib/rdf/query/variable.rb', line 59

def value
  @value
end

Instance Method Details

#===(other) ⇒ Boolean

Compares this variable with the given value.

Parameters:

Returns:

  • (Boolean)

Since:

  • 0.3.0



194
195
196
197
198
199
200
# File 'lib/rdf/query/variable.rb', line 194

def ===(other)
  if unbound?
    other.is_a?(RDF::Term) # match any Term when unbound
  else
    value === other
  end
end

#bind(value) ⇒ RDF::Term Also known as: bind!

Rebinds this variable to the given ‘value`.

Parameters:

Returns:

  • (RDF::Term)

    the previous value, if any.

Since:

  • 0.3.0



127
128
129
130
131
# File 'lib/rdf/query/variable.rb', line 127

def bind(value)
  old_value = self.value
  self.value = value
  old_value
end

#bindingsHash{Symbol => RDF::Term}

Returns this variable’s bindings (if any) as a ‘Hash`.

Returns:

Since:

  • 0.3.0



158
159
160
# File 'lib/rdf/query/variable.rb', line 158

def bindings
  unbound? ? {} : {name => value}
end

#bound?Boolean

Returns ‘true` if this variable is bound.

Returns:

  • (Boolean)

Since:

  • 0.3.0



93
94
95
# File 'lib/rdf/query/variable.rb', line 93

def bound?
  !unbound?
end

#distinguished=(value) ⇒ Boolean

Sets if variable is distinguished or non-distinguished. By default, variables are distinguished

Returns:

  • (Boolean)

Since:

  • 0.3.0



118
119
120
# File 'lib/rdf/query/variable.rb', line 118

def distinguished=(value)
  @distinguished = value
end

#distinguished?Boolean

Returns ‘true` if this variable is distinguished.

Returns:

  • (Boolean)

Since:

  • 0.3.0



109
110
111
# File 'lib/rdf/query/variable.rb', line 109

def distinguished?
  @distinguished.nil? || @distinguished
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns ‘true` if this variable is equivalent to a given `other` variable. Or, to another Term if bound, or to any other Term

Parameters:

  • other (Object)

Returns:

  • (Boolean)

    ‘true` or `false`

Since:

  • 0.3.0



178
179
180
181
182
183
184
185
186
# File 'lib/rdf/query/variable.rb', line 178

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

#hashFixnum

Returns a hash code for this variable.

Returns:

  • (Fixnum)

Since:

  • 0.3.0



167
168
169
# File 'lib/rdf/query/variable.rb', line 167

def hash
  @name.hash
end

#named?Boolean

Returns ‘true` if this variable has a name.

Returns:

  • (Boolean)

Since:

  • 0.3.0



85
86
87
# File 'lib/rdf/query/variable.rb', line 85

def named?
  true
end

#to_sString

Returns a string representation of this variable.

Distinguished variables are indicated with a single ‘?`.

Non-distinguished variables are indicated with a double ‘??`

Examples:

v = Variable.new("a")
v.to_s => '?a'
v.distinguished = false
v.to_s => '??a'

Returns:

  • (String)

Since:

  • 0.3.0



216
217
218
219
# File 'lib/rdf/query/variable.rb', line 216

def to_s
  prefix = distinguished? ? '?' : "??"
  unbound? ? "#{prefix}#{name}" : "#{prefix}#{name}=#{value}"
end

#unbindRDF::Term Also known as: unbind!

Unbinds this variable, discarding any currently bound value.

Returns:

  • (RDF::Term)

    the previous value, if any.

Since:

  • 0.3.0



138
139
140
141
142
# File 'lib/rdf/query/variable.rb', line 138

def unbind
  old_value = self.value
  self.value = nil
  old_value
end

#unbound?Boolean

Returns ‘true` if this variable is unbound.

Returns:

  • (Boolean)

Since:

  • 0.3.0



101
102
103
# File 'lib/rdf/query/variable.rb', line 101

def unbound?
  value.nil?
end

#variable?Boolean

Returns ‘true`.

Returns:

  • (Boolean)

See Also:

Since:

  • 0.1.7



77
78
79
# File 'lib/rdf/query/variable.rb', line 77

def variable? 
  true
end

#variablesHash{Symbol => RDF::Query::Variable} Also known as: to_hash

Returns this variable as ‘Hash`.

Returns:

Since:

  • 0.3.0



149
150
151
# File 'lib/rdf/query/variable.rb', line 149

def variables
  {name => self}
end