rdf_context 0.4.8 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +27 -0
- data/README.rdoc +22 -9
- data/Rakefile +11 -6
- data/VERSION +1 -1
- data/bin/rdf_context +12 -4
- data/lib/rdf_context.rb +3 -1
- data/lib/rdf_context/aggregate_graph.rb +86 -0
- data/lib/rdf_context/array_hacks.rb +53 -0
- data/lib/rdf_context/conjunctive_graph.rb +1 -1
- data/lib/rdf_context/exceptions.rb +9 -7
- data/lib/rdf_context/graph.rb +174 -15
- data/lib/rdf_context/literal.rb +34 -2
- data/lib/rdf_context/n3_grammar.treetop +213 -129
- data/lib/rdf_context/n3parser.rb +281 -57
- data/lib/rdf_context/namespace.rb +23 -12
- data/lib/rdf_context/parser.rb +4 -3
- data/lib/rdf_context/quoted_graph.rb +38 -0
- data/lib/rdf_context/rdfaparser.rb +2 -1
- data/lib/rdf_context/rdfxmlparser.rb +4 -3
- data/lib/rdf_context/store/abstract_sql_store.rb +4 -4
- data/lib/rdf_context/store/abstract_store.rb +5 -1
- data/lib/rdf_context/store/sqlite3_store.rb +10 -8
- data/lib/rdf_context/string_hacks.rb +44 -21
- data/lib/rdf_context/term_utils.rb +73 -4
- data/lib/rdf_context/triple.rb +32 -47
- data/lib/rdf_context/uriref.rb +33 -26
- data/spec/aggregate_graph_spec.rb +59 -0
- data/spec/conjunctive_graph_spec.rb +1 -1
- data/spec/cwm_spec.rb +32 -0
- data/spec/graph_spec.rb +114 -3
- data/spec/literal_spec.rb +107 -5
- data/spec/matchers.rb +104 -51
- data/spec/n3parser_spec.rb +798 -99
- data/spec/namespaces_spec.rb +26 -0
- data/spec/quoted_graph_spec.rb +0 -0
- data/spec/rdf_helper.rb +197 -0
- data/spec/rdfa_helper.rb +15 -11
- data/spec/rdfa_parser_spec.rb +6 -8
- data/spec/rdfxml_spec.rb +21 -28
- data/spec/spec_helper.rb +20 -0
- data/spec/sqlite3_store_spec.rb +6 -5
- data/spec/store_helper.rb +9 -1
- data/spec/string_hacks_spec.rb +14 -0
- data/spec/{rdfxml_helper.rb → swap_helper.rb} +8 -9
- data/spec/swap_spec.rb +77 -0
- data/spec/swap_test/animal.rdf +17 -0
- data/spec/swap_test/anon-prop.n3 +14 -0
- data/spec/swap_test/anonymous_loop.n3 +2 -0
- data/spec/swap_test/contexts.n3 +16 -0
- data/spec/swap_test/daml-pref.n3 +10 -0
- data/spec/swap_test/i18n/hiragana.n3 +22 -0
- data/spec/swap_test/i18n/n3string.n3 +4 -0
- data/spec/swap_test/list/itemType.rdf +12 -0
- data/spec/swap_test/lists-simple.n3 +40 -0
- data/spec/swap_test/lists.n3 +35 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10001.nt +3 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10002.nt +7 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10003.nt +3 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10004.nt +119 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10005.nt +3 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10006.nt +225 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10007.nt +79 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10008.nt +5 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10009.nt +13 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10010.nt +21 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10011.nt +9 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10012.nt +53 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10013.nt +19 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10014.nt +103 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10015.nt +103 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10016.nt +3 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10017.nt +151 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10018.nt +9 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10019.nt +3 -0
- data/spec/swap_test/n3/n3parser.tests_n3_10020.nt +13 -0
- data/spec/swap_test/n3parser.tests +160 -0
- data/spec/swap_test/nodeID/classes.n3 +9 -0
- data/spec/swap_test/nodeID/classes.ref.rdf +15 -0
- data/spec/swap_test/nodeID/ex1.rdf +15 -0
- data/spec/swap_test/norm/fix.rdf +33 -0
- data/spec/swap_test/owl-ex.rdf +150 -0
- data/spec/swap_test/ref/animal.n3 +11 -0
- data/spec/swap_test/ref/anon-prop-1.n3 +8 -0
- data/spec/swap_test/ref/anonymous_loop.ref +7 -0
- data/spec/swap_test/ref/bnode.n3 +6 -0
- data/spec/swap_test/ref/bnode.rdf +16 -0
- data/spec/swap_test/ref/colon-in-uri.n3 +15 -0
- data/spec/swap_test/ref/daml-ex.n3 +103 -0
- data/spec/swap_test/ref/daml-ont.n3 +289 -0
- data/spec/swap_test/ref/djb1a-out.n3 +4 -0
- data/spec/swap_test/ref/dot-dash.n3 +8 -0
- data/spec/swap_test/ref/in-xml-t.n3 +4 -0
- data/spec/swap_test/ref/itemType.n3 +9 -0
- data/spec/swap_test/ref/keywords1.n3 +11 -0
- data/spec/swap_test/ref/keywords2.n3 +11 -0
- data/spec/swap_test/ref/lists-simple-1.rdf +108 -0
- data/spec/swap_test/ref/lists.n3 +43 -0
- data/spec/swap_test/ref/lstring-out.n3 +20 -0
- data/spec/swap_test/ref/n3string.n3 +13 -0
- data/spec/swap_test/ref/no-last-nl.n3 +3 -0
- data/spec/swap_test/ref/numbers.n3 +18 -0
- data/spec/swap_test/ref/path1.n3 +8 -0
- data/spec/swap_test/ref/path2.n3 +39 -0
- data/spec/swap_test/ref/prefix1.rdf +31 -0
- data/spec/swap_test/ref/prefix3.rdf +31 -0
- data/spec/swap_test/ref/rdf-redefine.rdf +11 -0
- data/spec/swap_test/ref/reluri-1.rdf +18 -0
- data/spec/swap_test/ref/strquot.n3 +23 -0
- data/spec/swap_test/ref/strquot_a.n3 +23 -0
- data/spec/swap_test/ref/xml-base3.n3 +5 -0
- data/spec/swap_test/ref/xml-redefine.rdf +20 -0
- data/spec/swap_test/ref/xml-redefine2.rdf +23 -0
- data/spec/swap_test/ref/xml-syntax-basic-serialization.rdf +10 -0
- data/spec/swap_test/ref/xmllit.nt +3 -0
- data/spec/swap_test/regression.n3 +231 -0
- data/spec/swap_test/reluri-1.n3 +10 -0
- data/spec/swap_test/strquot.n3 +23 -0
- data/spec/swap_test/syntax/colon-in-uri.rdf +27 -0
- data/spec/swap_test/syntax/djb1a.n3 +3 -0
- data/spec/swap_test/syntax/dot-dash.n3 +15 -0
- data/spec/swap_test/syntax/equals1.n3 +1 -0
- data/spec/swap_test/syntax/equals2.n3 +1 -0
- data/spec/swap_test/syntax/keywords1.n3 +17 -0
- data/spec/swap_test/syntax/keywords2.n3 +18 -0
- data/spec/swap_test/syntax/lstring.n3 +26 -0
- data/spec/swap_test/syntax/neg-formula-predicate.n3 +1 -0
- data/spec/swap_test/syntax/neg-keywords3.n3 +1 -0
- data/spec/swap_test/syntax/neg-literal-predicate.n3 +1 -0
- data/spec/swap_test/syntax/neg-single-quote.n3 +1 -0
- data/spec/swap_test/syntax/neg-thisadoc.n3 +1 -0
- data/spec/swap_test/syntax/no-last-nl.n3 +2 -0
- data/spec/swap_test/syntax/numbers.n3 +26 -0
- data/spec/swap_test/syntax/path1.n3 +23 -0
- data/spec/swap_test/syntax/path2.n3 +31 -0
- data/spec/swap_test/syntax/qvars1.n3 +19 -0
- data/spec/swap_test/syntax/qvars2.n3 +19 -0
- data/spec/swap_test/syntax/this-quantifiers.n3 +164 -0
- data/spec/swap_test/syntax/this-rules.n3 +43 -0
- data/spec/swap_test/syntax/too-nested.n3 +25 -0
- data/spec/swap_test/syntax/trailing-semicolon.n3 +12 -0
- data/spec/swap_test/syntax/zero-objects.n3 +1 -0
- data/spec/swap_test/syntax/zero-predicates.n3 +3 -0
- data/spec/swap_test/tests-work.txt +25 -0
- data/spec/swap_test/xml-syntax/basic-serialization.n3 +8 -0
- data/spec/swap_test/xml-syntax/in-xml.xml +13 -0
- data/spec/swap_test/xml-syntax/non-ascii-pred.rdf +14 -0
- data/spec/swap_test/xml-syntax/rdf_prefix.n3 +2 -0
- data/spec/swap_test/xml-syntax/xml_prefix.n3 +7 -0
- data/spec/swap_test/xml-syntax/xml_prefix2.n3 +9 -0
- data/spec/swap_test/xml-syntax/xmlbase3.rdf +10 -0
- data/spec/swap_test/xml-syntax/xmllit.rdf +33 -0
- data/spec/triple_spec.rb +90 -46
- data/spec/turtle/README.txt +20 -0
- data/spec/turtle/bad-00.ttl +2 -0
- data/spec/turtle/bad-01.ttl +3 -0
- data/spec/turtle/bad-02.ttl +3 -0
- data/spec/turtle/bad-03.ttl +3 -0
- data/spec/turtle/bad-04.ttl +3 -0
- data/spec/turtle/bad-05.ttl +4 -0
- data/spec/turtle/bad-06.ttl +3 -0
- data/spec/turtle/bad-07.ttl +4 -0
- data/spec/turtle/bad-08.ttl +2 -0
- data/spec/turtle/bad-09.ttl +3 -0
- data/spec/turtle/bad-10.ttl +3 -0
- data/spec/turtle/bad-11.ttl +3 -0
- data/spec/turtle/bad-12.ttl +3 -0
- data/spec/turtle/bad-13.ttl +3 -0
- data/spec/turtle/bad-14.ttl +6 -0
- data/spec/turtle/manifest-bad.ttl +88 -0
- data/spec/turtle/manifest.ttl +215 -0
- data/spec/turtle/rdf-schema.out +126 -0
- data/spec/turtle/rdf-schema.ttl +156 -0
- data/spec/turtle/rdfq-results.out +36 -0
- data/spec/turtle/rdfq-results.ttl +39 -0
- data/spec/turtle/rdfs-namespace.out +131 -0
- data/spec/turtle/rdfs-namespace.ttl +160 -0
- data/spec/turtle/test-00.out +1 -0
- data/spec/turtle/test-00.ttl +2 -0
- data/spec/turtle/test-01.out +3 -0
- data/spec/turtle/test-01.ttl +7 -0
- data/spec/turtle/test-02.out +3 -0
- data/spec/turtle/test-02.ttl +5 -0
- data/spec/turtle/test-03.out +3 -0
- data/spec/turtle/test-03.ttl +5 -0
- data/spec/turtle/test-04.out +2 -0
- data/spec/turtle/test-04.ttl +4 -0
- data/spec/turtle/test-05.out +4 -0
- data/spec/turtle/test-05.ttl +4 -0
- data/spec/turtle/test-06.out +1 -0
- data/spec/turtle/test-06.ttl +3 -0
- data/spec/turtle/test-07.out +5 -0
- data/spec/turtle/test-07.ttl +3 -0
- data/spec/turtle/test-08.out +1 -0
- data/spec/turtle/test-08.ttl +3 -0
- data/spec/turtle/test-09.out +4 -0
- data/spec/turtle/test-09.ttl +10 -0
- data/spec/turtle/test-10.out +5 -0
- data/spec/turtle/test-10.ttl +5 -0
- data/spec/turtle/test-11.out +4 -0
- data/spec/turtle/test-11.ttl +10 -0
- data/spec/turtle/test-12.out +4 -0
- data/spec/turtle/test-12.ttl +9 -0
- data/spec/turtle/test-13.out +2 -0
- data/spec/turtle/test-13.ttl +7 -0
- data/spec/turtle/test-14.out +10000 -0
- data/spec/turtle/test-14.ttl +10002 -0
- data/spec/turtle/test-15.out +10000 -0
- data/spec/turtle/test-15.ttl +3 -0
- data/spec/turtle/test-16.out +10000 -0
- data/spec/turtle/test-16.ttl +10002 -0
- data/spec/turtle/test-17.out +1 -0
- data/spec/turtle/test-17.ttl +6 -0
- data/spec/turtle/test-18.out +2 -0
- data/spec/turtle/test-18.ttl +9 -0
- data/spec/turtle/test-19.out +1 -0
- data/spec/turtle/test-19.ttl +4 -0
- data/spec/turtle/test-20.out +2 -0
- data/spec/turtle/test-20.ttl +6 -0
- data/spec/turtle/test-21.out +3 -0
- data/spec/turtle/test-21.ttl +4 -0
- data/spec/turtle/test-22.out +3 -0
- data/spec/turtle/test-22.ttl +4 -0
- data/spec/turtle/test-23.out +1 -0
- data/spec/turtle/test-23.ttl +3 -0
- data/spec/turtle/test-24.out +2 -0
- data/spec/turtle/test-24.ttl +3 -0
- data/spec/turtle/test-25.out +7 -0
- data/spec/turtle/test-25.ttl +14 -0
- data/spec/turtle/test-26.out +1 -0
- data/spec/turtle/test-26.ttl +4 -0
- data/spec/turtle/test-27.out +1 -0
- data/spec/turtle/test-27.ttl +5 -0
- data/spec/turtle/test-28-out.ttl +6 -0
- data/spec/turtle/test-28.out +22 -0
- data/spec/turtle/test-28.ttl +22 -0
- data/spec/turtle/test-29.out +1 -0
- data/spec/turtle/test-29.ttl +1 -0
- data/spec/turtle/test-30.out +5 -0
- data/spec/turtle/test-30.ttl +12 -0
- data/spec/turtle_spec.rb +64 -0
- data/spec/uriref_spec.rb +74 -34
- data/test/n3_tests/rdflib/n3-writer-teset-26.n3 +31 -0
- data/test/n3_tests/rdflib/n3-writer-teset-26.nt +14 -0
- data/test/rdf_tests/xml-literal-mixed.nt +1 -2
- metadata +278 -39
- data/lib/rdf_context/n3_grammar.rb +0 -2171
- data/test/perf_test/test.rb +0 -11
- data/test/perf_test/tommorris.rdf +0 -2267
data/spec/namespaces_spec.rb
CHANGED
@@ -66,6 +66,32 @@ describe "Namespace" do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
describe "normalization" do
|
70
|
+
{
|
71
|
+
%w(http://foo ) => "http://foo",
|
72
|
+
%w(http://foo a) => "http://fooa",
|
73
|
+
|
74
|
+
%w(http://foo/ ) => "http://foo/",
|
75
|
+
%w(http://foo/ a) => "http://foo/a",
|
76
|
+
|
77
|
+
%w(http://foo# ) => "http://foo#",
|
78
|
+
%w(http://foo# a) => "http://foo#a",
|
79
|
+
|
80
|
+
%w(http://foo/bar ) => "http://foo/bar",
|
81
|
+
%w(http://foo/bar a) => "http://foo/bara",
|
82
|
+
|
83
|
+
%w(http://foo/bar/ ) => "http://foo/bar/",
|
84
|
+
%w(http://foo/bar/ a) => "http://foo/bar/a",
|
85
|
+
|
86
|
+
%w(http://foo/bar# ) => "http://foo/bar#",
|
87
|
+
%w(http://foo/bar# a) => "http://foo/bar#a",
|
88
|
+
}.each_pair do |input, result|
|
89
|
+
it "should create <#{result}> from <#{input[0]}> and '#{input[1]}'" do
|
90
|
+
(Namespace.new(input[0], "test") + input[1].to_s).should == result
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
69
95
|
it "should be be equivalent" do
|
70
96
|
Namespace.new("http://a", "aa").should == Namespace.new("http://a", "aa")
|
71
97
|
end
|
File without changes
|
data/spec/rdf_helper.rb
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
module RdfHelper
|
2
|
+
# Class representing test cases in format http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#
|
3
|
+
class TestCase
|
4
|
+
include Matchers
|
5
|
+
MF_NS = Namespace.new("http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#", "mf")
|
6
|
+
QT_NS = Namespace.new("http://www.w3.org/2001/sw/DataAccess/tests/test-query#", "qt")
|
7
|
+
|
8
|
+
attr_accessor :about
|
9
|
+
attr_accessor :approval
|
10
|
+
attr_accessor :conclusionDocument
|
11
|
+
attr_accessor :data
|
12
|
+
attr_accessor :description
|
13
|
+
attr_accessor :discussion
|
14
|
+
attr_accessor :document
|
15
|
+
attr_accessor :entailmentRules
|
16
|
+
attr_accessor :inputDocument
|
17
|
+
attr_accessor :issue
|
18
|
+
attr_accessor :name
|
19
|
+
attr_accessor :outputDocument
|
20
|
+
attr_accessor :premiseDocument
|
21
|
+
attr_accessor :rdf_type
|
22
|
+
attr_accessor :status
|
23
|
+
attr_accessor :warning
|
24
|
+
attr_accessor :parser
|
25
|
+
attr_accessor :compare
|
26
|
+
|
27
|
+
def initialize(triples, uri_prefix, test_dir, options = {})
|
28
|
+
case options[:test_type]
|
29
|
+
when :mf
|
30
|
+
parse_mf(triples, uri_prefix, test_dir, options[:graph])
|
31
|
+
else
|
32
|
+
parse_w3c(triples, uri_prefix, test_dir)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_w3c(triples, uri_prefix, test_dir)
|
37
|
+
triples.each do |statement|
|
38
|
+
next if statement.subject.is_a?(BNode)
|
39
|
+
|
40
|
+
if statement.is_type?
|
41
|
+
self.rdf_type = statement.object.short_name
|
42
|
+
elsif statement.predicate.short_name =~ /Document\Z/i
|
43
|
+
puts "#{statement.predicate.short_name}: #{statement.object.inspect}" if $DEBUG
|
44
|
+
self.send("#{statement.predicate.short_name}=", statement.object.to_s.sub(uri_prefix, test_dir))
|
45
|
+
puts "#{statement.predicate.short_name}: " + self.send("#{statement.predicate.short_name}") if $DEBUG
|
46
|
+
if statement.predicate.short_name == "inputDocument"
|
47
|
+
self.about ||= statement.object
|
48
|
+
self.name ||= statement.subject.short_name
|
49
|
+
end
|
50
|
+
elsif statement.predicate.short_name == "referenceOutput"
|
51
|
+
puts "referenceOutput: #{statement.object.inspect}" if $DEBUG
|
52
|
+
outputDocument = statement.object.to_s.sub(uri_prefix, test_dir)
|
53
|
+
puts "referenceOutput: " + self.send("#{statement.predicate.short_name}") if $DEBUG
|
54
|
+
elsif self.respond_to?("#{statement.predicate.short_name}=")
|
55
|
+
self.send("#{statement.predicate.short_name}=", statement.object.to_s)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_mf(subject, uri_prefix, test_dir, graph)
|
61
|
+
props = graph.properties(subject)
|
62
|
+
@name = (props[MF_NS.name.to_s] || []).first.to_s
|
63
|
+
@description = (props[RDFS_NS.comment.to_s] || []).first.to_s
|
64
|
+
@outputDocument = (props[MF_NS.result.to_s] || []).first
|
65
|
+
@outputDocument = @outputDocument.to_s.sub(uri_prefix, test_dir) if @outputDocument
|
66
|
+
action = (props[MF_NS.action.to_s] || []).first
|
67
|
+
a_props = graph.properties(action)
|
68
|
+
@about = (a_props[QT_NS.data.to_s] || []).first
|
69
|
+
@inputDocument = @about.to_s.sub(uri_prefix, test_dir)
|
70
|
+
end
|
71
|
+
|
72
|
+
def inspect
|
73
|
+
"[Test Case " + %w(
|
74
|
+
about
|
75
|
+
name
|
76
|
+
inputDocument
|
77
|
+
outputDocument
|
78
|
+
issue
|
79
|
+
status
|
80
|
+
approval
|
81
|
+
description
|
82
|
+
discussion
|
83
|
+
issue
|
84
|
+
warning
|
85
|
+
).map {|a| v = self.send(a); "#{a}='#{v}'" if v}.compact.join(", ") +
|
86
|
+
"]"
|
87
|
+
end
|
88
|
+
|
89
|
+
# Read in file, and apply modifications reference either .html or .xhtml
|
90
|
+
def input
|
91
|
+
@input ||= File.read(inputDocument)
|
92
|
+
end
|
93
|
+
|
94
|
+
def output
|
95
|
+
@output ||= outputDocument && File.read(outputDocument)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Run test case, yields input for parser to create triples
|
99
|
+
def run_test(options = {})
|
100
|
+
rdf_string = input
|
101
|
+
|
102
|
+
# Run
|
103
|
+
@parser = Parser.new
|
104
|
+
yield(rdf_string, @parser)
|
105
|
+
|
106
|
+
return unless output
|
107
|
+
|
108
|
+
if self.compare == :array
|
109
|
+
@parser.graph.should be_equivalent_graph(self.output, self)
|
110
|
+
else
|
111
|
+
output_parser = Parser.new
|
112
|
+
output_fmt = output_parser.detect_format(self.output, self.outputDocument)
|
113
|
+
output_parser.parse(self.output, about, :type => output_fmt)
|
114
|
+
|
115
|
+
@parser.graph.should be_equivalent_graph(output_parser, self)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def trace
|
120
|
+
@parser.debug.to_a.join("\n")
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.parse_test_cases(test_uri = nil, test_dir = nil)
|
124
|
+
raise "Missing test_uri" unless test_uri
|
125
|
+
raise "Missing test_dir" unless test_dir
|
126
|
+
@test_cases = [] unless test_uri == @test_uri
|
127
|
+
return unless @test_cases.empty?
|
128
|
+
|
129
|
+
test = test_uri.to_s.split('/').last
|
130
|
+
test_dir = test_dir + "/" unless test_dir.match(%r(/$))
|
131
|
+
|
132
|
+
@positive_parser_tests = []
|
133
|
+
@negative_parser_tests = []
|
134
|
+
@positive_entailment_tests = []
|
135
|
+
@negative_entailment_tests = []
|
136
|
+
|
137
|
+
manifest = File.read(File.join(test_dir, test))
|
138
|
+
parser = Parser.new
|
139
|
+
begin
|
140
|
+
puts "parse <#{test_uri}>" if $DEBUG
|
141
|
+
parser.parse(manifest, test_uri)
|
142
|
+
rescue
|
143
|
+
raise "Parse error: #{$!}\n\t#{parser.debug.join("\t\n")}\n\n"
|
144
|
+
end
|
145
|
+
graph = parser.graph
|
146
|
+
|
147
|
+
uri_base = Addressable::URI.join(test_uri, ".").to_s
|
148
|
+
|
149
|
+
# If this is a turtle test (type mf:Manifest) parse with
|
150
|
+
# alternative test case
|
151
|
+
case graph.type_of(test_uri).first
|
152
|
+
when MF_NS.Manifest
|
153
|
+
# Get test entries
|
154
|
+
entries = graph.triples(Triple.new(test_uri, MF_NS.entries, nil)) || []
|
155
|
+
entries = entries.first
|
156
|
+
raise "No entires found for MF Manifest" unless entries.is_a?(Triple)
|
157
|
+
|
158
|
+
@test_cases = graph.seq(entries.object).map do |subject|
|
159
|
+
TestCase.new(subject, uri_base, test_dir, :test_type => :mf, :graph => graph)
|
160
|
+
end
|
161
|
+
else
|
162
|
+
# One of:
|
163
|
+
# http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema
|
164
|
+
# http://www.w3.org/2000/10/swap/test.n3#
|
165
|
+
# http://www.w3.org/2004/11/n3test#
|
166
|
+
# Group by subject
|
167
|
+
test_hash = graph.triples.inject({}) do |hash, st|
|
168
|
+
a = hash[st.subject] ||= []
|
169
|
+
a << st
|
170
|
+
hash
|
171
|
+
end
|
172
|
+
|
173
|
+
@test_cases = test_hash.values.map do |statements|
|
174
|
+
TestCase.new(statements, uri_base, test_dir)
|
175
|
+
end
|
176
|
+
end.
|
177
|
+
compact.
|
178
|
+
sort_by{|t| t.name.to_s}
|
179
|
+
|
180
|
+
|
181
|
+
@test_cases.each do |tc|
|
182
|
+
next if tc.status && tc.status != "APPROVED"
|
183
|
+
case tc.rdf_type
|
184
|
+
when "PositiveParserTest" then @positive_parser_tests << tc
|
185
|
+
when "NegativeParserTest" then @negative_parser_tests << tc
|
186
|
+
when "PositiveEntailmentTest" then @positive_entailment_tests << tc
|
187
|
+
when "NegativeEntailmentTest" then @negative_entailment_tests << tc
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
def self.test_cases(test_uri = nil, test_dir = nil); parse_test_cases(test_uri, test_dir); @test_cases; end
|
192
|
+
def self.positive_parser_tests(test_uri = nil, test_dir = nil); parse_test_cases(test_uri, test_dir); @positive_parser_tests; end
|
193
|
+
def self.negative_parser_tests(test_uri = nil, test_dir = nil); parse_test_cases(test_uri, test_dir); @negative_parser_tests; end
|
194
|
+
def self.positive_entailment_tests(test_uri = nil, test_dir = nil); parse_test_cases(test_uri, test_dir); @positive_entailment_tests; end
|
195
|
+
def self.negative_entailment_tests(test_uri = nil, test_dir = nil); parse_test_cases(test_uri, test_dir); @negative_entailment_tests; end
|
196
|
+
end
|
197
|
+
end
|
data/spec/rdfa_helper.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'matchers'
|
2
|
-
|
3
1
|
module RdfaHelper
|
4
2
|
# Class representing test cases in format http://www.w3.org/2006/03/test-description#
|
5
3
|
class TestCase
|
@@ -26,7 +24,6 @@ module RdfaHelper
|
|
26
24
|
attr_accessor :expectedResults
|
27
25
|
attr_accessor :parser
|
28
26
|
|
29
|
-
@@test_cases = []
|
30
27
|
@@suite = ""
|
31
28
|
|
32
29
|
def initialize(statements, suite)
|
@@ -70,6 +67,8 @@ module RdfaHelper
|
|
70
67
|
reviewStatus.to_s.split("#").last
|
71
68
|
end
|
72
69
|
|
70
|
+
def compare; :graph; end
|
71
|
+
|
73
72
|
def information
|
74
73
|
%w(purpose specificationReference).map {|a| v = self.send(a); "#{a}: #{v}" if v}.compact.join("\n")
|
75
74
|
end
|
@@ -80,7 +79,7 @@ module RdfaHelper
|
|
80
79
|
|
81
80
|
# Read in file, and apply modifications to create a properly formatted HTML
|
82
81
|
def input
|
83
|
-
f = self.
|
82
|
+
f = self.inputDocument
|
84
83
|
found_head = false
|
85
84
|
namespaces = ""
|
86
85
|
body = File.readlines(File.join(TEST_DIR, "tests", f)).map do |line|
|
@@ -130,6 +129,9 @@ module RdfaHelper
|
|
130
129
|
suite == "xhtml" ? body : body.gsub(HTMLRE, '\1.html')
|
131
130
|
end
|
132
131
|
|
132
|
+
def inputDocument; self.name + ".txt"; end
|
133
|
+
def outputDocument; self.name + ".sparql"; end
|
134
|
+
|
133
135
|
# Run test case, yields input for parser to create triples
|
134
136
|
def run_test
|
135
137
|
rdfa_string = input
|
@@ -145,9 +147,11 @@ module RdfaHelper
|
|
145
147
|
if (query_string.match(/UNION|OPTIONAL/) || title.match(/XML/)) && triples
|
146
148
|
# Check triples, as Rasql doesn't implement UNION
|
147
149
|
@parser.graph.should be_equivalent_graph(triples, self)
|
148
|
-
|
150
|
+
elsif $redland_enabled
|
149
151
|
# Run SPARQL query
|
150
152
|
@parser.graph.should pass_query(query_string, self)
|
153
|
+
else
|
154
|
+
#pending("Query skipped, Redland not installed")
|
151
155
|
end
|
152
156
|
|
153
157
|
@parser.graph.to_rdfxml.should be_valid_xml
|
@@ -158,17 +162,17 @@ module RdfaHelper
|
|
158
162
|
end
|
159
163
|
|
160
164
|
def self.test_cases(suite)
|
161
|
-
|
162
|
-
return
|
165
|
+
@test_cases = [] unless @suite == suite
|
166
|
+
return @test_cases unless @test_cases.empty?
|
163
167
|
|
164
|
-
|
165
|
-
|
168
|
+
@suite = suite # Process the given test suite
|
169
|
+
@manifest_url = "#{BASE_MANIFEST_URL}#{suite}-manifest.rdf"
|
166
170
|
|
167
171
|
manifest_str = File.read(File.join(TEST_DIR, "#{suite}-manifest.rdf"))
|
168
172
|
parser = RdfXmlParser.new
|
169
173
|
|
170
174
|
begin
|
171
|
-
parser.parse(manifest_str,
|
175
|
+
parser.parse(manifest_str, @manifest_url)
|
172
176
|
rescue
|
173
177
|
raise "Parse error: #{$!}\n\t#{parser.debug.to_a.join("\t\n")}\n\n"
|
174
178
|
end
|
@@ -181,7 +185,7 @@ module RdfaHelper
|
|
181
185
|
hash
|
182
186
|
end
|
183
187
|
|
184
|
-
|
188
|
+
@test_cases = test_hash.values.map {|statements| TestCase.new(statements, suite)}.
|
185
189
|
compact.
|
186
190
|
sort_by{|t| t.name }
|
187
191
|
end
|
data/spec/rdfa_parser_spec.rb
CHANGED
@@ -114,15 +114,13 @@ describe "RDFa parser" do
|
|
114
114
|
describe "that are approved" do
|
115
115
|
test_cases(suite).each do |t|
|
116
116
|
next unless t.status == "approved"
|
117
|
-
#next unless t.name =~ /
|
117
|
+
#next unless t.name =~ /0140/
|
118
118
|
#puts t.inspect
|
119
119
|
specify "test #{t.name}: #{t.title}#{", (negative test)" unless t.expectedResults}" do
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
rescue Spec::Expectations::ExpectationNotMetError => e
|
125
|
-
raise
|
120
|
+
#puts t.input
|
121
|
+
#puts t.results
|
122
|
+
t.run_test do |rdfa_string, rdfa_parser|
|
123
|
+
rdfa_parser.parse(rdfa_string, t.informationResourceInput, :debug => [])
|
126
124
|
end
|
127
125
|
end
|
128
126
|
end
|
@@ -130,7 +128,7 @@ describe "RDFa parser" do
|
|
130
128
|
describe "that are unreviewed" do
|
131
129
|
test_cases(suite).each do |t|
|
132
130
|
next unless t.status == "unreviewed"
|
133
|
-
next unless t.name =~ /017\d/
|
131
|
+
#next unless t.name =~ /017\d/
|
134
132
|
#puts t.inspect
|
135
133
|
specify "test #{t.name}: #{t.title}#{", (negative test)" unless t.expectedResults}" do
|
136
134
|
begin
|
data/spec/rdfxml_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
3
|
include RdfContext
|
3
4
|
|
@@ -181,12 +182,9 @@ xmlns:ex="http://www.example.org/" xml:lang="en" xml:base="http://www.example.or
|
|
181
182
|
<http://example.org/triples/#triple1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://example.org/stuff/1.0/prop> .
|
182
183
|
<http://example.org/triples/#triple1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> \"blah\" .
|
183
184
|
EOF
|
184
|
-
tc = RdfXMLHelper::TestCase.new([])
|
185
|
-
tc.about = "http://example.com"
|
186
|
-
tc.parser = @parser
|
187
185
|
|
188
|
-
graph = @parser.parse(sampledoc,
|
189
|
-
graph.should be_equivalent_graph(triples,
|
186
|
+
graph = @parser.parse(sampledoc, "http://example.com/", :strict => true)
|
187
|
+
graph.should be_equivalent_graph(triples, :about => "http://example.com/", :trace => @parser.debug)
|
190
188
|
end
|
191
189
|
|
192
190
|
it "should make sure that the value of rdf:ID attributes match the XML Name production (data attribute version)" do
|
@@ -276,25 +274,21 @@ EOF
|
|
276
274
|
<http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/test001.nt> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#NT-Document> .
|
277
275
|
<http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/test001.rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#RDF-XML-Document> .
|
278
276
|
EOF
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
graph
|
283
|
-
graph.should be_equivalent_graph(triples, tc)
|
277
|
+
uri = "http://www.w3.org/2000/10/rdf-tests/rdfcore/xmlbase/Manifest.rdf#test001"
|
278
|
+
|
279
|
+
graph = @parser.parse(sampledoc, uri, :strict => true)
|
280
|
+
graph.should be_equivalent_graph(triples, :about => uri, :trace => @parser.debug)
|
284
281
|
end
|
285
282
|
|
286
283
|
describe "parsing rdf files" do
|
287
|
-
def test_file(filepath, uri
|
288
|
-
|
289
|
-
graph = @parser.parse(
|
290
|
-
ntriples = graph.to_ntriples
|
291
|
-
ntriples.gsub!(/_:bn\d+/, '_:node1')
|
292
|
-
ntriples = ntriples.split("\n").sort.join("\n")
|
284
|
+
def test_file(filepath, uri)
|
285
|
+
rdf_string = File.read(filepath)
|
286
|
+
graph = @parser.parse(rdf_string, uri, :strict => true)
|
293
287
|
|
294
288
|
nt_string = File.read(filepath.sub('.rdf', '.nt'))
|
295
|
-
|
289
|
+
nt_graph = N3Parser.parse(nt_string, uri)
|
296
290
|
|
297
|
-
|
291
|
+
graph.should be_equivalent_graph(nt_graph, :about => uri, :trace => @parser.debug)
|
298
292
|
end
|
299
293
|
|
300
294
|
before(:all) do
|
@@ -307,23 +301,22 @@ EOF
|
|
307
301
|
test_file(file, "http://www.bbc.co.uk/music/artists/#{gid}")
|
308
302
|
end
|
309
303
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
304
|
+
it "should parse xml literal test" do
|
305
|
+
file = File.join(@rdf_dir, "xml-literal-mixed.rdf")
|
306
|
+
test_file(file, "http://www.example.com/books#book12345")
|
307
|
+
end
|
314
308
|
end
|
315
309
|
|
316
310
|
# W3C Test suite from http://www.w3.org/2000/10/rdf-tests/rdfcore/
|
317
311
|
describe "w3c rdfcore tests" do
|
318
|
-
require '
|
319
|
-
include RdfXMLHelper
|
312
|
+
require 'rdf_helper'
|
320
313
|
|
321
314
|
def self.positive_tests
|
322
|
-
|
315
|
+
RdfHelper::TestCase.positive_parser_tests(RDFCORE_TEST, RDFCORE_DIR) rescue []
|
323
316
|
end
|
324
317
|
|
325
318
|
def self.negative_tests
|
326
|
-
|
319
|
+
RdfHelper::TestCase.negative_parser_tests(RDFCORE_TEST, RDFCORE_DIR) rescue []
|
327
320
|
end
|
328
321
|
|
329
322
|
# Negative parser tests should raise errors.
|
@@ -332,7 +325,7 @@ EOF
|
|
332
325
|
#next unless t.about.uri.to_s =~ /rdfms-rdf-names-use/
|
333
326
|
#next unless t.name =~ /11/
|
334
327
|
#puts t.inspect
|
335
|
-
specify "test #{t.
|
328
|
+
specify "test #{t.name}: " + (t.description || "#{t.inputDocument} against #{t.outputDocument}") do
|
336
329
|
t.run_test do |rdf_string, parser|
|
337
330
|
parser.parse(rdf_string, t.about.uri.to_s, :strict => true, :debug => [])
|
338
331
|
end
|
@@ -345,7 +338,7 @@ EOF
|
|
345
338
|
#next unless t.about.uri.to_s =~ /rdfms-empty-property-elements/
|
346
339
|
#next unless t.name =~ /1/
|
347
340
|
#puts t.inspect
|
348
|
-
specify "test #{t.
|
341
|
+
specify "test #{t.name}: " + (t.description || t.inputDocument) do
|
349
342
|
t.run_test do |rdf_string, parser|
|
350
343
|
lambda do
|
351
344
|
parser.parse(rdf_string, t.about.uri.to_s, :strict => true, :debug => [])
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
begin
|
2
3
|
require 'spec'
|
3
4
|
require 'active_support'
|
@@ -9,6 +10,12 @@ rescue LoadError
|
|
9
10
|
require 'active_support'
|
10
11
|
end
|
11
12
|
|
13
|
+
begin
|
14
|
+
require 'rdf/redland'
|
15
|
+
$redland_enabled = true
|
16
|
+
rescue LoadError
|
17
|
+
end
|
18
|
+
|
12
19
|
ActiveSupport::XmlMini.backend = 'Nokogiri'
|
13
20
|
|
14
21
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -18,6 +25,19 @@ require 'matchers'
|
|
18
25
|
|
19
26
|
include RdfContext
|
20
27
|
|
28
|
+
TMP_DIR = File.join(File.dirname(__FILE__), 'tmp')
|
29
|
+
|
30
|
+
SWAP_DIR = File.join(File.dirname(__FILE__), 'swap_test')
|
31
|
+
SWAP_TEST = "http://www.w3.org/2000/10/swap/test/n3parser.tests"
|
32
|
+
CWM_TEST = "http://www.w3.org/2000/10/swap/test/regression.n3"
|
33
|
+
|
34
|
+
TURTLE_DIR = File.join(File.dirname(__FILE__), 'turtle')
|
35
|
+
TURTLE_TEST = "http://www.w3.org/2001/sw/DataAccess/df1/tests/manifest.ttl"
|
36
|
+
TURTLE_BAD_TEST = "http://www.w3.org/2001/sw/DataAccess/df1/tests/manifest-bad.ttl"
|
37
|
+
|
38
|
+
RDFCORE_DIR = File.join(File.dirname(__FILE__), 'rdfcore')
|
39
|
+
RDFCORE_TEST = "http://www.w3.org/2000/10/rdf-tests/rdfcore/Manifest.rdf"
|
40
|
+
|
21
41
|
Spec::Runner.configure do |config|
|
22
42
|
config.include(Matchers)
|
23
43
|
end
|