Skip to content

Commit c426e29

Browse files
committed
Release 1.1.5:
* Fix URI base resolution and include tests.
2 parents 0f2323b + 4413066 commit c426e29

13 files changed

Lines changed: 1194 additions & 71 deletions

File tree

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@ env:
1717
global:
1818
- CI=true
1919
cache: bundler
20+
sudo: false
21+
matrix:
22+
allow_failures:
23+
- rvm: jruby

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.4
1+
1.1.5

example-files/iri-resolution.rdf

Lines changed: 371 additions & 0 deletions
Large diffs are not rendered by default.

example-files/jcoyne.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class Foo < RDF::Vocabulary('http://example.com#')
1717
leaf1 = RDF::Node.new
1818
leaf2 = RDF::Node.new
1919

20-
g.insert([leaf1, RDF::DC.title, 'Hi' ])
21-
g.insert([leaf2, RDF::DC.title, 'There'])
20+
g.insert([leaf1, RDF::URI("http://purl.org/dc/terms/title"), 'Hi' ])
21+
g.insert([leaf2, RDF::URI("http://purl.org/dc/terms/title"), 'There'])
2222
g.insert([list1, RDF.first, leaf1 ])
2323
g.insert([list1, RDF.rest, list2 ])
2424
g.insert([list2, RDF.first, leaf2 ])

lib/rdf/rdfxml/reader.rb

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ def extract_from_ancestors(el, &cb)
6464

6565
# Extract Evaluation Context from an element
6666
def extract_from_element(el, &cb)
67-
b = el.base
68-
lang = el.language
69-
self.base = self.base.join(b) if b
70-
self.language = lang if lang
67+
self.language = el.language if el.language
68+
if b = el.base
69+
b = RDF::URI(b)
70+
self.base = b.absolute? ? b : self.base.join(b)
71+
end
7172
self.uri_mappings.merge!(extract_mappings(el, &cb))
7273
end
7374

@@ -302,7 +303,7 @@ def nodeElement(el, ec)
302303
# If there is an attribute a in propertyAttr with a.URI == rdf:type
303304
# then u:=uri(identifier:=resolve(a.string-value))
304305
# and the following triple is added to the graph:
305-
u = ec.base.join(attr.value)
306+
u = uri(ec.base, attr.value)
306307
add_triple(attr, subject, RDF.type, u)
307308
elsif is_propertyAttr?(attr)
308309
# Attributes not RDF.type
@@ -530,12 +531,12 @@ def nodeElement(el, ec)
530531
# Reification
531532
reify(id, child, subject, predicate, literal, child_ec) if id
532533
else
533-
if resourceAttr
534-
resource = ec.base.join(resourceAttr)
534+
resource = if resourceAttr
535+
uri(ec.base, resourceAttr)
535536
elsif nodeID
536-
resource = bnode(nodeID)
537+
bnode(nodeID)
537538
else
538-
resource = RDF::Node.new
539+
RDF::Node.new
539540
end
540541

541542
# produce triples for attributes
@@ -605,7 +606,7 @@ def parse_subject(el, ec)
605606
when about
606607
about = RDF::NTriples.unescape(about.value)
607608
add_debug(el) {"parse_subject, about: #{about.inspect}"}
608-
ec.base.join(about)
609+
uri(ec.base, about)
609610
else
610611
add_debug(el, "parse_subject, BNode")
611612
RDF::Node.new
@@ -687,8 +688,15 @@ def old_property_check(el)
687688
end
688689

689690
def uri(value, append = nil)
690-
value = RDF::URI.new(value)
691-
value = value.join(append) if append
691+
append = RDF::URI(append)
692+
value = RDF::URI(value)
693+
value = if append.absolute?
694+
value = append
695+
elsif append
696+
value = value.join(append)
697+
else
698+
value
699+
end
692700
value.validate! if validate?
693701
value.canonicalize! if canonicalize?
694702
value = RDF::URI.intern(value) if intern?

