rdf 3.1.1 → 3.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f11909f850c5c1de088d0fd736267556ea533ec2f14e7245676e0547ff22f4d8
4
- data.tar.gz: 4cf062a4eb81399c761e60210dbb7e87a1b778c8aa46161f6086c3819c3b9b23
3
+ metadata.gz: 39ba8235c527933f06e9685428f3948547e46563c68ca5d0e1f3ac22f12b3d60
4
+ data.tar.gz: 00fb02e10e11e2e011c58766c609ca186dc1e2c74ef44f09af704297681e94b8
5
5
  SHA512:
6
- metadata.gz: eb6699ee27aceb7eff73b5b15a685abb3501b1de930ed3b5612662c2303af75239d1b76b3c6a0a721bf79577bfa357acefe71084db89851d2619ede8fcfc44cc
7
- data.tar.gz: 94c48695d2c77cb6847a88aecabed96e6b31db07e5b7d3a70f43e54afc5d6910d090e41f26fe74e5acff6733f62c3321a6185336928f64d39bf5d3924d366465
6
+ metadata.gz: 46e0b83df6bf5fbdecdee12cc9bb2e34f93dce625a1a86edbd3251366a6ac6ef09fa4a1520c883c0f7a0a5d2bdb492e97fddeed739b4db28e6e69e278cc78e33
7
+ data.tar.gz: db8b82296da844a5b8c0ab8547038cdd4f96e41231db41f2f8f0abd2d04859918a90adee3ded6369c9a37f20c192e16cc9d656910661533bb3bbbf5fb46a6aa5
data/AUTHORS CHANGED
@@ -1,3 +1,3 @@
1
1
  * Arto Bendiken <arto@bendiken.net>
2
2
  * Ben Lavender <blavender@gmail.com>
3
- * Gregg Kellogg <gregg@kellogg-assoc.com>
3
+ * Gregg Kellogg <gregg@greggkellogg.net>
data/README.md CHANGED
@@ -4,10 +4,6 @@ This is a pure-Ruby library for working with [Resource Description Framework
4
4
  (RDF)][RDF] data.
5
5
 
6
6
  * <https://ruby-rdf.github.com/rdf>
7
- * <https://blog.datagraph.org/2010/12/rdf-for-ruby>
8
- * <https://blog.datagraph.org/2010/03/rdf-for-ruby>
9
- * <https://blog.datagraph.org/2010/04/parsing-rdf-with-ruby>
10
- * <https://blog.datagraph.org/2010/04/rdf-repository-howto>
11
7
 
