rubyrdf 0.0.1
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/History.txt +4 -0
- data/License.txt +24 -0
- data/Manifest.txt +52 -0
- data/README.txt +79 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +15 -0
- data/lib/rdf/blank_node.rb +41 -0
- data/lib/rdf/exceptions.rb +26 -0
- data/lib/rdf/format/ntriples.rb +493 -0
- data/lib/rdf/graph/base.rb +118 -0
- data/lib/rdf/graph/memory.rb +146 -0
- data/lib/rdf/graph/tests.rb +137 -0
- data/lib/rdf/namespace.rb +90 -0
- data/lib/rdf/plain_literal_node.rb +36 -0
- data/lib/rdf/query/binding.rb +68 -0
- data/lib/rdf/query/executer.rb +42 -0
- data/lib/rdf/query/result.rb +54 -0
- data/lib/rdf/query.rb +54 -0
- data/lib/rdf/triple.rb +61 -0
- data/lib/rdf/typed_literal_node.rb +39 -0
- data/lib/rdf/uri_node.rb +35 -0
- data/lib/rdf/version.rb +9 -0
- data/lib/rubyrdf.rb +59 -0
- data/log/debug.log +0 -0
- data/script/console +11 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/helper.rb +14 -0
- data/test/test_blank_node.rb +67 -0
- data/test/test_format_ntriples.rb +247 -0
- data/test/test_graph_base.rb +71 -0
- data/test/test_graph_memory.rb +146 -0
- data/test/test_namespace.rb +130 -0
- data/test/test_plain_literal_node.rb +83 -0
- data/test/test_query.rb +49 -0
- data/test/test_query_binding.rb +84 -0
- data/test/test_query_result.rb +111 -0
- data/test/test_rdf.rb +56 -0
- data/test/test_triple.rb +147 -0
- data/test/test_typed_literal_node.rb +61 -0
- data/test/test_uri_node.rb +45 -0
- data/website/index.html +169 -0
- data/website/index.txt +92 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.html.erb +48 -0
- metadata +139 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
desc 'Release the website and new gem version'
|
2
|
+
task :deploy => [:check_version, :website, :release] do
|
3
|
+
puts "Remember to create SVN tag:"
|
4
|
+
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
5
|
+
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
6
|
+
puts "Suggested comment:"
|
7
|
+
puts "Tagging release #{CHANGES}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
11
|
+
task :local_deploy => [:website_generate, :install_gem]
|
12
|
+
|
13
|
+
task :check_version do
|
14
|
+
unless ENV['VERSION']
|
15
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
unless ENV['VERSION'] == VERS
|
19
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
25
|
+
task :install_gem_no_doc => [:clean, :package] do
|
26
|
+
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
27
|
+
end
|
28
|
+
|
29
|
+
namespace :manifest do
|
30
|
+
desc 'Recreate Manifest.txt to include ALL files'
|
31
|
+
task :refresh do
|
32
|
+
`rake check_manifest | patch -p0 > Manifest.txt`
|
33
|
+
end
|
34
|
+
end
|
data/tasks/website.rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
desc 'Generate website files'
|
2
|
+
task :website_generate => :ruby_env do
|
3
|
+
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
4
|
+
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'Upload website files to rubyforge'
|
9
|
+
task :website_upload do
|
10
|
+
host = "#{rubyforge_username}@rubyforge.org"
|
11
|
+
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
12
|
+
local_dir = 'website'
|
13
|
+
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Generate and upload website files'
|
17
|
+
task :website => [:website_generate, :website_upload, :publish_docs]
|
data/test/helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
gem 'mocha'
|
5
|
+
require 'mocha'
|
6
|
+
|
7
|
+
RDF_LIB = File.join(File.dirname(__FILE__), '..', 'lib') unless defined?(RDF_LIB)
|
8
|
+
$:.unshift(RDF_LIB) unless $:.include?(RDF_LIB)
|
9
|
+
|
10
|
+
TEST_LIB = File.join(File.dirname(__FILE__)) unless defined?(TEST_LIB)
|
11
|
+
$:.unshift(TEST_LIB) unless $:.include?(TEST_LIB)
|
12
|
+
|
13
|
+
require 'rubyrdf'
|
14
|
+
RDF::Namespace.register(:ex, 'http://example.org/')
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestBlankNode < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@graph = RDF::Graph::Memory.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_new_should_initialize_graph
|
9
|
+
assert_equal @graph, RDF::BlankNode.new('test', @graph).graph
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_new_should_raise_error_for_nil_graph
|
13
|
+
assert_raise(ArgumentError) {
|
14
|
+
RDF::BlankNode.new('test')
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_new_should_initialize_name
|
19
|
+
assert_equal 'test', RDF::BlankNode.new('test', @graph).name
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_new_should_raise_error_for_empty_name
|
23
|
+
assert_raise(ArgumentError) {
|
24
|
+
RDF::BlankNode.new(nil, @graph)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_equal_should_be_true_for_same_graph_and_name
|
29
|
+
assert_equal RDF::BlankNode.new('test', @graph), RDF::BlankNode.new('test', @graph)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_equal_should_be_false_for_same_graph_and_different_name
|
33
|
+
assert_not_equal RDF::BlankNode.new('test', @graph), RDF::BlankNode.new('test2', @graph)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_equal_should_be_false_for_different_graph_and_same_name
|
37
|
+
assert_not_equal RDF::BlankNode.new('test', @graph), RDF::BlankNode.new('test', RDF::Graph::Memory.new)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_hash_should_be_equal_for_same_graph_and_name
|
41
|
+
assert_equal RDF::BlankNode.new('test', @graph).hash, RDF::BlankNode.new('test', @graph).hash
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_hash_should_not_be_equal_for_same_graph_and_different_name
|
45
|
+
assert_not_equal RDF::BlankNode.new('test', @graph).hash, RDF::BlankNode.new('test2', @graph).hash
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_hash_should_not_be_equal_for_different_graph_and_same_name
|
49
|
+
assert_not_equal RDF::BlankNode.new('test', @graph).hash, RDF::BlankNode.new('test', RDF::Graph::Memory.new).hash
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_eql_should_be_true_for_same_graph_and_name
|
53
|
+
assert RDF::BlankNode.new('test', @graph).eql?(RDF::BlankNode.new('test', @graph))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_eql_should_be_false_for_same_graph_and_different_name
|
57
|
+
assert !RDF::BlankNode.new('test', @graph).eql?(RDF::BlankNode.new('test2', @graph))
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_eql_should_be_false_for_different_graph_and_same_name
|
61
|
+
assert !RDF::BlankNode.new('test', @graph).eql?(RDF::BlankNode.new('test', RDF::Graph::Memory.new))
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_to_s_should_be_ntriples_format
|
65
|
+
assert_equal "_:a", RDF::BlankNode.new('a', @graph).to_s
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestFormatNTriples < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@graph = RDF::Graph::Memory.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_import_comment_line
|
9
|
+
RDF::Format::NTriples.import('# comment lines', @graph)
|
10
|
+
assert @graph.empty?
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_import_comment_line_after_whitespace
|
14
|
+
RDF::Format::NTriples.import(" \t \t # comment line after whitespace", @graph)
|
15
|
+
assert @graph.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_import_empty_blank_line
|
19
|
+
RDF::Format::NTriples.import('', @graph)
|
20
|
+
assert @graph.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_import_blank_line_with_tabs_and_spaces
|
24
|
+
RDF::Format::NTriples.import(" \t", @graph)
|
25
|
+
assert @graph.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_import_normal_triple
|
29
|
+
RDF::Format::NTriples.import('<http://example.org/resource1> <http://example.org/property> <http://example.org/resource2> .', @graph)
|
30
|
+
assert @graph.include?(EX::resource1, EX::property, EX::resource2)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_import_should_create_graph
|
34
|
+
assert RDF::Format::NTriples.import('<http://example.org/resource1> <http://example.org/property> <http://example.org/resource2> .').is_a?(RDF::Graph::Memory)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_import_triple_with_blank_subject
|
38
|
+
RDF::Format::NTriples.import('_:anon <http://example.org/property> <http://example.org/resource2> .', @graph)
|
39
|
+
assert @graph.include?(RDF::BlankNode.new('anon', @graph), EX::property, EX::resource2)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_import_triple_with_blank_object
|
43
|
+
RDF::Format::NTriples.import('<http://example.org/resource2> <http://example.org/property> _:anon .', @graph)
|
44
|
+
assert @graph.include?(EX::resource2, EX::property, RDF::BlankNode.new('anon', @graph))
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_import_triple_with_spaces_and_tabs_throughout
|
48
|
+
RDF::Format::NTriples.import(" \t <http://example.org/resource3> \t <http://example.org/property>\t <http://example.org/resource2> \t.\t ", @graph)
|
49
|
+
assert @graph.include?(EX::resource3, EX::property, EX::resource2)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_import_triple_with_cr_nl_line_ending
|
53
|
+
RDF::Format::NTriples.import("<http://example.org/resource4> <http://example.org/property> <http://example.org/resource2> .\15\12", @graph)
|
54
|
+
assert @graph.include?(EX::resource4, EX::property, EX::resource2)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_import_two_lines_separated_by_cr
|
58
|
+
RDF::Format::NTriples.import("<http://example.org/resource5> <http://example.org/property> <http://example.org/resource2> .\15<http://example.org/resource6> <http://example.org/property> <http://example.org/resource2> .", @graph)
|
59
|
+
assert @graph.include?(EX::resource5, EX::property, EX::resource2)
|
60
|
+
assert @graph.include?(EX::resource6, EX::property, EX::resource2)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_import_simple_literal
|
64
|
+
RDF::Format::NTriples.import('<http://example.org/resource7> <http://example.org/property> "simple literal" .', @graph)
|
65
|
+
assert @graph.include?(EX::resource7, EX::property, RDF::PlainLiteralNode.new('simple literal'))
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_import_literal_with_backslashed_backslash
|
69
|
+
RDF::Format::NTriples.import('<http://example.org/resource8> <http://example.org/property> "backslash:\\\\" .', @graph)
|
70
|
+
assert @graph.include?(EX::resource8, EX::property, RDF::PlainLiteralNode.new('backslash:\\'))
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_import_literal_with_backslashed_quote
|
74
|
+
RDF::Format::NTriples.import('<http://example.org/resource9> <http://example.org/property> "dquote:\"" .', @graph)
|
75
|
+
assert @graph.include?(EX::resource9, EX::property, RDF::PlainLiteralNode.new('dquote:"'))
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_import_literal_with_backslashed_n
|
79
|
+
RDF::Format::NTriples.import('<http://example.org/resource10> <http://example.org/property> "newline:\\n" .', @graph)
|
80
|
+
assert @graph.include?(EX::resource10, EX::property, RDF::PlainLiteralNode.new("newline:\n"))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_import_literal_with_backslashed_r
|
84
|
+
RDF::Format::NTriples.import('<http://example.org/resource11> <http://example.org/property> "return\\r" .', @graph)
|
85
|
+
assert @graph.include?(EX::resource11, EX::property, RDF::PlainLiteralNode.new("return\r"))
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_import_literal_with_backslashed_t
|
89
|
+
RDF::Format::NTriples.import('<http://example.org/resource12> <http://example.org/property> "tab:\\t" .', @graph)
|
90
|
+
assert @graph.include?(EX::resource12, EX::property, RDF::PlainLiteralNode.new("tab:\t"))
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_import_triple_with_uri_and_no_space_before_period
|
94
|
+
RDF::Format::NTriples.import('<http://example.org/resource13> <http://example.org/property> <http://example.org/resource2>.', @graph)
|
95
|
+
assert @graph.include?(EX::resource13, EX::property, EX::resource2)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_import_triple_with_literal_and_no_space_before_period
|
99
|
+
RDF::Format::NTriples.import('<http://example.org/resource14> <http://example.org/property> "x".', @graph)
|
100
|
+
assert @graph.include?(EX::resource14, EX::property, RDF::PlainLiteralNode.new('x'))
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_import_triple_with_blank_node_and_no_space_before_period
|
104
|
+
RDF::Format::NTriples.import('<http://example.org/resource15> <http://example.org/property> _:anon.', @graph)
|
105
|
+
assert @graph.include?(EX::resource15, EX::property, RDF::BlankNode.new('anon', @graph))
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_import_triple_with_u_escape
|
109
|
+
# latin small letter e with acute symbol \u00E9 - 2 UTF-8 bytes #C3 #A9
|
110
|
+
RDF::Format::NTriples.import('<http://example.org/resource16> <http://example.org/property> "\u00E9" .', @graph)
|
111
|
+
assert @graph.include?(EX::resource16, EX::property, RDF::PlainLiteralNode.new("\xC3\xA9"))
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_import_triple_with_three_byte_u_escape
|
115
|
+
# Euro symbol \u20ac - 3 UTF-8 bytes #xE2 #x82 #xAC
|
116
|
+
RDF::Format::NTriples.import('<http://example.org/resource17> <http://example.org/property> "\u20AC" .', @graph)
|
117
|
+
assert @graph.include?(EX::resource17, EX::property, RDF::PlainLiteralNode.new("\xE2\x82\xAC"))
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_import_triple_with_cap_u_escape
|
121
|
+
# ? \U1ABDC - 4 UTF-8 bytes #xF0 #x9A #xAF #x8D
|
122
|
+
RDF::Format::NTriples.import('<http://example.org/resource18> <http://example.org/property> "\U1ABCD" .', @graph)
|
123
|
+
assert @graph.include?(EX::resource18, EX::property, RDF::PlainLiteralNode.new("\xF0\x9A\xAF\x8D"))
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_import_blank_xml_literal
|
127
|
+
RDF::Format::NTriples.import('<http://example.org/resource21> <http://example.org/property> ""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
128
|
+
assert @graph.include?(EX::resource21, EX::property, RDF::TypedLiteralNode.new('', RDFS::XMLLiteral))
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_import_space_xml_literal
|
132
|
+
RDF::Format::NTriples.import('<http://example.org/resource22> <http://example.org/property> " "^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
133
|
+
assert @graph.include?(EX::resource22, EX::property, RDF::TypedLiteralNode.new(' ', RDFS::XMLLiteral))
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_import_x_xml_literal
|
137
|
+
RDF::Format::NTriples.import('<http://example.org/resource23> <http://example.org/property> "x"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
138
|
+
assert @graph.include?(EX::resource23, EX::property, RDF::TypedLiteralNode.new('x', RDFS::XMLLiteral))
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_import_backslashed_quote_xml_literal
|
142
|
+
RDF::Format::NTriples.import('<http://example.org/resource23> <http://example.org/property> "\""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
143
|
+
assert @graph.include?(EX::resource23, EX::property, RDF::TypedLiteralNode.new('"', RDFS::XMLLiteral))
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_import_well_formed_xml_literal
|
147
|
+
RDF::Format::NTriples.import('<http://example.org/resource24> <http://example.org/property> "<a></a>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
148
|
+
assert @graph.include?(EX::resource24, EX::property, RDF::TypedLiteralNode.new('<a></a>', RDFS::XMLLiteral))
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_import_well_formed_xml_literal_text_before
|
152
|
+
RDF::Format::NTriples.import('<http://example.org/resource25> <http://example.org/property> "a <b></b>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
153
|
+
assert @graph.include?(EX::resource25, EX::property, RDF::TypedLiteralNode.new('a <b></b>', RDFS::XMLLiteral))
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_import_well_formed_xml_literal_text_before_and_after
|
157
|
+
RDF::Format::NTriples.import('<http://example.org/resource26> <http://example.org/property> "a <b></b> c"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
158
|
+
assert @graph.include?(EX::resource26, EX::property, RDF::TypedLiteralNode.new('a <b></b> c', RDFS::XMLLiteral))
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_import_well_formed_xml_literal_text_and_newline_before_and_after
|
162
|
+
RDF::Format::NTriples.import('<http://example.org/resource26> <http://example.org/property> "a\n<b></b>\nc"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
163
|
+
assert @graph.include?(EX::resource26, EX::property, RDF::TypedLiteralNode.new("a\n<b></b>\nc", RDFS::XMLLiteral))
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_import_text_typed_as_xml_literal
|
167
|
+
RDF::Format::NTriples.import('<http://example.org/resource27> <http://example.org/property> "chat"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .', @graph)
|
168
|
+
assert @graph.include?(EX::resource27, EX::property, RDF::TypedLiteralNode.new('chat', RDFS::XMLLiteral))
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_import_plain_literal_with_french_language_tag
|
172
|
+
RDF::Format::NTriples.import('<http://example.org/resource30> <http://example.org/property> "chat"@fr .', @graph)
|
173
|
+
assert @graph.include?(EX::resource30, EX::property, RDF::PlainLiteralNode.new('chat', 'fr'))
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_import_plain_literal_with_english_language_tag
|
177
|
+
RDF::Format::NTriples.import('<http://example.org/resource31> <http://example.org/property> "chat"@en .', @graph)
|
178
|
+
assert @graph.include?(EX::resource31, EX::property, RDF::PlainLiteralNode.new('chat', 'en'))
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_import_typed_literal
|
182
|
+
RDF::Format::NTriples.import('<http://example.org/resource32> <http://example.org/property> "abc"^^<http://example.org/datatype1> .', @graph)
|
183
|
+
assert @graph.include?(EX::resource32, EX::property, RDF::TypedLiteralNode.new('abc', EX::datatype1))
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_export_simple_triple
|
187
|
+
@graph.add(EX::a, EX::b, EX::c)
|
188
|
+
io = StringIO.new('')
|
189
|
+
RDF::Format::NTriples.export(@graph, io)
|
190
|
+
assert_equal "<http://example.org/a> <http://example.org/b> <http://example.org/c>.\n", io.string
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_export_triple_with_blank_subject
|
194
|
+
@graph.add(@graph.new_blank_node('a'), EX::b, EX::c)
|
195
|
+
io = StringIO.new('')
|
196
|
+
RDF::Format::NTriples.export(@graph, io)
|
197
|
+
assert_equal "_:a <http://example.org/b> <http://example.org/c>.\n", io.string
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_export_triple_with_blank_object
|
201
|
+
@graph.add(EX::a, EX::b, @graph.new_blank_node('c'))
|
202
|
+
io = StringIO.new('')
|
203
|
+
RDF::Format::NTriples.export(@graph, io)
|
204
|
+
assert_equal "<http://example.org/a> <http://example.org/b> _:c.\n", io.string
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_export_triple_with_plain_literal_object
|
208
|
+
@graph.add(EX::a, EX::b, RDF::PlainLiteralNode.new('test'))
|
209
|
+
io = StringIO.new('')
|
210
|
+
RDF::Format::NTriples.export(@graph, io)
|
211
|
+
assert_equal "<http://example.org/a> <http://example.org/b> \"test\".\n", io.string
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_export_triple_with_plain_literal_object_with_language_tag
|
215
|
+
@graph.add(EX::a, EX::b, RDF::PlainLiteralNode.new('test', 'en'))
|
216
|
+
io = StringIO.new('')
|
217
|
+
RDF::Format::NTriples.export(@graph, io)
|
218
|
+
assert_equal "<http://example.org/a> <http://example.org/b> \"test\"@en.\n", io.string
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_export_triple_with_typed_literal_object
|
222
|
+
@graph.add(EX::a, EX::b, RDF::TypedLiteralNode.new('test', EX::d))
|
223
|
+
io = StringIO.new('')
|
224
|
+
RDF::Format::NTriples.export(@graph, io)
|
225
|
+
assert_equal "<http://example.org/a> <http://example.org/b> \"test\"^^<http://example.org/d>.\n", io.string
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_import_node_should_parse_blank_node
|
229
|
+
assert_equal RDF::BlankNode.new('x', @graph), RDF::Format::NTriples.import_node('_:x', @graph)
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_import_node_should_parse_uri_node
|
233
|
+
assert_equal RDF::UriNode.new('http://paul.stadig.name/'), RDF::Format::NTriples.import_node('<http://paul.stadig.name/>')
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_import_node_should_parse_plain_literal_node
|
237
|
+
assert_equal RDF::PlainLiteralNode.new('test'), RDF::Format::NTriples.import_node('"test"')
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_import_node_should_parse_plain_literal_node_with_language_tag
|
241
|
+
assert_equal RDF::PlainLiteralNode.new('test', 'en'), RDF::Format::NTriples.import_node('"test"@en')
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_import_node_should_parse_typed_literal_node
|
245
|
+
assert_equal RDF::TypedLiteralNode.new('test', EX::a), RDF::Format::NTriples.import_node("\"test\"^^<#{EX::a.uri}>")
|
246
|
+
end
|
247
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestGraphBase < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@graph = RDF::Graph::Base.new
|
6
|
+
end
|
7
|
+
|
8
|
+
##== export ==##
|
9
|
+
def test_export_should_use_string_io_for_nil_file
|
10
|
+
RDF::Format::NTriples.expects(:export).with(@graph, is_a(StringIO))
|
11
|
+
StringIO.any_instance.expects(:string)
|
12
|
+
@graph.export(:ntriples)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_export_should_default_to_ntriples
|
16
|
+
RDF::Format::NTriples.expects(:export)
|
17
|
+
@graph.stubs(:each)
|
18
|
+
@graph.export
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_export_should_raise_unsupported_format_error
|
22
|
+
assert_raises(RDF::UnsupportedFormatError) do
|
23
|
+
@graph.export(:bogey)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
##== import ==##
|
28
|
+
def test_import_should_raise_error_for_nil_file
|
29
|
+
assert_raises(ArgumentError) do
|
30
|
+
@graph.import(nil)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_import_should_default_to_ntriples
|
35
|
+
RDF::Format::NTriples.expects(:import).with(anything, @graph)
|
36
|
+
@graph.import(stub())
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_import_should_raise_unsupported_format_error
|
40
|
+
assert_raises(RDF::UnsupportedFormatError) do
|
41
|
+
@graph.import(stub(), :bogey)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##== include? ==##
|
46
|
+
def test_include_should_raise_error_for_symbol_subject
|
47
|
+
assert_raises(ArgumentError) do
|
48
|
+
@graph.include?(:a, EX::b, EX::c)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_include_should_be_false_for_unassociated_bnode_subject
|
53
|
+
assert !@graph.include?(RDF::Graph::Memory.new.new_blank_node('a'), EX::b, EX::c)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_include_should_raise_error_for_symbol_predicate
|
57
|
+
assert_raises(ArgumentError) do
|
58
|
+
@graph.include?(EX::a, :a, EX::c)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_include_should_raise_error_for_symbol_object
|
63
|
+
assert_raises(ArgumentError) do
|
64
|
+
@graph.include?(EX::a, EX::b, :a)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_include_should_be_false_for_unassociated_bnode_object
|
69
|
+
assert !@graph.include?(EX::a, EX::b, RDF::Graph::Memory.new.new_blank_node('a'))
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
require 'rdf/graph/tests'
|
3
|
+
|
4
|
+
class TestGraphMemory < Test::Unit::TestCase
|
5
|
+
include RDF::Graph::Tests
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@graph = RDF::Graph::Memory.new
|
9
|
+
end
|
10
|
+
|
11
|
+
##== match ==##
|
12
|
+
def test_match_should_return_result
|
13
|
+
assert @graph.match(EX::a, EX::b, EX::c).is_a?(RDF::Query::Result)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_match_should_succeed
|
17
|
+
@graph.add(EX::a, EX::b, EX::c)
|
18
|
+
assert @graph.match(EX::a, EX::b, EX::c).success?
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_match_should_succeed_with_blank_node_subject_when_in_graph
|
22
|
+
bn = @graph.new_blank_node('x')
|
23
|
+
@graph.add(bn, EX::b, EX::c)
|
24
|
+
assert @graph.match(bn, EX::b, EX::c).success?
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_match_should_not_bind_blank_node_subject_when_in_graph
|
28
|
+
bn = @graph.new_blank_node('x')
|
29
|
+
@graph.add(bn, EX::b, EX::c)
|
30
|
+
assert @graph.match(bn, EX::b, EX::c).bindings.empty?
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_match_should_succeed_with_blank_node_subject_when_not_in_graph
|
34
|
+
@graph.add(EX::a, EX::b, EX::c)
|
35
|
+
bn = @graph.new_blank_node('x')
|
36
|
+
assert EX::a, @graph.match(bn, EX::b, EX::c).success?
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_match_should_bind_blank_node_subject_when_not_in_graph
|
40
|
+
@graph.add(EX::a, EX::b, EX::c)
|
41
|
+
bn = @graph.new_blank_node('x')
|
42
|
+
assert_equal EX::a, @graph.match(bn, EX::b, EX::c).bindings.to_a.first[bn]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_match_should_succeed_with_blank_node_object_when_in_graph
|
46
|
+
bn = @graph.new_blank_node('x')
|
47
|
+
@graph.add(bn, EX::b, EX::c)
|
48
|
+
assert @graph.match(bn, EX::b, EX::c).success?
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_match_should_not_bind_blank_node_object_when_in_graph
|
52
|
+
bn = @graph.new_blank_node('x')
|
53
|
+
@graph.add(EX::a, EX::b, bn)
|
54
|
+
assert @graph.match(EX::a, EX::b, bn).bindings.empty?
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_match_should_succeed_with_blank_node_object_when_not_in_graph
|
58
|
+
@graph.add(EX::a, EX::b, EX::c)
|
59
|
+
bn = @graph.new_blank_node('x')
|
60
|
+
assert EX::c, @graph.match(EX::a, EX::b, bn).success?
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_match_should_bind_blank_node_object_when_not_in_graph
|
64
|
+
@graph.add(EX::a, EX::b, EX::c)
|
65
|
+
bn = @graph.new_blank_node('x')
|
66
|
+
assert_equal EX::c, @graph.match(EX::a, EX::b, bn).bindings.to_a.first[bn]
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_match_should_succeed_with_variable_subject
|
70
|
+
@graph.add(EX::a, EX::b, EX::c)
|
71
|
+
assert @graph.match(:x, EX::b, EX::c).success?
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_match_should_bind_variable_subject
|
75
|
+
@graph.add(EX::a, EX::b, EX::c)
|
76
|
+
assert_equal EX::a, @graph.match(:x, EX::b, EX::c).bindings.to_a.first[:x]
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_match_should_fail_with_bound_subject_not_in_graph
|
80
|
+
@graph.add(EX::a, EX::b, EX::c)
|
81
|
+
result = RDF::Query::Result.new
|
82
|
+
result.bindings << RDF::Query::Binding.new(:x => EX::d)
|
83
|
+
assert @graph.match(:x, EX::b, EX::c, result).failure?
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_match_should_bind_predicate_with_bound_subject
|
87
|
+
@graph.add(EX::a, EX::b, EX::c)
|
88
|
+
result = RDF::Query::Result.new
|
89
|
+
result.bindings << RDF::Query::Binding.new(:x => EX::a)
|
90
|
+
assert_equal EX::b, @graph.match(:x, :y, EX::c, result).bindings.to_a.first[:y]
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_match_should_fail_with_bound_predicate_not_in_graph
|
94
|
+
@graph.add(EX::a, EX::b, EX::c)
|
95
|
+
result = RDF::Query::Result.new
|
96
|
+
result.bindings << RDF::Query::Binding.new(:x => EX::d)
|
97
|
+
assert @graph.match(EX::a, :x, EX::c, result).failure?
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_match_should_fail_with_bound_object_not_in_graph
|
101
|
+
@graph.add(EX::a, EX::b, EX::c)
|
102
|
+
result = RDF::Query::Result.new
|
103
|
+
result.bindings << RDF::Query::Binding.new(:x => EX::d)
|
104
|
+
assert @graph.match(EX::a, EX::b, :x, result).failure?
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_match_should_bind_variable_predicate
|
108
|
+
@graph.add(EX::a, EX::b, EX::c)
|
109
|
+
assert_equal EX::b, @graph.match(EX::a, :x, EX::c).bindings.to_a.first[:x]
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_match_should_bind_variable_object
|
113
|
+
@graph.add(EX::a, EX::b, EX::c)
|
114
|
+
assert_equal EX::c, @graph.match(EX::a, EX::b, :x).bindings.to_a.first[:x]
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_match_should_fail
|
118
|
+
@graph.add(EX::a, EX::b, EX::d)
|
119
|
+
assert @graph.match(EX::a, EX::b, EX::c).failure?
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_match_should_fail_when_empty
|
123
|
+
assert @graph.match(EX::a, EX::b, EX::c).failure?
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_match_should_not_find_deleted_triple
|
127
|
+
@graph.add(EX::a, EX::b, EX::c)
|
128
|
+
@graph.delete(EX::a, EX::b, EX::c)
|
129
|
+
assert @graph.match(@graph.new_blank_node('x'), EX::b, @graph.new_blank_node('z')).failure?
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_match_should_bind_with_existing_subject_and_non_existent_predicate
|
133
|
+
@graph.add(EX::a, EX::d, EX::e)
|
134
|
+
assert @graph.match(@graph.new_blank_node(UUID.timestamp_create), EX::b, @graph.new_blank_node('x')).failure?
|
135
|
+
end
|
136
|
+
|
137
|
+
##== delete ==##
|
138
|
+
def test_delete_should_not_leak_memory
|
139
|
+
t = RDF::Triple.new(@graph.new_blank_node('x'), EX::b, @graph.new_blank_node('y'))
|
140
|
+
@graph.add(t)
|
141
|
+
@graph.delete(t)
|
142
|
+
assert @graph.instance_variable_get('@idx_s').empty?
|
143
|
+
assert @graph.instance_variable_get('@idx_sp').empty?
|
144
|
+
assert @graph.instance_variable_get('@idx_blank').empty?
|
145
|
+
end
|
146
|
+
end
|