rdf-n3 0.3.3.1 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +7 -0
- data/VERSION +1 -1
- data/lib/rdf/n3/reader/meta.rb +1 -1
- data/lib/rdf/n3/writer.rb +17 -5
- data/rdf-n3.gemspec +2 -15
- data/spec/reader_spec.rb +1 -0
- data/spec/writer_spec.rb +125 -11
- metadata +6 -17
data/History.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.3.4
|
2
|
+
-----
|
3
|
+
* Reader accepts 1.0E1 in addition to 1.0e1 (case-insensitive match on exponent).
|
4
|
+
* Writer was not outputting xsd prefix if it was only used in a literal datatype.
|
5
|
+
* Use bare representations of xsd:integer, xsd:boolean, xsd:double, and xsd:decimal.
|
6
|
+
* Implement literal canonicalization (on option) in writer.
|
7
|
+
|
1
8
|
0.3.3.1
|
2
9
|
-------
|
3
10
|
* Fixed bug in writer when given a base URI.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
data/lib/rdf/n3/reader/meta.rb
CHANGED
@@ -635,6 +635,6 @@ module RDF::N3::Meta
|
|
635
635
|
:"http://www.w3.org/2000/10/swap/grammar/n3#string" => Regexp.compile("(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")"),
|
636
636
|
|
637
637
|
# Hack to replace integer|double|decimal with numericliteral
|
638
|
-
:"http://www.w3.org/2000/10/swap/grammar/n3#numericliteral" => Regexp.compile(%(^[-+]?[0-9]+(\\.[0-9]+)?(
|
638
|
+
:"http://www.w3.org/2000/10/swap/grammar/n3#numericliteral" => Regexp.compile(%(^[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?))
|
639
639
|
}
|
640
640
|
end
|
data/lib/rdf/n3/writer.rb
CHANGED
@@ -166,18 +166,21 @@ module RDF::N3
|
|
166
166
|
return nil
|
167
167
|
end
|
168
168
|
|
169
|
+
add_debug "get_qname(#{resource})"
|
169
170
|
qname = case
|
170
171
|
when @uri_to_qname.has_key?(uri)
|
171
172
|
return @uri_to_qname[uri]
|
172
173
|
when u = @uri_to_prefix.keys.detect {|u| uri.index(u.to_s) == 0}
|
173
174
|
# Use a defined prefix
|
174
175
|
prefix = @uri_to_prefix[u]
|
175
|
-
prefix(prefix, u)
|
176
|
+
prefix(prefix, u) unless u.to_s.empty? # Define for output
|
177
|
+
add_debug "get_qname: add prefix #{prefix.inspect} => #{u}"
|
176
178
|
uri.sub(u.to_s, "#{prefix}:")
|
177
179
|
when @options[:standard_prefixes] && vocab = RDF::Vocabulary.detect {|v| uri.index(v.to_uri.to_s) == 0}
|
178
180
|
prefix = vocab.__name__.to_s.split('::').last.downcase
|
179
181
|
@uri_to_prefix[vocab.to_uri.to_s] = prefix
|
180
182
|
prefix(prefix, vocab.to_uri) # Define for output
|
183
|
+
add_debug "get_qname: add standard prefix #{prefix.inspect} => #{vocab.to_uri}"
|
181
184
|
uri.sub(vocab.to_uri.to_s, "#{prefix}:")
|
182
185
|
else
|
183
186
|
nil
|
@@ -232,14 +235,22 @@ module RDF::N3
|
|
232
235
|
# @param [Hash{Symbol => Object}] options
|
233
236
|
# @return [String]
|
234
237
|
def format_literal(literal, options = {})
|
238
|
+
literal = literal.dup.canonicalize! if @options[:canonicalize]
|
235
239
|
case literal
|
236
|
-
|
240
|
+
when RDF::Literal
|
241
|
+
case literal.datatype
|
242
|
+
when RDF::XSD.boolean, RDF::XSD.integer, RDF::XSD.decimal
|
243
|
+
literal.to_s
|
244
|
+
when RDF::XSD.double
|
245
|
+
literal.to_s.sub('E', 'e') # Favor lower case exponent
|
246
|
+
else
|
237
247
|
text = quoted(literal.value)
|
238
248
|
text << "@#{literal.language}" if literal.has_language?
|
239
249
|
text << "^^#{format_uri(literal.datatype)}" if literal.has_datatype?
|
240
250
|
text
|
241
|
-
|
242
|
-
|
251
|
+
end
|
252
|
+
else
|
253
|
+
quoted(literal.to_s)
|
243
254
|
end
|
244
255
|
end
|
245
256
|
|
@@ -270,7 +281,7 @@ module RDF::N3
|
|
270
281
|
def start_document
|
271
282
|
@started = true
|
272
283
|
|
273
|
-
@output.write("#{indent}@base <#{@base_uri}> .\n")
|
284
|
+
@output.write("#{indent}@base <#{@base_uri}> .\n") unless @base_uri.to_s.empty?
|
274
285
|
|
275
286
|
add_debug("start_document: #{prefixes.inspect}")
|
276
287
|
prefixes.keys.sort_by(&:to_s).each do |prefix|
|
@@ -353,6 +364,7 @@ module RDF::N3
|
|
353
364
|
get_qname(statement.subject)
|
354
365
|
get_qname(statement.predicate)
|
355
366
|
get_qname(statement.object)
|
367
|
+
get_qname(statement.object.datatype) if statement.object.literal? && statement.object.datatype
|
356
368
|
|
357
369
|
@references[statement.predicate] = ref_count(statement.predicate) + 1
|
358
370
|
end
|
data/rdf-n3.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rdf-n3}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gregg Kellogg"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-07-10}
|
13
13
|
s.description = %q{RDF::N3 is an Notation-3 and Turtle reader/writer for the RDF.rb library suite.}
|
14
14
|
s.email = %q{gregg@kellogg-assoc.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -73,19 +73,6 @@ Gem::Specification.new do |s|
|
|
73
73
|
s.require_paths = ["lib"]
|
74
74
|
s.rubygems_version = %q{1.5.0}
|
75
75
|
s.summary = %q{N3/Turtle reader/writer for RDF.rb.}
|
76
|
-
s.test_files = [
|
77
|
-
"spec/cwm_spec.rb",
|
78
|
-
"spec/cwm_test.rb",
|
79
|
-
"spec/format_spec.rb",
|
80
|
-
"spec/matchers.rb",
|
81
|
-
"spec/reader_spec.rb",
|
82
|
-
"spec/spec_helper.rb",
|
83
|
-
"spec/swap_spec.rb",
|
84
|
-
"spec/swap_test.rb",
|
85
|
-
"spec/turtle_spec.rb",
|
86
|
-
"spec/turtle_test.rb",
|
87
|
-
"spec/writer_spec.rb"
|
88
|
-
]
|
89
76
|
|
90
77
|
if s.respond_to? :specification_version then
|
91
78
|
s.specification_version = 3
|
data/spec/reader_spec.rb
CHANGED
@@ -446,6 +446,7 @@ describe "RDF::N3::Reader" do
|
|
446
446
|
%(:a :b 1.0e1) => %(<http://a/b#a> <http://a/b#b> "1.0e1"^^<http://www.w3.org/2001/XMLSchema#double> .),
|
447
447
|
%(:a :b 1.0e-1) => %(<http://a/b#a> <http://a/b#b> "1.0e-1"^^<http://www.w3.org/2001/XMLSchema#double> .),
|
448
448
|
%(:a :b 1.0e+1) => %(<http://a/b#a> <http://a/b#b> "1.0e+1"^^<http://www.w3.org/2001/XMLSchema#double> .),
|
449
|
+
%(:a :b 1.0E1) => %(<http://a/b#a> <http://a/b#b> "1.0e1"^^<http://www.w3.org/2001/XMLSchema#double> .),
|
449
450
|
}.each_pair do |n3, nt|
|
450
451
|
it "should create typed literal for '#{n3}'" do
|
451
452
|
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
data/spec/writer_spec.rb
CHANGED
@@ -223,17 +223,130 @@ describe RDF::N3::Writer do
|
|
223
223
|
#$verbose = false
|
224
224
|
end
|
225
225
|
end
|
226
|
-
|
227
|
-
describe "
|
228
|
-
|
229
|
-
|
230
|
-
""" .
|
231
|
-
|
226
|
+
|
227
|
+
describe "literals" do
|
228
|
+
describe "plain" do
|
229
|
+
it "encodes embedded \"\"\"" do
|
230
|
+
n3 = %(:a :b """testing string parsing in N3.
|
231
|
+
""" .)
|
232
|
+
serialize(n3, nil, [/testing string parsing in N3.\n/])
|
233
|
+
end
|
234
|
+
|
235
|
+
it "encodes embedded \"" do
|
236
|
+
n3 = %(:a :b """string with " escaped quote marks""" .)
|
237
|
+
serialize(n3, nil, [/string with \\" escaped quote mark/])
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
describe "with language" do
|
242
|
+
it "specifies language for literal with language" do
|
243
|
+
ttl = %q(:a :b "string"@en .)
|
244
|
+
serialize(ttl, nil, [%r("string"@en)])
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe "xsd:anyURI" do
|
249
|
+
it "uses xsd namespace for datatype" do
|
250
|
+
ttl = %q(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b "http://foo/"^^xsd:anyURI .)
|
251
|
+
serialize(ttl, nil, [
|
252
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
253
|
+
%r("http://foo/"\^\^xsd:anyURI \.),
|
254
|
+
])
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe "xsd:boolean" do
|
259
|
+
[
|
260
|
+
[%q("true"^^xsd:boolean), /true ./],
|
261
|
+
[%q("TrUe"^^xsd:boolean), /true ./],
|
262
|
+
[%q("1"^^xsd:boolean), /true ./],
|
263
|
+
[%q(true), /true ./],
|
264
|
+
[%q("false"^^xsd:boolean), /false ./],
|
265
|
+
[%q("FaLsE"^^xsd:boolean), /false ./],
|
266
|
+
[%q("0"^^xsd:boolean), /false ./],
|
267
|
+
[%q(false), /false ./],
|
268
|
+
].each do |(l,r)|
|
269
|
+
it "uses token for #{l.inspect}" do
|
270
|
+
ttl = %(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b #{l} .)
|
271
|
+
serialize(ttl, nil, [
|
272
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
273
|
+
r,
|
274
|
+
], :canonicalize => true)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
describe "xsd:integer" do
|
280
|
+
[
|
281
|
+
[%q("1"^^xsd:integer), /1 ./],
|
282
|
+
[%q(1), /1 ./],
|
283
|
+
[%q("0"^^xsd:integer), /0 ./],
|
284
|
+
[%q(0), /0 ./],
|
285
|
+
[%q("10"^^xsd:integer), /10 ./],
|
286
|
+
[%q(10), /10 ./],
|
287
|
+
].each do |(l,r)|
|
288
|
+
it "uses token for #{l.inspect}" do
|
289
|
+
ttl = %(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b #{l} .)
|
290
|
+
serialize(ttl, nil, [
|
291
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
292
|
+
r,
|
293
|
+
], :canonicalize => true)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
describe "xsd:int" do
|
299
|
+
[
|
300
|
+
[%q("1"^^xsd:int), /"1"\^\^xsd:int ./],
|
301
|
+
[%q("0"^^xsd:int), /"0"\^\^xsd:int ./],
|
302
|
+
[%q("10"^^xsd:int), /"10"\^\^xsd:int ./],
|
303
|
+
].each do |(l,r)|
|
304
|
+
it "uses token for #{l.inspect}" do
|
305
|
+
ttl = %(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b #{l} .)
|
306
|
+
serialize(ttl, nil, [
|
307
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
308
|
+
r,
|
309
|
+
], :canonicalize => true)
|
310
|
+
end
|
311
|
+
end
|
232
312
|
end
|
233
313
|
|
234
|
-
|
235
|
-
|
236
|
-
|
314
|
+
describe "xsd:decimal" do
|
315
|
+
[
|
316
|
+
[%q("1.0"^^xsd:decimal), /1.0 ./],
|
317
|
+
[%q(1.0), /1.0 ./],
|
318
|
+
[%q("0.1"^^xsd:decimal), /0.1 ./],
|
319
|
+
[%q(0.1), /0.1 ./],
|
320
|
+
[%q("10.02"^^xsd:decimal), /10.02 ./],
|
321
|
+
[%q(10.02), /10.02 ./],
|
322
|
+
].each do |(l,r)|
|
323
|
+
it "uses token for #{l.inspect}" do
|
324
|
+
ttl = %(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b #{l} .)
|
325
|
+
serialize(ttl, nil, [
|
326
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
327
|
+
r,
|
328
|
+
], :canonicalize => true)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
describe "xsd:double" do
|
334
|
+
[
|
335
|
+
[%q("1.0e1"^^xsd:double), /1.0e1 ./],
|
336
|
+
[%q(1.0e1), /1.0e1 ./],
|
337
|
+
[%q("0.1e1"^^xsd:double), /1.0e0 ./],
|
338
|
+
[%q(0.1e1), /1.0e0 ./],
|
339
|
+
[%q("10.02e1"^^xsd:double), /1.002e2 ./],
|
340
|
+
[%q(10.02e1), /1.002e2 ./],
|
341
|
+
].each do |(l,r)|
|
342
|
+
it "uses token for #{l.inspect}" do
|
343
|
+
ttl = %(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :a :b #{l} .)
|
344
|
+
serialize(ttl, nil, [
|
345
|
+
%r(@prefix xsd: <http://www.w3.org/2001/XMLSchema#> \.),
|
346
|
+
r,
|
347
|
+
], :canonicalize => true)
|
348
|
+
end
|
349
|
+
end
|
237
350
|
end
|
238
351
|
end
|
239
352
|
|
@@ -266,9 +379,10 @@ describe RDF::N3::Writer do
|
|
266
379
|
|
267
380
|
# Serialize ntstr to a string and compare against regexps
|
268
381
|
def serialize(ntstr, base = nil, regexps = [], options = {})
|
269
|
-
|
382
|
+
prefixes = options[:prefixes] || {}
|
383
|
+
g = parse(ntstr, :base_uri => base, :prefixes => prefixes)
|
270
384
|
@debug = []
|
271
|
-
result = RDF::N3::Writer.buffer(options.merge(:debug => @debug, :base_uri => base)) do |writer|
|
385
|
+
result = RDF::N3::Writer.buffer(options.merge(:debug => @debug, :base_uri => base, :prefixes => prefixes)) do |writer|
|
272
386
|
writer << g
|
273
387
|
end
|
274
388
|
if $verbose
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-n3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
|
11
|
-
version: 0.3.3.1
|
9
|
+
- 4
|
10
|
+
version: 0.3.4
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Gregg Kellogg
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2011-
|
18
|
+
date: 2011-07-10 00:00:00 -07:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -238,15 +237,5 @@ rubygems_version: 1.5.0
|
|
238
237
|
signing_key:
|
239
238
|
specification_version: 3
|
240
239
|
summary: N3/Turtle reader/writer for RDF.rb.
|
241
|
-
test_files:
|
242
|
-
|
243
|
-
- spec/cwm_test.rb
|
244
|
-
- spec/format_spec.rb
|
245
|
-
- spec/matchers.rb
|
246
|
-
- spec/reader_spec.rb
|
247
|
-
- spec/spec_helper.rb
|
248
|
-
- spec/swap_spec.rb
|
249
|
-
- spec/swap_test.rb
|
250
|
-
- spec/turtle_spec.rb
|
251
|
-
- spec/turtle_test.rb
|
252
|
-
- spec/writer_spec.rb
|
240
|
+
test_files: []
|
241
|
+
|