rdf 3.1.10 → 3.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +33 -10
- data/VERSION +1 -1
- data/lib/rdf/cli.rb +3 -2
- data/lib/rdf/mixin/enumerable.rb +13 -4
- data/lib/rdf/model/graph.rb +24 -9
- data/lib/rdf/model/literal.rb +57 -0
- data/lib/rdf/model/literal/numeric.rb +4 -2
- data/lib/rdf/model/statement.rb +50 -15
- data/lib/rdf/model/term.rb +14 -4
- data/lib/rdf/model/value.rb +53 -16
- data/lib/rdf/query.rb +15 -4
- data/lib/rdf/query/pattern.rb +6 -0
- data/lib/rdf/query/solution.rb +25 -7
- data/lib/rdf/query/solutions.rb +15 -6
- data/lib/rdf/query/variable.rb +19 -5
- data/lib/rdf/repository.rb +22 -6
- data/lib/rdf/transaction.rb +6 -2
- data/lib/rdf/vocab/owl.rb +366 -388
- data/lib/rdf/vocab/rdfs.rb +72 -74
- data/lib/rdf/vocab/rdfv.rb +74 -74
- data/lib/rdf/vocab/writer.rb +41 -25
- data/lib/rdf/vocab/xsd.rb +198 -463
- data/lib/rdf/vocabulary.rb +133 -85
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8747674533ca06af62b3ee536ea4342be3c8bedc8831b1a1838e244d927263cb
|
4
|
+
data.tar.gz: fbc0593916678f9f696d4c461b29df01549da5af7d436b700d66735f5350054d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb56f5b72af92421afb2216ca5d1dec10907860a2f1ad069e4d69e37ee3126219dfb0c60fab256c1088424b9a8dcc42f6637e98b1c52258cc88163b394e06fc5
|
7
|
+
data.tar.gz: dcd897b9313decf48df3a89d4e8885ac74da1b966d194c28faa56a2edff2f4b123d093322655985ae1c0c059c6e8e49be9f18bbc9b1ef9c87634394d9090064b
|
data/README.md
CHANGED
@@ -10,6 +10,26 @@ This is a pure-Ruby library for working with [Resource Description Framework
|
|
10
10
|
[](https://coveralls.io/github/ruby-rdf/rdf?branch=develop)
|
11
11
|
[](https://gitter.im/ruby-rdf/rdf)
|
12
12
|
|
13
|
+
## Table of contents
|
14
|
+
|
15
|
+
1. [Features](#features)
|
16
|
+
2. [Differences between RDF 1.0 and RDF 1.1](#differences-between-rdf-1-0-and-rdf-1-1)
|
17
|
+
3. [Tutorials](#tutorials)
|
18
|
+
4. [Command Line](#command-line)
|
19
|
+
5. [Examples](#examples)
|
20
|
+
6. [Reader/Writer convenience methods](#reader/writer-convenience-methods)
|
21
|
+
7. [RDF* (RDFStar)](#rdf*-(rdfstar))
|
22
|
+
8. [Documentation](#documentation)
|
23
|
+
9. [Dependencies](#dependencies)
|
24
|
+
10. [Installation](#installation)
|
25
|
+
11. [Download](#download)
|
26
|
+
12. [Resources](#resources)
|
27
|
+
13. [Mailing List](#mailing-list)
|
28
|
+
14. [Authors](#authors)
|
29
|
+
15. [Contributors](#contributors)
|
30
|
+
16. [Contributing](#contributing)
|
31
|
+
17. [License](#license)
|
32
|
+
|
13
33
|
## Features
|
14
34
|
|
15
35
|
* 100% pure Ruby with minimal dependencies and no bloat.
|
@@ -41,7 +61,7 @@ middleware.
|
|
41
61
|
|
42
62
|
See {RDF::Util::File} for configuring other mechanisms for retrieving resources.
|
43
63
|
|
44
|
-
### Term caching and configuration
|
64
|
+
### Term caching and configuration
|
45
65
|
|
46
66
|
RDF.rb uses a weak-reference cache for storing internalized versions of URIs and Nodes. This is particularly useful for Nodes as two nodes are equivalent only if they're the same node.
|
47
67
|
|
@@ -76,7 +96,7 @@ the 1.1 release of RDF.rb:
|
|
76
96
|
* {RDF::Util::File.open\_file} now performs redirects and manages `base_uri` based on W3C recommendations:
|
77
97
|
* `base_uri` is set to the original URI if a status 303 is provided, otherwise any other redirect will set `base_uri` to the redirected location.
|
78
98
|
* `base_uri` is set to the content of the `Location` header if status is _success_.
|
79
|
-
* Additionally, {RDF::Util::File.open\_file} sets the result encoding from `charset` if provided, defaulting to `UTF-8`. Other access methods include `last_modified` and `content_type`,
|
99
|
+
* Additionally, {RDF::Util::File.open\_file} sets the result encoding from `charset` if provided, defaulting to `UTF-8`. Other access methods include `last_modified` and `content_type`,
|
80
100
|
* {RDF::StrictVocabulary} added with an easy way to keep vocabulary definitions up to date based on their OWL or RDFS definitions. Most vocabularies are now StrictVocabularies meaning that an attempt to resolve a particular term in that vocabulary will error if the term is not defined in the vocabulary.
|
81
101
|
* New vocabulary definitions have been added for [ICal](http://www.w3.org/2002/12/cal/icaltzd#), [Media Annotations (MA)](http://www.w3.org/ns/ma-ont#), [Facebook OpenGraph (OG)](http://ogp.me/ns#), [PROV](http://www.w3.org/ns/prov#), [SKOS-XL (SKOSXL)](http://www.w3.org/2008/05/skos-xl#), [Data Vocabulary (V)](http://rdf.data-vocabulary.org/), [VCard](http://www.w3.org/2006/vcard/ns#), [VOID](http://rdfs.org/ns/void#http://rdfs.org/ns/void#), [Powder-S (WDRS)](http://www.w3.org/2007/05/powder-s#), and [XHV](http://www.w3.org/1999/xhtml/vocab#).
|
82
102
|
|
@@ -89,6 +109,7 @@ Notably, {RDF::Queryable#query} and {RDF::Query#execute} are now completely symm
|
|
89
109
|
* [Getting started with RDF and SPARQL using 4store and RDF.rb](https://www.jenitennison.com/blog/node/152)
|
90
110
|
|
91
111
|
## Command Line
|
112
|
+
|
92
113
|
When installed, RDF.rb includes a `rdf` shell script which acts as a wrapper to perform a number of different
|
93
114
|
operations on RDF files using available readers and writers.
|
94
115
|
|
@@ -112,7 +133,7 @@ Different RDF gems will augment the `rdf` script with more capabilities, which m
|
|
112
133
|
require 'rdf/ntriples'
|
113
134
|
graph = RDF::Graph.new << [:hello, RDF::RDFS.label, "Hello, world!"]
|
114
135
|
graph.dump(:ntriples)
|
115
|
-
|
136
|
+
|
116
137
|
or
|
117
138
|
|
118
139
|
RDF::Writer.open("hello.nt") { |writer| writer << graph }
|
@@ -121,7 +142,7 @@ or
|
|
121
142
|
|
122
143
|
require 'rdf/ntriples'
|
123
144
|
graph = RDF::Graph.load("https://ruby-rdf.github.com/rdf/etc/doap.nt")
|
124
|
-
|
145
|
+
|
125
146
|
or
|
126
147
|
|
127
148
|
RDF::Reader.open("https://ruby-rdf.github.com/rdf/etc/doap.nt") do |reader|
|
@@ -131,19 +152,20 @@ or
|
|
131
152
|
end
|
132
153
|
|
133
154
|
### Reading RDF data in other formats
|
155
|
+
|
134
156
|
{RDF::Reader.open} and {RDF::Repository.load} use a number of mechanisms to determine the appropriate reader
|
135
157
|
to use when loading a file. The specific format to use can be forced using, e.g. `format: :ntriples`
|
136
158
|
option where the specific format symbol is determined by the available readers. Both also use
|
137
159
|
MimeType or file extension, where available.
|
138
160
|
|
139
161
|
require 'rdf/nquads'
|
140
|
-
|
162
|
+
|
141
163
|
graph = RDF::Graph.load("https://ruby-rdf.github.com/rdf/etc/doap.nq", format: :nquads)
|
142
164
|
|
143
165
|
A specific sub-type of Reader can also be invoked directly:
|
144
166
|
|
145
167
|
require 'rdf/nquads'
|
146
|
-
|
168
|
+
|
147
169
|
RDF::NQuads::Reader.open("https://ruby-rdf.github.com/rdf/etc/doap.nq") do |reader|
|
148
170
|
reader.each_statement do |statement|
|
149
171
|
puts statement.inspect
|
@@ -157,6 +179,7 @@ be detected from filename or other options, or that more than one format is iden
|
|
157
179
|
match will be used to read the input.
|
158
180
|
|
159
181
|
### Writing RDF data using other formats
|
182
|
+
|
160
183
|
{RDF::Writer.open}, {RDF::Enumerable#dump}, {RDF::Writer.dump} take similar options to {RDF::Reader.open} to determine the
|
161
184
|
appropriate writer to use.
|
162
185
|
|
@@ -176,6 +199,7 @@ A specific sub-type of Writer can also be invoked directly:
|
|
176
199
|
File.open("hello.nq", "w") {|f| f << repo.dump(:nquads)}
|
177
200
|
|
178
201
|
## Reader/Writer convenience methods
|
202
|
+
|
179
203
|
{RDF::Enumerable} implements `to_{format}` for each available instance of {RDF::Reader}.
|
180
204
|
For example, if `rdf/turtle` is loaded, this allows the following:
|
181
205
|
|
@@ -195,7 +219,7 @@ Note that no prefixes are loaded automatically, however they can be provided as
|
|
195
219
|
### Querying RDF data using basic graph patterns (BGPs)
|
196
220
|
|
197
221
|
require 'rdf/ntriples'
|
198
|
-
|
222
|
+
|
199
223
|
graph = RDF::Graph.load("https://ruby-rdf.github.com/rdf/etc/doap.nt")
|
200
224
|
query = RDF::Query.new({
|
201
225
|
person: {
|
@@ -204,7 +228,7 @@ Note that no prefixes are loaded automatically, however they can be provided as
|
|
204
228
|
FOAF.mbox => :email,
|
205
229
|
}
|
206
230
|
}, **{})
|
207
|
-
|
231
|
+
|
208
232
|
query.execute(graph) do |solution|
|
209
233
|
puts "name=#{solution.name} email=#{solution.email}"
|
210
234
|
end
|
@@ -451,7 +475,6 @@ This repository uses [Git Flow](https://github.com/nvie/gitflow) to mange develo
|
|
451
475
|
which you will be asked to agree to on the first commit to a repo within the organization.
|
452
476
|
Note that the agreement applies to all repos in the [Ruby RDF](https://github.com/ruby-rdf/) organization.
|
453
477
|
|
454
|
-
|
455
478
|
## License
|
456
479
|
|
457
480
|
This is free and unencumbered public domain software. For more information,
|
@@ -492,4 +515,4 @@ see <https://unlicense.org/> or the accompanying {file:UNLICENSE} file.
|
|
492
515
|
[JSON::LD]: https://ruby-rdf.github.com/json-ld
|
493
516
|
[RestClient]: https://rubygems.org/gems/rest-client
|
494
517
|
[RestClient Components]: https://rubygems.org/gems/rest-client-components
|
495
|
-
[Rack::Cache]: https://rtomayko.github.io/rack-cache/
|
518
|
+
[Rack::Cache]: https://rtomayko.github.io/rack-cache/
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.15
|
data/lib/rdf/cli.rb
CHANGED
@@ -256,8 +256,7 @@ module RDF
|
|
256
256
|
lambda: ->(argv, opts) do
|
257
257
|
writer_class = RDF::Writer.for(opts[:output_format]) || RDF::NTriples::Writer
|
258
258
|
out = opts[:output]
|
259
|
-
|
260
|
-
writer_opts = opts.merge(standard_prefixes: true)
|
259
|
+
writer_opts = {prefixes: {}, standard_prefixes: true}.merge(opts)
|
261
260
|
writer_class.new(out, **writer_opts) do |writer|
|
262
261
|
writer << repository
|
263
262
|
end
|
@@ -536,6 +535,8 @@ module RDF
|
|
536
535
|
count = 0
|
537
536
|
self.parse(args, **options) do |reader|
|
538
537
|
reader.each_statement {|st| @repository << st}
|
538
|
+
# Remember prefixes from reading
|
539
|
+
options[:prefixes] ||= reader.prefixes
|
539
540
|
end
|
540
541
|
secs = Time.new - start
|
541
542
|
options[:logger].info "Parsed #{repository.count} statements with #{@readers.join(', ')} in #{secs} seconds @ #{count/secs} statements/second."
|
data/lib/rdf/mixin/enumerable.rb
CHANGED
@@ -136,8 +136,13 @@ module RDF
|
|
136
136
|
#
|
137
137
|
# @param [RDF::Statement] statement
|
138
138
|
# @return [Boolean]
|
139
|
-
def statement?(
|
140
|
-
|
139
|
+
def statement?(*args)
|
140
|
+
case args.length
|
141
|
+
when 0 then false
|
142
|
+
when 1
|
143
|
+
args.first && !enum_statement.find { |s| s.eql?(args.first) }.nil?
|
144
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
145
|
+
end
|
141
146
|
end
|
142
147
|
alias_method :has_statement?, :statement?
|
143
148
|
alias_method :include?, :statement?
|
@@ -541,8 +546,12 @@ module RDF
|
|
541
546
|
# @param [RDF::Resource] value
|
542
547
|
# @return [Boolean]
|
543
548
|
# @since 2.0
|
544
|
-
def term?(
|
545
|
-
|
549
|
+
def term?(*args)
|
550
|
+
case args.length
|
551
|
+
when 0 then super
|
552
|
+
when 1 then args.first && enum_term.include?(args.first)
|
553
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
554
|
+
end
|
546
555
|
end
|
547
556
|
alias_method :has_term?, :term?
|
548
557
|
|
data/lib/rdf/model/graph.rb
CHANGED
@@ -138,11 +138,22 @@ module RDF
|
|
138
138
|
end
|
139
139
|
|
140
140
|
##
|
141
|
-
#
|
141
|
+
# @overload graph?
|
142
|
+
# Returns `true` to indicate that this is a graph.
|
142
143
|
#
|
143
|
-
#
|
144
|
-
|
145
|
-
|
144
|
+
# @return [Boolean]
|
145
|
+
# @overload graph?(name)
|
146
|
+
# Returns `true` if `self` contains the given RDF graph_name.
|
147
|
+
#
|
148
|
+
# @param [RDF::Resource, false] graph_name
|
149
|
+
# Use value `false` to query for the default graph_name
|
150
|
+
# @return [Boolean]
|
151
|
+
def graph?(*args)
|
152
|
+
case args.length
|
153
|
+
when 0 then true
|
154
|
+
when 1 then graph_name == args.first
|
155
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
156
|
+
end
|
146
157
|
end
|
147
158
|
|
148
159
|
##
|
@@ -227,11 +238,15 @@ module RDF
|
|
227
238
|
# @param [Statement] statement
|
228
239
|
# @return [Boolean]
|
229
240
|
# @see RDF::Enumerable#statement?
|
230
|
-
def statement?(
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
241
|
+
def statement?(*args)
|
242
|
+
case args.length
|
243
|
+
when 0 then false
|
244
|
+
when 1
|
245
|
+
statement = args.first.dup
|
246
|
+
statement.graph_name = graph_name
|
247
|
+
@data.statement?(statement)
|
248
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
249
|
+
end
|
235
250
|
end
|
236
251
|
alias_method :has_statement?, :statement?
|
237
252
|
|
data/lib/rdf/model/literal.rb
CHANGED
@@ -308,6 +308,37 @@ module RDF
|
|
308
308
|
end
|
309
309
|
alias_method :===, :==
|
310
310
|
|
311
|
+
##
|
312
|
+
# Compares `self` to `other` for sorting purposes (with type check).
|
313
|
+
#
|
314
|
+
# @param [Object] other
|
315
|
+
# @return [Integer] `-1`, `0`, or `1`
|
316
|
+
def <=>(other)
|
317
|
+
case other
|
318
|
+
when Literal
|
319
|
+
case
|
320
|
+
when self.eql?(other)
|
321
|
+
0
|
322
|
+
when self.language? && other.language?
|
323
|
+
# Literals with languages can compare if languages are identical
|
324
|
+
self.to_s <=> other.to_s
|
325
|
+
when self.simple? && other.simple?
|
326
|
+
self.to_s <=> other.to_s
|
327
|
+
when !self.valid?
|
328
|
+
type_error("#{self.inspect} is invalid") || 0
|
329
|
+
when !other.valid?
|
330
|
+
type_error("#{other.inspect} is invalid") || 0
|
331
|
+
when self.comperable_datatype2?(other)
|
332
|
+
self.object <=> other.object
|
333
|
+
else
|
334
|
+
type_error("#{self.inspect} and #{other.inspect} are not comperable") || 0
|
335
|
+
end
|
336
|
+
when String
|
337
|
+
self.simple? && self.value <=> other
|
338
|
+
else 1
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
311
342
|
##
|
312
343
|
# Returns `true` if this is a plain literal. A plain literal
|
313
344
|
# may have a language, but may not have a datatype. For
|
@@ -399,6 +430,32 @@ module RDF
|
|
399
430
|
end
|
400
431
|
end
|
401
432
|
|
433
|
+
##
|
434
|
+
# Returns `true` if the literal has a datatype and the comparison should
|
435
|
+
# return false instead of raise a type error.
|
436
|
+
#
|
437
|
+
# Used for <=> operator.
|
438
|
+
#
|
439
|
+
# This behavior is intuited from SPARQL data-r2/expr-equal/eq-2-2
|
440
|
+
# @return [Boolean]
|
441
|
+
def comperable_datatype2?(other)
|
442
|
+
case self
|
443
|
+
when RDF::Literal::Numeric, RDF::Literal::Boolean
|
444
|
+
case other
|
445
|
+
when RDF::Literal::Numeric, RDF::Literal::Boolean
|
446
|
+
true
|
447
|
+
else
|
448
|
+
self.plain? || other.plain? ||
|
449
|
+
self.language? || other.language? ||
|
450
|
+
self.datatype == other.datatype
|
451
|
+
end
|
452
|
+
else
|
453
|
+
self.plain? || other.plain? ||
|
454
|
+
self.language? || other.language? ||
|
455
|
+
self.datatype == other.datatype
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
402
459
|
##
|
403
460
|
# Converts this literal into its canonical lexical representation.
|
404
461
|
#
|
@@ -11,6 +11,9 @@ module RDF; class Literal
|
|
11
11
|
# @return [Integer] `-1`, `0`, or `1`
|
12
12
|
# @since 0.3.0
|
13
13
|
def <=>(other)
|
14
|
+
# If lexically invalid, use regular literal testing
|
15
|
+
return super unless self.valid? && (!other.respond_to?(:valid?) || other.valid?)
|
16
|
+
|
14
17
|
case other
|
15
18
|
when ::Numeric
|
16
19
|
to_d <=> other
|
@@ -30,11 +33,10 @@ module RDF; class Literal
|
|
30
33
|
# @since 0.3.0
|
31
34
|
def ==(other)
|
32
35
|
# If lexically invalid, use regular literal testing
|
33
|
-
return super unless self.valid?
|
36
|
+
return super unless self.valid? && (!other.respond_to?(:valid?) || other.valid?)
|
34
37
|
|
35
38
|
case other
|
36
39
|
when Literal::Numeric
|
37
|
-
return super unless other.valid?
|
38
40
|
(cmp = (self <=> other)) ? cmp.zero? : false
|
39
41
|
when RDF::URI, RDF::Node
|
40
42
|
# Interpreting SPARQL data-r2/expr-equal/eq-2-2, numeric can't be compared with other types
|
data/lib/rdf/model/statement.rb
CHANGED
@@ -136,23 +136,45 @@ module RDF
|
|
136
136
|
end
|
137
137
|
|
138
138
|
##
|
139
|
-
#
|
139
|
+
# @overload statement?
|
140
|
+
# Returns `true` if `self` is a {RDF::Statement}.
|
140
141
|
#
|
141
|
-
#
|
142
|
-
|
143
|
-
|
142
|
+
# @return [Boolean]
|
143
|
+
# @overload statement?(statement)
|
144
|
+
# Returns `true` if `self` contains the given {RDF::Statement}.
|
145
|
+
#
|
146
|
+
# @param [RDF::Statement] statement
|
147
|
+
# @return [Boolean]
|
148
|
+
def statement?(*args)
|
149
|
+
case args.length
|
150
|
+
when 0 then true
|
151
|
+
when 1 then self == args.first || subject.statement?(*args) || object.statement?(*args)
|
152
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
153
|
+
end
|
144
154
|
end
|
145
155
|
|
146
156
|
##
|
147
|
-
#
|
157
|
+
# @overload variable?
|
158
|
+
# Returns `true` if any element of the statement is not a
|
148
159
|
# URI, Node or Literal.
|
149
160
|
#
|
150
|
-
#
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
161
|
+
# @return [Boolean]
|
162
|
+
# @overload variable?(variables)
|
163
|
+
# Returns `true` if this statement contains any of the variables.
|
164
|
+
#
|
165
|
+
# @param [Array<Symbol, #to_sym>] variables
|
166
|
+
# @return [Boolean]
|
167
|
+
def variable?(*args)
|
168
|
+
case args.length
|
169
|
+
when 0
|
170
|
+
!(subject? && subject.constant? &&
|
171
|
+
predicate? && predicate.constant? &&
|
172
|
+
object? && object.constant? &&
|
173
|
+
(graph? ? graph_name.constant? : true))
|
174
|
+
when 1
|
175
|
+
to_quad.any? {|t| t.respond_to?(:variable?) && t.variable?(*args)}
|
176
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
177
|
+
end
|
156
178
|
end
|
157
179
|
|
158
180
|
##
|
@@ -215,9 +237,22 @@ module RDF
|
|
215
237
|
end
|
216
238
|
|
217
239
|
##
|
218
|
-
# @
|
219
|
-
|
220
|
-
|
240
|
+
# @overload graph?
|
241
|
+
# Returns `true` if the statement has a graph name.
|
242
|
+
#
|
243
|
+
# @return [Boolean]
|
244
|
+
# @overload graph?(name)
|
245
|
+
# Returns `true` if `self` contains the given RDF graph_name.
|
246
|
+
#
|
247
|
+
# @param [RDF::Resource, false] graph_name
|
248
|
+
# Use value `false` to query for the default graph_name
|
249
|
+
# @return [Boolean]
|
250
|
+
def graph?(*args)
|
251
|
+
case args.length
|
252
|
+
when 0 then !!graph_name
|
253
|
+
when 1 then graph_name == args.first
|
254
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
255
|
+
end
|
221
256
|
end
|
222
257
|
alias_method :name?, :graph?
|
223
258
|
alias_method :has_graph?, :graph?
|
@@ -266,7 +301,7 @@ module RDF
|
|
266
301
|
# @see RDF::Literal#==
|
267
302
|
# @see RDF::Query::Variable#==
|
268
303
|
def eql?(other)
|
269
|
-
other.is_a?(Statement) && self
|
304
|
+
other.is_a?(Statement) && self.to_a.eql?(other.to_a) && (self.graph_name || false) == (other.graph_name || false)
|
270
305
|
end
|
271
306
|
|
272
307
|
##
|
data/lib/rdf/model/term.rb
CHANGED
@@ -57,11 +57,21 @@ module RDF
|
|
57
57
|
end
|
58
58
|
|
59
59
|
##
|
60
|
-
#
|
60
|
+
# @overload term?
|
61
|
+
# Returns `true` if `self` is a {RDF::Term}.
|
61
62
|
#
|
62
|
-
#
|
63
|
-
|
64
|
-
|
63
|
+
# @return [Boolean]
|
64
|
+
# @overload term?(name)
|
65
|
+
# Returns `true` if `self` contains the given RDF subject term.
|
66
|
+
#
|
67
|
+
# @param [RDF::Resource] value
|
68
|
+
# @return [Boolean]
|
69
|
+
def term?(*args)
|
70
|
+
case args.length
|
71
|
+
when 0 then true
|
72
|
+
when 1 then false
|
73
|
+
else raise ArgumentError("wrong number of arguments (given #{args.length}, expected 0 or 1)")
|
74
|
+
end
|
65
75
|
end
|
66
76
|
|
67
77
|
##
|