rdf-rdfa 0.2.2 → 0.3.0
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/.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
|