rdf 0.1.10 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTORS +3 -0
- data/README +68 -34
- data/VERSION +1 -1
- data/etc/doap.nt +16 -0
- data/lib/rdf.rb +24 -18
- data/lib/rdf/format.rb +47 -22
- data/lib/rdf/mixin/countable.rb +42 -0
- data/lib/rdf/mixin/durable.rb +2 -0
- data/lib/rdf/mixin/enumerable.rb +72 -50
- data/lib/rdf/mixin/inferable.rb +2 -3
- data/lib/rdf/mixin/mutable.rb +51 -107
- data/lib/rdf/mixin/queryable.rb +43 -11
- data/lib/rdf/mixin/readable.rb +2 -0
- data/lib/rdf/mixin/writable.rb +130 -0
- data/lib/rdf/model/graph.rb +47 -14
- data/lib/rdf/model/literal.rb +12 -2
- data/lib/rdf/model/node.rb +51 -2
- data/lib/rdf/model/resource.rb +7 -10
- data/lib/rdf/model/statement.rb +59 -41
- data/lib/rdf/model/uri.rb +68 -8
- data/lib/rdf/model/value.rb +26 -31
- data/lib/rdf/ntriples/reader.rb +7 -6
- data/lib/rdf/ntriples/writer.rb +90 -0
- data/lib/rdf/query.rb +6 -6
- data/lib/rdf/query/pattern.rb +13 -15
- data/lib/rdf/query/solution.rb +1 -1
- data/lib/rdf/query/variable.rb +3 -1
- data/lib/rdf/reader.rb +2 -1
- data/lib/rdf/repository.rb +97 -47
- data/lib/rdf/util.rb +4 -0
- data/lib/rdf/util/aliasing.rb +51 -0
- data/lib/rdf/util/cache.rb +131 -0
- data/lib/rdf/version.rb +3 -4
- data/lib/rdf/vocab.rb +11 -10
- data/lib/rdf/vocab/cert.rb +13 -0
- data/lib/rdf/vocab/geo.rb +13 -0
- data/lib/rdf/vocab/rsa.rb +12 -0
- data/lib/rdf/writer.rb +102 -109
- metadata +23 -15
data/CONTRIBUTORS
ADDED
data/README
CHANGED
@@ -21,20 +21,34 @@ Features
|
|
21
21
|
not modify any of Ruby's core classes or standard library.
|
22
22
|
* Based entirely on Ruby's autoloading, meaning that you can generally make
|
23
23
|
use of any one part of the library without needing to load up the rest.
|
24
|
-
* Compatible with Ruby 1.8.
|
24
|
+
* Compatible with Ruby 1.8.7+, Ruby 1.9.x, and JRuby 1.4/1.5.
|
25
|
+
* Compatible with older Ruby versions with the help of the [Backports][] gem.
|
25
26
|
|
26
27
|
Examples
|
27
28
|
--------
|
28
29
|
|
30
|
+
require 'rubygems'
|
29
31
|
require 'rdf'
|
30
32
|
|
31
|
-
###
|
33
|
+
### Writing RDF data using the N-Triples format
|
32
34
|
|
33
|
-
|
34
|
-
p = RDF::DC.creator
|
35
|
-
o = RDF::URI("http://ar.to/#self")
|
35
|
+
require 'rdf/ntriples'
|
36
36
|
|
37
|
-
|
37
|
+
RDF::Writer.open("hello.nt") do |writer|
|
38
|
+
writer << RDF::Graph.new do |graph|
|
39
|
+
graph << [:hello, RDF::DC.title, "Hello, world!"]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
### Reading RDF data in the N-Triples format
|
44
|
+
|
45
|
+
require 'rdf/ntriples'
|
46
|
+
|
47
|
+
RDF::Reader.open("http://rdf.rubyforge.org/doap.nt") do |reader|
|
48
|
+
reader.each_statement do |statement|
|
49
|
+
puts statement.inspect
|
50
|
+
end
|
51
|
+
end
|
38
52
|
|
39
53
|
### Using pre-defined RDF vocabularies
|
40
54
|
|
@@ -55,14 +69,6 @@ Examples
|
|
55
69
|
foaf[:name] #=> RDF::URI("http://xmlns.com/foaf/0.1/name")
|
56
70
|
foaf['mbox'] #=> RDF::URI("http://xmlns.com/foaf/0.1/mbox")
|
57
71
|
|
58
|
-
### Reading N-Triples data
|
59
|
-
|
60
|
-
RDF::Reader.open("spec/data/test.nt") do |reader|
|
61
|
-
reader.each_statement do |statement|
|
62
|
-
puts statement.inspect
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
72
|
Documentation
|
67
73
|
-------------
|
68
74
|
|
@@ -70,6 +76,8 @@ Documentation
|
|
70
76
|
|
71
77
|
### RDF Object Model
|
72
78
|
|
79
|
+
<http://blog.datagraph.org/2010/03/rdf-for-ruby>
|
80
|
+
|
73
81
|
* {RDF::Value}
|
74
82
|
* {RDF::Literal}
|
75
83
|
* {RDF::Resource}
|
@@ -80,6 +88,8 @@ Documentation
|
|
80
88
|
|
81
89
|
### RDF Serialization
|
82
90
|
|
91
|
+
<http://blog.datagraph.org/2010/04/parsing-rdf-with-ruby>
|
92
|
+
|
83
93
|
* {RDF::Format}
|
84
94
|
* {RDF::Reader}
|
85
95
|
* {RDF::Writer}
|
@@ -94,11 +104,14 @@ Documentation
|
|
94
104
|
|
95
105
|
### RDF Storage
|
96
106
|
|
107
|
+
<http://blog.datagraph.org/2010/04/rdf-repository-howto>
|
108
|
+
|
97
109
|
* {RDF::Repository}
|
110
|
+
* {RDF::Countable}
|
98
111
|
* {RDF::Enumerable}
|
99
|
-
* {RDF::Durable}
|
100
|
-
* {RDF::Mutable}
|
101
112
|
* {RDF::Queryable}
|
113
|
+
* {RDF::Mutable}
|
114
|
+
* {RDF::Durable}
|
102
115
|
* [`RDF::DataObjects`](http://rdf.rubyforge.org/do/) (plugin)
|
103
116
|
* [`RDF::Sesame`](http://rdf.rubyforge.org/sesame/) (plugin)
|
104
117
|
|
@@ -112,13 +125,17 @@ Documentation
|
|
112
125
|
### RDF Vocabularies
|
113
126
|
|
114
127
|
* {RDF::CC} - Creative Commons (CC)
|
128
|
+
* {RDF::CERT} - W3 Authentication Certificate (CERT)
|
115
129
|
* {RDF::DC} - Dublin Core (DC)
|
130
|
+
* {RDF::DC11} - Dublin Core 1.1 (DC11) _deprecated_
|
116
131
|
* {RDF::DOAP} - Description of a Project (DOAP)
|
117
132
|
* {RDF::EXIF} - Exchangeable Image File Format (EXIF)
|
118
133
|
* {RDF::FOAF} - Friend of a Friend (FOAF)
|
134
|
+
* {RDF::GEO} - WGS84 Geo Positioning (GEO)
|
119
135
|
* {RDF::HTTP} - Hypertext Transfer Protocol (HTTP)
|
120
136
|
* {RDF::OWL} - Web Ontology Language (OWL)
|
121
137
|
* {RDF::RDFS} - RDF Schema (RDFS)
|
138
|
+
* {RDF::RSA} - W3 RSA Keys (RSA)
|
122
139
|
* {RDF::RSS} - RDF Site Summary (RSS)
|
123
140
|
* {RDF::SIOC} - Semantically-Interlinked Online Communities (SIOC)
|
124
141
|
* {RDF::SKOS} - Simple Knowledge Organization System (SKOS)
|
@@ -129,15 +146,17 @@ Documentation
|
|
129
146
|
Dependencies
|
130
147
|
------------
|
131
148
|
|
132
|
-
* [
|
149
|
+
* [Ruby](http://ruby-lang.org/) (>= 1.8.7) or (>= 1.8.1 with [Backports][])
|
150
|
+
* [Addressable](http://rubygems.org/gems/addressable) (>= 2.1.2)
|
133
151
|
|
134
152
|
Installation
|
135
153
|
------------
|
136
154
|
|
137
|
-
The recommended installation method is via RubyGems.
|
138
|
-
official release
|
155
|
+
The recommended installation method is via [RubyGems](http://rubygems.org/).
|
156
|
+
To install the latest official release of RDF.rb, do:
|
139
157
|
|
140
|
-
% [sudo] gem install rdf
|
158
|
+
% [sudo] gem install rdf # Ruby 1.8.7+ or 1.9.x
|
159
|
+
% [sudo] gem install backports rdf # Ruby 1.8.1+
|
141
160
|
|
142
161
|
Download
|
143
162
|
--------
|
@@ -161,29 +180,44 @@ Resources
|
|
161
180
|
* <http://raa.ruby-lang.org/project/rdf/>
|
162
181
|
* <http://www.ohloh.net/p/rdf>
|
163
182
|
|
164
|
-
See Also
|
165
|
-
--------
|
166
|
-
|
167
|
-
* [RDF::BERT](http://rdf.rubyforge.org/bert/)
|
168
|
-
* [RDF::Isomorphic](http://rdf.rubyforge.org/isomorphic/)
|
169
|
-
* [RDF::Spec](http://rdf.rubyforge.org/spec/)
|
170
|
-
* [RDFS.rb](http://rdfs.rubyforge.org/)
|
171
|
-
* [RDFize](http://rdfize.rubyforge.org/)
|
172
|
-
* [RDFbus](http://rdfbus.rubyforge.org/)
|
173
|
-
* [RDFcache](http://rdfcache.rubyforge.org/)
|
174
|
-
* [RDFgrid](http://rdfgrid.rubyforge.org/)
|
175
|
-
* [Trinity](http://trinity.datagraph.org/)
|
176
|
-
|
177
183
|
Authors
|
178
184
|
-------
|
179
185
|
|
180
186
|
* [Arto Bendiken](mailto:arto.bendiken@gmail.com) - <http://ar.to/>
|
181
187
|
* [Ben Lavender](mailto:blavender@gmail.com) - <http://bhuga.net/>
|
182
188
|
|
189
|
+
Contributors
|
190
|
+
------------
|
191
|
+
|
192
|
+
* [Hellekin O. Wolf](mailto:hellekin@cepheide.org) - <http://hellekin.cepheide.org/>
|
193
|
+
* [John Fieber](mailto:jrf@ursamaris.org) - <http://github.com/jfieber>
|
194
|
+
* [Pius Uzamere](mailto:pius@alum.mit.edu) - <http://pius.me/>
|
195
|
+
|
196
|
+
Contributing
|
197
|
+
------------
|
198
|
+
|
199
|
+
* Do your best to adhere to the existing coding conventions and idioms.
|
200
|
+
* Don't use hard tabs, and don't leave trailing whitespace on any line.
|
201
|
+
* Do document every method you add using [YARD][] annotations. Read the
|
202
|
+
[tutorial][YARD-GS] or just look at the existing code for examples.
|
203
|
+
* Don't touch the `.gemspec` or `VERSION` files. If you need to change them,
|
204
|
+
do so on your private branch only.
|
205
|
+
* Do feel free to add yourself to the `CONTRIBUTORS` file and the
|
206
|
+
corresponding list in the the `README`. Alphabetical order applies.
|
207
|
+
* Don't touch the `AUTHORS` file. If your contributions are significant
|
208
|
+
enough, be assured we will eventually add you in there.
|
209
|
+
* Do note that in order for us to merge any non-trivial changes (as a rule
|
210
|
+
of thumb, additions larger than about 15 lines of code), we need an
|
211
|
+
explicit [public domain dedication][PDD] on record from you.
|
212
|
+
|
183
213
|
License
|
184
214
|
-------
|
185
215
|
|
186
216
|
RDF.rb is free and unencumbered public domain software. For more
|
187
217
|
information, see <http://unlicense.org/> or the accompanying UNLICENSE file.
|
188
218
|
|
189
|
-
[RDF]:
|
219
|
+
[RDF]: http://www.w3.org/RDF/
|
220
|
+
[YARD]: http://yardoc.org/
|
221
|
+
[YARD-GS]: http://yardoc.org/docs/yard/file:docs/GettingStarted.md
|
222
|
+
[PDD]: http://lists.w3.org/Archives/Public/public-rdf-ruby/2010May/0013.html
|
223
|
+
[Backports]: http://rubygems.org/gems/backports
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/etc/doap.nt
CHANGED
@@ -3,23 +3,30 @@
|
|
3
3
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/homepage> <http://ar.to/> .
|
4
4
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/made> <http://rubygems.org/gems/rdf> .
|
5
5
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox> <mailto:arto.bendiken@gmail.com> .
|
6
|
+
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "a033f652c84a4d73b8c26d318c2395699dd2bdfb" .
|
7
|
+
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "d0737cceb55eb7d740578d2db1bc0727e3ed49ce" .
|
6
8
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/name> "Arto Bendiken" .
|
7
9
|
<http://bhuga.net/#ben> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
8
10
|
<http://bhuga.net/#ben> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> <http://datagraph.org/bhuga/foaf> .
|
9
11
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/homepage> <http://bhuga.net/> .
|
10
12
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox> <mailto:blavender@gmail.com> .
|
13
|
+
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "dbf45f4ffbd27b67aa84f02a6a31c144727d10af" .
|
11
14
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/name> "Ben Lavender" .
|
12
15
|
<http://rubygems.org/gems/rdf> <http://purl.org/dc/terms/creator> <http://ar.to/#self> .
|
13
16
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://ar.to/> .
|
14
17
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://blog.datagraph.org/> .
|
15
18
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#bug-database> <http://github.com/bendiken/rdf/issues> .
|
16
19
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Resource_Description_Framework> .
|
20
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#category> <http://dbpedia.org/resource/Ruby_(programming_language)> .
|
17
21
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#created> "2007-10-23" .
|
18
22
|
<http://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 .
|
19
23
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://ar.to/#self> .
|
20
24
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://bhuga.net/#ben> .
|
21
25
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://ar.to/#self> .
|
22
26
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#download-page> <http://rubyforge.org/projects/rdf/> .
|
27
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid1 .
|
28
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid2 .
|
29
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid3 .
|
23
30
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#homepage> <http://rdf.rubyforge.org/> .
|
24
31
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#license> <http://creativecommons.org/licenses/publicdomain/> .
|
25
32
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://ar.to/#self> .
|
@@ -29,3 +36,12 @@
|
|
29
36
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#vendor> <http://datagraph.org/> .
|
30
37
|
<http://rubygems.org/gems/rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://usefulinc.com/ns/doap#Project> .
|
31
38
|
<http://rubygems.org/gems/rdf> <http://xmlns.com/foaf/0.1/maker> <http://ar.to/#self> .
|
39
|
+
_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
40
|
+
_:genid1 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "c69f3255ff0639543cc5edfd8116eac8df16fab8" .
|
41
|
+
_:genid1 <http://xmlns.com/foaf/0.1/name> "Hellekin O. Wolf" .
|
42
|
+
_:genid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
43
|
+
_:genid2 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f7653fc1ac0e82ebb32f092389bd5fc728eaae12" .
|
44
|
+
_:genid2 <http://xmlns.com/foaf/0.1/name> "John Fieber" .
|
45
|
+
_:genid3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
46
|
+
_:genid3 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "bedbbf2451e5beb38d59687c0460032aff92cd3c" .
|
47
|
+
_:genid3 <http://xmlns.com/foaf/0.1/name> "Pius Uzamere" .
|
data/lib/rdf.rb
CHANGED
@@ -1,5 +1,20 @@
|
|
1
|
-
require 'enumerator'
|
1
|
+
require 'enumerator'
|
2
2
|
require 'open-uri'
|
3
|
+
|
4
|
+
if RUBY_VERSION < '1.8.7'
|
5
|
+
# @see http://rubygems.org/gems/backports
|
6
|
+
begin
|
7
|
+
require 'backports/1.8.7'
|
8
|
+
rescue LoadError
|
9
|
+
begin
|
10
|
+
require 'rubygems'
|
11
|
+
require 'backports/1.8.7'
|
12
|
+
rescue LoadError
|
13
|
+
abort "RDF.rb requires Ruby 1.8.7 or the Backports gem (hint: `gem install backports')."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
3
18
|
require 'rdf/version'
|
4
19
|
|
5
20
|
module RDF
|
@@ -7,6 +22,7 @@ module RDF
|
|
7
22
|
Enumerator = defined?(::Enumerator) ? ::Enumerator : ::Enumerable::Enumerator
|
8
23
|
|
9
24
|
# RDF mixins
|
25
|
+
autoload :Countable, 'rdf/mixin/countable'
|
10
26
|
autoload :Durable, 'rdf/mixin/durable'
|
11
27
|
autoload :Enumerable, 'rdf/mixin/enumerable'
|
12
28
|
autoload :Inferable, 'rdf/mixin/inferable'
|
@@ -43,21 +59,11 @@ module RDF
|
|
43
59
|
|
44
60
|
# RDF vocabularies
|
45
61
|
autoload :Vocabulary, 'rdf/vocab'
|
46
|
-
|
47
|
-
autoload
|
48
|
-
|
49
|
-
|
50
|
-
autoload :
|
51
|
-
autoload :FOAF, 'rdf/vocab/foaf'
|
52
|
-
autoload :HTTP, 'rdf/vocab/http'
|
53
|
-
autoload :OWL, 'rdf/vocab/owl'
|
54
|
-
autoload :RDFS, 'rdf/vocab/rdfs'
|
55
|
-
autoload :RSS, 'rdf/vocab/rss'
|
56
|
-
autoload :SIOC, 'rdf/vocab/sioc'
|
57
|
-
autoload :SKOS, 'rdf/vocab/skos'
|
58
|
-
autoload :WOT, 'rdf/vocab/wot'
|
59
|
-
autoload :XHTML, 'rdf/vocab/xhtml'
|
60
|
-
autoload :XSD, 'rdf/vocab/xsd'
|
62
|
+
VOCABS = Dir.glob(File.join(File.dirname(__FILE__), 'rdf', 'vocab', '*.rb')).map { |f| File.basename(f)[0...-(File.extname(f).size)].to_sym } rescue []
|
63
|
+
VOCABS.each { |v| autoload v.to_s.upcase.to_sym, "rdf/vocab/#{v}" unless v == :rdf }
|
64
|
+
|
65
|
+
# Utilities
|
66
|
+
autoload :Util, 'rdf/util'
|
61
67
|
|
62
68
|
##
|
63
69
|
# Alias for `RDF::Resource.new`.
|
@@ -132,7 +138,7 @@ module RDF
|
|
132
138
|
# @return [#to_s] property
|
133
139
|
# @return [URI]
|
134
140
|
def self.[](property)
|
135
|
-
RDF::URI.
|
141
|
+
RDF::URI.intern([to_uri.to_s, property.to_s].join)
|
136
142
|
end
|
137
143
|
|
138
144
|
##
|
@@ -156,7 +162,7 @@ module RDF
|
|
156
162
|
##
|
157
163
|
# @return [URI]
|
158
164
|
def self.to_uri
|
159
|
-
RDF::URI.
|
165
|
+
RDF::URI.intern("http://www.w3.org/1999/02/22-rdf-syntax-ns#")
|
160
166
|
end
|
161
167
|
|
162
168
|
class << self
|
data/lib/rdf/format.rb
CHANGED
@@ -109,7 +109,7 @@ module RDF
|
|
109
109
|
else
|
110
110
|
format = format.to_s.downcase
|
111
111
|
@@subclasses.each do |klass|
|
112
|
-
if klass.name.to_s.split('::').map
|
112
|
+
if klass.name.to_s.split('::').map(&:downcase).include?(format)
|
113
113
|
return klass
|
114
114
|
end
|
115
115
|
end
|
@@ -225,6 +225,51 @@ module RDF
|
|
225
225
|
alias_method :writer_class, :writer
|
226
226
|
end
|
227
227
|
|
228
|
+
##
|
229
|
+
# Retrieves or defines MIME content types for this RDF serialization format.
|
230
|
+
#
|
231
|
+
# @overload content_type(type, options)
|
232
|
+
# Retrieves or defines the MIME content type for this RDF serialization format.
|
233
|
+
#
|
234
|
+
# Optionally also defines alias MIME content types for this RDF serialization format.
|
235
|
+
#
|
236
|
+
# Optionally also defines a file extension, or a list of file
|
237
|
+
# extensions, that should be mapped to the given MIME type and handled
|
238
|
+
# by this class.
|
239
|
+
#
|
240
|
+
# @param [String] type
|
241
|
+
# @param [Hash{Symbol => Object}] options
|
242
|
+
# @option options [String] :alias (nil)
|
243
|
+
# @option options [Array<String>] :aliases (nil)
|
244
|
+
# @option options [Symbol] :extension (nil)
|
245
|
+
# @option options [Array<Symbol>] :extensions (nil)
|
246
|
+
# @return [void]
|
247
|
+
#
|
248
|
+
# @overload content_type
|
249
|
+
# Retrieves the MIME content types for this RDF serialization format.
|
250
|
+
#
|
251
|
+
# The return is an array where the first element is the cannonical
|
252
|
+
# MIME type for the format and following elements are alias MIME types.
|
253
|
+
#
|
254
|
+
# @return [Array<String>]
|
255
|
+
def self.content_type(type = nil, options = {})
|
256
|
+
if type.nil?
|
257
|
+
[@@content_type[self], @@content_types.map {
|
258
|
+
|ct, cl| (cl.include?(self) && ct != @@content_type[self]) ? ct : nil }].flatten.compact
|
259
|
+
else
|
260
|
+
@@content_type[self] = type
|
261
|
+
(@@content_types[type] ||= []) << self
|
262
|
+
|
263
|
+
if extensions = (options[:extension] || options[:extensions])
|
264
|
+
extensions = [extensions].flatten.map(&:to_sym)
|
265
|
+
extensions.each { |ext| @@file_extensions[ext] = type }
|
266
|
+
end
|
267
|
+
if aliases = (options[:alias] || options[:aliases])
|
268
|
+
aliases = [aliases].flatten.each { |a| (@@content_types[a] ||= []) << self }
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
228
273
|
protected
|
229
274
|
|
230
275
|
##
|
@@ -240,27 +285,6 @@ module RDF
|
|
240
285
|
(@@requires[self] ||= []) << library.to_s
|
241
286
|
end
|
242
287
|
|
243
|
-
##
|
244
|
-
# Defines MIME content types for this RDF serialization format.
|
245
|
-
#
|
246
|
-
# Optionally also defines a file extension, or a list of file
|
247
|
-
# extensions, that should be mapped to the given MIME type and handled
|
248
|
-
# by this class.
|
249
|
-
#
|
250
|
-
# @param [String] type
|
251
|
-
# @param [Hash{Symbol => Object}] options
|
252
|
-
# @option options [Symbol] :extension (nil)
|
253
|
-
# @option options [Array<Symbol>] :extensions (nil)
|
254
|
-
# @return [void]
|
255
|
-
def self.content_type(type, options = {})
|
256
|
-
(@@content_types[type] ||= []) << self
|
257
|
-
|
258
|
-
if extensions = (options[:extension] || options[:extensions])
|
259
|
-
extensions = [extensions].flatten.map { |ext| ext.to_sym }
|
260
|
-
extensions.each { |ext| @@file_extensions[ext] = type }
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
288
|
##
|
265
289
|
# Defines the content encoding for this RDF serialization format.
|
266
290
|
#
|
@@ -277,6 +301,7 @@ module RDF
|
|
277
301
|
@@subclasses = [] # @private
|
278
302
|
@@requires = {} # @private
|
279
303
|
@@file_extensions = {} # @private
|
304
|
+
@@content_type = {} # @private
|
280
305
|
@@content_types = {} # @private
|
281
306
|
@@content_encoding = {} # @private
|
282
307
|
@@readers = {} # @private
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RDF
|
2
|
+
##
|
3
|
+
# @since 0.2.0
|
4
|
+
module Countable
|
5
|
+
extend RDF::Util::Aliasing::LateBound
|
6
|
+
|
7
|
+
##
|
8
|
+
# Returns `true` if `self` contains no RDF statements.
|
9
|
+
#
|
10
|
+
# @return [Boolean]
|
11
|
+
def empty?
|
12
|
+
empty = true
|
13
|
+
each { empty = false; break }
|
14
|
+
empty
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Returns the number of RDF statements in `self`.
|
19
|
+
#
|
20
|
+
# @return [Integer]
|
21
|
+
def count
|
22
|
+
count = 0
|
23
|
+
each { count += 1 }
|
24
|
+
count
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :size, :count
|
28
|
+
alias_method :length, :count # @deprecated
|
29
|
+
|
30
|
+
##
|
31
|
+
# @private
|
32
|
+
# @param [Symbol, #to_sym] method
|
33
|
+
# @return [Enumerator]
|
34
|
+
# @see Object#enum_for
|
35
|
+
def enum_for(method = :each, *args)
|
36
|
+
# Ensure that enumerators support the `#empty?` and `#count` methods:
|
37
|
+
super.extend(RDF::Countable)
|
38
|
+
end
|
39
|
+
|
40
|
+
alias_method :to_enum, :enum_for
|
41
|
+
end
|
42
|
+
end
|