rdf-rdfa 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.yardopts +3 -1
- data/History.rdoc +52 -0
- data/README.rdoc +2 -2
- data/Rakefile +12 -17
- data/VERSION +1 -1
- data/lib/rdf/.gitignore +2 -0
- data/lib/rdf/rdfa.rb +1 -1
- data/lib/rdf/rdfa/patches/literal_hacks.rb +15 -17
- data/lib/rdf/rdfa/profile.rb +167 -0
- data/lib/rdf/rdfa/reader.rb +287 -199
- data/lib/rdf/rdfa/version.rb +4 -7
- data/lib/rdf/rdfa/vocab.rb +1 -0
- data/rdf-rdfa.gemspec +16 -125
- data/script/parse +16 -9
- data/script/tc +29 -13
- data/spec/html4-manifest.yml +491 -3855
- data/spec/html5-manifest.yml +491 -3855
- data/spec/literal_spec.rb +7 -8
- data/spec/profile_spec.rb +53 -0
- data/spec/rdfa_helper.rb +48 -47
- data/spec/rdfa_reader_spec.rb +312 -172
- data/spec/spec_helper.rb +12 -3
- data/spec/svgtiny-manifest.yml +37 -0
- data/spec/xhtml-manifest.yml +533 -2824
- metadata +19 -126
- data/History.txt +0 -30
- data/lib/rdf/rdfa/patches/uri_hacks.rb +0 -24
- data/spec/rdfa-triples/0001.nt +0 -1
- data/spec/rdfa-triples/0006.nt +0 -2
- data/spec/rdfa-triples/0007.nt +0 -3
- data/spec/rdfa-triples/0008.nt +0 -1
- data/spec/rdfa-triples/0009.nt +0 -1
- data/spec/rdfa-triples/0010.nt +0 -2
- data/spec/rdfa-triples/0011.nt +0 -3
- data/spec/rdfa-triples/0012.nt +0 -1
- data/spec/rdfa-triples/0013.nt +0 -1
- data/spec/rdfa-triples/0014.nt +0 -1
- data/spec/rdfa-triples/0015.nt +0 -2
- data/spec/rdfa-triples/0017.nt +0 -3
- data/spec/rdfa-triples/0018.nt +0 -1
- data/spec/rdfa-triples/0019.nt +0 -1
- data/spec/rdfa-triples/0020.nt +0 -1
- data/spec/rdfa-triples/0021.nt +0 -1
- data/spec/rdfa-triples/0023.nt +0 -1
- data/spec/rdfa-triples/0025.nt +0 -2
- data/spec/rdfa-triples/0026.nt +0 -1
- data/spec/rdfa-triples/0027.nt +0 -1
- data/spec/rdfa-triples/0029.nt +0 -1
- data/spec/rdfa-triples/0030.nt +0 -1
- data/spec/rdfa-triples/0031.nt +0 -1
- data/spec/rdfa-triples/0032.nt +0 -1
- data/spec/rdfa-triples/0033.nt +0 -2
- data/spec/rdfa-triples/0034.nt +0 -1
- data/spec/rdfa-triples/0035.nt +0 -1
- data/spec/rdfa-triples/0036.nt +0 -1
- data/spec/rdfa-triples/0037.nt +0 -1
- data/spec/rdfa-triples/0038.nt +0 -1
- data/spec/rdfa-triples/0039.nt +0 -1
- data/spec/rdfa-triples/0040.nt +0 -1
- data/spec/rdfa-triples/0041.nt +0 -1
- data/spec/rdfa-triples/0042.nt +0 -0
- data/spec/rdfa-triples/0046.nt +0 -3
- data/spec/rdfa-triples/0047.nt +0 -3
- data/spec/rdfa-triples/0048.nt +0 -3
- data/spec/rdfa-triples/0049.nt +0 -2
- data/spec/rdfa-triples/0050.nt +0 -2
- data/spec/rdfa-triples/0051.nt +0 -2
- data/spec/rdfa-triples/0052.nt +0 -1
- data/spec/rdfa-triples/0053.nt +0 -2
- data/spec/rdfa-triples/0054.nt +0 -2
- data/spec/rdfa-triples/0055.nt +0 -2
- data/spec/rdfa-triples/0056.nt +0 -3
- data/spec/rdfa-triples/0057.nt +0 -4
- data/spec/rdfa-triples/0058.nt +0 -6
- data/spec/rdfa-triples/0059.nt +0 -6
- data/spec/rdfa-triples/0060.nt +0 -2
- data/spec/rdfa-triples/0061.nt +0 -1
- data/spec/rdfa-triples/0062.nt +0 -1
- data/spec/rdfa-triples/0063.nt +0 -1
- data/spec/rdfa-triples/0064.nt +0 -1
- data/spec/rdfa-triples/0065.nt +0 -3
- data/spec/rdfa-triples/0066.nt +0 -1
- data/spec/rdfa-triples/0067.nt +0 -1
- data/spec/rdfa-triples/0068.nt +0 -1
- data/spec/rdfa-triples/0069.nt +0 -1
- data/spec/rdfa-triples/0070.nt +0 -1
- data/spec/rdfa-triples/0071.nt +0 -1
- data/spec/rdfa-triples/0072.nt +0 -1
- data/spec/rdfa-triples/0073.nt +0 -1
- data/spec/rdfa-triples/0074.nt +0 -1
- data/spec/rdfa-triples/0075.nt +0 -1
- data/spec/rdfa-triples/0076.nt +0 -23
- data/spec/rdfa-triples/0077.nt +0 -23
- data/spec/rdfa-triples/0078.nt +0 -6
- data/spec/rdfa-triples/0079.nt +0 -3
- data/spec/rdfa-triples/0080.nt +0 -1
- data/spec/rdfa-triples/0081.nt +0 -6
- data/spec/rdfa-triples/0082.nt +0 -8
- data/spec/rdfa-triples/0083.nt +0 -6
- data/spec/rdfa-triples/0084.nt +0 -8
- data/spec/rdfa-triples/0085.nt +0 -4
- data/spec/rdfa-triples/0086.nt +0 -0
- data/spec/rdfa-triples/0087.nt +0 -23
- data/spec/rdfa-triples/0088.nt +0 -3
- data/spec/rdfa-triples/0089.nt +0 -1
- data/spec/rdfa-triples/0090.nt +0 -1
- data/spec/rdfa-triples/0091.nt +0 -3
- data/spec/rdfa-triples/0092.nt +0 -3
- data/spec/rdfa-triples/0093.nt +0 -2
- data/spec/rdfa-triples/0094.nt +0 -3
- data/spec/rdfa-triples/0099.nt +0 -1
- data/spec/rdfa-triples/0100.nt +0 -1
- data/spec/rdfa-triples/0101.nt +0 -1
- data/spec/rdfa-triples/0102.nt +0 -1
- data/spec/rdfa-triples/0103.nt +0 -1
- data/spec/rdfa-triples/0104.nt +0 -3
- data/spec/rdfa-triples/0105.nt +0 -1
- data/spec/rdfa-triples/0106.nt +0 -1
- data/spec/rdfa-triples/0107.nt +0 -0
- data/spec/rdfa-triples/0108.nt +0 -1
- data/spec/rdfa-triples/0109.nt +0 -1
- data/spec/rdfa-triples/0110.nt +0 -1
- data/spec/rdfa-triples/0111.nt +0 -2
- data/spec/rdfa-triples/0112.nt +0 -1
- data/spec/rdfa-triples/0113.nt +0 -2
- data/spec/rdfa-triples/0114.nt +0 -3
- data/spec/rdfa-triples/0115.nt +0 -4
- data/spec/rdfa-triples/0116.nt +0 -2
- data/spec/rdfa-triples/0117.nt +0 -2
- data/spec/rdfa-triples/0118.nt +0 -1
- data/spec/rdfa-triples/0119.nt +0 -1
- data/spec/rdfa-triples/0120.nt +0 -1
- data/spec/rdfa-triples/0121.nt +0 -2
- data/spec/rdfa-triples/0122.nt +0 -1
- data/spec/rdfa-triples/0123.nt +0 -3
- data/spec/rdfa-triples/0124.nt +0 -4
- data/spec/rdfa-triples/0125.nt +0 -1
- data/spec/rdfa-triples/0126.nt +0 -3
- data/spec/rdfa-triples/1001.nt +0 -6
- data/spec/xhtml11-manifest.yml +0 -4707
data/spec/literal_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
$:.unshift "."
|
3
3
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
4
|
-
require 'nokogiri'
|
5
4
|
|
6
5
|
describe RDF::Literal do
|
7
6
|
require 'nokogiri' rescue nil
|
@@ -73,7 +72,7 @@ describe RDF::Literal do
|
|
73
72
|
:dc => "http://purl.org/dc/terms/",
|
74
73
|
})
|
75
74
|
}
|
76
|
-
it "should add namespace" do subject.to_s.should == "<svg:svg xmlns:svg=\"http://www.w3.org/2000/svg\"></svg:svg>" end
|
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
|
77
76
|
end
|
78
77
|
|
79
78
|
describe "and language with an existing language embedded" do
|
@@ -91,7 +90,7 @@ describe RDF::Literal do
|
|
91
90
|
describe "with a default namespace" do
|
92
91
|
subject {
|
93
92
|
@new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral,
|
94
|
-
:namespaces => {
|
93
|
+
:namespaces => {"" => RDF::DC.to_s})
|
95
94
|
}
|
96
95
|
|
97
96
|
it "should add namespace" do subject.to_s.should == "foo <sup xmlns=\"http://purl.org/dc/terms/\">bar</sup> baz!" end
|
@@ -122,7 +121,7 @@ describe RDF::Literal do
|
|
122
121
|
"my" => "http://my.example.org/",
|
123
122
|
})
|
124
123
|
|
125
|
-
pending
|
124
|
+
pending do
|
126
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 "
|
127
126
|
end
|
128
127
|
end
|
@@ -197,7 +196,7 @@ describe RDF::Literal do
|
|
197
196
|
"svg" => "http://www.w3.org/2000/svg",
|
198
197
|
})
|
199
198
|
|
200
|
-
pending
|
199
|
+
pending do
|
201
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>"
|
202
201
|
end
|
203
202
|
end
|
@@ -210,7 +209,7 @@ describe RDF::Literal do
|
|
210
209
|
"svg" => "http://www.w3.org/2000/svg",
|
211
210
|
})
|
212
211
|
|
213
|
-
pending
|
212
|
+
pending do
|
214
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>"
|
215
214
|
end
|
216
215
|
end
|
@@ -223,7 +222,7 @@ describe RDF::Literal do
|
|
223
222
|
"svg" => "http://www.w3.org/2000/svg",
|
224
223
|
})
|
225
224
|
|
226
|
-
pending
|
225
|
+
pending do
|
227
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>"
|
228
227
|
end
|
229
228
|
end
|
@@ -236,7 +235,7 @@ describe RDF::Literal do
|
|
236
235
|
"svg" => "http://www.w3.org/2000/svg",
|
237
236
|
})
|
238
237
|
|
239
|
-
pending
|
238
|
+
pending do
|
240
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>"
|
241
240
|
end
|
242
241
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
$:.unshift "."
|
2
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
+
|
4
|
+
describe RDF::RDFa::Profile do
|
5
|
+
describe ".new" do
|
6
|
+
describe "foaf" do
|
7
|
+
subject { RDF::RDFa::Profile.new("http://rdfa.digitalbazaar.com/test-suite/profiles/foaf") }
|
8
|
+
|
9
|
+
it "has 74 terms" do
|
10
|
+
subject.terms.keys.length.should == 74
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has no vocabulary" do
|
14
|
+
subject.vocabulary.should be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has no prefixes" do
|
18
|
+
subject.prefixes.should be_empty
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "basic" do
|
23
|
+
subject { RDF::RDFa::Profile.new("http://rdfa.digitalbazaar.com/test-suite/profiles/basic") }
|
24
|
+
|
25
|
+
it "has no terms" do
|
26
|
+
subject.terms.should be_empty
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has no vocabulary" do
|
30
|
+
subject.vocabulary.should be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has 6 prefixes" do
|
34
|
+
subject.prefixes.keys.length.should == 6
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".find" do
|
40
|
+
before(:all) do
|
41
|
+
RDF::RDFa::Profile.find("http://rdfa.digitalbazaar.com/test-suite/profiles/basic")
|
42
|
+
RDF::RDFa::Profile.find("http://rdfa.digitalbazaar.com/test-suite/profiles/foaf")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "cached basic" do
|
46
|
+
RDF::RDFa::Profile.cache[RDF::URI.intern("http://rdfa.digitalbazaar.com/test-suite/profiles/basic")].should be_a(RDF::RDFa::Profile)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "cached foaf" do
|
50
|
+
RDF::RDFa::Profile.cache[RDF::URI.intern("http://rdfa.digitalbazaar.com/test-suite/profiles/foaf")].should be_a(RDF::RDFa::Profile)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/rdfa_helper.rb
CHANGED
@@ -4,7 +4,6 @@ autoload :YAML, "yaml"
|
|
4
4
|
autoload :CGI, 'cgi'
|
5
5
|
|
6
6
|
RDFA_DIR = File.join(File.dirname(__FILE__), 'rdfa-test-suite')
|
7
|
-
RDFA_NT_DIR = File.join(File.dirname(__FILE__), 'rdfa-triples')
|
8
7
|
RDFA_MANIFEST_URL = "http://rdfa.digitalbazaar.com/test-suite/"
|
9
8
|
RDFA_TEST_CASE_URL = "#{RDFA_MANIFEST_URL}test-cases/"
|
10
9
|
|
@@ -24,6 +23,7 @@ module RdfaHelper
|
|
24
23
|
attr_accessor :informationResourceResults
|
25
24
|
attr_accessor :purpose
|
26
25
|
attr_accessor :reviewStatus
|
26
|
+
attr_accessor :classification
|
27
27
|
attr_accessor :suite
|
28
28
|
attr_accessor :specificationReference
|
29
29
|
attr_accessor :expectedResults
|
@@ -43,7 +43,7 @@ module RdfaHelper
|
|
43
43
|
puts "#{pred}: #{obj}" if ::RDF::RDFa::debug?
|
44
44
|
|
45
45
|
unless self.about
|
46
|
-
self.about = statement.subject
|
46
|
+
self.about = statement.subject.to_s
|
47
47
|
self.name = self.about.to_s.split(/[\#\/]/).last || self.about
|
48
48
|
end
|
49
49
|
|
@@ -66,6 +66,7 @@ module RdfaHelper
|
|
66
66
|
informationResourceResults
|
67
67
|
purpose
|
68
68
|
reviewStatus
|
69
|
+
classification
|
69
70
|
specificationReference
|
70
71
|
expectedResults
|
71
72
|
).map {|a| v = self.send(a); "#{a}='#{v}'" if v}.compact.join(", ") +
|
@@ -96,6 +97,7 @@ module RdfaHelper
|
|
96
97
|
if found_head
|
97
98
|
line.chop
|
98
99
|
else
|
100
|
+
found_head ||= line.match(%r(http://www.w3.org/2000/svg))
|
99
101
|
namespaces << line
|
100
102
|
nil
|
101
103
|
end
|
@@ -105,26 +107,24 @@ module RdfaHelper
|
|
105
107
|
|
106
108
|
case suite
|
107
109
|
when "xhtml"
|
108
|
-
head = "" +
|
109
|
-
%(<?xml version="1.0" encoding="UTF-8"?>\n) +
|
110
|
-
%(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">\n) +
|
111
|
-
%(<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.0"\n)
|
112
|
-
head + "#{namespaces}>\n#{body.gsub(TCPATHRE, tcpath)}\n</html>"
|
113
|
-
when "xhtml11"
|
114
110
|
head = "" +
|
115
111
|
%(<?xml version="1.0" encoding="UTF-8"?>\n) +
|
116
112
|
%(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">\n) +
|
117
|
-
%(<html xmlns="http://www.w3.org/1999/xhtml"
|
113
|
+
%(<html xmlns="http://www.w3.org/1999/xhtml"\n)
|
118
114
|
head + "#{namespaces}>\n#{body.gsub(TCPATHRE, tcpath)}\n</html>"
|
119
115
|
when "html4"
|
120
116
|
head ="" +
|
121
|
-
%(<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/
|
122
|
-
%(<html
|
117
|
+
%(<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/MarkUp/DTD/html401-rdfa11-1.dtd">\n) +
|
118
|
+
%(<html\n)
|
123
119
|
head + "#{namespaces}>\n#{body.gsub(TCPATHRE, tcpath).gsub(HTMLRE, '\1.html')}\n</html>"
|
124
120
|
when "html5"
|
125
121
|
head = "<!DOCTYPE html>\n"
|
126
|
-
head += namespaces.empty? ? %(<html
|
122
|
+
head += namespaces.empty? ? %(<html>) : "<html\n#{namespaces}>"
|
127
123
|
head + "\n#{body.gsub(TCPATHRE, tcpath).gsub(HTMLRE, '\1.html')}\n</html>"
|
124
|
+
when "svgtiny"
|
125
|
+
head = %(<?xml version="1.0" encoding="UTF-8"?>\n)
|
126
|
+
head += namespaces.empty? ? %(<svg>) : "<svg\n#{namespaces}>"
|
127
|
+
head + "\n#{body.gsub(TCPATHRE, tcpath).gsub(HTMLRE, '\1.svg')}\n</svg>"
|
128
128
|
else
|
129
129
|
nil
|
130
130
|
end
|
@@ -135,20 +135,18 @@ module RdfaHelper
|
|
135
135
|
f = self.name + ".sparql"
|
136
136
|
body = File.read(File.join(RDFA_DIR, "tests", f)).gsub(TCPATHRE, tcpath)
|
137
137
|
|
138
|
-
suite
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
body = File.read(File.join(RDFA_NT_DIR, f)).gsub(TCPATHRE, tcpath)
|
144
|
-
suite =~ /xhtml/ ? body : body.gsub(HTMLRE, '\1.html')
|
138
|
+
case suite
|
139
|
+
when /xhtml/ then body
|
140
|
+
when /svg/ then body.gsub(HTMLRE, '\1.svg')
|
141
|
+
else body.gsub(HTMLRE, '\1.html')
|
142
|
+
end
|
145
143
|
end
|
146
144
|
|
147
145
|
def inputDocument; self.name + ".txt"; end
|
148
146
|
def outputDocument; self.name + ".sparql"; end
|
149
147
|
|
150
148
|
def version
|
151
|
-
|
149
|
+
:rdfa_1_1
|
152
150
|
end
|
153
151
|
|
154
152
|
# Run test case, yields input for parser to create triples
|
@@ -160,12 +158,7 @@ module RdfaHelper
|
|
160
158
|
|
161
159
|
query_string = results
|
162
160
|
|
163
|
-
|
164
|
-
|
165
|
-
if (query_string.match(/UNION|OPTIONAL/) || title.match(/XML/)) && triples
|
166
|
-
# Check triples, as Rasql doesn't implement UNION
|
167
|
-
graph.should be_equivalent_graph(triples, self)
|
168
|
-
elsif $redland_enabled
|
161
|
+
if $redland_enabled
|
169
162
|
# Run SPARQL query
|
170
163
|
graph.should pass_query(query_string, self)
|
171
164
|
else
|
@@ -190,9 +183,12 @@ module RdfaHelper
|
|
190
183
|
yaml_file = File.join(File.dirname(__FILE__), "#{suite}-manifest.yml")
|
191
184
|
|
192
185
|
@test_cases = unless File.file?(yaml_file)
|
186
|
+
t = Time.now
|
193
187
|
puts "parse #{manifest_file} @#{Time.now}"
|
194
|
-
graph = RDF::Graph.
|
195
|
-
|
188
|
+
graph = RDF::Graph.new
|
189
|
+
graph << RDF::RDFXML::Reader.new(File.open(manifest_file), :base_url => @manifest_url)
|
190
|
+
diff = Time.now - t
|
191
|
+
puts "parsed #{graph.size} statements in #{diff} seconds (#{(graph.size / diff).to_i} statements/sec) @#{Time.now}"
|
196
192
|
|
197
193
|
graph.subjects.map do |subj|
|
198
194
|
t = TestCase.new(graph.query(:subject => subj), suite)
|
@@ -225,32 +221,37 @@ module RdfaHelper
|
|
225
221
|
end
|
226
222
|
end
|
227
223
|
|
224
|
+
# Stub RDF::Reader.open
|
228
225
|
module RDF
|
229
|
-
class
|
230
|
-
|
231
|
-
|
226
|
+
class Reader
|
227
|
+
class << self
|
228
|
+
alias orig_open open
|
229
|
+
end
|
230
|
+
|
231
|
+
def self.stub_file(filename)
|
232
|
+
case filename.to_s
|
233
|
+
when %r(http://rdfa.digitalbazaar.com/test-suite/profile/\w+)
|
234
|
+
filename.to_s.sub(%r(http://rdfa.digitalbazaar.com/test-suite/profile/\w+),
|
235
|
+
File.join(File.expand_path(File.dirname(__FILE__)), 'rdfa-test-suite', 'profile'))
|
232
236
|
when %r(http://rdfa.digitalbazaar.com/test-suite/test-cases/\w+)
|
233
|
-
|
237
|
+
filename.to_s.sub(%r(http://rdfa.digitalbazaar.com/test-suite/test-cases/\w+),
|
234
238
|
File.join(File.expand_path(File.dirname(__FILE__)), 'rdfa-test-suite', 'tests'))
|
235
|
-
file
|
236
239
|
when "http://www.w3.org/1999/xhtml/vocab"
|
237
|
-
|
238
|
-
file
|
240
|
+
File.join(File.expand_path(File.dirname(__FILE__)), 'rdfa-test-suite', 'profile', "xhv")
|
239
241
|
when "http://www.w3.org/2005/10/profile"
|
240
|
-
|
242
|
+
File.join(File.expand_path(File.dirname(__FILE__)), 'rdfa-test-suite', 'profile', "xhv")
|
243
|
+
when "http://example.com/profile"
|
244
|
+
File.join(TMP_DIR, "profile.html")
|
241
245
|
else
|
242
|
-
|
243
|
-
end
|
244
|
-
|
245
|
-
self.new(url, options) do |graph|
|
246
|
-
graph.load! unless graph.unnamed?
|
247
|
-
if block_given?
|
248
|
-
case block.arity
|
249
|
-
when 1 then block.call(graph)
|
250
|
-
else graph.instance_eval(&block)
|
251
|
-
end
|
252
|
-
end
|
246
|
+
filename
|
253
247
|
end
|
254
248
|
end
|
249
|
+
|
250
|
+
def self.open(filename, options = {}, &block)
|
251
|
+
filename = ::RDF::Reader.stub_file(filename)
|
252
|
+
options[:format] ||= :rdfa
|
253
|
+
puts "parse #{filename} with format #{options[:format]}" if $verbose
|
254
|
+
orig_open(filename, options, &block)
|
255
|
+
end
|
255
256
|
end
|
256
257
|
end
|
data/spec/rdfa_reader_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe RDF::RDFa::Format do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "RDF::RDFa::Reader" do
|
21
|
-
|
21
|
+
describe "discovery" do
|
22
22
|
{
|
23
23
|
"html" => RDF::Reader.for(:rdfa),
|
24
24
|
"etc/foaf.html" => RDF::Reader.for("etc/foaf.html"),
|
@@ -32,21 +32,20 @@ describe "RDF::RDFa::Reader" do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
describe :interface do
|
36
36
|
before(:each) do
|
37
|
-
@sampledoc =
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
<
|
43
|
-
|
44
|
-
|
45
|
-
<
|
46
|
-
|
47
|
-
</
|
48
|
-
|
49
|
-
EOF
|
37
|
+
@sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
38
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
39
|
+
<html xmlns="http://www.w3.org/1999/xhtml"
|
40
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
41
|
+
<head>
|
42
|
+
<title>Test 0001</title>
|
43
|
+
</head>
|
44
|
+
<body>
|
45
|
+
<p>This photo was taken by <span class="author" about="photo1.jpg" property="dc:creator">Mark Birbeck</span>.</p>
|
46
|
+
</body>
|
47
|
+
</html>
|
48
|
+
)
|
50
49
|
end
|
51
50
|
|
52
51
|
it "should yield reader" do
|
@@ -78,23 +77,22 @@ EOF
|
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
|
80
|
+
describe "parsing a simple doc" do
|
82
81
|
before :each do
|
83
|
-
sampledoc =
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
<
|
89
|
-
|
90
|
-
|
91
|
-
<
|
92
|
-
|
93
|
-
</
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0001.xhtml", :strict => true)
|
82
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
83
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
84
|
+
<html xmlns="http://www.w3.org/1999/xhtml"
|
85
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
86
|
+
<head>
|
87
|
+
<title>Test 0001</title>
|
88
|
+
</head>
|
89
|
+
<body>
|
90
|
+
<p>This photo was taken by <span class="author" about="photo1.jpg" property="dc:creator">Mark Birbeck</span>.</p>
|
91
|
+
</body>
|
92
|
+
</html>
|
93
|
+
)
|
94
|
+
|
95
|
+
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0001.xhtml", :validate => true)
|
98
96
|
@statement = @graph.statements.first
|
99
97
|
end
|
100
98
|
|
@@ -115,20 +113,19 @@ EOF
|
|
115
113
|
end
|
116
114
|
end
|
117
115
|
|
118
|
-
|
116
|
+
describe "parsing a simple doc without a base URI" do
|
119
117
|
before :each do
|
120
|
-
sampledoc =
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
<
|
126
|
-
|
127
|
-
</
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
@graph = parse(sampledoc, :strict => true)
|
118
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
119
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
120
|
+
<html xmlns="http://www.w3.org/1999/xhtml"
|
121
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
122
|
+
<body>
|
123
|
+
<p>This photo was taken by <span class="author" about="_:photo" property="dc:creator">Mark Birbeck</span>.</p>
|
124
|
+
</body>
|
125
|
+
</html>
|
126
|
+
)
|
127
|
+
|
128
|
+
@graph = parse(sampledoc, :validate => true)
|
132
129
|
@statement = @graph.statements.first
|
133
130
|
end
|
134
131
|
|
@@ -149,27 +146,26 @@ EOF
|
|
149
146
|
end
|
150
147
|
end
|
151
148
|
|
152
|
-
|
149
|
+
describe "parsing a document containing an XML Literal" do
|
153
150
|
before :each do
|
154
|
-
sampledoc =
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0011.xhtml", :strict => true)
|
151
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
152
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
153
|
+
<html xmlns="http://www.w3.org/1999/xhtml"
|
154
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
155
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
156
|
+
<head>
|
157
|
+
<title>Test 0011</title>
|
158
|
+
</head>
|
159
|
+
<body>
|
160
|
+
<div about="">
|
161
|
+
Author: <span property="dc:creator">Albert Einstein</span>
|
162
|
+
<h2 property="dc:title" datatype="rdf:XMLLiteral">E = mc<sup>2</sup>: The Most Urgent Problem of Our Time</h2>
|
163
|
+
</div>
|
164
|
+
</body>
|
165
|
+
</html>
|
166
|
+
)
|
167
|
+
|
168
|
+
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0011.xhtml", :validate => true)
|
173
169
|
end
|
174
170
|
|
175
171
|
it "should return 2 triples" do
|
@@ -185,35 +181,38 @@ EOF
|
|
185
181
|
end
|
186
182
|
|
187
183
|
it "should have an XML Literal for the dc:title of the document" do
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
184
|
+
begin
|
185
|
+
@graph.should have_triple([
|
186
|
+
RDF::URI('http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0011.xhtml'),
|
187
|
+
RDF::DC11.title,
|
188
|
+
RDF::Literal(%(E = mc<sup xmlns="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">2</sup>: The Most Urgent Problem of Our Time), :datatype => RDF.XMLLiteral)
|
189
|
+
])
|
190
|
+
rescue RSpec::Expectations::ExpectationNotMetError => e
|
191
|
+
pending("XMLLiteral canonicalization not implemented yet")
|
192
|
+
end
|
193
193
|
end
|
194
194
|
end
|
195
195
|
|
196
|
-
|
196
|
+
describe "parsing a document containing sereral bnodes" do
|
197
197
|
before :each do
|
198
|
-
sampledoc =
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0017.xhtml", :strict => true)
|
198
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
199
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
200
|
+
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1"
|
201
|
+
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
202
|
+
<head>
|
203
|
+
<title>Test 0017</title>
|
204
|
+
</head>
|
205
|
+
<body>
|
206
|
+
<p>
|
207
|
+
<span about="[_:a]" property="foaf:name">Manu Sporny</span>
|
208
|
+
<span about="[_:a]" rel="foaf:knows" resource="[_:b]">knows</span>
|
209
|
+
<span about="[_:b]" property="foaf:name">Ralph Swick</span>.
|
210
|
+
</p>
|
211
|
+
</body>
|
212
|
+
</html>
|
213
|
+
)
|
214
|
+
|
215
|
+
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0017.xhtml", :validate => true)
|
217
216
|
end
|
218
217
|
|
219
218
|
it "should return 3 triples" do
|
@@ -245,25 +244,24 @@ EOF
|
|
245
244
|
end
|
246
245
|
end
|
247
246
|
|
248
|
-
|
247
|
+
describe "parsing a document that uses the typeof attribute" do
|
249
248
|
before :each do
|
250
|
-
sampledoc =
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0049.xhtml", :strict => true)
|
249
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
250
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
251
|
+
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1"
|
252
|
+
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
253
|
+
<head>
|
254
|
+
<title>Test 0049</title>
|
255
|
+
</head>
|
256
|
+
<body>
|
257
|
+
<div about="http://www.example.org/#me" typeof="foaf:Person">
|
258
|
+
<p property="foaf:name">John Doe</p>
|
259
|
+
</div>
|
260
|
+
</body>
|
261
|
+
</html>
|
262
|
+
)
|
263
|
+
|
264
|
+
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0049.xhtml", :validate => true)
|
267
265
|
end
|
268
266
|
|
269
267
|
it "should return 2 triples" do
|
@@ -287,27 +285,26 @@ EOF
|
|
287
285
|
end
|
288
286
|
end
|
289
287
|
|
290
|
-
|
288
|
+
describe "parsing a document with a <base> tag in the <head>" do
|
291
289
|
before :each do
|
292
|
-
sampledoc =
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0072.xhtml", :strict => true)
|
290
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
291
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
292
|
+
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1"
|
293
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
294
|
+
<head>
|
295
|
+
<base href="http://www.example.org/"></base>
|
296
|
+
<title>Test 0072</title>
|
297
|
+
</head>
|
298
|
+
<body>
|
299
|
+
<p about="faq">
|
300
|
+
Learn more by reading the example.org
|
301
|
+
<span property="dc:title">Example FAQ</span>.
|
302
|
+
</p>
|
303
|
+
</body>
|
304
|
+
</html>
|
305
|
+
)
|
306
|
+
|
307
|
+
@graph = parse(sampledoc, :base_uri => "http://rdfa.digitalbazaar.com/test-suite/test-cases/xhtml1/0072.xhtml", :validate => true)
|
311
308
|
end
|
312
309
|
|
313
310
|
it "should return 1 triple" do
|
@@ -319,27 +316,26 @@ EOF
|
|
319
316
|
end
|
320
317
|
end
|
321
318
|
|
322
|
-
|
319
|
+
describe "parsing a document with a profile containing a prefix mapping" do
|
323
320
|
before :each do
|
324
|
-
sampledoc =
|
325
|
-
|
326
|
-
|
327
|
-
<
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
EOF
|
321
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
322
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
323
|
+
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1">
|
324
|
+
<head>
|
325
|
+
<title>Test</title>
|
326
|
+
<base href="http://example.org/"/>
|
327
|
+
</head>
|
328
|
+
<body profile="http://rdfa.digitalbazaar.com/test-suite/test-cases/tests/../../profiles/basic">
|
329
|
+
<div about="#me">
|
330
|
+
<p>
|
331
|
+
<span property="foaf:name">Ivan Herman</span>
|
332
|
+
</p>
|
333
|
+
</div>
|
334
|
+
</body>
|
335
|
+
</html>
|
336
|
+
)
|
341
337
|
|
342
|
-
@graph = parse(sampledoc, :
|
338
|
+
@graph = parse(sampledoc, :validate => true)
|
343
339
|
@statement = @graph.statements.first
|
344
340
|
end
|
345
341
|
|
@@ -360,27 +356,26 @@ EOF
|
|
360
356
|
end
|
361
357
|
end
|
362
358
|
|
363
|
-
|
359
|
+
describe "parsing a document with a profile containing a term mapping" do
|
364
360
|
before :each do
|
365
|
-
sampledoc =
|
366
|
-
|
367
|
-
|
368
|
-
<
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
EOF
|
361
|
+
sampledoc = %(<?xml version="1.0" encoding="UTF-8"?>
|
362
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
|
363
|
+
<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1">
|
364
|
+
<head>
|
365
|
+
<title>Test</title>
|
366
|
+
<base href="http://example.org/"/>
|
367
|
+
</head>
|
368
|
+
<body profile="http://rdfa.digitalbazaar.com/test-suite/test-cases/tests/../../profiles/foaf">
|
369
|
+
<div about="#me">
|
370
|
+
<p>
|
371
|
+
<span property="name">Ivan Herman</span>
|
372
|
+
</p>
|
373
|
+
</div>
|
374
|
+
</body>
|
375
|
+
</html>
|
376
|
+
)
|
382
377
|
|
383
|
-
@graph = parse(sampledoc, :
|
378
|
+
@graph = parse(sampledoc, :validate => true)
|
384
379
|
@statement = @graph.statements.first
|
385
380
|
end
|
386
381
|
|
@@ -401,16 +396,133 @@ EOF
|
|
401
396
|
end
|
402
397
|
end
|
403
398
|
|
399
|
+
describe :profiles do
|
400
|
+
before(:all) do
|
401
|
+
FileUtils.mkdir(TMP_DIR)
|
402
|
+
File.open(File.join(TMP_DIR, "profile.html"), "w") do |f|
|
403
|
+
f.write(%(<?xml version="1.0" encoding="UTF-8"?>
|
404
|
+
<!DOCTYPE html>
|
405
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
406
|
+
<head>
|
407
|
+
<title>Test mappings</title>
|
408
|
+
</head>
|
409
|
+
<body prefix="rdfa: http://www.w3.org/ns/rdfa#">
|
410
|
+
<p typeof=""><span property="rdfa:uri">#{RDF::DC}</span><span property="rdfa:prefix">dc</span></p>
|
411
|
+
<p typeof=""><span property="rdfa:uri">#{RDF::DC.title}</span><span property="rdfa:term">title</span></p>
|
412
|
+
</body>
|
413
|
+
</html>
|
414
|
+
)
|
415
|
+
)
|
416
|
+
end
|
417
|
+
|
418
|
+
@doc = %(<?xml version="1.0" encoding="UTF-8"?>
|
419
|
+
<!DOCTYPE html>
|
420
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
421
|
+
<body profile="http://example.com/profile">
|
422
|
+
<div about ="http://example.com/doc" typeof="dc:Agent">
|
423
|
+
<p property="title">A particular agent</p>
|
424
|
+
</div>
|
425
|
+
</body>
|
426
|
+
</html>
|
427
|
+
)
|
428
|
+
end
|
429
|
+
|
430
|
+
before(:each) do
|
431
|
+
@profile_repository = RDF::Repository.new(:title => "Test Profile Repository")
|
432
|
+
@debug = []
|
433
|
+
@reader = RDF::RDFa::Reader.new(@doc, :profile_repository => @profile_repository, :debug => @debug, :validate => true)
|
434
|
+
end
|
435
|
+
|
436
|
+
after(:all) do
|
437
|
+
FileUtils.rm_rf(TMP_DIR)
|
438
|
+
end
|
439
|
+
|
440
|
+
describe "new profile" do
|
441
|
+
before(:each) do
|
442
|
+
# Clear vocabulary cache
|
443
|
+
RDF::RDFa::Profile.cache.send(:initialize)
|
444
|
+
@graph = RDF::Graph.new
|
445
|
+
@reader.each do |statement|
|
446
|
+
@graph << statement
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
describe "processed graph" do
|
451
|
+
it "should have type dc:Agent" do
|
452
|
+
@graph.should have_statement(RDF::Statement.new(RDF::URI.new("http://example.com/doc"), RDF.type, RDF::DC.Agent))
|
453
|
+
end
|
454
|
+
|
455
|
+
it "should have property dc:title" do
|
456
|
+
@graph.should have_statement(RDF::Statement.new(RDF::URI.new("http://example.com/doc"), RDF::DC.title, RDF::Literal.new("A particular agent")))
|
457
|
+
end
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
describe "cached profile" do
|
462
|
+
before(:each) do
|
463
|
+
# Clear vocabulary cache
|
464
|
+
RDF::RDFa::Profile.cache.send(:initialize)
|
465
|
+
@reader.each {|s|}
|
466
|
+
end
|
467
|
+
|
468
|
+
it "should not re-parse profile" do
|
469
|
+
RDF::RDFa::Profile.cache.send(:initialize)
|
470
|
+
RDF::Reader.should_not_receive(:open).with("http://example.com/profile")
|
471
|
+
RDF::RDFa::Reader.new(@doc, :profile_repository => @profile_repository).each {|p|}
|
472
|
+
end
|
473
|
+
|
474
|
+
it "should create vocab_cache" do
|
475
|
+
RDF::RDFa::Profile.cache.should be_a(RDF::Util::Cache)
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
describe "profile content" do
|
480
|
+
before(:each) do
|
481
|
+
bn_p = RDF::Node.new("prefix")
|
482
|
+
bn_t = RDF::Node.new("term")
|
483
|
+
@profile_repository << RDF::Statement.new(bn_p, RDF::RDFA.prefix, RDF::Literal.new("dc"))
|
484
|
+
@profile_repository << RDF::Statement.new(bn_p, RDF::RDFA.uri, RDF::Literal.new(RDF::DC.to_s))
|
485
|
+
@profile_repository << RDF::Statement.new(bn_p, RDF::RDFA.term, RDF::Literal.new("title"))
|
486
|
+
@profile_repository << RDF::Statement.new(bn_p, RDF::RDFA.uri, RDF::Literal.new(RDF::DC.title.to_s))
|
487
|
+
|
488
|
+
# Clear vocabulary cache
|
489
|
+
RDF::RDFa::Profile.cache.send(:initialize)
|
490
|
+
end
|
491
|
+
|
492
|
+
it "should not recieve RDF::Reader.open" do
|
493
|
+
RDF::Reader.should_not_receive(:open).with("http://example.com/profile")
|
494
|
+
end
|
495
|
+
|
496
|
+
it "should have type dc:Agent" do
|
497
|
+
@graph = RDF::Graph.new
|
498
|
+
@reader.each do |statement|
|
499
|
+
@graph << statement
|
500
|
+
end
|
501
|
+
|
502
|
+
@graph.should have_statement(RDF::Statement.new(RDF::URI.new("http://example.com/doc"), RDF.type, RDF::DC.Agent))
|
503
|
+
end
|
504
|
+
|
505
|
+
it "should have property dc:title" do
|
506
|
+
@graph = RDF::Graph.new
|
507
|
+
@reader.each do |statement|
|
508
|
+
@graph << statement
|
509
|
+
end
|
510
|
+
|
511
|
+
@graph.should have_statement(RDF::Statement.new(RDF::URI.new("http://example.com/doc"), RDF::DC.title, RDF::Literal.new("A particular agent")))
|
512
|
+
end
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
404
516
|
def self.test_cases(suite)
|
405
517
|
RdfaHelper::TestCase.test_cases(suite)
|
406
518
|
end
|
407
519
|
|
408
520
|
# W3C Test suite from http://www.w3.org/2006/07/SWD/RDFa/testsuite/
|
409
|
-
%w(xhtml
|
521
|
+
%w(xhtml html5 html5 svgtiny).each do |suite| # html4 html5
|
410
522
|
describe "w3c #{suite} testcases" do
|
411
|
-
describe "that are
|
523
|
+
describe "that are required" do
|
412
524
|
test_cases(suite).each do |t|
|
413
|
-
next unless t.
|
525
|
+
next unless t.classification =~ /required/
|
414
526
|
#next unless t.name =~ /0001/
|
415
527
|
specify "test #{t.name}: #{t.title}#{", (negative test)" unless t.expectedResults}" do
|
416
528
|
#puts t.input
|
@@ -423,7 +535,7 @@ EOF
|
|
423
535
|
:debug => t.debug,
|
424
536
|
:version => t.version)
|
425
537
|
end
|
426
|
-
rescue
|
538
|
+
rescue RSpec::Expectations::ExpectationNotMetError => e
|
427
539
|
if t.input =~ /XMLLiteral/
|
428
540
|
pending("XMLLiteral canonicalization not implemented yet")
|
429
541
|
else
|
@@ -435,9 +547,37 @@ EOF
|
|
435
547
|
end
|
436
548
|
end
|
437
549
|
end
|
438
|
-
|
550
|
+
|
551
|
+
describe "that are optional" do
|
552
|
+
test_cases(suite).each do |t|
|
553
|
+
next unless t.classification =~ /optional/
|
554
|
+
#next unless t.name =~ /0185/
|
555
|
+
#puts t.inspect
|
556
|
+
specify "test #{t.name}: #{t.title}#{", (negative test)" unless t.expectedResults}" do
|
557
|
+
begin
|
558
|
+
t.run_test do |rdfa_string|
|
559
|
+
t.debug = []
|
560
|
+
parse(rdfa_string,
|
561
|
+
:base_uri => t.informationResourceInput,
|
562
|
+
:debug => t.debug,
|
563
|
+
:version => t.version)
|
564
|
+
end
|
565
|
+
rescue SparqlException => e
|
566
|
+
pending(e.message) { raise }
|
567
|
+
rescue RSpec::Expectations::ExpectationNotMetError => e
|
568
|
+
if t.name =~ /01[789]\d/
|
569
|
+
raise
|
570
|
+
else
|
571
|
+
pending() { raise }
|
572
|
+
end
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
describe "that are buggy" do
|
439
579
|
test_cases(suite).each do |t|
|
440
|
-
next unless t.
|
580
|
+
next unless t.classification =~ /buggy/
|
441
581
|
#next unless t.name =~ /0185/
|
442
582
|
#puts t.inspect
|
443
583
|
specify "test #{t.name}: #{t.title}#{", (negative test)" unless t.expectedResults}" do
|
@@ -451,7 +591,7 @@ EOF
|
|
451
591
|
end
|
452
592
|
rescue SparqlException => e
|
453
593
|
pending(e.message) { raise }
|
454
|
-
rescue
|
594
|
+
rescue RSpec::Expectations::ExpectationNotMetError => e
|
455
595
|
if t.name =~ /01[789]\d/
|
456
596
|
raise
|
457
597
|
else
|