rdf-rdfxml.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Gem::Specification.new do |gem|
3333
gem.add_development_dependency 'open-uri-cached', '~> 0.0', '>= 0.0.5'
3434
gem.add_development_dependency 'spira', '= 0.0.12'
3535
gem.add_development_dependency 'json-ld', '~> 1.1'
36-
gem.add_development_dependency 'rspec', '~> 3.0'
36+
gem.add_development_dependency 'rspec', '~> 3.2'
3737
gem.add_development_dependency 'rspec-its', '~> 1.0'
3838
gem.add_development_dependency 'rdf-isomorphic', '~> 1.1'
3939
gem.add_development_dependency 'rdf-turtle', '~> 1.1'

script/tc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ def run_tc(tc, options)
9999
}
100100
end
101101

102+
options[:result_count][result] ||= 0
103+
options[:result_count][result] += 1
104+
102105
puts "#{"test result:" unless options[:quiet]} #{result}"
103106
end
104107

@@ -142,9 +145,15 @@ manifest = Fixtures::SuiteTest::BASE + "manifest.ttl"
142145

143146
earl_preamble(options) if options[:earl]
144147

148+
result_count = {}
149+
145150
Fixtures::SuiteTest::Manifest.open(manifest) do |m|
146151
m.entries.each do |tc|
147152
next unless ARGV.empty? || ARGV.any? {|n| tc.name.match(/#{n}/)}
148-
run_tc(tc, options)
153+
run_tc(tc, options.merge(result_count: result_count))
149154
end
150155
end
156+
157+
result_count.each do |result, count|
158+
puts "#{result}: #{count}"
159+
end

spec/format_spec.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
require 'rdf/spec/format'
44

55
describe RDF::RDFXML::Format do
6-
before :each do
7-
@format_class = RDF::RDFXML::Format
6+
it_behaves_like 'an RDF::Format' do
7+
let(:format_class) {RDF::RDFXML::Format}
88
end
99

10-
include RDF_Format
11-
1210
describe ".for" do
1311
formats = [
1412
:rdfxml,
@@ -18,29 +16,29 @@
1816
{:content_type => 'application/rdf+xml'},
1917
].each do |arg|
2018
it "discovers with #{arg.inspect}" do
21-
expect(RDF::Format.for(arg)).to eq @format_class
19+
expect(RDF::Format.for(arg)).to eq described_class
2220
end
2321
end
2422

2523
{
2624
:rdfxml => '<rdf:RDF about="foo"></rdf:RDF>',
2725
}.each do |sym, str|
2826
it "detects #{sym}" do
29-
expect(@format_class.for {str}).to eq @format_class
27+
expect(RDF::Format.for {str}).to eq described_class
3028
end
3129
end
3230
end
3331

3432
describe "#to_sym" do
35-
specify {expect(@format_class.to_sym).to eq :rdfxml}
33+
specify {expect(described_class.to_sym).to eq :rdfxml}
3634
end
3735

3836
describe ".detect" do
3937
{
4038
:rdfxml => '<rdf:RDF about="foo"></rdf:RDF>',
4139
}.each do |sym, str|
4240
it "detects #{sym}" do
43-
expect(@format_class.detect(str)).to be_truthy
41+
expect(described_class.detect(str)).to be_truthy
4442
end
4543
end
4644

@@ -59,7 +57,7 @@
5957
:STRING_LITERAL_LONG2 => %(<a> <b> """\nliteral\n""" .),
6058
}.each do |sym, str|
6159
it "does not detect #{sym}" do
62-
expect(@format_class.detect(str)).to be_falsey
60+
expect(described_class.detect(str)).to be_falsey
6361
end
6462
end
6563

spec/jruby_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
describe RDF::RDFXML::Writer, skip: ("Nokogiri not loaded" unless have_nokogiri) do
2323
context "resource without type" do
2424
subject do
25-
@graph = RDF::Repository.new << [RDF::URI.new("http://release/"), RDF::DC.title, "foo"]
25+
@graph = RDF::Repository.new << [RDF::URI.new("http://release/"), RDF::URI("http://purl.org/dc/terms/title"), "foo"]
2626
serialize(:max_depth => 1, :attributes => :untyped)
2727
end
2828

0 commit comments

Comments
 (0)