rdf-rdfxml 0.3.2 → 0.3.2.1
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.rdoc +4 -0
- data/VERSION +1 -1
- data/lib/rdf/rdfxml/format.rb +13 -0
- data/lib/rdf/rdfxml/writer.rb +34 -21
- data/rdf-rdfxml.gemspec +2 -2
- data/spec/format_spec.rb +5 -0
- data/spec/writer_spec.rb +9 -0
- metadata +2 -2
data/History.rdoc
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
=== 0.3.2.1
|
2
|
+
* Fix collection serialization bug
|
3
|
+
* Assert :xml as a format type (by creating RDF::RDFXML::XML as a sub-class of Format that uses RDFXML::Reader/Writer)
|
4
|
+
|
1
5
|
=== 0.3.2
|
2
6
|
* Refactor rdfcore tests using Spira and open-uri-cached.
|
3
7
|
* Improve detection and reporting of attempts to write illegal values.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.2
|
1
|
+
0.3.2.1
|
data/lib/rdf/rdfxml/format.rb
CHANGED
@@ -27,4 +27,17 @@ module RDF::RDFXML
|
|
27
27
|
reader { RDF::RDFXML::Reader }
|
28
28
|
writer { RDF::RDFXML::Writer }
|
29
29
|
end
|
30
|
+
|
31
|
+
# Aliases for this format
|
32
|
+
#
|
33
|
+
# This allows the following:
|
34
|
+
#
|
35
|
+
# @example Obtaining an RDFXML format class
|
36
|
+
# RDF::Format.for(:xml) # RDF::RDFXML::XML::Format
|
37
|
+
# RDF::Format.for(:xml).reader # RDF::RDFXML::Reader
|
38
|
+
# RDF::Format.for(:xml).writer # RDF::RDFXML::Writer
|
39
|
+
class XML < RDF::Format
|
40
|
+
reader { RDF::RDFXML::Reader }
|
41
|
+
writer { RDF::RDFXML::Writer }
|
42
|
+
end
|
30
43
|
end
|
data/lib/rdf/rdfxml/writer.rb
CHANGED
@@ -308,7 +308,7 @@ module RDF::RDFXML
|
|
308
308
|
|
309
309
|
rdf_type, *rest = properties.fetch(RDF.type.to_s, [])
|
310
310
|
qname = get_qname_string(rdf_type, :with_default => true)
|
311
|
-
add_debug "
|
311
|
+
add_debug "=> qname: #{qname.inspect}"
|
312
312
|
if rdf_type.is_a?(RDF::Node)
|
313
313
|
# Must serialize with an element
|
314
314
|
rdf_type = nil
|
@@ -318,6 +318,8 @@ module RDF::RDFXML
|
|
318
318
|
properties[RDF.type.to_s] = [rest].flatten.compact
|
319
319
|
end
|
320
320
|
prop_list = order_properties(properties)
|
321
|
+
add_debug "=> property order: #{prop_list.to_sentence}"
|
322
|
+
|
321
323
|
|
322
324
|
if qname
|
323
325
|
rdf_type = nil
|
@@ -332,7 +334,11 @@ module RDF::RDFXML
|
|
332
334
|
|
333
335
|
if subject.is_a?(RDF::Node)
|
334
336
|
# Only need nodeID if it's referenced elsewhere
|
335
|
-
|
337
|
+
if ref_count(subject) > (@depth == 0 ? 0 : 1)
|
338
|
+
node["rdf:nodeID"] = subject.id
|
339
|
+
else
|
340
|
+
node.add_child(Nokogiri::XML::Comment.new(node.document, "Serialization for #{subject}")) if RDF::RDFXML::debug?
|
341
|
+
end
|
336
342
|
else
|
337
343
|
node["rdf:about"] = relativize(subject)
|
338
344
|
end
|
@@ -351,7 +357,11 @@ module RDF::RDFXML
|
|
351
357
|
elsif @force_RDF_about.include?(subject)
|
352
358
|
add_debug "subject: #{subject.inspect}, force about"
|
353
359
|
node = Nokogiri::XML::Element.new("rdf:Description", parent_node.document)
|
354
|
-
|
360
|
+
if subject.is_a?(RDF::Node)
|
361
|
+
node["rdf:nodeID"] = subject.id
|
362
|
+
else
|
363
|
+
node["rdf:about"] = relativize(subject)
|
364
|
+
end
|
355
365
|
end
|
356
366
|
@force_RDF_about.delete(subject)
|
357
367
|
|
@@ -371,22 +381,26 @@ module RDF::RDFXML
|
|
371
381
|
#qname = "rdf:li" if qname.match(/rdf:_\d+/)
|
372
382
|
pred_node = Nokogiri::XML::Element.new(qname, node.document)
|
373
383
|
|
374
|
-
col = RDF::List.new(object, @graph).to_a
|
375
|
-
conformant_list = col.all? {|item| !item.literal?}
|
376
384
|
o_props = @graph.properties(object)
|
385
|
+
|
386
|
+
col = RDF::List.new(object, @graph).to_a
|
387
|
+
conformant_list = col.all? {|item| !item.literal?} && o_props[RDF.first.to_s]
|
377
388
|
args = xml_args(object)
|
378
389
|
attrs = args.pop
|
379
390
|
|
380
391
|
# Check to see if it can be serialized as a collection
|
381
|
-
if conformant_list
|
382
|
-
add_debug("
|
392
|
+
if conformant_list
|
393
|
+
add_debug("=> as collection: [#{col.map(&:to_s).join(", ")}]")
|
383
394
|
# Serialize list as parseType="Collection"
|
395
|
+
pred_node.add_child(Nokogiri::XML::Comment.new(node.document, "Serialization for #{object}")) if RDF::RDFXML::debug?
|
384
396
|
pred_node["rdf:parseType"] = "Collection"
|
385
|
-
|
386
|
-
#
|
387
|
-
|
388
|
-
|
389
|
-
|
397
|
+
while o_props[RDF.first.to_s]
|
398
|
+
# Object is used only for referencing collection item and next
|
399
|
+
subject_done(object)
|
400
|
+
item = o_props[RDF.first.to_s].first
|
401
|
+
object = o_props[RDF.rest.to_s].first
|
402
|
+
o_props = @graph.properties(object)
|
403
|
+
add_debug("=> li first: #{item}, rest: #{object}")
|
390
404
|
@force_RDF_about[item] = true
|
391
405
|
subject(item, pred_node)
|
392
406
|
end
|
@@ -395,31 +409,31 @@ module RDF::RDFXML
|
|
395
409
|
pred_node.unlink
|
396
410
|
pred_node = nil
|
397
411
|
node[qname] = object.is_a?(RDF::URI) ? relativize(object) : object.value
|
398
|
-
add_debug("
|
412
|
+
add_debug("=> as attribute: node[#{qname}]=#{node[qname]}, #{object.class}")
|
399
413
|
elsif object.literal?
|
400
414
|
# Serialize as element
|
401
415
|
add_debug("predicate as element: #{attrs.inspect}")
|
402
416
|
attrs.each_pair do |a, av|
|
403
417
|
next if a.to_s == "xml:lang" && av.to_s == @lang # Lang already specified, don't repeat
|
404
|
-
add_debug "
|
418
|
+
add_debug "=> elt attr #{a}=#{av}"
|
405
419
|
pred_node[a] = av.to_s
|
406
420
|
end
|
407
|
-
add_debug "
|
421
|
+
add_debug "=> elt #{'xmllit ' if object.literal? && object.datatype == RDF.XMLLiteral}content=#{args.first}" if !args.empty?
|
408
422
|
if object.datatype == RDF.XMLLiteral
|
409
423
|
pred_node.inner_html = args.first.to_s
|
410
424
|
elsif args.first
|
411
425
|
pred_node.content = args.first
|
412
426
|
end
|
413
427
|
elsif @depth < @max_depth && !is_done?(object) && @subjects.include?(object)
|
414
|
-
add_debug("
|
428
|
+
add_debug(" as element (recurse)")
|
415
429
|
@depth += 1
|
416
430
|
subject(object, pred_node)
|
417
431
|
@depth -= 1
|
418
432
|
elsif object.is_a?(RDF::Node)
|
419
|
-
add_debug("
|
433
|
+
add_debug("=> as element (nodeID)")
|
420
434
|
pred_node["rdf:nodeID"] = object.id
|
421
435
|
else
|
422
|
-
add_debug("
|
436
|
+
add_debug("=> as element (resource)")
|
423
437
|
pred_node["rdf:resource"] = relativize(object)
|
424
438
|
end
|
425
439
|
|
@@ -428,7 +442,7 @@ module RDF::RDFXML
|
|
428
442
|
|
429
443
|
# Mark a subject as done.
|
430
444
|
def subject_done(subject)
|
431
|
-
|
445
|
+
add_debug("subject_done: #{subject}")
|
432
446
|
@serialized[subject] = true
|
433
447
|
end
|
434
448
|
|
@@ -481,7 +495,6 @@ module RDF::RDFXML
|
|
481
495
|
prop_list << prop.to_s
|
482
496
|
end
|
483
497
|
|
484
|
-
add_debug "order_properties: #{prop_list.to_sentence}"
|
485
498
|
prop_list
|
486
499
|
end
|
487
500
|
|
@@ -512,7 +525,7 @@ module RDF::RDFXML
|
|
512
525
|
#
|
513
526
|
# @param [String] message::
|
514
527
|
def add_debug(message)
|
515
|
-
STDERR.puts message if ::RDF::RDFXML.debug?
|
528
|
+
STDERR.puts (" " * @depth) + message if ::RDF::RDFXML.debug?
|
516
529
|
@debug << message if @debug.is_a?(Array)
|
517
530
|
end
|
518
531
|
|
data/rdf-rdfxml.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rdf-rdfxml}
|
8
|
-
s.version = "0.3.2"
|
8
|
+
s.version = "0.3.2.1"
|
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-02-
|
12
|
+
s.date = %q{2011-02-18}
|
13
13
|
s.description = %q{RDF::RDFXML is an RDF/XML reader and writer for Ruby using the RDF.rb library suite.}
|
14
14
|
s.email = %q{gregg@kellogg-assoc.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/format_spec.rb
CHANGED
@@ -19,5 +19,10 @@ describe RDF::RDFXML::Format do
|
|
19
19
|
format.should == RDF::RDFXML::Format
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
it "should discover 'xml'" do
|
24
|
+
RDF::Format.for(:xml).reader.should == RDF::RDFXML::Reader
|
25
|
+
RDF::Format.for(:xml).writer.should == RDF::RDFXML::Writer
|
26
|
+
end
|
22
27
|
end
|
23
28
|
end
|
data/spec/writer_spec.rb
CHANGED
@@ -361,6 +361,15 @@ describe "RDF::RDFXML::Writer" do
|
|
361
361
|
"/rdf:RDF/rdf:Description/owl:equals/@rdf:nodeID" => /a$/
|
362
362
|
)
|
363
363
|
end
|
364
|
+
|
365
|
+
it "should use rdf::nodeID for forced BNode generation" do
|
366
|
+
@graph = parse(%(
|
367
|
+
@prefix : <http://example/> .
|
368
|
+
_:bar :list (_:foo (_:foo)).
|
369
|
+
))
|
370
|
+
|
371
|
+
graph_check = parse(serialize).should be_equivalent_graph(@graph, :trace => @debug.join("\n"))
|
372
|
+
end
|
364
373
|
|
365
374
|
it "should replicate rdfcore/rdfms-seq-representation" do
|
366
375
|
@graph = parse(%(
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rdf-rdfxml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.2
|
5
|
+
version: 0.3.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Gregg Kellogg
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-18 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|