rdf-n3 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.markdown +10 -0
- data/README.markdown +1 -1
- data/VERSION +1 -1
- data/lib/rdf/n3/format.rb +25 -0
- data/lib/rdf/n3/reader.rb +23 -30
- data/lib/rdf/n3/writer.rb +40 -26
- metadata +87 -150
data/History.markdown
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.3.6
|
2
|
+
* Update for RDF.rb 0.3.4
|
3
|
+
* Added format detection.
|
4
|
+
|
5
|
+
## 0.3.5
|
6
|
+
* Use RDF::List for reading and writing lists.
|
7
|
+
* Performance improvements.
|
8
|
+
* Writer whitespace and property ordering improvements.
|
9
|
+
* Remove explicit Turtle support in Reader.
|
10
|
+
|
1
11
|
## 0.3.4.1
|
2
12
|
* In Reader, if no base\_uri is used, make sure that @prefix : <#> is generated, not @prefix : <>.
|
3
13
|
* In Writer, fix bug when trying to use `:standard\_prefixes` option.
|
data/README.markdown
CHANGED
@@ -81,7 +81,7 @@ http://www.w3.org/2000/10/swap/grammar/n3.n3 (along with bnf-rules.n3) using cwm
|
|
81
81
|
* Create equivalent to `--think` to iterate on solutions.
|
82
82
|
|
83
83
|
## Dependencies
|
84
|
-
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.3.
|
84
|
+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.3.4)
|
85
85
|
|
86
86
|
## Documentation
|
87
87
|
Full documentation available on [RubyForge](http://rdf.rubyforge.org/n3)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.6
|
data/lib/rdf/n3/format.rb
CHANGED
@@ -24,6 +24,31 @@ module RDF::N3
|
|
24
24
|
|
25
25
|
reader { RDF::N3::Reader }
|
26
26
|
writer { RDF::N3::Writer }
|
27
|
+
|
28
|
+
##
|
29
|
+
# Sample detection to see if it matches N3 (or N-Triples or Turtle)
|
30
|
+
#
|
31
|
+
# Use a text sample to detect the format of an input file. Sub-classes implement
|
32
|
+
# a matcher sufficient to detect probably format matches, including disambiguating
|
33
|
+
# between other similar formats.
|
34
|
+
#
|
35
|
+
# @param [String] sample Beginning several bytes (~ 1K) of input.
|
36
|
+
# @return [Boolean]
|
37
|
+
def self.detect(sample)
|
38
|
+
!!sample.match(%r(
|
39
|
+
(?:@(base|prefix|keywords)) | # N3 keywords
|
40
|
+
"{3} | # Multi-line quotes
|
41
|
+
"[^"]*"^^ | "[^"]*"@ | # Typed/Language literals
|
42
|
+
(?:
|
43
|
+
(?:\s*(?:(?:<[^>]*>) | (?:\w*:\w+) | (?:"[^"]*"))\s*[,;]) ||
|
44
|
+
(?:\s*(?:(?:<[^>]*>) | (?:\w*:\w+) | (?:"[^"]*"))){3}
|
45
|
+
)
|
46
|
+
)mx) && !(
|
47
|
+
sample.match(%r(<(?:\/|html|rdf))i) || # HTML, RDF/XML
|
48
|
+
sample.match(%r(^(?:\s*<[^>]*>){4}.*\.\s*$)) || # N-Quads
|
49
|
+
sample.match(%r("@(context|subject|iri)")) # JSON-LD
|
50
|
+
)
|
51
|
+
end
|
27
52
|
end
|
28
53
|
|
29
54
|
# Alias for N3 format
|
data/lib/rdf/n3/reader.rb
CHANGED
@@ -19,12 +19,6 @@ module RDF::N3
|
|
19
19
|
include Meta
|
20
20
|
include Parser
|
21
21
|
|
22
|
-
##
|
23
|
-
# Missing in 0.3.2
|
24
|
-
def base_uri
|
25
|
-
@options[:base_uri]
|
26
|
-
end
|
27
|
-
|
28
22
|
N3_KEYWORDS = %w(a is of has keywords prefix base true false forSome forAny)
|
29
23
|
|
30
24
|
##
|
@@ -49,7 +43,7 @@ module RDF::N3
|
|
49
43
|
# @yield [reader] `self`
|
50
44
|
# @yieldparam [RDF::Reader] reader
|
51
45
|
# @yieldreturn [void] ignored
|
52
|
-
# @raise [Error]:: Raises RDF::ReaderError if
|
46
|
+
# @raise [Error]:: Raises RDF::ReaderError if validating and an error is found
|
53
47
|
def initialize(input = $stdin, options = {}, &block)
|
54
48
|
super do
|
55
49
|
input.rewind if input.respond_to?(:rewind)
|
@@ -70,16 +64,12 @@ module RDF::N3
|
|
70
64
|
@variables = {} # variable definitions along with defining formula
|
71
65
|
|
72
66
|
if options[:base_uri]
|
73
|
-
add_debug("@uri"
|
67
|
+
add_debug("@uri") { base_uri.inspect}
|
74
68
|
namespace(nil, uri("#{base_uri}#"))
|
75
69
|
end
|
76
|
-
add_debug("validate"
|
77
|
-
add_debug("canonicalize"
|
78
|
-
add_debug("intern"
|
79
|
-
|
80
|
-
# Prefixes that may be used without being defined
|
81
|
-
#prefix(:rdf, RDF.to_uri.to_s)
|
82
|
-
#prefix(:xsd, RDF::XSD.to_uri.to_s)
|
70
|
+
add_debug("validate") {validate?.inspect}
|
71
|
+
add_debug("canonicalize") {canonicalize?.inspect}
|
72
|
+
add_debug("intern") {intern?.inspect}
|
83
73
|
|
84
74
|
if block_given?
|
85
75
|
case block.arity
|
@@ -133,7 +123,7 @@ module RDF::N3
|
|
133
123
|
def onFinish
|
134
124
|
prod = @productions.pop()
|
135
125
|
handler = "#{prod}Finish".to_sym
|
136
|
-
add_debug("#{handler}(#{respond_to?(handler)})"
|
126
|
+
add_debug("#{handler}(#{respond_to?(handler)})") {"#{prod}: #{@prod_data.last.inspect}"}
|
137
127
|
send(handler) if respond_to?(handler)
|
138
128
|
end
|
139
129
|
|
@@ -142,7 +132,7 @@ module RDF::N3
|
|
142
132
|
unless @productions.empty?
|
143
133
|
parentProd = @productions.last
|
144
134
|
handler = "#{parentProd}Token".to_sym
|
145
|
-
add_debug("#{handler}(#{respond_to?(handler)})"
|
135
|
+
add_debug("#{handler}(#{respond_to?(handler)})") {"#{prod}, #{tok}: #{@prod_data.last.inspect}"}
|
146
136
|
send(handler, prod, tok) if respond_to?(handler)
|
147
137
|
else
|
148
138
|
error("Token has no parent production")
|
@@ -189,9 +179,9 @@ module RDF::N3
|
|
189
179
|
# This means that <#foo> can be written :foo and using @keywords one can reduce that to foo.
|
190
180
|
|
191
181
|
namespace(nil, uri.match(/[\/\#]$/) ? base_uri : process_uri("#{uri}#"))
|
192
|
-
add_debug("declarationFinish[@base]"
|
182
|
+
add_debug("declarationFinish[@base]") {"@base=#{base_uri}"}
|
193
183
|
when "@keywords"
|
194
|
-
add_debug("declarationFinish[@keywords]"
|
184
|
+
add_debug("declarationFinish[@keywords]") {@keywords.inspect}
|
195
185
|
# Keywords are handled in tokenizer and maintained in @keywords array
|
196
186
|
if (@keywords & N3_KEYWORDS) != @keywords
|
197
187
|
error("Undefined keywords used: #{(@keywords - N3_KEYWORDS).to_sentence}") if validate?
|
@@ -241,7 +231,7 @@ module RDF::N3
|
|
241
231
|
# If we're in teh middle of a pathtail, append
|
242
232
|
if @prod_data.last[:pathtail] && expression[:pathitem] && expression[:pathtail]
|
243
233
|
path_list = [expression[:pathitem]] + expression[:pathtail]
|
244
|
-
add_debug("expressionFinish(pathtail)"
|
234
|
+
add_debug("expressionFinish(pathtail)") {"set pathtail to #{path_list.inspect}"}
|
245
235
|
@prod_data.last[:pathtail] = path_list
|
246
236
|
|
247
237
|
dir_list = [expression[:direction]] if expression[:direction]
|
@@ -404,7 +394,7 @@ module RDF::N3
|
|
404
394
|
properties.each do |p|
|
405
395
|
predicate = p[:verb]
|
406
396
|
next unless predicate
|
407
|
-
add_debug("simpleStatementFinish(pred)"
|
397
|
+
add_debug("simpleStatementFinish(pred)") {predicate.to_s}
|
408
398
|
error(%(Illegal statment: "#{predicate}" missing object)) unless p.has_key?(:object)
|
409
399
|
objects =[ p[:object]].flatten.compact
|
410
400
|
objects.each do |object|
|
@@ -507,14 +497,14 @@ module RDF::N3
|
|
507
497
|
###################
|
508
498
|
|
509
499
|
def process_anonnode(anonnode)
|
510
|
-
add_debug("process_anonnode"
|
500
|
+
add_debug("process_anonnode") {anonnode.inspect}
|
511
501
|
bnode = RDF::Node.new
|
512
502
|
|
513
503
|
if anonnode[:propertylist]
|
514
504
|
properties = anonnode[:propertylist]
|
515
505
|
properties.each do |p|
|
516
506
|
predicate = p[:verb]
|
517
|
-
add_debug("process_anonnode(verb)"
|
507
|
+
add_debug("process_anonnode(verb)") {predicate.inspect}
|
518
508
|
objects = [p[:object]].flatten.compact
|
519
509
|
objects.each { |object| add_triple("anonnode", bnode, predicate, object) }
|
520
510
|
end
|
@@ -537,7 +527,7 @@ module RDF::N3
|
|
537
527
|
#
|
538
528
|
# Create triple and return property used for next iteration
|
539
529
|
def process_path(expression)
|
540
|
-
add_debug("process_path"
|
530
|
+
add_debug("process_path") {expression.inspect}
|
541
531
|
|
542
532
|
pathitem = expression[:pathitem]
|
543
533
|
pathtail = expression[:pathtail]
|
@@ -581,7 +571,7 @@ module RDF::N3
|
|
581
571
|
end
|
582
572
|
|
583
573
|
uri = if prefix(prefix)
|
584
|
-
add_debug('process_qname(ns)'
|
574
|
+
add_debug('process_qname(ns)') {"#{prefix(prefix)}, #{name}"}
|
585
575
|
ns(prefix, name)
|
586
576
|
elsif prefix == '_'
|
587
577
|
add_debug('process_qname(bnode)', name)
|
@@ -591,7 +581,7 @@ module RDF::N3
|
|
591
581
|
namespace(nil, uri("#{base_uri}#")) unless prefix(nil)
|
592
582
|
ns(nil, name)
|
593
583
|
end
|
594
|
-
add_debug('process_qname'
|
584
|
+
add_debug('process_qname') {uri.inspect}
|
595
585
|
uri
|
596
586
|
end
|
597
587
|
|
@@ -625,7 +615,10 @@ module RDF::N3
|
|
625
615
|
#
|
626
616
|
# @param [XML Node, any] node:: XML Node or string for showing context
|
627
617
|
# @param [String] message::
|
628
|
-
|
618
|
+
# @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
|
619
|
+
def add_debug(node, message = "")
|
620
|
+
return unless ::RDF::N3.debug? || @options[:debug]
|
621
|
+
message = message + yield if block_given?
|
629
622
|
puts "[#{@lineno},#{@pos}]#{' ' * @productions.length}#{node}: #{message}" if ::RDF::N3::debug?
|
630
623
|
@options[:debug] << "[#{@lineno},#{@pos}]#{' ' * @productions.length}#{node}: #{message}" if @options[:debug].is_a?(Array)
|
631
624
|
end
|
@@ -645,7 +638,7 @@ module RDF::N3
|
|
645
638
|
subject = subject.context if subject.graph?
|
646
639
|
object = object.context if object.graph?
|
647
640
|
statement = RDF::Statement.new(subject, predicate, object, context_opts || {})
|
648
|
-
add_debug(node
|
641
|
+
add_debug(node) {statement.to_s}
|
649
642
|
@callback.call(statement)
|
650
643
|
end
|
651
644
|
|
@@ -654,7 +647,7 @@ module RDF::N3
|
|
654
647
|
if uri == '#'
|
655
648
|
uri = prefix(nil).to_s + '#'
|
656
649
|
end
|
657
|
-
add_debug("namespace"
|
650
|
+
add_debug("namespace") {"'#{prefix}' <#{uri}>"}
|
658
651
|
prefix(prefix, uri(uri))
|
659
652
|
end
|
660
653
|
|
@@ -684,7 +677,7 @@ module RDF::N3
|
|
684
677
|
def ns(prefix, suffix)
|
685
678
|
base = prefix(prefix).to_s
|
686
679
|
suffix = suffix.to_s.sub(/^\#/, "") if base.index("#")
|
687
|
-
add_debug("ns"
|
680
|
+
add_debug("ns") {"base: '#{base}', suffix: '#{suffix}'"}
|
688
681
|
uri(base + suffix.to_s)
|
689
682
|
end
|
690
683
|
end
|
data/lib/rdf/n3/writer.rb
CHANGED
@@ -139,7 +139,7 @@ module RDF::N3
|
|
139
139
|
|
140
140
|
self.reset
|
141
141
|
|
142
|
-
add_debug "\nserialize: graph: #{@graph.size}"
|
142
|
+
add_debug {"\nserialize: graph: #{@graph.size}"}
|
143
143
|
|
144
144
|
preprocess
|
145
145
|
start_document
|
@@ -164,7 +164,7 @@ module RDF::N3
|
|
164
164
|
return nil
|
165
165
|
end
|
166
166
|
|
167
|
-
add_debug "get_qname(#{resource}), std?}"
|
167
|
+
add_debug {"get_qname(#{resource}), std?}"}
|
168
168
|
qname = case
|
169
169
|
when @uri_to_qname.has_key?(uri)
|
170
170
|
return @uri_to_qname[uri]
|
@@ -172,13 +172,13 @@ module RDF::N3
|
|
172
172
|
# Use a defined prefix
|
173
173
|
prefix = @uri_to_prefix[u]
|
174
174
|
prefix(prefix, u) unless u.to_s.empty? # Define for output
|
175
|
-
add_debug "get_qname: add prefix #{prefix.inspect} => #{u}"
|
175
|
+
add_debug {"get_qname: add prefix #{prefix.inspect} => #{u}"}
|
176
176
|
uri.sub(u.to_s, "#{prefix}:")
|
177
177
|
when @options[:standard_prefixes] && vocab = RDF::Vocabulary.each.to_a.detect {|v| uri.index(v.to_uri.to_s) == 0}
|
178
178
|
prefix = vocab.__name__.to_s.split('::').last.downcase
|
179
179
|
@uri_to_prefix[vocab.to_uri.to_s] = prefix
|
180
180
|
prefix(prefix, vocab.to_uri) # Define for output
|
181
|
-
add_debug "get_qname: add standard prefix #{prefix.inspect} => #{vocab.to_uri}"
|
181
|
+
add_debug {"get_qname: add standard prefix #{prefix.inspect} => #{vocab.to_uri}"}
|
182
182
|
uri.sub(vocab.to_uri.to_s, "#{prefix}:")
|
183
183
|
else
|
184
184
|
nil
|
@@ -213,7 +213,7 @@ module RDF::N3
|
|
213
213
|
prop_list << prop.to_s
|
214
214
|
end
|
215
215
|
|
216
|
-
add_debug "sort_properties: #{prop_list.join(', ')}"
|
216
|
+
add_debug {"sort_properties: #{prop_list.join(', ')}"}
|
217
217
|
prop_list
|
218
218
|
end
|
219
219
|
|
@@ -251,7 +251,7 @@ module RDF::N3
|
|
251
251
|
# @return [String]
|
252
252
|
def format_uri(uri, options = {})
|
253
253
|
md = relativize(uri)
|
254
|
-
add_debug
|
254
|
+
add_debug {"relativize(#{uri.inspect}) => #{md.inspect}"} if md != uri.to_s
|
255
255
|
md != uri.to_s ? "<#{md}>" : (get_qname(uri) || "<#{uri}>")
|
256
256
|
end
|
257
257
|
|
@@ -270,20 +270,20 @@ module RDF::N3
|
|
270
270
|
def start_document
|
271
271
|
@started = true
|
272
272
|
|
273
|
-
@output.write("#{indent}@base <#{
|
273
|
+
@output.write("#{indent}@base <#{base_uri}> .\n") unless base_uri.to_s.empty?
|
274
274
|
|
275
|
-
add_debug
|
275
|
+
add_debug {"start_document: #{prefixes.inspect}"}
|
276
276
|
prefixes.keys.sort_by(&:to_s).each do |prefix|
|
277
277
|
@output.write("#{indent}@prefix #{prefix}: <#{prefixes[prefix]}> .\n")
|
278
278
|
end
|
279
279
|
end
|
280
280
|
|
281
|
-
# If
|
281
|
+
# If base_uri is defined, use it to try to make uri relative
|
282
282
|
# @param [#to_s] uri
|
283
283
|
# @return [String]
|
284
284
|
def relativize(uri)
|
285
285
|
uri = uri.to_s
|
286
|
-
|
286
|
+
base_uri ? uri.sub(base_uri.to_s, "") : uri
|
287
287
|
end
|
288
288
|
|
289
289
|
# Defines rdf:type of subjects to be emitted at the beginning of the graph. Defaults to rdfs:Class
|
@@ -308,15 +308,17 @@ module RDF::N3
|
|
308
308
|
subjects << base_uri
|
309
309
|
seen[base_uri] = true
|
310
310
|
end
|
311
|
+
add_debug {"subjects1: #{subjects.inspect}"}
|
311
312
|
|
312
313
|
# Add distinguished classes
|
313
314
|
top_classes.each do |class_uri|
|
314
315
|
graph.query(:predicate => RDF.type, :object => class_uri).map {|st| st.subject}.sort.uniq.each do |subject|
|
315
|
-
add_debug "order_subjects: #{subject.inspect}"
|
316
|
+
add_debug {"order_subjects: #{subject.inspect}"}
|
316
317
|
subjects << subject
|
317
318
|
seen[subject] = true
|
318
319
|
end
|
319
320
|
end
|
321
|
+
add_debug {"subjects2: #{subjects.inspect}"}
|
320
322
|
|
321
323
|
# Sort subjects by resources over bnodes, ref_counts and the subject URI itself
|
322
324
|
recursable = @subjects.keys.
|
@@ -324,7 +326,10 @@ module RDF::N3
|
|
324
326
|
map {|r| [r.is_a?(RDF::Node) ? 1 : 0, ref_count(r), r]}.
|
325
327
|
sort
|
326
328
|
|
329
|
+
add_debug {"subjects3: #{subjects.inspect}"}
|
327
330
|
subjects += recursable.map{|r| r.last}
|
331
|
+
add_debug {"subjects4: #{subjects.inspect}"}
|
332
|
+
subjects
|
328
333
|
end
|
329
334
|
|
330
335
|
# Perform any preprocessing of statements required
|
@@ -344,7 +349,7 @@ module RDF::N3
|
|
344
349
|
# prefixes.
|
345
350
|
# @param [Statement] statement
|
346
351
|
def preprocess_statement(statement)
|
347
|
-
#add_debug "preprocess: #{statement.inspect}"
|
352
|
+
#add_debug {"preprocess: #{statement.inspect}"}
|
348
353
|
references = ref_count(statement.object) + 1
|
349
354
|
@references[statement.object] = references
|
350
355
|
@subjects[statement.subject] = true
|
@@ -402,24 +407,27 @@ module RDF::N3
|
|
402
407
|
# Add debug event to debug array, if specified
|
403
408
|
#
|
404
409
|
# @param [String] message::
|
405
|
-
|
410
|
+
# @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
|
411
|
+
def add_debug(message = "")
|
412
|
+
return unless ::RDF::N3.debug? || @debug
|
413
|
+
message = message + yield if block_given?
|
406
414
|
STDERR.puts message if ::RDF::N3::debug?
|
407
415
|
@debug << message if @debug.is_a?(Array)
|
408
416
|
end
|
409
417
|
|
410
418
|
# Checks if l is a valid RDF list, i.e. no nodes have other properties.
|
411
419
|
def is_valid_list(l)
|
412
|
-
#add_debug "is_valid_list: #{l.inspect}"
|
420
|
+
#add_debug {"is_valid_list: #{l.inspect}"}
|
413
421
|
return RDF::List.new(l, @graph).valid?
|
414
422
|
end
|
415
423
|
|
416
424
|
def do_list(l)
|
417
425
|
list = RDF::List.new(l, @graph)
|
418
|
-
add_debug "do_list: #{list.inspect}"
|
426
|
+
add_debug {"do_list: #{list.inspect}"}
|
419
427
|
position = :subject
|
420
428
|
list.each_statement do |st|
|
421
429
|
next unless st.predicate == RDF.first
|
422
|
-
add_debug " list this: #{st.subject} first: #{st.object}[#{position}]"
|
430
|
+
add_debug {" list this: #{st.subject} first: #{st.object}[#{position}]"}
|
423
431
|
path(st.object, position)
|
424
432
|
subject_done(st.subject)
|
425
433
|
position = :object
|
@@ -428,7 +436,7 @@ module RDF::N3
|
|
428
436
|
|
429
437
|
def p_list(node, position)
|
430
438
|
return false if !is_valid_list(node)
|
431
|
-
#add_debug "p_list: #{node.inspect}, #{position}"
|
439
|
+
#add_debug {"p_list: #{node.inspect}, #{position}"}
|
432
440
|
|
433
441
|
@output.write(position == :subject ? "(" : " (")
|
434
442
|
@depth += 2
|
@@ -446,7 +454,7 @@ module RDF::N3
|
|
446
454
|
def p_squared(node, position)
|
447
455
|
return false unless p_squared?(node, position)
|
448
456
|
|
449
|
-
#add_debug "p_squared: #{node.inspect}, #{position}"
|
457
|
+
#add_debug {"p_squared: #{node.inspect}, #{position}"}
|
450
458
|
subject_done(node)
|
451
459
|
@output.write(position == :subject ? '[' : ' [')
|
452
460
|
@depth += 2
|
@@ -458,18 +466,24 @@ module RDF::N3
|
|
458
466
|
end
|
459
467
|
|
460
468
|
def p_default(node, position)
|
461
|
-
#add_debug "p_default: #{node.inspect}, #{position}"
|
469
|
+
#add_debug {"p_default: #{node.inspect}, #{position}"}
|
462
470
|
l = (position == :subject ? "" : " ") + format_value(node)
|
463
471
|
@output.write(l)
|
464
472
|
end
|
465
473
|
|
466
474
|
def path(node, position)
|
467
|
-
add_debug
|
475
|
+
add_debug do
|
476
|
+
"path: #{node.inspect}, " +
|
477
|
+
"pos: #{position}, " +
|
478
|
+
"[]: #{is_valid_list(node)}, " +
|
479
|
+
"p2?: #{p_squared?(node, position)}, " +
|
480
|
+
"rc: #{ref_count(node)}"
|
481
|
+
end
|
468
482
|
raise RDF::WriterError, "Cannot serialize node '#{node}'" unless p_list(node, position) || p_squared(node, position) || p_default(node, position)
|
469
483
|
end
|
470
484
|
|
471
485
|
def verb(node)
|
472
|
-
add_debug "verb: #{node.inspect}"
|
486
|
+
add_debug {"verb: #{node.inspect}"}
|
473
487
|
if node == RDF.type
|
474
488
|
@output.write(" a")
|
475
489
|
else
|
@@ -478,7 +492,7 @@ module RDF::N3
|
|
478
492
|
end
|
479
493
|
|
480
494
|
def object_list(objects)
|
481
|
-
add_debug "object_list: #{objects.inspect}"
|
495
|
+
add_debug {"object_list: #{objects.inspect}"}
|
482
496
|
return if objects.empty?
|
483
497
|
|
484
498
|
objects.each_with_index do |obj, i|
|
@@ -495,7 +509,7 @@ module RDF::N3
|
|
495
509
|
end
|
496
510
|
|
497
511
|
prop_list = sort_properties(properties) - [RDF.first.to_s, RDF.rest.to_s]
|
498
|
-
add_debug "predicate_list: #{prop_list.inspect}"
|
512
|
+
add_debug {"predicate_list: #{prop_list.inspect}"}
|
499
513
|
return if prop_list.empty?
|
500
514
|
|
501
515
|
prop_list.each_with_index do |prop, i|
|
@@ -505,7 +519,7 @@ module RDF::N3
|
|
505
519
|
verb(prop[0, 2] == "_:" ? RDF::Node.new(prop.split(':').last) : RDF::URI.intern(prop))
|
506
520
|
object_list(properties[prop])
|
507
521
|
rescue Addressable::URI::InvalidURIError => e
|
508
|
-
add_debug "Predicate #{prop.inspect} is an invalid URI: #{e.message}"
|
522
|
+
add_debug {"Predicate #{prop.inspect} is an invalid URI: #{e.message}"}
|
509
523
|
end
|
510
524
|
end
|
511
525
|
end
|
@@ -517,7 +531,7 @@ module RDF::N3
|
|
517
531
|
def s_squared(subject)
|
518
532
|
return false unless s_squared?(subject)
|
519
533
|
|
520
|
-
add_debug "s_squared: #{subject.inspect}"
|
534
|
+
add_debug {"s_squared: #{subject.inspect}"}
|
521
535
|
@output.write("\n#{indent} [")
|
522
536
|
@depth += 1
|
523
537
|
predicate_list(subject)
|
@@ -535,7 +549,7 @@ module RDF::N3
|
|
535
549
|
end
|
536
550
|
|
537
551
|
def statement(subject)
|
538
|
-
add_debug "statement: #{subject.inspect}, s2?: #{s_squared?(subject)}"
|
552
|
+
add_debug {"statement: #{subject.inspect}, s2?: #{s_squared?(subject)}"}
|
539
553
|
subject_done(subject)
|
540
554
|
s_squared(subject) || s_default(subject)
|
541
555
|
@output.write("\n")
|
metadata
CHANGED
@@ -1,174 +1,122 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-n3
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.6
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 5
|
10
|
-
version: 0.3.5
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Gregg
|
14
9
|
- Kellogg
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2011-09-14 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: rdf
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2157745840 !ruby/object:Gem::Requirement
|
25
18
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 3
|
33
|
-
- 3
|
34
|
-
version: 0.3.3
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.3.4
|
35
23
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: open-uri-cached
|
39
24
|
prerelease: false
|
40
|
-
|
25
|
+
version_requirements: *2157745840
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: open-uri-cached
|
28
|
+
requirement: &2157745280 !ruby/object:Gem::Requirement
|
41
29
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
version: "0"
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
49
34
|
type: :development
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: spira
|
53
35
|
prerelease: false
|
54
|
-
|
36
|
+
version_requirements: *2157745280
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: spira
|
39
|
+
requirement: &2157744300 !ruby/object:Gem::Requirement
|
55
40
|
none: false
|
56
|
-
requirements:
|
57
|
-
- -
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
hash: 7
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
- 0
|
63
|
-
- 12
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
64
44
|
version: 0.0.12
|
65
45
|
type: :development
|
66
|
-
version_requirements: *id003
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: rspec
|
69
46
|
prerelease: false
|
70
|
-
|
47
|
+
version_requirements: *2157744300
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &2157743040 !ruby/object:Gem::Requirement
|
71
51
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
hash: 27
|
76
|
-
segments:
|
77
|
-
- 2
|
78
|
-
- 5
|
79
|
-
- 0
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
80
55
|
version: 2.5.0
|
81
56
|
type: :development
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rdf-spec
|
85
57
|
prerelease: false
|
86
|
-
|
58
|
+
version_requirements: *2157743040
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rdf-spec
|
61
|
+
requirement: &2157741760 !ruby/object:Gem::Requirement
|
87
62
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
segments:
|
93
|
-
- 0
|
94
|
-
- 3
|
95
|
-
- 2
|
96
|
-
version: 0.3.2
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.3.4
|
97
67
|
type: :development
|
98
|
-
version_requirements: *id005
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: rdf-rdfxml
|
101
68
|
prerelease: false
|
102
|
-
|
69
|
+
version_requirements: *2157741760
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rdf-rdfxml
|
72
|
+
requirement: &2157717560 !ruby/object:Gem::Requirement
|
103
73
|
none: false
|
104
|
-
requirements:
|
105
|
-
- -
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
hash: 21
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
- 3
|
111
|
-
- 3
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
112
77
|
version: 0.3.3
|
113
78
|
type: :development
|
114
|
-
version_requirements: *id006
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: rdf-turtle
|
117
79
|
prerelease: false
|
118
|
-
|
80
|
+
version_requirements: *2157717560
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rdf-turtle
|
83
|
+
requirement: &2157716260 !ruby/object:Gem::Requirement
|
119
84
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
- 0
|
127
|
-
- 4
|
128
|
-
version: 0.0.4
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.1.0
|
129
89
|
type: :development
|
130
|
-
version_requirements: *id007
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: rdf-isomorphic
|
133
90
|
prerelease: false
|
134
|
-
|
91
|
+
version_requirements: *2157716260
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: rdf-isomorphic
|
94
|
+
requirement: &2157714760 !ruby/object:Gem::Requirement
|
135
95
|
none: false
|
136
|
-
requirements:
|
137
|
-
- -
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
hash: 27
|
140
|
-
segments:
|
141
|
-
- 0
|
142
|
-
- 3
|
143
|
-
- 4
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
144
99
|
version: 0.3.4
|
145
100
|
type: :development
|
146
|
-
version_requirements: *id008
|
147
|
-
- !ruby/object:Gem::Dependency
|
148
|
-
name: yard
|
149
101
|
prerelease: false
|
150
|
-
|
102
|
+
version_requirements: *2157714760
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: yard
|
105
|
+
requirement: &2157712700 !ruby/object:Gem::Requirement
|
151
106
|
none: false
|
152
|
-
requirements:
|
153
|
-
- -
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
hash: 7
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
- 6
|
159
|
-
- 0
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
160
110
|
version: 0.6.0
|
161
111
|
type: :development
|
162
|
-
|
163
|
-
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *2157712700
|
114
|
+
description: RDF::N3 is an Notation-3 reader/writer for the RDF.rb library suite.
|
164
115
|
email: public-rdf-ruby@w3.org
|
165
116
|
executables: []
|
166
|
-
|
167
117
|
extensions: []
|
168
|
-
|
169
118
|
extra_rdoc_files: []
|
170
|
-
|
171
|
-
files:
|
119
|
+
files:
|
172
120
|
- README.markdown
|
173
121
|
- History.markdown
|
174
122
|
- AUTHORS
|
@@ -185,39 +133,28 @@ files:
|
|
185
133
|
- lib/rdf/n3/writer.rb
|
186
134
|
- lib/rdf/n3.rb
|
187
135
|
homepage: http://github.com/gkellogg/rdf-n3
|
188
|
-
licenses:
|
136
|
+
licenses:
|
189
137
|
- Public Domain
|
190
138
|
post_install_message:
|
191
139
|
rdoc_options: []
|
192
|
-
|
193
|
-
require_paths:
|
140
|
+
require_paths:
|
194
141
|
- lib
|
195
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
196
143
|
none: false
|
197
|
-
requirements:
|
198
|
-
- -
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
hash: 53
|
201
|
-
segments:
|
202
|
-
- 1
|
203
|
-
- 8
|
204
|
-
- 1
|
144
|
+
requirements:
|
145
|
+
- - ! '>='
|
146
|
+
- !ruby/object:Gem::Version
|
205
147
|
version: 1.8.1
|
206
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
149
|
none: false
|
208
|
-
requirements:
|
209
|
-
- -
|
210
|
-
- !ruby/object:Gem::Version
|
211
|
-
|
212
|
-
segments:
|
213
|
-
- 0
|
214
|
-
version: "0"
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
215
154
|
requirements: []
|
216
|
-
|
217
155
|
rubyforge_project: rdf-n3
|
218
|
-
rubygems_version: 1.8.
|
156
|
+
rubygems_version: 1.8.10
|
219
157
|
signing_key:
|
220
158
|
specification_version: 3
|
221
159
|
summary: N3/Turtle reader/writer for RDF.rb.
|
222
160
|
test_files: []
|
223
|
-
|