Class: RDF::Node
Overview
An RDF blank node, also known as an anonymous or unlabeled node.
Instance Attribute Summary collapse
- #id ⇒ String
-
#original ⇒ RDF::Node
Originally instantiated node, if any.
Class Method Summary collapse
-
.cache ⇒ RDF::Util::Cache
Cache size may be set through config using ‘node_cache_size`.
-
.intern(id) ⇒ RDF::Node
Alias for ‘RDF::Node.new`, at the moment.
-
.uuid(format: :default) ⇒ RDF::Node
Returns a blank node with a random UUID-based identifier.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
(also: #===)
Checks whether this blank node is equal to ‘other` (type checking).
-
#anonymous? ⇒ Boolean
(also: #unlabeled?)
Returns ‘true`.
-
#dup ⇒ RDF::Node
Override #dup to remember original object.
-
#eql?(other) ⇒ Boolean
Determines if ‘self` is the same term as `other`.
-
#hash ⇒ Integer
Returns a hash code for this blank node.
-
#initialize(id = nil) ⇒ Node
constructor
A new instance of Node.
-
#labeled? ⇒ Boolean
Returns ‘false`.
-
#make_unique! ⇒ self
Make this term identifier unique, if it is found to be shared with another node having the same identifier.
-
#node? ⇒ Boolean
Returns ‘true`.
-
#to_s ⇒ String
Returns a string representation of this blank node.
-
#to_sym ⇒ Symbol
Returns a symbol representation of this blank node.
-
#to_unique_base ⇒ String
Returns a representation of this node independent of any identifier used to initialize it.
Methods included from Resource
Methods included from Term
#<=>, #compatible?, #term?, #terms, #to_base, #to_term
Methods included from Value
#canonicalize, #canonicalize!, #constant?, #graph?, #inspect, #inspect!, #invalid?, #iri?, #list?, #literal?, #resource?, #start_with?, #statement?, #term?, #to_nquads, #to_ntriples, #to_rdf, #to_term, #type_error, #uri?, #valid?, #validate!, #variable?
Constructor Details
#initialize(id = nil) ⇒ Node
Returns a new instance of Node.
77 78 79 80 |
# File 'lib/rdf/model/node.rb', line 77 def initialize(id = nil) id = nil if id.to_s.empty? @id = (id || "g#{__id__.to_i.abs}").to_s.freeze end |
Instance Attribute Details
#id ⇒ String
73 74 75 |
# File 'lib/rdf/model/node.rb', line 73 def id @id end |
#original ⇒ RDF::Node
Originally instantiated node, if any
70 71 72 |
# File 'lib/rdf/model/node.rb', line 70 def original @original end |
Class Method Details
.cache ⇒ RDF::Util::Cache
caching interned nodes means that two different invocations using the same symbol will result in the same node, which may not be appropriate depending on the graph from which it is used. RDF requires that bnodes with the same label are, in fact, different bnodes, unless they are used within the same document.
Cache size may be set through RDF.config using ‘node_cache_size`.
21 22 23 24 |
# File 'lib/rdf/model/node.rb', line 21 def self.cache require 'rdf/util/cache' unless defined?(::RDF::Util::Cache) @cache ||= RDF::Util::Cache.new(RDF.config.node_cache_size) end |
.intern(id) ⇒ RDF::Node
Alias for ‘RDF::Node.new`, at the moment.
51 52 53 |
# File 'lib/rdf/model/node.rb', line 51 def self.intern(id) (cache[(id = id.to_s).to_sym] ||= self.new(id)).freeze end |
.uuid(format: :default) ⇒ RDF::Node
Returns a blank node with a random UUID-based identifier.
(Depends on availability of either ‘uuid` or `uuidtools` gems).
Formats supported by the UUID generator:
* `:default` Produces 36 characters, including hyphens separating the UUID value parts
* `:compact` Produces a 32 digits (hexadecimal) value with no hyphens
* `:urn` Adds the prefix urn:uuid: to the default format
Requires that the ‘uuid` gem be loadable to use `format`
39 40 41 42 |
# File 'lib/rdf/model/node.rb', line 39 def self.uuid(format: :default) uuid = RDF::Util::UUID.generate(format: format) self.new(uuid) end |
Instance Method Details
#==(other) ⇒ Boolean Also known as: ===
Checks whether this blank node is equal to ‘other` (type checking).
In this case, different nodes having the same id are considered the same.
Per SPARQL data-r2/expr-equal/eq-2-2, numeric can’t be compared with other types
137 138 139 140 141 142 143 144 145 146 |
# File 'lib/rdf/model/node.rb', line 137 def ==(other) if other.is_a?(Literal) # If other is a Literal, reverse test to consolodate complex type checking logic other == self else other.respond_to?(:node?) && other.node? && self.hash == other.to_term.hash && other.respond_to?(:id) && @id == other.to_term.id end end |
#anonymous? ⇒ Boolean Also known as: unlabeled?
Returns ‘true`.
94 95 96 |
# File 'lib/rdf/model/node.rb', line 94 def anonymous? true end |
#dup ⇒ RDF::Node
Override #dup to remember original object. This allows .eql? to determine that two nodes are the same thing, and not different nodes instantiated with the same identifier.
61 62 63 64 65 |
# File 'lib/rdf/model/node.rb', line 61 def dup node = super node.original = self.original || self node end |
#eql?(other) ⇒ Boolean
Determines if ‘self` is the same term as `other`.
In this case, nodes must be the same object
123 124 125 |
# File 'lib/rdf/model/node.rb', line 123 def eql?(other) other.is_a?(RDF::Node) && (self.original || self).equal?(other.original || other) end |
#hash ⇒ Integer
Returns a hash code for this blank node.
112 113 114 |
# File 'lib/rdf/model/node.rb', line 112 def hash @id.hash end |
#labeled? ⇒ Boolean
Returns ‘false`.
104 105 106 |
# File 'lib/rdf/model/node.rb', line 104 def labeled? !unlabeled? end |
#make_unique! ⇒ self
Make this term identifier unique, if it is found to be shared with another node having the same identifier
160 161 162 163 |
# File 'lib/rdf/model/node.rb', line 160 def make_unique! @id = to_unique_base[2..-1] self end |
#node? ⇒ Boolean
Returns ‘true`.
86 87 88 |
# File 'lib/rdf/model/node.rb', line 86 def node? true end |
#to_s ⇒ String
Returns a string representation of this blank node.
169 170 171 |
# File 'lib/rdf/model/node.rb', line 169 def to_s "_:%s" % @id.to_s end |
#to_sym ⇒ Symbol
Returns a symbol representation of this blank node.
178 179 180 |
# File 'lib/rdf/model/node.rb', line 178 def to_sym @id.to_s.to_sym end |
#to_unique_base ⇒ String
Returns a representation of this node independent of any identifier used to initialize it
153 154 155 |
# File 'lib/rdf/model/node.rb', line 153 def to_unique_base original ? original.to_unique_base : "_:g#{__id__.to_i.abs}" end |