rdf-n3 0.3.5 → 0.3.6
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/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
|
-
|