Class: RDF::Statement
- Inherits:
-
Object
show all
- Includes:
- Value
- Defined in:
- lib/rdf/model/statement.rb
Overview
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#==(other) ⇒ Boolean
Checks statement equality as a triple.
-
#===(other) ⇒ Boolean
Checks statement equality with patterns.
-
#[](index) ⇒ RDF::Term
-
#[]=(index, value) ⇒ RDF::Term
-
#asserted? ⇒ Boolean
-
#canonicalize ⇒ RDF::Statement
Returns a version of the statement with each position in canonical form.
-
#canonicalize! ⇒ RDF::Statement
Canonicalizes each unfrozen term in the statement.
-
#complete? ⇒ Boolean
Determines if the statement is complete, vs.
-
#eql?(other) ⇒ Boolean
Checks statement equality as a quad.
-
#has_graph? ⇒ Boolean
(also: #has_name?)
-
#has_object? ⇒ Boolean
-
#has_predicate? ⇒ Boolean
-
#has_subject? ⇒ Boolean
-
#hash ⇒ Object
Generates a Integer hash value as a quad.
-
#incomplete? ⇒ Boolean
Determines if the statement is incomplete, vs.
-
#inferred? ⇒ Boolean
-
#initialize(subject = nil, predicate = nil, object = nil, options = {}) ⇒ Statement
constructor
A new instance of Statement.
-
#initialize! ⇒ Object
-
#invalid? ⇒ Boolean
-
#node? ⇒ Boolean
(also: #has_blank_nodes?)
Returns true if any resource of this statement is a blank node.
-
#quoted? ⇒ Boolean
-
#reified(subject: nil, id: nil, graph_name: nil) ⇒ RDF::Graph
Returns a graph containing this statement in reified form.
-
#statement? ⇒ Boolean
Returns true to indicate that this value is a statement.
-
#to_h(subject_key = :subject, predicate_key = :predicate, object_key = :object, graph_key = :graph_name) ⇒ Hash{Symbol => RDF::Term}
Returns the terms of this statement as a Hash.
-
#to_quad ⇒ Array(RDF::Term)
-
#to_s ⇒ String
Returns a string representation of this statement.
-
#to_triple ⇒ Array(RDF::Term)
(also: #to_a)
-
#valid? ⇒ Boolean
-
#variable? ⇒ Boolean
Returns true if any element of the statement is not a URI, Node or Literal.
Methods included from Value
#anonymous?, #constant?, #graph?, #inspect, #inspect!, #iri?, #list?, #literal?, #resource?, #start_with?, #term?, #to_nquads, #to_ntriples, #to_rdf, #to_term, #type_error, #uri?, #validate!
Constructor Details
#initialize(**options) ⇒ RDF::Statement
#initialize(subject, predicate, object, **options) ⇒ RDF::Statement
Returns a new instance of Statement.
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/rdf/model/statement.rb', line 87
def initialize(subject = nil, predicate = nil, object = nil, options = {})
if subject.is_a?(Hash)
@options = Hash[subject]
@subject = @options.delete(:subject)
@predicate = @options.delete(:predicate)
@object = @options.delete(:object)
else
@options = !options.empty? ? Hash[options] : {}
@subject = subject
@predicate = predicate
@object = object
end
@id = @options.delete(:id) if @options.has_key?(:id)
@graph_name = @options.delete(:graph_name)
initialize!
end
|
Instance Attribute Details
49
50
51
|
# File 'lib/rdf/model/statement.rb', line 49
def graph_name
@graph_name
end
|
#id ⇒ Object
46
47
48
|
# File 'lib/rdf/model/statement.rb', line 46
def id
@id
end
|
58
59
60
|
# File 'lib/rdf/model/statement.rb', line 58
def object
@object
end
|
#options ⇒ Hash{Symbol => Object}
61
62
63
|
# File 'lib/rdf/model/statement.rb', line 61
def options
@options
end
|
55
56
57
|
# File 'lib/rdf/model/statement.rb', line 55
def predicate
@predicate
end
|
52
53
54
|
# File 'lib/rdf/model/statement.rb', line 52
def subject
@subject
end
|
Class Method Details
.from(statement, graph_name: nil, **options) ⇒ Object
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/rdf/model/statement.rb', line 34
def self.from(statement, graph_name: nil, **options)
case statement
when Array, Query::Pattern
graph_name ||= statement[3] == false ? nil : statement[3]
self.new(statement[0], statement[1], statement[2], graph_name: graph_name, **options)
when Statement then statement
when Hash then self.new(options.merge(statement))
else raise ArgumentError, "expected RDF::Statement, Hash, or Array, but got #{statement.inspect}"
end
end
|
Instance Method Details
#==(other) ⇒ Boolean
Checks statement equality as a triple.
265
266
267
268
|
# File 'lib/rdf/model/statement.rb', line 265
def ==(other)
to_a == Array(other) &&
!(other.is_a?(RDF::Value) && other.list?)
end
|
#===(other) ⇒ Boolean
Checks statement equality with patterns.
Uses #eql? to compare each of #subject, #predicate, #object, and #graph_name to those of other. Any statement part which is not present in self is ignored.
297
298
299
300
301
302
303
|
# File 'lib/rdf/model/statement.rb', line 297
def ===(other)
return false if has_object? && !object.eql?(other.object)
return false if has_predicate? && !predicate.eql?(other.predicate)
return false if has_subject? && !subject.eql?(other.subject)
return false if has_graph? && !graph_name.eql?(other.graph_name)
return true
end
|
308
309
310
311
312
313
314
315
316
|
# File 'lib/rdf/model/statement.rb', line 308
def [](index)
case index
when 0 then self.subject
when 1 then self.predicate
when 2 then self.object
when 3 then self.graph_name
else nil
end
end
|
#[]=(index, value) ⇒ RDF::Term
322
323
324
325
326
327
328
329
330
|
# File 'lib/rdf/model/statement.rb', line 322
def []=(index, value)
case index
when 0 then self.subject = value
when 1 then self.predicate = value
when 2 then self.object = value
when 3 then self.graph_name = value
else nil
end
end
|
#asserted? ⇒ Boolean
166
167
168
|
# File 'lib/rdf/model/statement.rb', line 166
def asserted?
!quoted?
end
|
Returns a version of the statement with each position in canonical form
366
367
368
369
370
|
# File 'lib/rdf/model/statement.rb', line 366
def canonicalize
self.dup.canonicalize!
rescue ArgumentError
nil
end
|
Canonicalizes each unfrozen term in the statement
351
352
353
354
355
356
357
358
359
|
# File 'lib/rdf/model/statement.rb', line 351
def canonicalize!
self.subject.canonicalize! if has_subject? && !self.subject.frozen?
self.predicate.canonicalize! if has_predicate? && !self.predicate.frozen?
self.object.canonicalize! if has_object? && !self.object.frozen?
self.graph_name.canonicalize! if has_graph? && !self.graph_name.frozen?
self.validate!
@hash = nil
self
end
|
#complete? ⇒ Boolean
Determines if the statement is complete, vs. invalid. A complete statement is one in which none of subject, predicate, or object, are nil.
196
197
198
|
# File 'lib/rdf/model/statement.rb', line 196
def complete?
!incomplete?
end
|
#eql?(other) ⇒ Boolean
Checks statement equality as a quad.
245
246
247
|
# File 'lib/rdf/model/statement.rb', line 245
def eql?(other)
other.is_a?(Statement) && self == other && (self.graph_name || false) == (other.graph_name || false)
end
|
#has_graph? ⇒ Boolean
Also known as:
has_name?
202
203
204
|
# File 'lib/rdf/model/statement.rb', line 202
def has_graph?
!!graph_name
end
|
#has_object? ⇒ Boolean
221
222
223
|
# File 'lib/rdf/model/statement.rb', line 221
def has_object?
!!object
end
|
#has_predicate? ⇒ Boolean
215
216
217
|
# File 'lib/rdf/model/statement.rb', line 215
def has_predicate?
!!predicate
end
|
#has_subject? ⇒ Boolean
209
210
211
|
# File 'lib/rdf/model/statement.rb', line 209
def has_subject?
!!subject
end
|
#hash ⇒ Object
Generates a Integer hash value as a quad.
251
252
253
|
# File 'lib/rdf/model/statement.rb', line 251
def hash
@hash ||= to_quad.hash
end
|
#incomplete? ⇒ Boolean
Determines if the statement is incomplete, vs. invalid. An incomplete statement is one in which any of subject, predicate, or object, are nil.
187
188
189
|
# File 'lib/rdf/model/statement.rb', line 187
def incomplete?
to_triple.any?(&:nil?)
end
|
#inferred? ⇒ Boolean
178
179
180
|
# File 'lib/rdf/model/statement.rb', line 178
def inferred?
!!@options[:inferred]
end
|
#initialize! ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/rdf/model/statement.rb', line 106
def initialize!
@graph_name = Node.intern(@graph_name) if @graph_name.is_a?(Symbol)
@subject = if @subject.is_a?(Value)
@subject.to_term
elsif @subject.is_a?(Symbol)
Node.intern(@subject)
elsif @subject.nil?
nil
else
raise ArgumentError, "expected subject to be nil or a term, was #{@subject.inspect}"
end
@predicate = Node.intern(@predicate) if @predicate.is_a?(Symbol)
@object = if @object.is_a?(Value)
@object.to_term
elsif @object.is_a?(Symbol)
Node.intern(@object)
elsif @object.nil?
nil
else
Literal.new(@object)
end
end
|
#invalid? ⇒ Boolean
151
152
153
|
# File 'lib/rdf/model/statement.rb', line 151
def invalid?
!valid?
end
|
#node? ⇒ Boolean
Also known as:
has_blank_nodes?
Returns true if any resource of this statement is a blank node.
230
231
232
|
# File 'lib/rdf/model/statement.rb', line 230
def node?
to_quad.compact.any?(&:node?)
end
|
#quoted? ⇒ Boolean
172
173
174
|
# File 'lib/rdf/model/statement.rb', line 172
def quoted?
false
end
|
#reified(subject: nil, id: nil, graph_name: nil) ⇒ RDF::Graph
Returns a graph containing this statement in reified form.
404
405
406
407
408
409
410
411
412
|
# File 'lib/rdf/model/statement.rb', line 404
def reified(subject: nil, id: nil, graph_name: nil)
RDF::Graph.new(graph_name: graph_name) do |graph|
subject = subject || RDF::Node.new(id)
graph << [subject, RDF.type, RDF[:Statement]]
graph << [subject, RDF.subject, self.subject]
graph << [subject, RDF.predicate, self.predicate]
graph << [subject, RDF.object, self.object]
end
end
|
#statement? ⇒ Boolean
Returns true to indicate that this value is a statement.
133
134
135
|
# File 'lib/rdf/model/statement.rb', line 133
def statement?
true
end
|
#to_h(subject_key = :subject, predicate_key = :predicate, object_key = :object, graph_key = :graph_name) ⇒ Hash{Symbol => RDF::Term}
Returns the terms of this statement as a Hash.
379
380
381
|
# File 'lib/rdf/model/statement.rb', line 379
def to_h(subject_key = :subject, predicate_key = :predicate, object_key = :object, graph_key = :graph_name)
{subject_key => subject, predicate_key => predicate, object_key => object, graph_key => graph_name}
end
|
334
335
336
|
# File 'lib/rdf/model/statement.rb', line 334
def to_quad
[subject, predicate, object, graph_name]
end
|
Returns a string representation of this statement.
387
388
389
390
391
|
# File 'lib/rdf/model/statement.rb', line 387
def to_s
(graph_name ? to_quad : to_triple).map do |term|
term.respond_to?(:to_base) ? term.to_base : term.inspect
end.join(" ") + " ."
end
|
#to_triple ⇒ Array(RDF::Term)
Also known as:
to_a
340
341
342
|
# File 'lib/rdf/model/statement.rb', line 340
def to_triple
[subject, predicate, object]
end
|
#valid? ⇒ Boolean
157
158
159
160
161
162
|
# File 'lib/rdf/model/statement.rb', line 157
def valid?
has_subject? && subject.resource? && subject.valid? &&
has_predicate? && predicate.uri? && predicate.valid? &&
has_object? && object.term? && object.valid? &&
(has_graph? ? (graph_name.resource? && graph_name.valid?) : true)
end
|
#variable? ⇒ Boolean
Returns true if any element of the statement is not a URI, Node or Literal.
142
143
144
145
146
147
|
# File 'lib/rdf/model/statement.rb', line 142
def variable?
!(has_subject? && subject.resource? &&
has_predicate? && predicate.resource? &&
has_object? && (object.resource? || object.literal?) &&
(has_graph? ? graph_name.resource? : true))
end
|