rdf 1.1.0.p0 → 1.1.0.p1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README +8 -6
- data/VERSION +1 -1
- data/lib/rdf.rb +8 -8
- data/lib/rdf/mixin/mutable.rb +4 -1
- data/lib/rdf/model/literal.rb +8 -3
- data/lib/rdf/model/statement.rb +12 -0
- data/lib/rdf/model/term.rb +0 -9
- data/lib/rdf/model/uri.rb +596 -71
- data/lib/rdf/model/value.rb +10 -1
- data/lib/rdf/ntriples/format.rb +1 -0
- data/lib/rdf/ntriples/reader.rb +3 -0
- data/lib/rdf/ntriples/writer.rb +19 -6
- data/lib/rdf/query/pattern.rb +0 -23
- data/lib/rdf/reader.rb +8 -6
- data/lib/rdf/writer.rb +11 -3
- metadata +5 -21
- data/lib/rdf/model/literal/string.rb +0 -38
- data/lib/rdf/model/literal/xml.rb +0 -41
data/lib/rdf/model/value.rb
CHANGED
@@ -103,7 +103,7 @@ module RDF
|
|
103
103
|
end
|
104
104
|
|
105
105
|
##
|
106
|
-
# Returns `true`
|
106
|
+
# Returns `true` this value is a {RDF::Query::Variable}, or is contains a variable.
|
107
107
|
#
|
108
108
|
# @return [Boolean]
|
109
109
|
# @since 0.1.7
|
@@ -111,6 +111,15 @@ module RDF
|
|
111
111
|
false
|
112
112
|
end
|
113
113
|
|
114
|
+
##
|
115
|
+
# Returns `true` if this value is constant.
|
116
|
+
#
|
117
|
+
# @return [Boolean] `true` or `false`
|
118
|
+
# @see #variable?
|
119
|
+
def constant?
|
120
|
+
!(variable?)
|
121
|
+
end
|
122
|
+
|
114
123
|
##
|
115
124
|
# Is this an anonymous value?
|
116
125
|
#
|
data/lib/rdf/ntriples/format.rb
CHANGED
@@ -15,6 +15,7 @@ module RDF::NTriples
|
|
15
15
|
# RDF::Format.for(:content_type => "text/plain")
|
16
16
|
#
|
17
17
|
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
18
|
+
# @see http://www.w3.org/TR/n-triples/
|
18
19
|
class Format < RDF::Format
|
19
20
|
content_type 'application/n-triples', :extension => :nt, :alias => ['text/plain']
|
20
21
|
content_encoding 'utf-8'
|
data/lib/rdf/ntriples/reader.rb
CHANGED
@@ -25,6 +25,7 @@ module RDF::NTriples
|
|
25
25
|
# end
|
26
26
|
#
|
27
27
|
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
28
|
+
# @see http://www.w3.org/TR/n-triples/
|
28
29
|
class Reader < RDF::Reader
|
29
30
|
format RDF::NTriples::Format
|
30
31
|
|
@@ -239,6 +240,8 @@ module RDF::NTriples
|
|
239
240
|
uri.canonicalize! if canonicalize?
|
240
241
|
uri
|
241
242
|
end
|
243
|
+
rescue ArgumentError => e
|
244
|
+
raise RDF::ReaderError, "invalid URI"
|
242
245
|
end
|
243
246
|
|
244
247
|
##
|
data/lib/rdf/ntriples/writer.rb
CHANGED
@@ -35,6 +35,7 @@ module RDF::NTriples
|
|
35
35
|
# end
|
36
36
|
#
|
37
37
|
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
38
|
+
# @see http://www.w3.org/TR/n-triples/
|
38
39
|
class Writer < RDF::Writer
|
39
40
|
format RDF::NTriples::Format
|
40
41
|
|
@@ -43,6 +44,10 @@ module RDF::NTriples
|
|
43
44
|
ESCAPE_ASCII = /\A[\x00-\x7F]*\z/m.freeze
|
44
45
|
|
45
46
|
##
|
47
|
+
# Escape Literal and URI content. If encoding is ASCII, all unicode
|
48
|
+
# is escaped, otherwise only ASCII characters that must be escaped are
|
49
|
+
# escaped.
|
50
|
+
#
|
46
51
|
# @param [String] string
|
47
52
|
# @param [Encoding] encoding
|
48
53
|
# @return [String]
|
@@ -53,7 +58,7 @@ module RDF::NTriples
|
|
53
58
|
string
|
54
59
|
when string.ascii_only?
|
55
60
|
StringIO.open do |buffer|
|
56
|
-
string.each_byte { |u| buffer << escape_ascii(u) }
|
61
|
+
string.each_byte { |u| buffer << escape_ascii(u, encoding) }
|
57
62
|
buffer.string
|
58
63
|
end
|
59
64
|
when encoding && encoding != Encoding::ASCII
|
@@ -62,7 +67,7 @@ module RDF::NTriples
|
|
62
67
|
string.each_char do |u|
|
63
68
|
buffer << case u.ord
|
64
69
|
when (0x00..0x7F)
|
65
|
-
escape_ascii(u)
|
70
|
+
escape_ascii(u, encoding)
|
66
71
|
else
|
67
72
|
u
|
68
73
|
end
|
@@ -70,6 +75,7 @@ module RDF::NTriples
|
|
70
75
|
buffer.string
|
71
76
|
end
|
72
77
|
else
|
78
|
+
# Encode ASCII && UTF-8 characters
|
73
79
|
StringIO.open do |buffer|
|
74
80
|
string.each_codepoint { |u| buffer << escape_unicode(u, encoding) }
|
75
81
|
buffer.string
|
@@ -89,7 +95,7 @@ module RDF::NTriples
|
|
89
95
|
def self.escape_unicode(u, encoding)
|
90
96
|
case (u = u.ord)
|
91
97
|
when (0x00..0x7F) # ASCII 7-bit
|
92
|
-
escape_ascii(u)
|
98
|
+
escape_ascii(u, encoding)
|
93
99
|
when (0x80..0xFFFF) # Unicode BMP
|
94
100
|
escape_utf16(u)
|
95
101
|
when (0x10000..0x10FFFF) # Unicode
|
@@ -100,15 +106,22 @@ module RDF::NTriples
|
|
100
106
|
end
|
101
107
|
|
102
108
|
##
|
109
|
+
# Standard ASCII escape sequences. If encoding is ASCII, use Test-Cases
|
110
|
+
# sequences, otherwise, assume the test-cases escape sequences. Otherwise,
|
111
|
+
# the N-Triples recommendation includes `\b` and `\f` escape sequences.
|
112
|
+
#
|
103
113
|
# @param [Integer, #ord] u
|
104
114
|
# @return [String]
|
105
115
|
# @see http://www.w3.org/TR/rdf-testcases/#ntrip_strings
|
106
|
-
|
116
|
+
# @see http://www.w3.org/TR/n-triples/
|
117
|
+
def self.escape_ascii(u, encoding)
|
107
118
|
case (u = u.ord)
|
108
|
-
when (0x00..
|
119
|
+
when (0x00..0x07) then escape_utf16(u)
|
120
|
+
when (0x08) then (encoding && encoding == Encoding::ASCII ? escape_utf16(u) : "\\b")
|
109
121
|
when (0x09) then "\\t"
|
110
122
|
when (0x0A) then "\\n"
|
111
|
-
when (0x0B
|
123
|
+
when (0x0B) then escape_utf16(u)
|
124
|
+
when (0x0C) then (encoding && encoding == Encoding::ASCII ? escape_utf16(u) : "\\f")
|
112
125
|
when (0x0D) then "\\r"
|
113
126
|
when (0x0E..0x1F) then escape_utf16(u)
|
114
127
|
when (0x22) then "\\\""
|
data/lib/rdf/query/pattern.rb
CHANGED
@@ -67,29 +67,6 @@ module RDF; class Query
|
|
67
67
|
subject.nil? && predicate.nil? && object.nil? && context.nil?
|
68
68
|
end
|
69
69
|
|
70
|
-
##
|
71
|
-
# Returns `true` if this is a constant pattern, with all terms being
|
72
|
-
# either URIs, blank nodes, or literals.
|
73
|
-
#
|
74
|
-
# A constant pattern is structurally and functionally equivalent to an
|
75
|
-
# RDF statement.
|
76
|
-
#
|
77
|
-
# @return [Boolean] `true` or `false`
|
78
|
-
# @since 0.3.0
|
79
|
-
def constant?
|
80
|
-
!(variable?)
|
81
|
-
end
|
82
|
-
|
83
|
-
##
|
84
|
-
# Returns `true` if this is a variable pattern, with any term being
|
85
|
-
# `nil` or a variable.
|
86
|
-
#
|
87
|
-
# @return [Boolean] `true` or `false`
|
88
|
-
# @since 0.3.0
|
89
|
-
def variable?
|
90
|
-
subject.nil? || predicate.nil? || object.nil? || context.nil? || has_variables?
|
91
|
-
end
|
92
|
-
|
93
70
|
##
|
94
71
|
# Returns `true` if this pattern contains any variables.
|
95
72
|
#
|
data/lib/rdf/reader.rb
CHANGED
@@ -189,6 +189,7 @@ module RDF
|
|
189
189
|
@options[:canonicalize] ||= false
|
190
190
|
@options[:intern] ||= true
|
191
191
|
@options[:prefixes] ||= Hash.new
|
192
|
+
@options[:base_uri] ||= input.base_uri if input.respond_to?(:base_uri)
|
192
193
|
|
193
194
|
@input = case input
|
194
195
|
when String then StringIO.new(input)
|
@@ -362,6 +363,13 @@ module RDF
|
|
362
363
|
end
|
363
364
|
alias_method :close!, :close
|
364
365
|
|
366
|
+
##
|
367
|
+
# Current line number being processed. For formats that can associate generated {Statement} with a particular line number from input, this value reflects that line number.
|
368
|
+
# @return [Integer]
|
369
|
+
def lineno
|
370
|
+
@input.lineno
|
371
|
+
end
|
372
|
+
|
365
373
|
protected
|
366
374
|
|
367
375
|
##
|
@@ -465,12 +473,6 @@ module RDF
|
|
465
473
|
super
|
466
474
|
end
|
467
475
|
|
468
|
-
##
|
469
|
-
# @return [Integer]
|
470
|
-
def lineno
|
471
|
-
@input.lineno
|
472
|
-
end
|
473
|
-
|
474
476
|
##
|
475
477
|
# @private
|
476
478
|
# @return [String] The most recently read line of the input
|
data/lib/rdf/writer.rb
CHANGED
@@ -105,13 +105,18 @@ module RDF
|
|
105
105
|
##
|
106
106
|
# @param [RDF::Enumerable, #each] data
|
107
107
|
# the graph or repository to dump
|
108
|
-
# @param [IO, File] io
|
108
|
+
# @param [IO, File, String] io
|
109
109
|
# the output stream or file to write to
|
110
110
|
# @param [Hash{Symbol => Object}] options
|
111
111
|
# passed to {RDF::Writer#initialize} or {RDF::Writer.buffer}
|
112
112
|
# @return [void]
|
113
113
|
def self.dump(data, io = nil, options = {})
|
114
|
-
|
114
|
+
if io.is_a?(String)
|
115
|
+
io = File.open(io, 'w')
|
116
|
+
elsif io.respond_to?(:external_encoding) && io.external_encoding
|
117
|
+
options = {:encoding => io.external_encoding}.merge(options)
|
118
|
+
end
|
119
|
+
io.set_encoding(options[:encoding]) if io.respond_to?(:set_encoding) && options[:encoding]
|
115
120
|
method = data.respond_to?(:each_statement) ? :each_statement : :each
|
116
121
|
if io
|
117
122
|
new(io, options) do |writer|
|
@@ -138,9 +143,11 @@ module RDF
|
|
138
143
|
# @return [String]
|
139
144
|
# @raise [ArgumentError] if no block is provided
|
140
145
|
def self.buffer(*args, &block)
|
146
|
+
options = args.last.is_a?(Hash) ? args.last : {}
|
141
147
|
raise ArgumentError, "block expected" unless block_given?
|
142
148
|
|
143
149
|
StringIO.open do |buffer|
|
150
|
+
buffer.set_encoding(options[:encoding]) if options[:encoding]
|
144
151
|
self.new(buffer, *args) { |writer| block.call(writer) }
|
145
152
|
buffer.string
|
146
153
|
end
|
@@ -156,6 +163,7 @@ module RDF
|
|
156
163
|
# @return [RDF::Writer]
|
157
164
|
def self.open(filename, options = {}, &block)
|
158
165
|
File.open(filename, 'wb') do |file|
|
166
|
+
file.set_encoding(options[:encoding]) if options[:encoding]
|
159
167
|
format_options = options.dup
|
160
168
|
format_options[:file_name] ||= filename
|
161
169
|
self.for(options[:format] || format_options).new(file, options, &block)
|
@@ -436,7 +444,7 @@ module RDF
|
|
436
444
|
##
|
437
445
|
# @return [void]
|
438
446
|
def puts(*args)
|
439
|
-
@output.puts(*args)
|
447
|
+
@output.puts(*args.map {|s| s.force_encoding(encoding)})
|
440
448
|
end
|
441
449
|
|
442
450
|
##
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0.
|
4
|
+
version: 1.1.0.p1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arto Bendiken
|
@@ -10,36 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: addressable
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '2.2'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - ! '>='
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '2.2'
|
29
15
|
- !ruby/object:Gem::Dependency
|
30
16
|
name: rdf-spec
|
31
17
|
requirement: !ruby/object:Gem::Requirement
|
32
18
|
requirements:
|
33
19
|
- - ~>
|
34
20
|
- !ruby/object:Gem::Version
|
35
|
-
version: 1.1.0
|
21
|
+
version: 1.1.0
|
36
22
|
type: :development
|
37
23
|
prerelease: false
|
38
24
|
version_requirements: !ruby/object:Gem::Requirement
|
39
25
|
requirements:
|
40
26
|
- - ~>
|
41
27
|
- !ruby/object:Gem::Version
|
42
|
-
version: 1.1.0
|
28
|
+
version: 1.1.0
|
43
29
|
- !ruby/object:Gem::Dependency
|
44
30
|
name: rspec
|
45
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,10 +91,8 @@ files:
|
|
105
91
|
- lib/rdf/model/literal/double.rb
|
106
92
|
- lib/rdf/model/literal/integer.rb
|
107
93
|
- lib/rdf/model/literal/numeric.rb
|
108
|
-
- lib/rdf/model/literal/string.rb
|
109
94
|
- lib/rdf/model/literal/time.rb
|
110
95
|
- lib/rdf/model/literal/token.rb
|
111
|
-
- lib/rdf/model/literal/xml.rb
|
112
96
|
- lib/rdf/model/literal.rb
|
113
97
|
- lib/rdf/model/node.rb
|
114
98
|
- lib/rdf/model/resource.rb
|
@@ -170,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
170
154
|
requirements:
|
171
155
|
- - ! '>='
|
172
156
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.9.
|
157
|
+
version: 1.9.2
|
174
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
159
|
requirements:
|
176
160
|
- - ! '>'
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module RDF; class Literal
|
2
|
-
##
|
3
|
-
# A String literal.
|
4
|
-
#
|
5
|
-
# @see http://www.w3.org/TR/xmlschema-2/#string
|
6
|
-
# @since 0.3.11
|
7
|
-
class String < Literal
|
8
|
-
DATATYPE = XSD.string
|
9
|
-
GRAMMAR = nil
|
10
|
-
|
11
|
-
##
|
12
|
-
# @param [Object] value
|
13
|
-
# @option options [String] :lexical (nil)
|
14
|
-
def initialize(value, options = {})
|
15
|
-
@datatype = options[:datatype] || self.class.const_get(:DATATYPE)
|
16
|
-
@string = options[:lexical] if options.has_key?(:lexical)
|
17
|
-
@string ||= value if value.is_a?(String)
|
18
|
-
@object = value.to_s
|
19
|
-
end
|
20
|
-
|
21
|
-
##
|
22
|
-
# Converts this literal into its canonical lexical representation.
|
23
|
-
#
|
24
|
-
# @return [RDF::Literal] `self`
|
25
|
-
# @see http://www.w3.org/TR/xml-exc-c14n/
|
26
|
-
def canonicalize!
|
27
|
-
self
|
28
|
-
end
|
29
|
-
|
30
|
-
##
|
31
|
-
# Returns the value as a string.
|
32
|
-
#
|
33
|
-
# @return [String]
|
34
|
-
def to_s
|
35
|
-
@string || @object
|
36
|
-
end
|
37
|
-
end # XML
|
38
|
-
end; end # RDF::Literal
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module RDF; class Literal
|
2
|
-
##
|
3
|
-
# An XML literal.
|
4
|
-
#
|
5
|
-
# This class exists mostly as a stub. See RDF::XSD gem for full support.
|
6
|
-
|
7
|
-
# @see https://github.com/ruby-rdf/rdf-xsd/blob/master/lib/rdf/xsd/xml.rb
|
8
|
-
# @see http://www.w3.org/TR/rdf-concepts/#section-XMLLiteral
|
9
|
-
# @see http://www.w3.org/TR/rdfa-core/#s_xml_literals
|
10
|
-
# @since 0.2.1
|
11
|
-
class XML < Literal
|
12
|
-
DATATYPE = RDF.XMLLiteral
|
13
|
-
GRAMMAR = nil
|
14
|
-
|
15
|
-
##
|
16
|
-
# @param [Object] value
|
17
|
-
# @option options [String] :lexical (nil)
|
18
|
-
def initialize(value, options = {})
|
19
|
-
@datatype = options[:datatype] || self.class.const_get(:DATATYPE)
|
20
|
-
@string = options[:lexical] if options.has_key?(:lexical)
|
21
|
-
@object = value # TODO: parse XML string using REXML
|
22
|
-
end
|
23
|
-
|
24
|
-
##
|
25
|
-
# Converts this literal into its canonical lexical representation.
|
26
|
-
#
|
27
|
-
# @return [RDF::Literal] `self`
|
28
|
-
# @see http://www.w3.org/TR/xml-exc-c14n/
|
29
|
-
def canonicalize!
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
##
|
34
|
-
# Returns the value as a string.
|
35
|
-
#
|
36
|
-
# @return [String]
|
37
|
-
def to_s
|
38
|
-
@string || @object.to_s
|
39
|
-
end
|
40
|
-
end # XML
|
41
|
-
end; end # RDF::Literal
|