rdf-rdfa 0.3.4.2 → 0.3.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/rdf/rdfa/reader.rb +6 -6
- data/lib/rdf/rdfa/writer.rb +29 -13
- data/lib/rdf/rdfa/writer/haml_templates.rb +3 -0
- metadata +111 -240
- data/.yardopts +0 -13
- data/CONTRIBUTORS +0 -1
- data/Gemfile +0 -19
- data/History.md +0 -98
- data/README.md +0 -311
- data/Rakefile +0 -64
- data/etc/basic.html +0 -15
- data/etc/foaf.html +0 -83
- data/etc/profile.html +0 -40
- data/etc/xhv.html +0 -459
- data/example-files/bb-test.rb +0 -14
- data/example-files/best-buy.html +0 -3203
- data/example-files/data-view.xhtml +0 -369
- data/example-files/erdf_profile.html +0 -116
- data/example-files/gk-foaf.html +0 -283
- data/example-files/payswarm.html +0 -449
- data/example-files/payswarm.n3 +0 -86
- data/example.rb +0 -23
- data/lib/rdf/.gitignore +0 -2
- data/pkg/.gitignore +0 -1
- data/rdf-rdfa.gemspec +0 -163
- data/script/console +0 -10
- data/script/intern_vocabulary +0 -99
- data/script/parse +0 -91
- data/script/tc +0 -115
- data/script/yard-to-rubyforge +0 -2
- data/spec/.gitignore +0 -1
- data/spec/literal_spec.rb +0 -244
- data/spec/matchers.rb +0 -108
- data/spec/profile_spec.rb +0 -68
- data/spec/reader_spec.rb +0 -572
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -46
- data/spec/test_helper.rb +0 -97
- data/spec/writer_spec.rb +0 -410
data/script/tc
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", 'lib')))
|
4
|
-
require 'rdf/rdfa'
|
5
|
-
require 'sparql/grammar'
|
6
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", 'spec', 'spec_helper'))
|
7
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", 'spec', 'test_helper'))
|
8
|
-
require 'getoptlong'
|
9
|
-
|
10
|
-
def run_tc(tc, options)
|
11
|
-
input_uri = tc.input(options[:host_language], options[:version])
|
12
|
-
results_uri = tc.results(options[:host_language], options[:version])
|
13
|
-
|
14
|
-
STDOUT.write "run #{tc.name}"
|
15
|
-
|
16
|
-
if options[:verbose]
|
17
|
-
puts("\nTestCase: #{tc.inspect}")
|
18
|
-
puts("\nInput:\n" + Kernel.open(input_uri) {|f| f.read})
|
19
|
-
puts("\nQuery:\n" + Kernel.open(results_uri) {|f| f.read})
|
20
|
-
end
|
21
|
-
|
22
|
-
pg = RDF::Graph.new if options[:processor_graph]
|
23
|
-
|
24
|
-
begin
|
25
|
-
reader = RDF::RDFa::Reader.new(Kernel.open(input_uri),
|
26
|
-
:base_uri => input_uri,
|
27
|
-
:validate => options[:validate],
|
28
|
-
:processor_graph => pg,
|
29
|
-
:version => options[:version])
|
30
|
-
|
31
|
-
graph = RDF::Graph.new << reader
|
32
|
-
rescue Exception => e
|
33
|
-
puts "#{"exception:" unless options[:quiet]}: #{e}"
|
34
|
-
if options[:quiet]
|
35
|
-
return
|
36
|
-
else
|
37
|
-
raise
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
puts("\nResult:\n" + graph.dump(options[:format])) unless options[:quiet]
|
42
|
-
|
43
|
-
begin
|
44
|
-
result = SPARQL::Grammar.parse(Kernel.open(results_uri)).execute(graph)
|
45
|
-
rescue Exception => e
|
46
|
-
puts "#{"exception:" unless options[:quiet]}: #{e}"
|
47
|
-
return
|
48
|
-
end
|
49
|
-
puts "#{"test result:" unless options[:quiet]} #{(result == (tc.expectedResults || true)) ? 'ok' : 'fail'}"
|
50
|
-
|
51
|
-
if pg && !options[:quiet]
|
52
|
-
puts "\nProcessor Graph:\n"
|
53
|
-
puts pg.inspect
|
54
|
-
RDF::Writer.for(options[:format]).new do |writer|
|
55
|
-
writer << pg
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
options = {
|
61
|
-
:verbose => false,
|
62
|
-
:quite => false,
|
63
|
-
:validate => false,
|
64
|
-
:format => :ntriples,
|
65
|
-
:processor_graph => nil,
|
66
|
-
:host_language => "xhtml1",
|
67
|
-
:version => "rdfa1.1"
|
68
|
-
}
|
69
|
-
|
70
|
-
opts = GetoptLong.new(
|
71
|
-
["--help", "-?", GetoptLong::NO_ARGUMENT],
|
72
|
-
["--dbg", GetoptLong::NO_ARGUMENT],
|
73
|
-
["--format", GetoptLong::REQUIRED_ARGUMENT],
|
74
|
-
["--host-language", "-h", GetoptLong::OPTIONAL_ARGUMENT],
|
75
|
-
["--processor-graph", GetoptLong::NO_ARGUMENT],
|
76
|
-
["--quiet", GetoptLong::NO_ARGUMENT],
|
77
|
-
["--validate", GetoptLong::NO_ARGUMENT],
|
78
|
-
["--verbose", GetoptLong::NO_ARGUMENT],
|
79
|
-
["--version", "-v", GetoptLong::OPTIONAL_ARGUMENT]
|
80
|
-
)
|
81
|
-
|
82
|
-
def help(options)
|
83
|
-
puts "Usage: #{$0} [options] [test-number ...]"
|
84
|
-
puts "Options:"
|
85
|
-
puts " --dump: Dump raw output, otherwise serialize to Ruby"
|
86
|
-
puts " --debug: Display detailed debug output"
|
87
|
-
puts " --format: Format for output, defaults to #{options[:format].inspect}"
|
88
|
-
puts " --host-language: Run for specified host language, defaults to #{options[:host_language]}"
|
89
|
-
puts " --processor-graph: Output processor graph"
|
90
|
-
puts " --quiet: Minimal output"
|
91
|
-
puts " --validate: Validate input"
|
92
|
-
puts " --verbose: Verbose processing"
|
93
|
-
puts " --version: Version of processor to use (rdf1.0, rdf1.1). Defaults to #{options[:version]}"
|
94
|
-
puts " --help,-?: This message"
|
95
|
-
exit(0)
|
96
|
-
end
|
97
|
-
|
98
|
-
opts.each do |opt, arg|
|
99
|
-
case opt
|
100
|
-
when '--help' then help(options)
|
101
|
-
when '--verbose' then options[:verbose] = true
|
102
|
-
when '--quiet' then options[:quiet] = true
|
103
|
-
when '--dbg' then ::RDF::RDFa::debug = true
|
104
|
-
when '--format' then options[:format] = arg.to_sym
|
105
|
-
when '--processor-graph' then options[:processor_graph] = true
|
106
|
-
when '--host-language' then options[:host_language] = arg
|
107
|
-
when '--version' then options[:version] = arg
|
108
|
-
when '--validate' then options[:validate] = true
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
Fixtures::TestCase.for_specific(options[:host_language], options[:version]) do |tc|
|
113
|
-
next unless ARGV.empty? || ARGV.any? {|n| tc.name.match(/#{n}/)}
|
114
|
-
run_tc(tc, options)
|
115
|
-
end
|
data/script/yard-to-rubyforge
DELETED
data/spec/.gitignore
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
/uri-cache/
|
data/spec/literal_spec.rb
DELETED
@@ -1,244 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
$:.unshift "."
|
3
|
-
require File.join(File.dirname(__FILE__), 'spec_helper')
|
4
|
-
|
5
|
-
describe RDF::Literal do
|
6
|
-
require 'nokogiri' rescue nil
|
7
|
-
|
8
|
-
before :each do
|
9
|
-
@new = Proc.new { |*args| RDF::Literal.new(*args) }
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "XML Literal" do
|
13
|
-
describe "with no namespace" do
|
14
|
-
subject { @new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral) }
|
15
|
-
it "should return input" do subject.to_s.should == "foo <sup>bar</sup> baz!" end
|
16
|
-
|
17
|
-
it "should be equal if they have the same contents" do
|
18
|
-
should == @new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "with a namespace" do
|
23
|
-
subject {
|
24
|
-
@new.call("foo <dc:sup>bar</dc:sup> baz!", :datatype => RDF.XMLLiteral,
|
25
|
-
:namespaces => {:dc => RDF::DC.to_s})
|
26
|
-
}
|
27
|
-
|
28
|
-
it "should add namespaces" do subject.to_s.should == "foo <dc:sup xmlns:dc=\"http://purl.org/dc/terms/\">bar</dc:sup> baz!" end
|
29
|
-
|
30
|
-
describe "as string prefix" do
|
31
|
-
subject {
|
32
|
-
@new.call("foo <dc:sup>bar</dc:sup> baz!", :datatype => RDF.XMLLiteral,
|
33
|
-
:namespaces => {"dc" => RDF::DC.to_s})
|
34
|
-
}
|
35
|
-
|
36
|
-
it "should add namespaces" do subject.to_s.should == "foo <dc:sup xmlns:dc=\"http://purl.org/dc/terms/\">bar</dc:sup> baz!" end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "and language" do
|
40
|
-
subject {
|
41
|
-
@new.call("foo <dc:sup>bar</dc:sup> baz!", :datatype => RDF.XMLLiteral,
|
42
|
-
:namespaces => {:dc => RDF::DC.to_s},
|
43
|
-
:language => :fr)
|
44
|
-
}
|
45
|
-
|
46
|
-
it "should add namespaces and language" do subject.to_s.should == "foo <dc:sup xmlns:dc=\"http://purl.org/dc/terms/\" xml:lang=\"fr\">bar</dc:sup> baz!" end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "and node set" do
|
50
|
-
subject {
|
51
|
-
root = Nokogiri::XML.parse(%(<?xml version="1.0" encoding="UTF-8"?>
|
52
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
|
53
|
-
<html xmlns="http://www.w3.org/1999/xhtml"
|
54
|
-
xmlns:dc="http://purl.org/dc/terms/"
|
55
|
-
xmlns:ex="http://example.org/rdf/"
|
56
|
-
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
57
|
-
xmlns:svg="http://www.w3.org/2000/svg">
|
58
|
-
<head profile="http://www.w3.org/1999/xhtml/vocab http://www.w3.org/2005/10/profile">
|
59
|
-
<title>Test 0100</title>
|
60
|
-
</head>
|
61
|
-
<body>
|
62
|
-
<div about="http://www.example.org">
|
63
|
-
<h2 property="ex:example" datatype="rdf:XMLLiteral"><svg:svg/></h2>
|
64
|
-
</div>
|
65
|
-
</body>
|
66
|
-
</html>
|
67
|
-
), nil, nil, Nokogiri::XML::ParseOptions::DEFAULT_XML).root
|
68
|
-
content = root.css("h2").children
|
69
|
-
@new.call(content, :datatype => RDF.XMLLiteral,
|
70
|
-
:namespaces => {
|
71
|
-
:svg => "http://www.w3.org/2000/svg",
|
72
|
-
:dc => "http://purl.org/dc/terms/",
|
73
|
-
})
|
74
|
-
}
|
75
|
-
it "should add namespace" do subject.to_s.should == "<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:dc=\"http://purl.org/dc/terms/\"></svg:svg>" end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "and language with an existing language embedded" do
|
79
|
-
subject {
|
80
|
-
@new.call("foo <dc:sup>bar</dc:sup><dc:sub xml:lang=\"en\">baz</dc:sub>",
|
81
|
-
:datatype => RDF.XMLLiteral,
|
82
|
-
:namespaces => {:dc => RDF::DC.to_s},
|
83
|
-
:language => :fr)
|
84
|
-
}
|
85
|
-
|
86
|
-
it "should add namespaces and language" do subject.to_s.should == "foo <dc:sup xmlns:dc=\"http://purl.org/dc/terms/\" xml:lang=\"fr\">bar</dc:sup><dc:sub xmlns:dc=\"http://purl.org/dc/terms/\" xml:lang=\"en\">baz</dc:sub>" end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "with a default namespace" do
|
91
|
-
subject {
|
92
|
-
@new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral,
|
93
|
-
:namespaces => {"" => RDF::DC.to_s})
|
94
|
-
}
|
95
|
-
|
96
|
-
it "should add namespace" do subject.to_s.should == "foo <sup xmlns=\"http://purl.org/dc/terms/\">bar</sup> baz!" end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "with a default namespace (as empty string)" do
|
100
|
-
subject {
|
101
|
-
@new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral,
|
102
|
-
:namespaces => {"" => RDF::DC.to_s})
|
103
|
-
}
|
104
|
-
|
105
|
-
it "should add namespace" do subject.to_s.should == "foo <sup xmlns=\"http://purl.org/dc/terms/\">bar</sup> baz!" end
|
106
|
-
end
|
107
|
-
|
108
|
-
context "rdfcore tests" do
|
109
|
-
context "rdfms-xml-literal-namespaces" do
|
110
|
-
it "should reproduce test001" do
|
111
|
-
l = @new.call("
|
112
|
-
<html:h1>
|
113
|
-
<b>John</b>
|
114
|
-
</html:h1>
|
115
|
-
",
|
116
|
-
:datatype => RDF.XMLLiteral,
|
117
|
-
:namespaces => {
|
118
|
-
"" => "http://www.w3.org/1999/xhtml",
|
119
|
-
"rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
120
|
-
"html" => "http://NoHTML.example.org",
|
121
|
-
"my" => "http://my.example.org/",
|
122
|
-
})
|
123
|
-
|
124
|
-
pending do
|
125
|
-
l.to_s.should == "\n <html:h1 xmlns:html=\"http://NoHTML.example.org\">\n <b xmlns=\"http://www.w3.org/1999/xhtml\">John</b>\n </html:h1>\n "
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should reproduce test002" do
|
130
|
-
l = @new.call("
|
131
|
-
Ramifications of
|
132
|
-
<apply>
|
133
|
-
<power/>
|
134
|
-
<apply>
|
135
|
-
<plus/>
|
136
|
-
<ci>a</ci>
|
137
|
-
<ci>b</ci>
|
138
|
-
</apply>
|
139
|
-
<cn>2</cn>
|
140
|
-
</apply>
|
141
|
-
to World Peace
|
142
|
-
",
|
143
|
-
:datatype => RDF.XMLLiteral,
|
144
|
-
:namespaces => {
|
145
|
-
"" => "http://www.w3.org/TR/REC-mathml",
|
146
|
-
})
|
147
|
-
|
148
|
-
l.to_s.should == "\n Ramifications of\n <apply xmlns=\"http://www.w3.org/TR/REC-mathml\">\n <power></power>\n <apply>\n\t<plus></plus>\n\t<ci>a</ci>\n\t<ci>b</ci>\n </apply>\n <cn>2</cn>\n </apply>\n to World Peace\n "
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
context "rdfms-xmllang" do
|
153
|
-
it "should reproduce test001" do
|
154
|
-
l = @new.call("chat", :datatype => RDF.XMLLiteral, :language => nil)
|
155
|
-
|
156
|
-
l.to_s.should == "chat"
|
157
|
-
end
|
158
|
-
it "should reproduce test002" do
|
159
|
-
l = @new.call("chat", :datatype => RDF.XMLLiteral, :language => :fr)
|
160
|
-
|
161
|
-
l.to_s.should == "chat"
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
context "xml-canon" do
|
166
|
-
it "should reproduce test001" do
|
167
|
-
l = @new.call("<br />", :datatype => RDF.XMLLiteral)
|
168
|
-
|
169
|
-
l.to_s.should == "<br></br>"
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
context "rdfa tests" do
|
175
|
-
it "should reproduce test 0011: XMLLiteral" do
|
176
|
-
l = @new.call("E = mc<sup>2</sup>: The Most Urgent Problem of Our Time",
|
177
|
-
:datatype => RDF.XMLLiteral,
|
178
|
-
:namespaces => {"" => "http://www.w3.org/1999/xhtml"})
|
179
|
-
|
180
|
-
l.to_s.should == "E = mc<sup xmlns=\"http://www.w3.org/1999/xhtml\">2</sup>: The Most Urgent Problem of Our Time"
|
181
|
-
end
|
182
|
-
|
183
|
-
it "should reproduce test 0092: Tests XMLLiteral content with explicit @datatype" do
|
184
|
-
l = @new.call(%(E = mc<sup>2</sup>: The Most Urgent Problem of Our Time<),
|
185
|
-
:datatype => RDF.XMLLiteral,
|
186
|
-
:namespaces => {"" => "http://www.w3.org/1999/xhtml"})
|
187
|
-
|
188
|
-
l.to_s.should == "E = mc<sup xmlns=\"http://www.w3.org/1999/xhtml\">2</sup>: The Most Urgent Problem of Our Time"
|
189
|
-
end
|
190
|
-
|
191
|
-
it "should reproduce test 0100: XMLLiteral with explicit namespace" do
|
192
|
-
l = @new.call(%(Some text here in <strong>bold</strong> and an svg rectangle: <svg:svg><svg:rect svg:width="200" svg:height="100"/></svg:svg>),
|
193
|
-
:datatype => RDF.XMLLiteral,
|
194
|
-
:namespaces => {
|
195
|
-
"" => "http://www.w3.org/1999/xhtml",
|
196
|
-
"svg" => "http://www.w3.org/2000/svg",
|
197
|
-
})
|
198
|
-
|
199
|
-
pending do
|
200
|
-
l.to_s.should == "Some text here in <strong xmlns=\"http://www.w3.org/1999/xhtml\">bold</strong> and an svg rectangle: <svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\"><svg:rect svg:height=\"100\" svg:width=\"200\"></svg:rect></svg:svg>"
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
it "should reproduce 0101: XMLLiteral with explicit namespace and xml:lang" do
|
205
|
-
l = @new.call(%(Du texte ici en <strong>gras</strong> et un rectangle en svg: <svg:svg><svg:rect svg:width="200" svg:height="100"/></svg:svg>),
|
206
|
-
:datatype => RDF.XMLLiteral, :language => :fr,
|
207
|
-
:namespaces => {
|
208
|
-
"" => "http://www.w3.org/1999/xhtml",
|
209
|
-
"svg" => "http://www.w3.org/2000/svg",
|
210
|
-
})
|
211
|
-
|
212
|
-
pending do
|
213
|
-
l.to_s.should == "Du texte ici en <strong xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\">gras</strong> et un rectangle en svg: <svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\" xml:lang=\"fr\"><svg:rect svg:height=\"100\" svg:width=\"200\"></svg:rect></svg:svg>"
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should reproduce test 0102: XMLLiteral with explicit namespace and xml:lang; not overwriting existing langs" do
|
218
|
-
l = @new.call(%(Du texte ici en <strong>gras</strong> et un rectangle en svg: <svg:svg xml:lang="hu"><svg:rect svg:width="200" svg:height="100"/></svg:svg>),
|
219
|
-
:datatype => RDF.XMLLiteral, :language => :fr,
|
220
|
-
:namespaces => {
|
221
|
-
"" => "http://www.w3.org/1999/xhtml",
|
222
|
-
"svg" => "http://www.w3.org/2000/svg",
|
223
|
-
})
|
224
|
-
|
225
|
-
pending do
|
226
|
-
l.to_s.should == "Du texte ici en <strong xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\">gras</strong> et un rectangle en svg: <svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\" xml:lang=\"hu\"><svg:rect svg:height=\"100\" svg:width=\"200\"></svg:rect></svg:svg>"
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
it "should reproduce test 0103: XMLLiteral with explicit namespace; not overwriting local namespaces" do
|
231
|
-
l = @new.call(%(Some text here in <strong>bold</strong> and an svg rectangle: <svg xmlns="http://www.w3.org/2000/svg"><rect width="200" height="100"/></svg>),
|
232
|
-
:datatype => RDF.XMLLiteral,
|
233
|
-
:namespaces => {
|
234
|
-
"" => "http://www.w3.org/1999/xhtml",
|
235
|
-
"svg" => "http://www.w3.org/2000/svg",
|
236
|
-
})
|
237
|
-
|
238
|
-
pending do
|
239
|
-
l.to_s.should == "Some text here in <strong xmlns=\"http://www.w3.org/1999/xhtml\">bold</strong> and an svg rectangle: <svg xmlns=\"http://www.w3.org/2000/svg\"><rect height=\"100\" width=\"200\"></rect></svg>"
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end if defined?(::Nokogiri)
|
244
|
-
end
|
data/spec/matchers.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'rspec/matchers'
|
2
|
-
require 'sparql/grammar'
|
3
|
-
|
4
|
-
RSpec::Matchers.define :have_xpath do |xpath, value|
|
5
|
-
match do |actual|
|
6
|
-
@doc = Nokogiri::XML.parse(actual)
|
7
|
-
@doc.should be_a(Nokogiri::XML::Document)
|
8
|
-
@doc.root.should be_a(Nokogiri::XML::Element)
|
9
|
-
@namespaces = @doc.namespaces.merge("xhtml" => "http://www.w3.org/1999/xhtml", "xml" => "http://www.w3.org/XML/1998/namespace")
|
10
|
-
case value
|
11
|
-
when false
|
12
|
-
@doc.root.at_xpath(xpath, @namespaces).should be_nil
|
13
|
-
when true
|
14
|
-
@doc.root.at_xpath(xpath, @namespaces).should_not be_nil
|
15
|
-
when Array
|
16
|
-
@doc.root.at_xpath(xpath, @namespaces).to_s.split(" ").should include(*value)
|
17
|
-
when Regexp
|
18
|
-
@doc.root.at_xpath(xpath, @namespaces).to_s.should =~ value
|
19
|
-
else
|
20
|
-
@doc.root.at_xpath(xpath, @namespaces).to_s.should == value
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
failure_message_for_should do |actual|
|
25
|
-
msg = "expected that #{xpath.inspect} would be #{value.inspect} in:\n" + actual.to_s
|
26
|
-
msg += "was: #{@doc.root.at_xpath(xpath, @namespaces)}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def normalize(graph)
|
31
|
-
case graph
|
32
|
-
when RDF::Graph then graph
|
33
|
-
when IO, StringIO
|
34
|
-
RDF::Graph.new.load(graph, :base_uri => @info.about)
|
35
|
-
else
|
36
|
-
# Figure out which parser to use
|
37
|
-
g = RDF::Graph.new
|
38
|
-
reader_class = detect_format(graph)
|
39
|
-
reader_class.new(graph, :base_uri => @info.about).each {|s| g << s}
|
40
|
-
g
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
Info = Struct.new(:about, :information, :trace, :compare, :inputDocument, :outputDocument)
|
45
|
-
|
46
|
-
RSpec::Matchers.define :be_equivalent_graph do |expected, info|
|
47
|
-
match do |actual|
|
48
|
-
@info = if info.respond_to?(:about)
|
49
|
-
info
|
50
|
-
elsif info.is_a?(Hash)
|
51
|
-
identifier = info[:identifier] || expected.is_a?(RDF::Graph) ? expected.context : info[:about]
|
52
|
-
trace = info[:trace]
|
53
|
-
trace = trace.join("\n") if trace.is_a?(Array)
|
54
|
-
Info.new(identifier, info[:information] || "", trace, info[:compare])
|
55
|
-
else
|
56
|
-
Info.new(expected.is_a?(RDF::Graph) ? expected.context : info, info.to_s)
|
57
|
-
end
|
58
|
-
@expected = normalize(expected)
|
59
|
-
@actual = normalize(actual)
|
60
|
-
@actual.isomorphic_with?(@expected)
|
61
|
-
end
|
62
|
-
|
63
|
-
failure_message_for_should do |actual|
|
64
|
-
info = @info.respond_to?(:information) ? @info.information : @info.inspect
|
65
|
-
if @expected.is_a?(RDF::Graph) && @actual.size != @expected.size
|
66
|
-
"Graph entry count differs:\nexpected: #{@expected.size}\nactual: #{@actual.size}"
|
67
|
-
elsif @expected.is_a?(Array) && @actual.size != @expected.length
|
68
|
-
"Graph entry count differs:\nexpected: #{@expected.length}\nactual: #{@actual.size}"
|
69
|
-
else
|
70
|
-
"Graph differs"
|
71
|
-
end +
|
72
|
-
"\n#{info + "\n" unless info.empty?}" +
|
73
|
-
(@info.inputDocument ? "Input file: #{@info.inputDocument}\n" : "") +
|
74
|
-
(@info.outputDocument ? "Output file: #{@info.outputDocument}\n" : "") +
|
75
|
-
"Unsorted Expected:\n#{@expected.dump(:ntriples)}" +
|
76
|
-
"Unsorted Results:\n#{@actual.dump(:ntriples)}" +
|
77
|
-
(@info.trace ? "\nDebug:\n#{@info.trace}" : "")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
RSpec::Matchers.define :pass_query do |expected, info|
|
82
|
-
match do |actual|
|
83
|
-
@expected = expected.read
|
84
|
-
@expected = @expected.force_encoding("utf-8") if @expected.respond_to?(:force_encoding)
|
85
|
-
query = SPARQL::Grammar.parse(@expected)
|
86
|
-
actual = actual.force_encoding("utf-8") if actual.respond_to?(:force_encoding)
|
87
|
-
@results = query.execute(actual)
|
88
|
-
|
89
|
-
@results.should == info.expectedResults
|
90
|
-
end
|
91
|
-
|
92
|
-
failure_message_for_should do |actual|
|
93
|
-
information = info.respond_to?(:information) ? info.information : ""
|
94
|
-
"#{information + "\n" unless information.empty?}" +
|
95
|
-
if @results.nil?
|
96
|
-
"Query failed to return results"
|
97
|
-
elsif !@results.is_a?(RDF::Literal::Boolean)
|
98
|
-
"Query returned non-boolean results"
|
99
|
-
elsif info.expectedResults
|
100
|
-
"Query returned false"
|
101
|
-
else
|
102
|
-
"Query returned true (expected false)"
|
103
|
-
end +
|
104
|
-
"\n#{@expected}" +
|
105
|
-
"\nResults:\n#{@actual.dump(:ntriples)}" +
|
106
|
-
"\nDebug:\n#{info.trace}"
|
107
|
-
end
|
108
|
-
end
|