12
8
  [![Gem Version](https://badge.fury.io/rb/rdf.png)](https://badge.fury.io/rb/rdf)
13
9
  [![Build Status](https://travis-ci.org/ruby-rdf/rdf.png?branch=master)](https://travis-ci.org/ruby-rdf/rdf)
@@ -33,6 +29,7 @@ This is a pure-Ruby library for working with [Resource Description Framework
33
29
  * Note, changes in mapping hashes to keyword arguments for Ruby 2.7+ may require that arguments be passed more explicitly, especially when the first argument is a Hash and there are optional keyword arguments. In this case, Hash argument may need to be explicitly included within `{}` and the optional keyword arguments may need to be specified using `**{}` if there are no keyword arguments.
34
30
  * Performs auto-detection of input to select appropriate Reader class if one
35
31
  cannot be determined from file characteristics.
32
+ * Provisional support for [RDF*][].
36
33
 
37
34
  ### HTTP requests
38
35
 
@@ -223,6 +220,46 @@ A separate [SPARQL][SPARQL doc] gem builds on basic BGP support to provide full
223
220
  foaf[:name] #=> RDF::URI("http://xmlns.com/foaf/0.1/name")
224
221
  foaf['mbox'] #=> RDF::URI("http://xmlns.com/foaf/0.1/mbox")
225
222
 
223
+ ## RDF* (RDFStar)
224
+
225
+ [RDF.rb][] includes provisional support for [RDF*][] with an N-Triples/N-Quads syntax extension that uses inline statements in the _subject_ or _object_ position.
226
+
227
+ Internally, an `RDF::Statement` is treated as another resource, along with `RDF::URI` and `RDF::Node`, which allows an `RDF::Statement` to have a `#subject` or `#object` which is also an `RDF::Statement`.
228
+
229
+ **Note: This feature is subject to change or elimination as the standards process progresses.**
230
+
231
+ ### Serializing a Graph containing embedded statements
232
+
233
+ require 'rdf/ntriples'
234
+ statement = RDF::Statement(RDF::URI('bob'), RDF::Vocab::FOAF.age, RDF::Literal(23))
235
+ graph = RDF::Graph.new << [statement, RDF::URI("ex:certainty"), RDF::Literal(0.9)]
236
+ graph.dump(:ntriples, validate: false)
237
+ # => '<<<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>>> <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
238
+
239
+ ### Reading a Graph containing embedded statements
240
+
241
+ By default, the N-Triples reader will reject a document containing a subject resource.
242
+
243
+ nt = '<<<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>>> <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
244
+ graph = RDF::Graph.new do |graph|
245
+ RDF::NTriples::Reader.new(nt) {|reader| graph << reader}
246
+ end
247
+ # => RDF::ReaderError
248
+
249
+ Readers support a `rdfstar` option with either `:PG` (Property Graph) or `:SA` (Separate Assertions) modes. In `:PG` mode, statements that are used in the subject or object positions are also implicitly added to the graph:
250
+
251
+ graph = RDF::Graph.new do |graph|
252
+ RDF::NTriples::Reader.new(nt, rdfstar: :PG) {|reader| graph << reader}
253
+ end
254
+ graph.count #=> 2
255
+
256
+ When using the `:SA` mode, only one statement is asserted, although the reified statement is contained within the graph.
257
+
258
+ graph = RDF::Graph.new do |graph|
259
+ RDF::NTriples::Reader.new(nt, rdfstar: :SA) {|reader| graph << reader}
260
+ end
261
+ graph.count #=> 1
262
+
226
263
  ## Documentation
227
264
 
228
265
  <https://rubydoc.info/github/ruby-rdf/rdf>
@@ -249,8 +286,6 @@ A separate [SPARQL][SPARQL doc] gem builds on basic BGP support to provide full
249
286
 
250
287
  ### RDF Serialization
251
288
 
252
- <https://blog.datagraph.org/2010/04/parsing-rdf-with-ruby>
253
-
254
289
  * {RDF::Format}
255
290
  * {RDF::Reader}
256
291
  * {RDF::Writer}
@@ -295,8 +330,6 @@ from BNode identity (i.e., they each entail the other)
295
330
 
296
331
  ### RDF Storage
297
332
 
298
- <https://blog.datagraph.org/2010/04/rdf-repository-howto>
299
-
300
333
  * {RDF::Repository}
301
334
  * {RDF::Countable}
302
335
  * {RDF::Enumerable}
@@ -419,7 +452,7 @@ see or the accompanying {file:UNLICENSE} file.
419
452
  [YARD-GS]: https://rubydoc.info/docs/yard/file/docs/GettingStarted.md
420
453
  [PDD]: https://lists.w3.org/Archives/Public/public-rdf-ruby/2010May/0013.html
421
454
  [JSONLD doc]: https://rubydoc.info/github/ruby-rdf/json-ld
422
- [LinkedData doc]: https://rubydoc.info/github/datagraph/linkeddata
455
+ [LinkedData doc]: https://rubydoc.info/github/ruby-rdf/linkeddata
423
456
  [Microdata doc]: https://rubydoc.info/github/ruby-rdf/rdf-microdata
424
457
  [N3 doc]: https://rubydoc.info/github/ruby-rdf/rdf-n3
425
458
  [RDFa doc]: https://rubydoc.info/github/ruby-rdf/rdf-rdfa
@@ -442,6 +475,7 @@ see or the accompanying {file:UNLICENSE} file.
442
475
  [RDF::TriX]: https://ruby-rdf.github.com/rdf-trix
443
476
  [RDF::Turtle]: https://ruby-rdf.github.com/rdf-turtle
444
477
  [RDF::Raptor]: https://ruby-rdf.github.com/rdf-raptor
478
+ [RDF*]: https://lists.w3.org/Archives/Public/public-rdf-star/
445
479
  [LinkedData]: https://ruby-rdf.github.com/linkeddata
446
480
  [JSON::LD]: https://ruby-rdf.github.com/json-ld
447
481
  [RestClient]: https://rubygems.org/gems/rest-client
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.1
1
+ 3.1.2
@@ -1,85 +1,79 @@
1
- <https://rubygems.org/gems/rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://usefulinc.com/ns/doap#Project> .
2
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#name> "RDF.rb" .
1
+ _:g6720 <http://xmlns.com/foaf/0.1/name> "Hellekin O. Wolf" .
2
+ _:g6720 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "c69f3255ff0639543cc5edfd8116eac8df16fab8" .
3
+ _:g6720 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
4
+ _:g6680 <http://xmlns.com/foaf/0.1/name> "Fumihiro Kato" .
5
+ _:g6680 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "d31fdd6af7a279a89bf09fdc9f7c44d9d08bb930" .
6
+ _:g6680 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
7
+ <https://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/homepage> <https://bhuga.net/> .
8
+ <https://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/name> "Ben Lavender" .
9
+ <https://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox> <mailto:blavender@gmail.com> .
10
+ <https://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "dbf45f4ffbd27b67aa84f02a6a31c144727d10af" .
11
+ <https://bhuga.net/#ben> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
12
+ _:g6660 <http://xmlns.com/foaf/0.1/name> "Joey Geiger" .
13
+ _:g6660 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f412d743150d7b27b8468d56e69ca147917ea6fc" .
14
+ _:g6660 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
15
+ _:g6740 <http://xmlns.com/foaf/0.1/name> "John Fieber" .
16
+ _:g6740 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f7653fc1ac0e82ebb32f092389bd5fc728eaae12" .
17
+ _:g6740 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
18
+ _:g6640 <http://xmlns.com/foaf/0.1/name> "Danny Gagne" .
19
+ _:g6640 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "6de43e9cf7de53427fea9765706703e4d957c17b" .
20
+ _:g6640 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
21
+ _:g6780 <http://xmlns.com/foaf/0.1/name> "Pius Uzamere" .
22
+ _:g6780 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "bedbbf2451e5beb38d59687c0460032aff92cd3c" .
23
+ _:g6780 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
24
+ _:g6700 <http://xmlns.com/foaf/0.1/name> "Naoki Kawamukai" .
25
+ _:g6700 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "5bdcd8e2af4f5952aaeeffbdd371c41525ec761d" .
26
+ _:g6700 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
3
27
  <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#homepage> <https://rubygems.org/gems/rdf> .
4
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#license> <http://creativecommons.org/licenses/publicdomain/> .
5
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#shortdesc> "A Ruby library for working with Resource Description Framework (RDF) data."@en .
6
28
  <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#description> "RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data."@en .
7
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#created> "2007-10-23" .
8
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#platform> "Ruby" .
9
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Resource_Description_Framework> .
10
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Ruby_(programming_language)> .
11
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#implements> <http://www.w3.org/TR/rdf11-concepts/> .
12
29
  <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#implements> <http://www.w3.org/TR/n-quads/> .
30
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#implements> <http://www.w3.org/TR/rdf11-concepts/> .
13
31
  <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#implements> <http://www.w3.org/TR/n-triples/> .
32
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <https://bhuga.net/#ben> .
33
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <https://greggkellogg.net/foaf#me> .
34
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <https://ar.to/#self> .
14
35
  <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#download-page> <https://rubygems.org/gems/rdf/> .
15
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#bug-database> <http://github.com/ruby-rdf/rdf/issues> .
16
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://ar.to/> .
17
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://blog.datagraph.org/> .
18
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#vendor> <http://datagraph.org/> .
19
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://ar.to/#self> .
20
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://bhuga.net/#ben> .
21
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://greggkellogg.net/foaf#me> .
22
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://ar.to/#self> .
23
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://bhuga.net/#ben> .
24
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://greggkellogg.net/foaf#me> .
25
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://ar.to/#self> .
26
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://bhuga.net/#ben> .
27
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://greggkellogg.net/foaf#me> .
28
- _:g70186318075540 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
29
- _:g70186318075540 <http://xmlns.com/foaf/0.1/name> "Călin Ardelean" .
30
- _:g70186318075540 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "274bd18402fc773ffc0606996aa1fb90b603aa29" .
31
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186318075540 .
32
- _:g70186318591960 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
33
- _:g70186318591960 <http://xmlns.com/foaf/0.1/name> "Danny Gagne" .
34
- _:g70186318591960 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "6de43e9cf7de53427fea9765706703e4d957c17b" .
35
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186318591960 .
36
- _:g70186318228820 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
37
- _:g70186318228820 <http://xmlns.com/foaf/0.1/name> "Joey Geiger" .
38
- _:g70186318228820 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f412d743150d7b27b8468d56e69ca147917ea6fc" .
39
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186318228820 .
40
- _:g70186318408440 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
41
- _:g70186318408440 <http://xmlns.com/foaf/0.1/name> "Fumihiro Kato" .
42
- _:g70186318408440 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "d31fdd6af7a279a89bf09fdc9f7c44d9d08bb930" .
43
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186318408440 .
44
- _:g70186318725620 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
45
- _:g70186318725620 <http://xmlns.com/foaf/0.1/name> "Naoki Kawamukai" .
46
- _:g70186318725620 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "5bdcd8e2af4f5952aaeeffbdd371c41525ec761d" .
47
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186318725620 .
48
- _:g70186319866820 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
49
- _:g70186319866820 <http://xmlns.com/foaf/0.1/name> "Hellekin O. Wolf" .
50
- _:g70186319866820 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "c69f3255ff0639543cc5edfd8116eac8df16fab8" .
51
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186319866820 .
52
- _:g70186321042840 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
53
- _:g70186321042840 <http://xmlns.com/foaf/0.1/name> "John Fieber" .
54
- _:g70186321042840 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f7653fc1ac0e82ebb32f092389bd5fc728eaae12" .
55
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186321042840 .
56
- _:g70186319319640 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
57
- _:g70186319319640 <http://xmlns.com/foaf/0.1/name> "Keita Urashima" .
58
- _:g70186319319640 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "2b4247b6fd5bb4a1383378f325784318680d5ff9" .
59
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186319319640 .
60
- _:g70186321063140 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
61
- _:g70186321063140 <http://xmlns.com/foaf/0.1/name> "Pius Uzamere" .
62
- _:g70186321063140 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "bedbbf2451e5beb38d59687c0460032aff92cd3c" .
63
- <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g70186321063140 .
64
- <https://rubygems.org/gems/rdf> <http://xmlns.com/foaf/0.1/maker> <http://ar.to/#self> .
65
- <https://rubygems.org/gems/rdf> <http://purl.org/dc/terms/creator> <http://ar.to/#self> .
66
- <http://ar.to/#self> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
67
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/name> "Arto Bendiken" .
68
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox> <mailto:arto@bendiken.net> .
69
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "a033f652c84a4d73b8c26d318c2395699dd2bdfb" .
70
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "d0737cceb55eb7d740578d2db1bc0727e3ed49ce" .
71
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/homepage> <http://ar.to/> .
72
- <http://ar.to/#self> <http://xmlns.com/foaf/0.1/made> <https://rubygems.org/gems/rdf> .
73
- <http://ar.to/#self> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> <http://datagraph.org/bendiken/foaf> .
74
- <http://bhuga.net/#ben> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
75
- <http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/name> "Ben Lavender" .
76
- <http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox> <mailto:blavender@gmail.com> .
77
- <http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "dbf45f4ffbd27b67aa84f02a6a31c144727d10af" .
78
- <http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/homepage> <http://bhuga.net/> .
79
- <http://bhuga.net/#ben> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> <http://datagraph.org/bhuga/foaf> .
80
- <http://greggkellogg.net/foaf#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
81
- <http://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/name> "Gregg Kellogg" .
82
- <http://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/mbox> <mailto:gregg@greggkellogg.net> .
83
- <http://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "35bc44e6d0070e5ad50ccbe0d24403c96af2b9bd" .
84
- <http://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/homepage> <http://greggkellogg.net/> .
85
- <http://greggkellogg.net/foaf#me> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> <http://greggkellogg.net/foaf> .
36
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <https://bhuga.net/#ben> .
37
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <https://greggkellogg.net/foaf#me> .
38
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <https://ar.to/#self> .
39
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#created> "2007-10-23" .
40
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#shortdesc> "A Ruby library for working with Resource Description Framework (RDF) data."@en .
41
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <https://ar.to/> .
42
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <https://greggkellogg.net/> .
43
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#license> <https://unlicense.org/1.0/> .
44
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Ruby_(programming_language)> .
45
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Resource_Description_Framework> .
46
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#name> "RDF.rb" .
47
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#programming-language> "Ruby" .
48
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6720 .
49
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6680 .
50
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6660 .
51
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6740 .
52
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6640 .
53
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6780 .
54
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6700 .
55
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6560 .
56
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:g6760 .
57
+ <https://rubygems.org/gems/rdf> <http://xmlns.com/foaf/0.1/maker> <https://ar.to/#self> .
58
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <https://greggkellogg.net/foaf#me> .
59
+ <https://rubygems.org/gems/rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://usefulinc.com/ns/doap#Project> .
60
+ <https://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#bug-database> <https://github.com/ruby-rdf/rdf/issues> .
61
+ <https://rubygems.org/gems/rdf> <http://purl.org/dc/terms/creator> <https://ar.to/#self> .
62
+ <https://greggkellogg.net/foaf#me> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> <https://greggkellogg.net/foaf> .
63
+ <https://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/homepage> <https://greggkellogg.net/> .
64
+ <https://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/name> "Gregg Kellogg" .
65
+ <https://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/mbox> <mailto:gregg@greggkellogg.net> .
66
+ <https://greggkellogg.net/foaf#me> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "35bc44e6d0070e5ad50ccbe0d24403c96af2b9bd" .
67
+ <https://greggkellogg.net/foaf#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
68
+ <https://ar.to/#self> <http://xmlns.com/foaf/0.1/homepage> <https://ar.to/> .
69
+ <https://ar.to/#self> <http://xmlns.com/foaf/0.1/name> "Arto Bendiken" .
70
+ <https://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox> <mailto:arto@bendiken.net> .
71
+ <https://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "a033f652c84a4d73b8c26d318c2395699dd2bdfb" .
72
+ <https://ar.to/#self> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
73
+ <https://ar.to/#self> <http://xmlns.com/foaf/0.1/made> <https://rubygems.org/gems/rdf> .
74
+ _:g6760 <http://xmlns.com/foaf/0.1/name> "Keita Urashima" .
75
+ _:g6760 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "2b4247b6fd5bb4a1383378f325784318680d5ff9" .
76
+ _:g6760 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
77
+ _:g6560 <http://xmlns.com/foaf/0.1/name> "Călin Ardelean" .
78
+ _:g6560 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "274bd18402fc773ffc0606996aa1fb90b603aa29" .
79
+ _:g6560 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
data/lib/rdf.rb CHANGED
@@ -59,16 +59,18 @@ module RDF
59
59
  # RDF vocabularies
60
60
  autoload :Vocabulary, 'rdf/vocabulary'
61
61
  autoload :StrictVocabulary, 'rdf/vocabulary'
62
- VOCABS = Dir.glob(File.expand_path("../rdf/vocab/*.rb", __FILE__)).map { |f| File.basename(f)[0...-(File.extname(f).size)].to_sym } rescue []
63
62
 
64
- # Use const_missing instead of autoload to load most vocabularies so we can provide deprecation messages
65
- def self.const_missing(constant)
66
- if VOCABS.include?(constant.to_s.downcase.to_sym)
67
- require "rdf/vocab/#{constant.to_s.downcase}"
68
- const_get(constant)
69
- else
70
- super
71
- end
63
+ VOCABS = {
64
+ owl: {uri: "http://www.w3.org/2002/07/owl#", class_name: "OWL"},
65
+ rdfs: {uri: "http://www.w3.org/2000/01/rdf-schema#", class_name: "RDFS"},
66
+ rdfv: {uri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", class_name: "RDFV"},
67
+ xsd: {uri: "http://www.w3.org/2001/XMLSchema#", class_name: "XSD"},
68
+ }
69
+
70
+ # Autoload vocabularies
71
+ VOCABS.each do |id, params|
72
+ v = (params[:class_name] ||= id.to_s.upcase).to_sym
73
+ autoload v, File.expand_path("../rdf/vocab/#{id}", __FILE__)
72
74
  end
73
75
 
74
76
  # Utilities
@@ -200,8 +202,8 @@ module RDF
200
202
  #
201
203
  # @param (see RDF::Vocabulary#initialize)
202
204
  # @return [Class]
203
- def self.StrictVocabulary(prefix)
204
- StrictVocabulary.create(prefix)
205
+ def self.StrictVocabulary(uri)
206
+ StrictVocabulary.create(uri)
205
207
  end
206
208
 
207
209
  ##
@@ -71,6 +71,7 @@ module RDF
71
71
  # * `:literal_equality' preserves [term-equality](https://www.w3.org/TR/rdf11-concepts/#dfn-literal-term-equality) for literals. Literals are equal only if their lexical values and datatypes are equal, character by character. Literals may be "inlined" to value-space for efficiency only if `:literal_equality` is `false`.
72
72
  # * `:validity` allows a concrete Enumerable implementation to indicate that it does or does not support valididty checking. By default implementations are assumed to support validity checking.
73
73
  # * `:skolemize` supports [Skolemization](https://www.w3.org/wiki/BnodeSkolemization) of an `Enumerable`. Implementations supporting this feature must implement a `#skolemize` method, taking a base URI used for minting URIs for BNodes as stable identifiers and a `#deskolemize` method, also taking a base URI used for turning URIs having that prefix back into the same BNodes which were originally skolemized.
74
+ # * `:rdfstar` supports RDF* where statements may be subjects or objects of other statements.
74
75
  #
75
76
  # @param [Symbol, #to_sym] feature
76
77
  # @return [Boolean]
@@ -128,6 +128,14 @@ module RDF
128
128
  # method in order to provide for storage-specific optimized triple
129
129
  # pattern matching.
130
130
  #
131
+ # ## RDFStar (RDF*)
132
+ #
133
+ # Statements may have embedded statements as either a subject or object, recursively.
134
+ #
135
+ # Patterns may also have embedded patterns as either a subject or object, recursively.
136
+ #
137
+ # When matching, match an embedded pattern against embedded statements, recursively. (see {RDF::Query::Pattern#eql?})
138
+ #
131
139
  # @param [RDF::Query::Pattern] pattern
132
140
  # the query pattern to match
133
141
  # @param [Hash{Symbol => Object}] options ({})
@@ -54,10 +54,12 @@ module RDF
54
54
  # @overload insert(*statements)
55
55
  # @param [Array<RDF::Statement>] statements
56
56
  # @return [self]
57
+ # @raise [ArgumentError] on an attempt to insert an embedded statement when it is not supported
57
58
  #
58
59
  # @overload insert(statements)
59
60
  # @param [Enumerable<RDF::Statement>] statements
60
61
  # @return [self]
62
+ # @raise [ArgumentError] on an attempt to insert an embedded statement when it is not supported
61
63
  def insert(*statements)
62
64
  coerce_statements(statements) { |value| insert_statements value }
63
65
 
@@ -120,10 +122,14 @@ module RDF
120
122
  #
121
123
  # @param [RDF::Enumerable] statements
122
124
  # @return [void]
125
+ # @raise [ArgumentError] on an attempt to insert an embedded statement when it is not supported
123
126
  # @since 0.1.6
124
127
  def insert_statements(statements)
125
128
  each = statements.respond_to?(:each_statement) ? :each_statement : :each
126
129
  statements.__send__(each) do |statement|
130
+ if statement.embedded? && respond_to?(:supports?) && !supports?(:rdfstar)
131
+ raise ArgumentError, "Wriable does not support embedded statements"
132
+ end
127
133
  insert_statement(statement)
128
134
  end
129
135
  end
@@ -138,6 +144,7 @@ module RDF
138
144
  #
139
145
  # @param [RDF::Statement] statement
140
146
  # @return [void]
147
+ # @raise [ArgumentError] on an attempt to insert an embedded statement when it is not supported
141
148
  # @abstract
142
149
  def insert_statement(statement)
143
150
  raise NotImplementedError.new("#{self.class}#insert_statement")
@@ -104,7 +104,7 @@ module RDF
104
104
  # @private
105
105
  # @see RDF::Enumerable#supports?
106
106
  def supports?(feature)
107
- return true if feature == :graph_name
107
+ return true if [:graph_name, :rdfstar].include?(feature)
108
108
  super
109
109
  end
110
110
 
@@ -283,6 +283,9 @@ module RDF
283
283
  # @private
284
284
  # @see RDF::Mutable#insert
285
285
  def insert_statement(statement)
286
+ if statement.embedded? && !@data.supports?(:rdfstar)
287
+ raise ArgumentError, "Graph does not support embedded statements"
288
+ end
286
289
  statement = statement.dup
287
290
  statement.graph_name = graph_name
288
291
  @data.insert(statement)
@@ -26,7 +26,7 @@ module RDF
26
26
  # RDF::Statement(s, p, "o")
27
27
  #
28
28
  class Statement
29
- include RDF::Value
29
+ include RDF::Resource
30
30
 
31
31
  ##
32
32
  # @private
@@ -112,7 +112,7 @@ module RDF
112
112
  elsif @subject.nil?
113
113
  nil
114
114
  else
115
- raise ArgumentError, "expected subject to be nil or a term, was #{@subject.inspect}"
115
+ raise ArgumentError, "expected subject to be nil or a resource, was #{@subject.inspect}"
116
116
  end
117
117
  @predicate = Node.intern(@predicate) if @predicate.is_a?(Symbol)
118
118
  @object = if @object.is_a?(Value)
@@ -124,6 +124,15 @@ module RDF
124
124
  else
125
125
  Literal.new(@object)
126
126
  end
127
+ @graph_name = if @graph_name.is_a?(Value)
128
+ @graph_name.to_term
129
+ elsif @graph_name.is_a?(Symbol)
130
+ Node.intern(@graph_name)
131
+ elsif !@graph_name
132
+ @graph_name
133
+ else
134
+ raise ArgumentError, "expected graph_name to be nil or a resource, was #{@graph_name.inspect}"
135
+ end
127
136
  end
128
137
 
129
138
  ##
@@ -140,10 +149,18 @@ module RDF
140
149
  #
141
150
  # @return [Boolean]
142
151
  def variable?
143
- !(has_subject? && subject.resource? &&
144
- has_predicate? && predicate.resource? &&
145
- has_object? && (object.resource? || object.literal?) &&
146
- (has_graph? ? graph_name.resource? : true))
152
+ !(has_subject? && subject.constant? &&
153
+ has_predicate? && predicate.constant? &&
154
+ has_object? && object.constant? &&
155
+ (has_graph? ? graph_name.constant? : true))
156
+ end
157
+
158
+ ##
159
+ # Returns `true` if any element of the statement is, itself, a statement.
160
+ #
161
+ # @return [Boolean]
162
+ def embedded?
163
+ subject && subject.statement? || object && object.statement?
147
164
  end
148
165
 
149
166
  ##
@@ -386,7 +403,13 @@ module RDF
386
403
  # @return [String]
387
404
  def to_s
388
405
  (graph_name ? to_quad : to_triple).map do |term|
389
- term.respond_to?(:to_base) ? term.to_base : term.inspect
406
+ if term.is_a?(Statement)
407
+ "<<#{term.to_s[0..-3]}>>"
408
+ elsif term.respond_to?(:to_base)
409
+ term.to_base
410
+ else
411
+ term.inspect
412
+ end
390
413
  end.join(" ") + " ."
391
414
  end
392
415