rdf 0.0.6 → 0.0.7
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.
- data/AUTHORS +1 -1
- data/VERSION +1 -1
- data/lib/rdf.rb +25 -22
- data/lib/rdf/enumerable.rb +554 -0
- data/lib/rdf/format.rb +239 -41
- data/lib/rdf/model/graph.rb +82 -0
- data/lib/rdf/{literal.rb → model/literal.rb} +47 -4
- data/lib/rdf/{node.rb → model/node.rb} +0 -0
- data/lib/rdf/{resource.rb → model/resource.rb} +0 -0
- data/lib/rdf/{statement.rb → model/statement.rb} +12 -0
- data/lib/rdf/{uri.rb → model/uri.rb} +20 -7
- data/lib/rdf/model/value.rb +135 -0
- data/lib/rdf/ntriples.rb +35 -2
- data/lib/rdf/ntriples/format.rb +4 -4
- data/lib/rdf/ntriples/reader.rb +2 -2
- data/lib/rdf/ntriples/writer.rb +26 -19
- data/lib/rdf/query.rb +4 -4
- data/lib/rdf/query/pattern.rb +3 -3
- data/lib/rdf/query/solution.rb +2 -2
- data/lib/rdf/query/variable.rb +3 -3
- data/lib/rdf/reader.rb +85 -16
- data/lib/rdf/repository.rb +104 -12
- data/lib/rdf/version.rb +1 -1
- data/lib/rdf/vocab.rb +171 -0
- data/lib/rdf/vocab/cc.rb +18 -0
- data/lib/rdf/vocab/dc.rb +63 -0
- data/lib/rdf/vocab/doap.rb +45 -0
- data/lib/rdf/vocab/exif.rb +168 -0
- data/lib/rdf/vocab/foaf.rb +69 -0
- data/lib/rdf/vocab/http.rb +26 -0
- data/lib/rdf/vocab/owl.rb +59 -0
- data/lib/rdf/{vocabulary → vocab}/rdf.rb +7 -1
- data/lib/rdf/vocab/rdfs.rb +17 -0
- data/lib/rdf/{vocabulary → vocab}/rss.rb +6 -1
- data/lib/rdf/vocab/sioc.rb +93 -0
- data/lib/rdf/vocab/skos.rb +36 -0
- data/lib/rdf/vocab/wot.rb +21 -0
- data/lib/rdf/vocab/xhtml.rb +9 -0
- data/lib/rdf/vocab/xsd.rb +58 -0
- data/lib/rdf/writer.rb +123 -16
- metadata +26 -27
- data/lib/rdf/graph.rb +0 -197
- data/lib/rdf/reader/ntriples.rb +0 -5
- data/lib/rdf/value.rb +0 -76
- data/lib/rdf/vocabulary.rb +0 -133
- data/lib/rdf/vocabulary/cc.rb +0 -9
- data/lib/rdf/vocabulary/dc.rb +0 -9
- data/lib/rdf/vocabulary/doap.rb +0 -9
- data/lib/rdf/vocabulary/exif.rb +0 -9
- data/lib/rdf/vocabulary/foaf.rb +0 -9
- data/lib/rdf/vocabulary/http.rb +0 -9
- data/lib/rdf/vocabulary/owl.rb +0 -9
- data/lib/rdf/vocabulary/rdfs.rb +0 -9
- data/lib/rdf/vocabulary/sioc.rb +0 -9
- data/lib/rdf/vocabulary/skos.rb +0 -9
- data/lib/rdf/vocabulary/wot.rb +0 -9
- data/lib/rdf/vocabulary/xhtml.rb +0 -9
- data/lib/rdf/vocabulary/xsd.rb +0 -9
- data/lib/rdf/writer/ntriples.rb +0 -5
File without changes
|
File without changes
|
@@ -66,6 +66,18 @@ module RDF
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
##
|
70
|
+
# @return [Boolean]
|
71
|
+
def invalid?
|
72
|
+
!valid?
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# @return [Boolean]
|
77
|
+
def valid?
|
78
|
+
has_subject? && has_predicate? && has_object?
|
79
|
+
end
|
80
|
+
|
69
81
|
##
|
70
82
|
# @return [Boolean]
|
71
83
|
def asserted?
|
@@ -21,11 +21,19 @@ module RDF
|
|
21
21
|
end
|
22
22
|
|
23
23
|
##
|
24
|
-
# @
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
# @overload uri(uri)
|
25
|
+
# @param [URI, String, #to_s] uri
|
26
|
+
#
|
27
|
+
# @overload uri(options = {})
|
28
|
+
# @param [Hash{Symbol => Object} options
|
29
|
+
def initialize(uri_or_options)
|
30
|
+
case uri_or_options
|
31
|
+
when Hash
|
32
|
+
@uri = Addressable::URI.new(uri_or_options)
|
33
|
+
when Addressable::URI
|
34
|
+
@uri = uri_or_options
|
35
|
+
else
|
36
|
+
@uri = Addressable::URI.parse(uri_or_options.to_s)
|
29
37
|
end
|
30
38
|
end
|
31
39
|
|
@@ -56,13 +64,18 @@ module RDF
|
|
56
64
|
# @param [Object] other
|
57
65
|
# @return [Boolean]
|
58
66
|
def ==(other)
|
59
|
-
|
67
|
+
case other
|
68
|
+
when Addressable::URI
|
69
|
+
to_s == other.to_s
|
70
|
+
else
|
71
|
+
other.respond_to?(:to_uri) && to_s == other.to_uri.to_s
|
72
|
+
end
|
60
73
|
end
|
61
74
|
|
62
75
|
##
|
63
76
|
# @return [URI]
|
64
77
|
def to_uri
|
65
|
-
|
78
|
+
self
|
66
79
|
end
|
67
80
|
|
68
81
|
##
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module RDF
|
2
|
+
##
|
3
|
+
# An RDF value.
|
4
|
+
#
|
5
|
+
# This is the base class for the RDF.rb class hierarchy. The class of
|
6
|
+
# every object that can be a component of {RDF::Statement statements} is a
|
7
|
+
# subclass of this class.
|
8
|
+
#
|
9
|
+
# @example Checking if a value is a resource (blank node or URI reference)
|
10
|
+
# value.resource?
|
11
|
+
#
|
12
|
+
# @example Checking if a value is a blank node
|
13
|
+
# value.node?
|
14
|
+
#
|
15
|
+
# @example Checking if a value is a URI reference
|
16
|
+
# value.uri?
|
17
|
+
# value.iri?
|
18
|
+
#
|
19
|
+
# @example Checking if a value is a literal
|
20
|
+
# value.literal?
|
21
|
+
#
|
22
|
+
# @abstract
|
23
|
+
# @see RDF::Graph
|
24
|
+
# @see RDF::Literal
|
25
|
+
# @see RDF::Node
|
26
|
+
# @see RDF::Resource
|
27
|
+
# @see RDF::Statement
|
28
|
+
# @see RDF::URI
|
29
|
+
class Value
|
30
|
+
include Comparable
|
31
|
+
|
32
|
+
# Prevent the instantiation of this class.
|
33
|
+
private_class_method :new
|
34
|
+
|
35
|
+
##
|
36
|
+
# Returns `true` if this value is a graph.
|
37
|
+
#
|
38
|
+
# @return [Boolean]
|
39
|
+
def graph?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Returns `true` if this value is a literal.
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
def literal?
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Returns `true` if this value is a blank node.
|
53
|
+
#
|
54
|
+
# @return [Boolean]
|
55
|
+
def node?
|
56
|
+
false
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Returns `true` if this value is a resource.
|
61
|
+
#
|
62
|
+
# @return [Boolean]
|
63
|
+
def resource?
|
64
|
+
false
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Returns `true` if this value is a statement.
|
69
|
+
#
|
70
|
+
# @return [Boolean]
|
71
|
+
def statement?
|
72
|
+
false
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# Returns `true` if this value is a URI reference.
|
77
|
+
#
|
78
|
+
# @return [Boolean]
|
79
|
+
def uri?
|
80
|
+
false
|
81
|
+
end
|
82
|
+
|
83
|
+
alias_method :iri?, :uri?
|
84
|
+
|
85
|
+
##
|
86
|
+
# Compares this value to `other` for sorting purposes.
|
87
|
+
#
|
88
|
+
# Subclasses should override this to provide a more meaningful
|
89
|
+
# implementation than the default which simply performs a string
|
90
|
+
# comparison based on `#to_s`.
|
91
|
+
#
|
92
|
+
# @abstract
|
93
|
+
# @param [Object] other
|
94
|
+
# @return [Integer] -1, 0, 1
|
95
|
+
def <=>(other)
|
96
|
+
self.to_s <=> other.to_s
|
97
|
+
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Returns an RDF::Value representation of this object.
|
101
|
+
#
|
102
|
+
# @return [Value]
|
103
|
+
def to_rdf
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# Returns a developer-friendly representation of this value.
|
109
|
+
#
|
110
|
+
# The result will be of the format `#<RDF::Value::0x12345678(...)>`,
|
111
|
+
# where `...` is the string returned by `#to_s`.
|
112
|
+
#
|
113
|
+
# @return [String]
|
114
|
+
def inspect
|
115
|
+
sprintf("#<%s:%#0x(%s)>", self.class.name, object_id, to_s)
|
116
|
+
end
|
117
|
+
|
118
|
+
##
|
119
|
+
# Outputs a developer-friendly representation of this value to `stderr`.
|
120
|
+
#
|
121
|
+
# @return [void]
|
122
|
+
def inspect!
|
123
|
+
warn(inspect)
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def self.inherited(child) #:nodoc:
|
129
|
+
# Enable the instantiation of any subclasses.
|
130
|
+
child.send(:public_class_method, :new)
|
131
|
+
super
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
data/lib/rdf/ntriples.rb
CHANGED
@@ -1,11 +1,44 @@
|
|
1
1
|
module RDF
|
2
2
|
##
|
3
|
-
# N-Triples serialization
|
3
|
+
# **`RDF::NTriples`** provides support for the N-Triples serialization
|
4
|
+
# format.
|
5
|
+
#
|
6
|
+
# N-Triples is a line-based plain-text format for encoding an RDF graph.
|
7
|
+
# It is a very restricted, explicit and well-defined subset of both
|
8
|
+
# [Turtle](http://www.w3.org/TeamSubmission/turtle/) and
|
9
|
+
# [Notation3](http://www.w3.org/TeamSubmission/n3/) (N3).
|
10
|
+
#
|
11
|
+
# The MIME content type for N-Triples files is `text/plain` and the
|
12
|
+
# recommended file extension is `.nt`.
|
13
|
+
#
|
14
|
+
# An example of an RDF statement in N-Triples format:
|
15
|
+
#
|
16
|
+
# <http://rubyforge.org/> <http://purl.org/dc/terms/title> "RubyForge" .
|
17
|
+
#
|
18
|
+
# Installation
|
19
|
+
# ------------
|
20
|
+
#
|
21
|
+
# This is the only RDF serialization format that is directly supported by
|
22
|
+
# RDF.rb. Support for other formats is available in the form of add-on
|
23
|
+
# gems, e.g. 'rdf-xml' or 'rdf-json'.
|
24
|
+
#
|
25
|
+
# Documentation
|
26
|
+
# -------------
|
27
|
+
#
|
28
|
+
# * {RDF::NTriples::Format}
|
29
|
+
# * {RDF::NTriples::Reader}
|
30
|
+
# * {RDF::NTriples::Writer}
|
31
|
+
#
|
32
|
+
# @example Requiring the `RDF::NTriples` module explicitly
|
33
|
+
# require 'rdf/ntriples'
|
4
34
|
#
|
5
35
|
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
6
36
|
# @see http://en.wikipedia.org/wiki/N-Triples
|
37
|
+
# @see http://librdf.org/ntriples/
|
38
|
+
#
|
39
|
+
# @author [Arto Bendiken](http://ar.to/)
|
7
40
|
module NTriples
|
8
|
-
|
41
|
+
require 'rdf/ntriples/format'
|
9
42
|
autoload :Reader, 'rdf/ntriples/reader'
|
10
43
|
autoload :Writer, 'rdf/ntriples/writer'
|
11
44
|
end
|
data/lib/rdf/ntriples/format.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module RDF
|
1
|
+
module RDF::NTriples
|
2
2
|
##
|
3
3
|
# N-Triples format specification.
|
4
4
|
#
|
@@ -7,7 +7,7 @@ module RDF module NTriples
|
|
7
7
|
content_type 'text/plain', :extension => :nt
|
8
8
|
content_encoding 'ascii'
|
9
9
|
|
10
|
-
reader RDF::NTriples::Reader
|
11
|
-
writer RDF::NTriples::
|
10
|
+
reader { RDF::NTriples::Reader }
|
11
|
+
writer { RDF::NTriples::Writer }
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
data/lib/rdf/ntriples/reader.rb
CHANGED
data/lib/rdf/ntriples/writer.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
module RDF
|
1
|
+
module RDF::NTriples
|
2
2
|
##
|
3
3
|
# N-Triples serializer.
|
4
4
|
#
|
5
|
-
# @see
|
5
|
+
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
6
6
|
class Writer < RDF::Writer
|
7
7
|
format RDF::NTriples::Format
|
8
8
|
|
@@ -19,32 +19,39 @@ module RDF module NTriples
|
|
19
19
|
# @param [Value] object
|
20
20
|
# @return [void]
|
21
21
|
def write_triple(subject, predicate, object)
|
22
|
-
s
|
23
|
-
p = format_uri(predicate)
|
24
|
-
o = object.kind_of?(RDF::URI) ? format_uri(object) : format_literal(object)
|
25
|
-
puts "%s %s %s ." % [s, p, o]
|
22
|
+
puts "%s %s %s ." % [subject, predicate, object].map { |value| format_value(value) }
|
26
23
|
end
|
27
24
|
|
28
25
|
##
|
29
|
-
# @param [
|
30
|
-
# @
|
31
|
-
|
32
|
-
|
26
|
+
# @param [URI] value
|
27
|
+
# @param [Hash{Symbol => Object}] options
|
28
|
+
# @return [String]
|
29
|
+
def format_uri(value, options = {})
|
30
|
+
"<%s>" % uri_for(value)
|
33
31
|
end
|
34
32
|
|
35
33
|
##
|
36
|
-
# @param [
|
37
|
-
# @
|
38
|
-
|
39
|
-
|
34
|
+
# @param [Node] value
|
35
|
+
# @param [Hash{Symbol => Object}] options
|
36
|
+
# @return [String]
|
37
|
+
def format_node(value, options = {})
|
38
|
+
"_:%s" % node.id
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# @param [Literal, String, #to_s] value
|
43
|
+
# @param [Hash{Symbol => Object}] options
|
44
|
+
# @return [String]
|
45
|
+
def format_literal(value, options = {})
|
46
|
+
case value
|
40
47
|
when RDF::Literal
|
41
|
-
text = quoted(escaped(
|
42
|
-
text << "@#{
|
43
|
-
text << "^^<#{uri_for(
|
48
|
+
text = quoted(escaped(value.value))
|
49
|
+
text << "@#{value.language}" if value.language
|
50
|
+
text << "^^<#{uri_for(value.datatype)}>" if value.datatype
|
44
51
|
text
|
45
52
|
else
|
46
|
-
quoted(escaped(
|
53
|
+
quoted(escaped(value.to_s))
|
47
54
|
end
|
48
55
|
end
|
49
56
|
end
|
50
|
-
end
|
57
|
+
end
|
data/lib/rdf/query.rb
CHANGED
@@ -41,7 +41,7 @@ module RDF
|
|
41
41
|
autoload :Solution, 'rdf/query/solution'
|
42
42
|
autoload :Variable, 'rdf/query/variable'
|
43
43
|
|
44
|
-
include Enumerable
|
44
|
+
include ::Enumerable
|
45
45
|
|
46
46
|
# @return [Hash{Symbol => Variable}]
|
47
47
|
attr_reader :variables
|
@@ -75,7 +75,7 @@ module RDF
|
|
75
75
|
#
|
76
76
|
# @yield [solution]
|
77
77
|
# @yieldparam [Solution]
|
78
|
-
# @return [
|
78
|
+
# @return [Enumerator]
|
79
79
|
def each_solution(&block)
|
80
80
|
solutions.each do |bindings|
|
81
81
|
block.call(Solution.new(bindings))
|
@@ -123,7 +123,7 @@ module RDF
|
|
123
123
|
##
|
124
124
|
# Reorders the solution sequence based on `variables`.
|
125
125
|
#
|
126
|
-
# @param [
|
126
|
+
# @param [Array<Symbol>] variables
|
127
127
|
# @return [Query]
|
128
128
|
def order(*variables)
|
129
129
|
if variables.empty?
|
@@ -145,7 +145,7 @@ module RDF
|
|
145
145
|
##
|
146
146
|
# Restricts the the solution sequence to the given `variables` only.
|
147
147
|
#
|
148
|
-
# @param [
|
148
|
+
# @param [Array<Symbol>] variables
|
149
149
|
# @return [Query]
|
150
150
|
def project(*variables)
|
151
151
|
unless variables.empty?
|
data/lib/rdf/query/pattern.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
class RDF::Query
|
2
2
|
##
|
3
3
|
# An RDF query pattern.
|
4
|
-
class Pattern < Statement
|
4
|
+
class Pattern < RDF::Statement
|
5
5
|
# @return [Hash{Symbol => Object}]
|
6
6
|
attr_reader :options
|
7
7
|
|
@@ -149,4 +149,4 @@ module RDF class Query
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
152
|
-
end
|
152
|
+
end
|
data/lib/rdf/query/solution.rb
CHANGED
data/lib/rdf/query/variable.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
class RDF::Query
|
2
2
|
##
|
3
3
|
# An RDF query variable.
|
4
4
|
#
|
@@ -38,7 +38,7 @@ module RDF class Query
|
|
38
38
|
# var = RDF::Query::Variable.new(:y, 123)
|
39
39
|
# var.to_s #=> "?y=123"
|
40
40
|
#
|
41
|
-
class Variable < Value
|
41
|
+
class Variable < RDF::Value
|
42
42
|
# @return [Symbol] The variable's name.
|
43
43
|
attr_accessor :name
|
44
44
|
|
@@ -142,4 +142,4 @@ module RDF class Query
|
|
142
142
|
unbound? ? "?#{name}" : "?#{name}=#{value}"
|
143
143
|
end
|
144
144
|
end
|
145
|
-
end
|
145
|
+
end
|
data/lib/rdf/reader.rb
CHANGED
@@ -2,41 +2,114 @@ module RDF
|
|
2
2
|
##
|
3
3
|
# An RDF parser.
|
4
4
|
#
|
5
|
+
# @example Iterating over known RDF reader classes
|
6
|
+
# RDF::Reader.each { |klass| puts klass.name }
|
7
|
+
#
|
8
|
+
# @example Obtaining an RDF reader class
|
9
|
+
# RDF::Reader.for(:ntriples) #=> RDF::NTriples::Reader
|
10
|
+
# RDF::Reader.for("spec/data/test.nt")
|
11
|
+
# RDF::Reader.for(:file_name => "spec/data/test.nt")
|
12
|
+
# RDF::Reader.for(:file_extension => "nt")
|
13
|
+
# RDF::Reader.for(:content_type => "text/plain")
|
14
|
+
#
|
15
|
+
# @example Instantiating an RDF reader class
|
16
|
+
# RDF::Reader.for(:ntriples).new($stdin) { |reader| ... }
|
17
|
+
#
|
18
|
+
# @example Parsing RDF statements from a file
|
19
|
+
# RDF::Reader.open("spec/data/test.nt") do |reader|
|
20
|
+
# reader.each_statement do |statement|
|
21
|
+
# puts statement.inspect
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# @example Parsing RDF statements from a string
|
26
|
+
# data = StringIO.new(File.read("spec/data/test.nt"))
|
27
|
+
# RDF::Reader.for(:ntriples).new(data) do |reader|
|
28
|
+
# reader.each_statement do |statement|
|
29
|
+
# puts statement.inspect
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
5
33
|
# @abstract
|
34
|
+
# @see RDF::Format
|
35
|
+
# @see RDF::Writer
|
6
36
|
class Reader
|
7
|
-
|
8
|
-
|
9
|
-
include Enumerable
|
37
|
+
extend ::Enumerable
|
38
|
+
include ::Enumerable
|
10
39
|
|
11
40
|
##
|
12
41
|
# Enumerates known RDF reader classes.
|
13
42
|
#
|
14
43
|
# @yield [klass]
|
15
44
|
# @yieldparam [Class]
|
45
|
+
# @return [Enumerator]
|
16
46
|
def self.each(&block)
|
17
|
-
|
47
|
+
@@subclasses.each(&block)
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Finds an RDF reader class based on the given criteria.
|
52
|
+
#
|
53
|
+
# @overload for(format)
|
54
|
+
# Finds an RDF reader class based on a symbolic name.
|
55
|
+
#
|
56
|
+
# @param [Symbol] format
|
57
|
+
# @return [Class]
|
58
|
+
#
|
59
|
+
# @overload for(filename)
|
60
|
+
# Finds an RDF reader class based on a file name.
|
61
|
+
#
|
62
|
+
# @param [String] filename
|
63
|
+
# @return [Class]
|
64
|
+
#
|
65
|
+
# @overload for(options = {})
|
66
|
+
# Finds an RDF reader class based on various options.
|
67
|
+
#
|
68
|
+
# @param [Hash{Symbol => Object}] options
|
69
|
+
# @option options [String, #to_s] :file_name (nil)
|
70
|
+
# @option options [Symbol, #to_sym] :file_extension (nil)
|
71
|
+
# @option options [String, #to_s] :content_type (nil)
|
72
|
+
# @return [Class]
|
73
|
+
#
|
74
|
+
# @return [Class]
|
75
|
+
def self.for(options = {})
|
76
|
+
if format = Format.for(options)
|
77
|
+
format.reader
|
78
|
+
end
|
18
79
|
end
|
19
80
|
|
20
81
|
##
|
21
|
-
#
|
82
|
+
# Retrieves the RDF serialization format class for this writer class.
|
83
|
+
#
|
22
84
|
# @return [Class]
|
23
|
-
def self.
|
24
|
-
klass
|
25
|
-
|
26
|
-
|
85
|
+
def self.format(klass = nil)
|
86
|
+
if klass.nil?
|
87
|
+
Format.each do |format|
|
88
|
+
if format.reader == self
|
89
|
+
return format
|
90
|
+
end
|
91
|
+
end
|
92
|
+
nil # not found
|
27
93
|
end
|
28
94
|
end
|
29
95
|
|
96
|
+
class << self
|
97
|
+
alias_method :format_class, :format
|
98
|
+
end
|
99
|
+
|
30
100
|
##
|
31
101
|
# @param [String] filename
|
32
102
|
# @option options [Symbol] :format (:ntriples)
|
33
103
|
# @yield [reader]
|
34
104
|
# @yieldparam [Reader]
|
105
|
+
# @raise [FormatError] if no reader available for the specified format
|
35
106
|
def self.open(filename, options = {}, &block)
|
36
|
-
options[:format] ||= :ntriples # FIXME
|
37
|
-
|
38
107
|
File.open(filename, 'rb') do |file|
|
39
|
-
self.for(options[:format]
|
108
|
+
if reader = self.for(options[:format] || filename)
|
109
|
+
reader.new(file, options, &block)
|
110
|
+
else
|
111
|
+
raise FormatError.new("unknown RDF format: #{options[:format] || filename}")
|
112
|
+
end
|
40
113
|
end
|
41
114
|
end
|
42
115
|
|
@@ -118,10 +191,6 @@ module RDF
|
|
118
191
|
super
|
119
192
|
end
|
120
193
|
|
121
|
-
def self.format(klass)
|
122
|
-
# TODO
|
123
|
-
end
|
124
|
-
|
125
194
|
def lineno
|
126
195
|
@input.lineno
|
127
196
|
end
|