pjstadig-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 ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 2008-07-11
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/License.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Paul Stadig
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,28 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ PostInstall.txt
5
+ README.txt
6
+ Rakefile
7
+ TODO.txt
8
+ lib/rdf.rb
9
+ lib/rdf/blank_node.rb
10
+ lib/rdf/error.rb
11
+ lib/rdf/node.rb
12
+ lib/rdf/plain_literal_node.rb
13
+ lib/rdf/sesame/base.rb
14
+ lib/rdf/sparql_result.rb
15
+ lib/rdf/statement.rb
16
+ lib/rdf/typed_literal_node.rb
17
+ lib/rdf/uri_node.rb
18
+ lib/rdf/version.rb
19
+ lib/rubyrdf.rb
20
+ test/rdf/blank_node_test.rb
21
+ test/rdf/plain_literal_node_test.rb
22
+ test/rdf/sesame/base_test.rb
23
+ test/rdf/sparql_result_test.rb
24
+ test/rdf/statement_test.rb
25
+ test/rdf/typed_literal_node_test.rb
26
+ test/rdf/uri_node_test.rb
27
+ test/rdf_test.rb
28
+ test/test_helper.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on rubyrdf, see http://rubyrdf.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.txt ADDED
@@ -0,0 +1,48 @@
1
+ = rubyrdf
2
+
3
+ * FIX (url)
4
+
5
+ == DESCRIPTION:
6
+
7
+ FIX (describe your package)
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * FIX (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ FIX (code sample of usage)
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * FIX (list of requirements)
20
+
21
+ == INSTALL:
22
+
23
+ * FIX (sudo gem install, anything else)
24
+
25
+ == LICENSE:
26
+
27
+ (The MIT License)
28
+
29
+ Copyright (c) 2008 Paul Stadig
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining
32
+ a copy of this software and associated documentation files (the
33
+ 'Software'), to deal in the Software without restriction, including
34
+ without limitation the rights to use, copy, modify, merge, publish,
35
+ distribute, sublicense, and/or sell copies of the Software, and to
36
+ permit persons to whom the Software is furnished to do so, subject to
37
+ the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be
40
+ included in all copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'config/requirements'
2
+ require 'config/hoe' # setup Hoe + all gem configuration
3
+
4
+ Dir['tasks/**/*.rake'].each { |rake| load rake }
data/TODO.txt ADDED
@@ -0,0 +1,13 @@
1
+ blank node validation
2
+ uri node validation
3
+ plain literal node validation
4
+ typed literal node validation
5
+ transactions
6
+ to_node
7
+ to_f
8
+ to_i
9
+ to_int
10
+ to_s
11
+ to_str
12
+ to_date
13
+ to_time
@@ -0,0 +1,26 @@
1
+ module RDF
2
+ class BlankNode < Node
3
+ attr_reader :name
4
+
5
+ def initialize(name = nil)
6
+ super()
7
+ @name = name || genname
8
+ end
9
+
10
+ def to_ntriples
11
+ "_:#{@name}"
12
+ end
13
+ alias_method :to_s, :to_ntriples
14
+
15
+ def blank_node?
16
+ true
17
+ end
18
+
19
+ private
20
+ def genname
21
+ @@id ||= 0
22
+ @@id += 1
23
+ "bn#{@@id}"
24
+ end
25
+ end
26
+ end
data/lib/rdf/error.rb ADDED
@@ -0,0 +1,4 @@
1
+ module RDF
2
+ class Error < StandardError
3
+ end
4
+ end
data/lib/rdf/node.rb ADDED
@@ -0,0 +1,34 @@
1
+ module RDF
2
+ class Node
3
+ def escape_ntriples(str)
4
+ str.unpack('U*').map! do |c|
5
+ if 0x9 == c
6
+ '\t'
7
+ elsif 0xa == c
8
+ '\n'
9
+ elsif 0xd == c
10
+ '\r'
11
+ elsif 0x22 == c
12
+ '\"'
13
+ elsif 0x5c == c
14
+ '\\\\'
15
+ elsif (0x0..0x8).include?(c) ||
16
+ (0xb..0xc).include?(c) ||
17
+ (0xe..0x1f).include?(c) ||
18
+ (0x7F..0xffff).include?(c)
19
+ "\\u#{fixed_digit_hex(c, 4)}"
20
+ elsif (0x20..0x21).include?(c) ||
21
+ (0x23..0x5b).include?(c) ||
22
+ (0x5d..0x7e).include?(c)
23
+ c.chr
24
+ elsif (0x10000..0x10ffff).include?(c)
25
+ "\\U#{fixed_digit_hex(c, 8)}"
26
+ end
27
+ end.join
28
+ end
29
+
30
+ def fixed_digit_hex(num, digits)
31
+ "%0#{digits}d" % num.to_s(16).to_i
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ module RDF
2
+ class PlainLiteralNode < Node
3
+ attr_reader :lexical_form, :language_tag
4
+
5
+ def initialize(lexical_form, language_tag = nil)
6
+ super()
7
+ @lexical_form = lexical_form.chars.normalize(:c).to_s
8
+ @language_tag = language_tag
9
+ end
10
+
11
+ def hash
12
+ [-1025818701, @lexical_form, @language_tag].hash
13
+ end
14
+
15
+ def ==(o)
16
+ self.lexical_form == o.lexical_form &&
17
+ self.language_tag == o.language_tag
18
+ rescue NoMethodError
19
+ false
20
+ end
21
+ alias_method :eql?, :==
22
+
23
+ def to_ntriples
24
+ %Q("#{escape_ntriples(@lexical_form)}"#{@language_tag ? "@#{@language_tag}" : ''})
25
+ end
26
+ alias_method :to_s, :to_ntriples
27
+
28
+ def plain_literal_node?
29
+ true
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,109 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'rexml/document'
4
+
5
+ module RDF
6
+ module Sesame
7
+ class Base
8
+ attr_reader :address, :port, :path, :repository
9
+
10
+ def initialize(uri, repository)
11
+ uri = URI.parse(uri)
12
+ @address = uri.host
13
+ @port = uri.port
14
+ @path = uri.path
15
+ @repository = repository
16
+ end
17
+
18
+ def size
19
+ get_request(repo_path('size')).to_i
20
+ end
21
+
22
+ def empty?
23
+ size == 0
24
+ end
25
+
26
+ def add(*statement)
27
+ post_request(repo_path('statements'), statement.to_statement.to_ntriples, {}, 'Content-Type' => 'text/plain')
28
+ end
29
+
30
+ def import(data, format = :ntriples)
31
+ headers = case format
32
+ when :ntriples
33
+ {'Content-Type' => 'text/plain; charset=utf-8'}
34
+ when :rdfxml
35
+ {'Content-Type' => 'application/rdf+xml; charset=utf-8'}
36
+ end
37
+
38
+ result = post_request(repo_path("statements"), data, {}, headers)
39
+ result
40
+ end
41
+
42
+ def delete(*statement)
43
+ delete_request(repo_path('statements'), to_param_hash(statement.to_statement))
44
+ end
45
+
46
+ def delete_all
47
+ delete_request(repo_path("statements"))
48
+ end
49
+
50
+ def select(query)
51
+ SparqlResult.new(get_request(repo_path, {"query" => query}, "Accept" => "application/sparql-results+xml"))
52
+ end
53
+
54
+ def ask(query)
55
+ get_request(repo_path, {"query" => query}, "Accept" => "text/boolean") == "true"
56
+ end
57
+
58
+ def include?(*statement)
59
+ ask("ASK { #{statement.to_statement.to_ntriples} }")
60
+ end
61
+
62
+ private
63
+ def repo_path(path = nil)
64
+ parts = [@path, "repositories", @repository]
65
+ if path.to_s.strip != ""
66
+ parts << path
67
+ end
68
+
69
+ File.join(*parts)
70
+ end
71
+
72
+ def to_param_hash(statement)
73
+ {:subj => statement.subject.to_ntriples,
74
+ :pred => statement.predicate.to_ntriples,
75
+ :obj => statement.object.to_ntriples}
76
+ end
77
+
78
+ def get_request(path, params = {}, headers = {})
79
+ Net::HTTP.start(@address, @port) do |http|
80
+ http.get(
81
+ format_uri(path, params),
82
+ headers).body
83
+ end
84
+ end
85
+
86
+ def post_request(path, data, params = {}, headers = {})
87
+ Net::HTTP.start(@address, @port) do |http|
88
+ http.open_timeout = 6000
89
+ http.read_timeout = 6000
90
+ http.post(format_uri(path, params), data, headers).body
91
+ end
92
+ end
93
+
94
+ def delete_request(path, params = {}, headers = {})
95
+ Net::HTTP.start(@address, @port) do |http|
96
+ http.delete(format_uri(path, params), headers).body
97
+ end
98
+ end
99
+
100
+ def format_uri(path, params = {})
101
+ if params.empty?
102
+ path
103
+ else
104
+ path + "?" + params.map{|k, v| "#{k}=#{URI.escape(v)}"}.join("&")
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,42 @@
1
+ module RDF
2
+ class SparqlResult < Array
3
+ class InvalidDocument < Error
4
+ attr_reader :document
5
+
6
+ def initialize(document)
7
+ super("Invalid SPARQL Result Document")
8
+ @document = document
9
+ end
10
+ end
11
+
12
+ def initialize(result)
13
+ super()
14
+ bnodes = {}
15
+ doc = REXML::Document.new(result)
16
+ doc.elements.each('/sparql/results/result') do |r|
17
+ binding = {}
18
+ r.elements.each do |b|
19
+ binding[b.attributes['name']] = parse_node(b.elements[1], bnodes)
20
+ end
21
+ self << binding
22
+ end
23
+ rescue REXML::ParseException
24
+ raise InvalidDocument.new(result)
25
+ end
26
+
27
+ def parse_node(node, bnodes)
28
+ case node.name
29
+ when 'uri'
30
+ RDF::URINode.new(node.text)
31
+ when 'bnode'
32
+ bnodes[node.text] ||= RDF::BlankNode.new
33
+ when 'literal'
34
+ if node.attributes.include?('datatype')
35
+ RDF::TypedLiteralNode.new(node.text, node.attributes['datatype'])
36
+ else
37
+ RDF::PlainLiteralNode.new(node.text, node.attributes['lang'])
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,62 @@
1
+ module RDF
2
+ class Statement
3
+ class InvalidSubjectError < Error
4
+ def initialize(subject)
5
+ super("Invalid Subject: #{subject}")
6
+ end
7
+ end
8
+
9
+ class InvalidPredicateError < Error
10
+ def initialize(predicate)
11
+ super("Invalid Predicate: #{predicate}")
12
+ end
13
+ end
14
+
15
+ class InvalidObjectError < Error
16
+ def initialize(object)
17
+ super("Invalid Object: #{object}")
18
+ end
19
+ end
20
+
21
+ attr_reader :subject, :predicate, :object
22
+
23
+ def initialize(subject, predicate, object)
24
+ @subject, @predicate, @object = subject, predicate, object
25
+ raise InvalidSubjectError.new(@subject) unless @subject.resource?
26
+ raise InvalidPredicateError.new(@predicate) unless @predicate.uri_node?
27
+ raise InvalidObjectError.new(@object) unless @object.node?
28
+ end
29
+
30
+ def hash
31
+ [-614958737, @subject, @predicate, @object].hash
32
+ end
33
+
34
+ def ==(o)
35
+ self.subject == o.subject &&
36
+ self.predicate == o.predicate &&
37
+ self.object == o.object
38
+ rescue NoMethodError
39
+ false
40
+ end
41
+ alias_method :eql?, :==
42
+
43
+ def to_ntriples
44
+ [@subject, @predicate, @object].map!{|n| n.to_ntriples}.join(' ') + " ."
45
+ end
46
+ alias_method :to_s, :to_ntriples
47
+
48
+ def to_statement
49
+ self
50
+ end
51
+ end
52
+ end
53
+
54
+ class Array
55
+ def to_statement
56
+ if self.size == 1
57
+ self[0].to_statement
58
+ else
59
+ RDF::Statement.new(*self)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,38 @@
1
+ module RDF
2
+ class TypedLiteralNode < Node
3
+ attr_reader :lexical_form, :datatype_uri
4
+
5
+ def initialize(lexical_form, datatype_uri)
6
+ super()
7
+ @lexical_form = lexical_form.chars.normalize(:c).to_s
8
+ if datatype_uri.uri_node?
9
+ @datatype_uri = datatype_uri.uri
10
+ else
11
+ @datatype_uri = datatype_uri
12
+ end
13
+
14
+ @datatype_uri = @datatype_uri.chars.normalize(:c).to_s
15
+ end
16
+
17
+ def hash
18
+ [-1025818701, @lexical_form, @datatype_uri].hash
19
+ end
20
+
21
+ def ==(o)
22
+ self.lexical_form == o.lexical_form &&
23
+ self.datatype_uri == o.datatype_uri
24
+ rescue NoMethodError
25
+ false
26
+ end
27
+ alias_method :eql?, :==
28
+
29
+ def to_ntriples
30
+ %Q("#{escape_ntriples(@lexical_form)}"^^<#{escape_ntriples(@datatype_uri)}>)
31
+ end
32
+ alias_method :to_s, :to_ntriples
33
+
34
+ def typed_literal_node?
35
+ true
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ module RDF
2
+ class URINode < Node
3
+ attr_reader :uri
4
+
5
+ def initialize(uri)
6
+ super()
7
+ @uri = uri.chars.normalize(:c).to_s
8
+ end
9
+
10
+ def hash
11
+ [763084702, @uri].hash
12
+ end
13
+
14
+ def ==(o)
15
+ self.uri == o.uri
16
+ rescue NoMethodError
17
+ false
18
+ end
19
+ alias_method :eql?, :==
20
+
21
+ def to_ntriples
22
+ "<#{escape_ntriples(@uri)}>"
23
+ end
24
+ alias_method :to_s, :to_ntriples
25
+
26
+ def uri_node?
27
+ true
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ module RDF
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 1
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/lib/rdf.rb ADDED
@@ -0,0 +1,111 @@
1
+ module RDF
2
+ class << self
3
+ def unregister(*names)
4
+ names.each do |n|
5
+ @names.delete(@prefixes[n])
6
+ @prefixes.delete(n)
7
+ @namespaces.delete(n)
8
+ end
9
+ end
10
+
11
+ def unregister_all!
12
+ defaults = [:rdf, :rdfs, :xsd, :owl]
13
+ @namespaces.keys.each do |name|
14
+ unregister(name) unless defaults.include?(name)
15
+ end
16
+ end
17
+
18
+ def register(namespaces)
19
+ @namespaces ||= {}
20
+ @names ||= {}
21
+ @prefixes ||= {}
22
+
23
+ namespaces.each do |name, prefix|
24
+ @prefixes[name.to_sym] = prefix.to_s
25
+ @names[prefix.to_s] = name
26
+
27
+ mod = Module.new
28
+ meta = class << mod
29
+ self
30
+ end
31
+
32
+ code_block = <<-ENDL
33
+ def method_missing(sym, *a, &b)
34
+ raise ::ArgumentError, "Unexpected arguments for RDF::NS.expand" if a.size > 0
35
+ ::RDF.expand_node(:#{name}, sym.to_s)
36
+ end
37
+
38
+ def const_missing(sym)
39
+ ::RDF.expand_node(:#{name}, sym.to_s)
40
+ end
41
+
42
+ def [](name)
43
+ ::RDF.expand_node(:#{name}, name.to_s)
44
+ end
45
+
46
+ [:type, :name, :id].each{|a| private(a)}
47
+ ENDL
48
+
49
+ meta.class_eval code_block
50
+
51
+ @namespaces[name.to_sym] = mod
52
+ end
53
+ end
54
+
55
+ def registered?(name)
56
+ @namespaces.key?(name.to_sym)
57
+ end
58
+
59
+ def prefix(name)
60
+ @prefixes[name.to_sym]
61
+ end
62
+
63
+ def expand_uri(name, local)
64
+ "#{prefix(name)}#{local.to_s}"
65
+ end
66
+
67
+ def expand_node(name, local)
68
+ RDF::URINode.new(expand_uri(name, local))
69
+ end
70
+
71
+ def [](name)
72
+ @namespaces[name.to_sym]
73
+ end
74
+ end
75
+
76
+ register(
77
+ :rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
78
+ :xsd => 'http://www.w3.org/2001/XMLSchema#',
79
+ :rdfs => 'http://www.w3.org/2000/01/rdf-schema#',
80
+ :owl => 'http://www.w3.org/2002/07/owl#')
81
+ end
82
+
83
+ class Object
84
+ def blank_node?
85
+ false
86
+ end
87
+
88
+ def uri_node?
89
+ false
90
+ end
91
+
92
+ def typed_literal_node?
93
+ false
94
+ end
95
+
96
+ def plain_literal_node?
97
+ false
98
+ end
99
+
100
+ def resource?
101
+ uri_node? || blank_node?
102
+ end
103
+
104
+ def literal_node?
105
+ plain_literal_node? || typed_literal_node?
106
+ end
107
+
108
+ def node?
109
+ resource? || literal_node?
110
+ end
111
+ end
data/lib/rubyrdf.rb ADDED
@@ -0,0 +1,17 @@
1
+ $KCODE = 'utf8'
2
+ $:.unshift(File.expand_path(File.dirname(__FILE__))) unless
3
+ $:.include?(File.expand_path(File.dirname(__FILE__)))
4
+
5
+ gem 'activesupport','>=1.4.0'
6
+ require 'activesupport'
7
+
8
+ require 'rdf'
9
+ require 'rdf/error'
10
+ require 'rdf/node'
11
+ require 'rdf/blank_node'
12
+ require 'rdf/uri_node'
13
+ require 'rdf/plain_literal_node'
14
+ require 'rdf/typed_literal_node'
15
+ require 'rdf/statement'
16
+ require 'rdf/sparql_result'
17
+ require 'rdf/sesame/base'
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::BlankNodeTest < Test::Unit::TestCase
4
+ def test_should_initialize_name
5
+ assert_equal 'test', RDF::BlankNode.new('test').name
6
+ end
7
+
8
+ def test_should_generate_name
9
+ assert_not_nil RDF::BlankNode.new.name
10
+ end
11
+
12
+ def test_should_export_to_ntriples_format
13
+ assert_equal '_:test', RDF::BlankNode.new('test').to_ntriples
14
+ assert_equal '_:test', RDF::BlankNode.new('test').to_s
15
+ end
16
+
17
+ def test_should_be_node
18
+ node = RDF::BlankNode.new
19
+
20
+ assert node.blank_node?
21
+ assert node.resource?
22
+ assert node.node?
23
+ end
24
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::PlainLiteralNodeTest < Test::Unit::TestCase
4
+ def test_should_initialize_lexical_form
5
+ assert_equal 'test', RDF::PlainLiteralNode.new('test').lexical_form
6
+ end
7
+
8
+ def test_should_normalize_lexical_form
9
+ assert_equal [0x03a9].pack('U'), RDF::PlainLiteralNode.new([0x2126].pack('U')).lexical_form
10
+ end
11
+
12
+ def test_should_initialize_language_tag
13
+ assert_nil RDF::PlainLiteralNode.new('test').language_tag
14
+ assert_equal 'en', RDF::PlainLiteralNode.new('test', 'en').language_tag
15
+ end
16
+
17
+ def test_should_be_eq
18
+ assert RDF::PlainLiteralNode.new('test', 'en') ==
19
+ RDF::PlainLiteralNode.new('test', 'en')
20
+ assert RDF::PlainLiteralNode.new('test') ==
21
+ RDF::PlainLiteralNode.new('test')
22
+ end
23
+
24
+ def test_should_not_be_eq
25
+ node = RDF::PlainLiteralNode.new('test', 'en')
26
+ assert node != nil
27
+ assert node != RDF::PlainLiteralNode.new('test')
28
+ assert node != RDF::PlainLiteralNode.new('test2', 'en')
29
+ assert node != RDF::PlainLiteralNode.new('test', 'fr')
30
+ end
31
+
32
+ def test_should_be_eql
33
+ node = RDF::PlainLiteralNode.new('test', 'en')
34
+ assert node.eql?(RDF::PlainLiteralNode.new('test', 'en'))
35
+ end
36
+
37
+ def test_should_not_be_eql
38
+ node = RDF::PlainLiteralNode.new('test', 'en')
39
+ assert !node.eql?(nil)
40
+ assert !node.eql?(RDF::PlainLiteralNode.new('test'))
41
+ assert !node.eql?(RDF::PlainLiteralNode.new('test2', 'en'))
42
+ assert !node.eql?(RDF::PlainLiteralNode.new('test', 'fr'))
43
+ end
44
+
45
+ def test_should_have_same_hash
46
+ assert_equal RDF::PlainLiteralNode.new('test').hash,
47
+ RDF::PlainLiteralNode.new('test').hash
48
+ assert_equal RDF::PlainLiteralNode.new('test', 'en').hash,
49
+ RDF::PlainLiteralNode.new('test', 'en').hash
50
+ end
51
+
52
+ def test_should_export_to_ntriples_format
53
+ assert_equal '"test"', RDF::PlainLiteralNode.new('test').to_ntriples
54
+ assert_equal '"test"@en', RDF::PlainLiteralNode.new('test', 'en').to_ntriples
55
+ assert_equal '"test"', RDF::PlainLiteralNode.new('test').to_s
56
+ assert_equal '"\u0008\U00010000\t\n\r\"\\\\"@en',
57
+ RDF::PlainLiteralNode.new([0x8, 0x10000, 0x9, 0xa, 0xd, 0x22, 0x5c].pack('U*'), 'en').to_ntriples
58
+ end
59
+
60
+ def test_should_be_node
61
+ node = RDF::PlainLiteralNode.new('test')
62
+
63
+ assert node.plain_literal_node?
64
+ assert node.literal_node?
65
+ assert node.node?
66
+ end
67
+ end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
2
+
3
+ class RDF::Sesame::BaseTest < Test::Unit::TestCase
4
+ def setup
5
+ @graph = RDF::Sesame::Base.new('http://localhost:8180/openrdf-sesame', 'test')
6
+ @graph.delete_all
7
+ RDF::unregister_all!
8
+ RDF::register(:ex => 'http://example.org/')
9
+ end
10
+
11
+ def test_should_initialize_address_port_path_and_repository
12
+ assert_equal 'localhost', @graph.address
13
+ assert_equal 8180, @graph.port
14
+ assert_equal '/openrdf-sesame', @graph.path
15
+ assert_equal 'test', @graph.repository
16
+ end
17
+
18
+ def test_should_be_empty
19
+ assert @graph.empty?
20
+ end
21
+
22
+ def test_should_add_statement
23
+ @graph.add(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
24
+ assert_equal 1, @graph.size
25
+ end
26
+
27
+ def test_should_import_data
28
+ @graph.import(<<-ENDL, :ntriples)
29
+ #{[RDF[:ex]::a, RDF[:ex]::b, RDF[:ex]::c].to_statement.to_ntriples}
30
+ #{[RDF[:ex]::d, RDF[:ex]::b, RDF[:ex]::e].to_statement.to_ntriples}
31
+ ENDL
32
+ assert_equal 2, @graph.size
33
+ assert @graph.include?([RDF[:ex]::a, RDF[:ex]::b, RDF[:ex]::c])
34
+ assert @graph.include?([RDF[:ex]::d, RDF[:ex]::b, RDF[:ex]::e])
35
+ end
36
+
37
+ def test_should_delete_statement
38
+ @graph.add(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
39
+ @graph.delete(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
40
+ assert @graph.empty?
41
+ end
42
+
43
+ def test_should_execute_select_query
44
+ assert @graph.select("SELECT ?x WHERE {?x #{RDF[:ex]::nothing} _:bn2 . }").empty?
45
+
46
+ @graph.add(RDF[:ex]::a, RDF[:ex]::b, RDF::PlainLiteralNode.new('test'))
47
+ @graph.add(RDF[:ex]::d, RDF[:ex]::b, RDF::PlainLiteralNode.new('test', 'en'))
48
+ @graph.add(RDF[:ex]::d, RDF[:ex]::b, RDF::TypedLiteralNode.new('test', RDF[:ex]::a.uri))
49
+ @graph.add(RDF[:ex]::d, RDF[:ex]::b, RDF[:ex]::e)
50
+ @graph.add(RDF[:ex]::d, RDF[:ex]::b, RDF::BlankNode.new)
51
+ result = @graph.select("SELECT ?y WHERE {?x #{RDF[:ex]::b} ?y . }")
52
+ assert_equal 5, result.size
53
+ assert result.any?{|r| r['y'] == RDF::PlainLiteralNode.new('test')}
54
+ assert result.any?{|r| r['y'] == RDF::PlainLiteralNode.new('test', 'en')}
55
+ assert result.any?{|r| r['y'] == RDF::TypedLiteralNode.new('test', RDF[:ex]::a.uri)}
56
+ assert result.any?{|r| r['y'] == RDF[:ex]::e}
57
+ assert result.any?{|r| r['y'].blank_node?}
58
+ end
59
+
60
+ def test_should_execute_ask_query
61
+ @graph.add(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
62
+ assert @graph.ask("ask { #{[RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj].to_statement.to_ntriples} }")
63
+ end
64
+
65
+ def test_should_include_statement
66
+ @graph.add(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
67
+ assert @graph.include?(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
68
+ end
69
+
70
+ def test_should_clear_graph
71
+ @graph.add(RDF[:ex]::sub, RDF[:ex]::pred, RDF[:ex]::obj)
72
+ @graph.delete_all
73
+
74
+ assert @graph.empty?
75
+ end
76
+ end
@@ -0,0 +1,117 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::SparqlResultTest < Test::Unit::TestCase
4
+ def setup
5
+ RDF.unregister_all!
6
+ RDF.register(:ex => 'http://example.com/')
7
+ end
8
+
9
+ def test_should_preserve_blank_node_identity
10
+ result = RDF::SparqlResult.new(<<-ENDL)
11
+ <?xml version='1.0' encoding='UTF-8'?>
12
+ <sparql xmlns='http://www.w3.org/2005/sparql-results#'>
13
+ <head>
14
+ <variable name='x'/>
15
+ </head>
16
+ <results>
17
+ <result>
18
+ <binding name='x'>
19
+ <bnode>bn1</bnode>
20
+ </binding>
21
+ </result>
22
+ <result>
23
+ <binding name='x'>
24
+ <bnode>bn1</bnode>
25
+ </binding>
26
+ </result>
27
+ </results>
28
+ </sparql>
29
+ ENDL
30
+
31
+ assert_same result[0]['x'], result[1]['x']
32
+ end
33
+
34
+ def test_should_parse_uri_node
35
+ result = RDF::SparqlResult.new(<<-ENDL)
36
+ <?xml version='1.0' encoding='UTF-8'?>
37
+ <sparql xmlns='http://www.w3.org/2005/sparql-results#'>
38
+ <head>
39
+ <variable name='x'/>
40
+ </head>
41
+ <results>
42
+ <result>
43
+ <binding name='x'>
44
+ <uri>http://example.com/a</uri>
45
+ </binding>
46
+ </result>
47
+ </results>
48
+ </sparql>
49
+ ENDL
50
+
51
+ assert_equal RDF[:ex]::a, result[0]['x']
52
+ end
53
+
54
+ def test_should_parse_plain_literal_node
55
+ result = RDF::SparqlResult.new(<<-ENDL)
56
+ <?xml version='1.0' encoding='UTF-8'?>
57
+ <sparql xmlns='http://www.w3.org/2005/sparql-results#'>
58
+ <head>
59
+ <variable name='x'/>
60
+ </head>
61
+ <results>
62
+ <result>
63
+ <binding name='x'>
64
+ <literal>test</literal>
65
+ </binding>
66
+ </result>
67
+ </results>
68
+ </sparql>
69
+ ENDL
70
+
71
+ assert_equal RDF::PlainLiteralNode.new('test'), result[0]['x']
72
+
73
+ result = RDF::SparqlResult.new(<<-ENDL)
74
+ <?xml version='1.0' encoding='UTF-8'?>
75
+ <sparql xmlns='http://www.w3.org/2005/sparql-results#'>
76
+ <head>
77
+ <variable name='x'/>
78
+ </head>
79
+ <results>
80
+ <result>
81
+ <binding name='x'>
82
+ <literal xml:lang='en'>test</literal>
83
+ </binding>
84
+ </result>
85
+ </results>
86
+ </sparql>
87
+ ENDL
88
+
89
+ assert_equal RDF::PlainLiteralNode.new('test', 'en'), result[0]['x']
90
+ end
91
+
92
+ def test_should_parse_typed_literal_node
93
+ result = RDF::SparqlResult.new(<<-ENDL)
94
+ <?xml version='1.0' encoding='UTF-8'?>
95
+ <sparql xmlns='http://www.w3.org/2005/sparql-results#'>
96
+ <head>
97
+ <variable name='x'/>
98
+ </head>
99
+ <results>
100
+ <result>
101
+ <binding name='x'>
102
+ <literal datatype='http://example.com/a'>test</literal>
103
+ </binding>
104
+ </result>
105
+ </results>
106
+ </sparql>
107
+ ENDL
108
+
109
+ assert_equal RDF::TypedLiteralNode.new('test', 'http://example.com/a'), result[0]['x']
110
+ end
111
+
112
+ def test_should_validate_data
113
+ assert_raises(RDF::SparqlResult::InvalidDocument) {
114
+ RDF::SparqlResult.new('<test>')
115
+ }
116
+ end
117
+ end
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::StatementTest < Test::Unit::TestCase
4
+ def setup
5
+ RDF.unregister_all!
6
+ RDF.register(:ex => 'http://example.org/')
7
+ @ex = RDF[:ex]
8
+ end
9
+
10
+ def test_should_initialize_subject_predicate_and_object
11
+ stmt = RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj)
12
+ assert_equal @ex::sub, stmt.subject
13
+ assert_equal @ex::pred, stmt.predicate
14
+ assert_equal @ex::obj, stmt.object
15
+ end
16
+
17
+ def test_should_validate_subject
18
+ assert_raise(RDF::Statement::InvalidSubjectError) {
19
+ RDF::Statement.new(RDF::PlainLiteralNode.new('test'), @ex::pred, @ex::obj)
20
+ }
21
+ end
22
+
23
+ def test_should_validate_predicate
24
+ assert_raise(RDF::Statement::InvalidPredicateError) {
25
+ RDF::Statement.new(@ex::sub, RDF::PlainLiteralNode.new('test'), @ex::obj)
26
+ }
27
+ end
28
+
29
+ def test_should_validate_object
30
+ assert_raise(RDF::Statement::InvalidObjectError) {
31
+ RDF::Statement.new(@ex::sub, @ex::pred, 'test')
32
+ }
33
+ end
34
+
35
+ def test_should_be_eq
36
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj) ==
37
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj)
38
+ end
39
+
40
+ def test_should_not_be_eq
41
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj) != nil
42
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj) !=
43
+ RDF::Statement.new(@ex::sub2, @ex::pred, @ex::obj)
44
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj) !=
45
+ RDF::Statement.new(@ex::sub, @ex::pred2, @ex::obj)
46
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj) !=
47
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj2)
48
+ end
49
+
50
+ def test_should_be_eql
51
+ assert RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).eql?(
52
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj))
53
+ end
54
+
55
+ def test_should_not_be_eql
56
+ assert !RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).eql?(nil)
57
+ assert !RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).eql?(
58
+ RDF::Statement.new(@ex::sub2, @ex::pred, @ex::obj))
59
+ assert !RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).eql?(
60
+ RDF::Statement.new(@ex::sub, @ex::pred2, @ex::obj))
61
+ assert !RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).eql?(
62
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj2))
63
+ end
64
+
65
+ def test_should_have_same_hash
66
+ assert_equal RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).hash,
67
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).hash
68
+ end
69
+
70
+ def test_should_export_to_ntriples_format
71
+ assert_equal '<http://example.org/sub> <http://example.org/pred> <http://example.org/obj> .',
72
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).to_ntriples
73
+ assert_equal '<http://example.org/sub> <http://example.org/pred> <http://example.org/obj> .',
74
+ RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj).to_s
75
+ end
76
+
77
+ def test_should_be_statement
78
+ stmt = RDF::Statement.new(@ex::sub, @ex::pred, @ex::obj)
79
+ assert_same stmt, stmt.to_statement
80
+ assert_same stmt, [stmt].to_statement
81
+ assert_equal stmt, [@ex::sub, @ex::pred, @ex::obj].to_statement
82
+ end
83
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::TypedLiteralNodeTest < Test::Unit::TestCase
4
+ def test_should_initialize_lexical_form_and_datatype_uri
5
+ node = RDF::TypedLiteralNode.new('test', 'http://stadig.name/')
6
+ assert_equal 'test', node.lexical_form
7
+ assert_equal 'http://stadig.name/', node.datatype_uri
8
+ end
9
+
10
+ def test_should_initialize_datatype_uri
11
+ assert_equal 'http://stadig.name/',
12
+ RDF::TypedLiteralNode.new('test', RDF::URINode.new('http://stadig.name/')).datatype_uri
13
+ end
14
+
15
+ def test_should_normalize_lexical_form_and_datatype_uri
16
+ node = RDF::TypedLiteralNode.new([0x2126].pack('U'), [0x2126].pack('U'))
17
+ assert_equal [0x03a9].pack('U'), node.lexical_form
18
+ assert_equal [0x03a9].pack('U'), node.datatype_uri
19
+ end
20
+
21
+ def test_should_be_eq
22
+ assert RDF::TypedLiteralNode.new('test', 'http://stadig.name/') ==
23
+ RDF::TypedLiteralNode.new('test', 'http://stadig.name/')
24
+ end
25
+
26
+ def test_should_not_be_eq
27
+ assert RDF::TypedLiteralNode.new('test', 'http://stadig.name/') !=
28
+ nil
29
+ assert RDF::TypedLiteralNode.new('test', 'http://stadig.name/') !=
30
+ RDF::TypedLiteralNode.new('test2', 'http://stadig.name/')
31
+ assert RDF::TypedLiteralNode.new('test', 'http://stadig.name/') !=
32
+ RDF::TypedLiteralNode.new('test', 'http://example.com/')
33
+ end
34
+
35
+ def test_should_be_eql
36
+ assert RDF::TypedLiteralNode.new('test', 'http://stadig.name/').eql?(
37
+ RDF::TypedLiteralNode.new('test', 'http://stadig.name/'))
38
+ end
39
+
40
+ def test_should_not_be_eql
41
+ assert !RDF::TypedLiteralNode.new('test', 'http://stadig.name/').eql?(nil)
42
+ assert !RDF::TypedLiteralNode.new('test', 'http://stadig.name/').eql?(
43
+ RDF::TypedLiteralNode.new('test2', 'http://stadig.name/'))
44
+ assert !RDF::TypedLiteralNode.new('test', 'http://stadig.name/').eql?(
45
+ RDF::TypedLiteralNode.new('test', 'http://example.com/'))
46
+ end
47
+
48
+ def test_should_have_same_hash
49
+ assert_equal RDF::TypedLiteralNode.new('test', 'http://stadig.name/').hash,
50
+ RDF::TypedLiteralNode.new('test', 'http://stadig.name/').hash
51
+ end
52
+
53
+ def test_should_export_to_ntriples_format
54
+ assert_equal '"test"^^<http://stadig.name/>', RDF::TypedLiteralNode.new('test', 'http://stadig.name/').to_ntriples
55
+ assert_equal '"\u0008\U00010000\t\n\r\"\\\\"^^<\u0008\U00010000\t\n\r\"\\\\>',
56
+ RDF::TypedLiteralNode.new([0x8, 0x10000, 0x9, 0xa, 0xd, 0x22, 0x5c].pack('U*'),
57
+ [0x8, 0x10000, 0x9, 0xa, 0xd, 0x22, 0x5c].pack('U*')).to_ntriples
58
+ end
59
+
60
+ def test_should_be_node
61
+ node = RDF::TypedLiteralNode.new('test', 'http://stadig.name/')
62
+
63
+ assert node.typed_literal_node?
64
+ assert node.literal_node?
65
+ assert node.node?
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class RDF::URINodeTest < Test::Unit::TestCase
4
+ def test_should_initialize_uri
5
+ assert_equal 'http://stadig.name/', RDF::URINode.new('http://stadig.name/').uri
6
+ end
7
+
8
+ def test_should_normalize_uri
9
+ assert_equal [0x03a9].pack('U'), RDF::URINode.new([0x2126].pack('U')).uri
10
+ end
11
+
12
+ def test_should_export_to_ntriples_format
13
+ assert_equal '<http://stadig.name/>', RDF::URINode.new('http://stadig.name/').to_ntriples
14
+ assert_equal '<http://stadig.name/>', RDF::URINode.new('http://stadig.name/').to_s
15
+ assert_equal '<http://stadig.name/\u0008\U00010000\t\n\r\"\\\\>',
16
+ RDF::URINode.new('http://stadig.name/' + [0x8, 0x10000, 0x9, 0xa, 0xd, 0x22, 0x5c].pack('U*')).to_ntriples
17
+ end
18
+
19
+ def test_should_be_eq
20
+ node = RDF::URINode.new('http://stadig.name/')
21
+ assert node == RDF::URINode.new(node.uri)
22
+ end
23
+
24
+ def test_should_not_be_eq
25
+ node = RDF::URINode.new('http://stadig.name/')
26
+ assert node != nil
27
+ assert node != RDF::URINode.new(node.uri + 'test')
28
+ end
29
+
30
+ def test_should_be_eql
31
+ node = RDF::URINode.new('http://stadig.name/')
32
+ assert node.eql?(RDF::URINode.new(node.uri))
33
+ end
34
+
35
+ def test_should_not_be_eql
36
+ node = RDF::URINode.new('http://stadig.name/')
37
+ assert !node.eql?(nil)
38
+ assert !node.eql?(RDF::URINode.new(node.uri + 'test'))
39
+ end
40
+
41
+ def test_should_have_same_hash
42
+ node = RDF::URINode.new('http://stadig.name/')
43
+ assert node.hash == RDF::URINode.new(node.uri).hash
44
+ end
45
+
46
+ def test_should_be_node
47
+ node = RDF::URINode.new('http://stadig.name/')
48
+
49
+ assert node.uri_node?
50
+ assert node.resource?
51
+ assert node.node?
52
+ end
53
+ end
data/test/rdf_test.rb ADDED
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class RDFTest < Test::Unit::TestCase
4
+ def setup
5
+ RDF.unregister_all!
6
+ end
7
+
8
+ def test_should_register_defaults
9
+ assert_equal 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', RDF.prefix(:rdf)
10
+ assert_equal 'http://www.w3.org/2001/XMLSchema#', RDF.prefix(:xsd)
11
+ assert_equal 'http://www.w3.org/2000/01/rdf-schema#', RDF.prefix(:rdfs)
12
+ assert_equal 'http://www.w3.org/2002/07/owl#', RDF.prefix(:owl)
13
+ end
14
+
15
+ def test_should_not_unregister_defaults
16
+ RDF.unregister_all!
17
+ assert_equal 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', RDF.prefix(:rdf)
18
+ assert_equal 'http://www.w3.org/2001/XMLSchema#', RDF.prefix(:xsd)
19
+ assert_equal 'http://www.w3.org/2000/01/rdf-schema#', RDF.prefix(:rdfs)
20
+ assert_equal 'http://www.w3.org/2002/07/owl#', RDF.prefix(:owl)
21
+ end
22
+
23
+ def test_should_unregister
24
+ RDF.register(:ps => 'http://paul.stadig.name/',
25
+ :ex => 'http://example.com/')
26
+ RDF.unregister(:ps, :ex)
27
+ assert !RDF.registered?(:ps)
28
+ assert !RDF.registered?(:ex)
29
+ end
30
+
31
+ def test_should_unregister_all
32
+ RDF.register(:ps => 'http://paul.stadig.name/',
33
+ :ex => 'http://example.com/')
34
+ RDF.unregister_all!
35
+ assert !RDF.registered?(:ps)
36
+ assert !RDF.registered?(:ex)
37
+ end
38
+
39
+ def test_should_register
40
+ RDF.register(:ps => 'http://paul.stadig.name/',
41
+ 'ex' => 'http://example.com/')
42
+ assert RDF.registered?(:ps)
43
+ assert RDF.registered?(:ex)
44
+ end
45
+
46
+ def test_should_expand_uri
47
+ RDF.register(:ex => 'http://example.com/')
48
+ assert_equal 'http://example.com/test', RDF.expand_uri(:ex, 'test')
49
+ end
50
+
51
+ def test_should_expand_node
52
+ RDF.register(:ex => 'http://example.com/')
53
+ node = RDF::URINode.new('http://example.com/test')
54
+ assert_equal node, RDF.expand_node(:ex, 'test')
55
+ assert_equal node, RDF[:ex]::test
56
+ assert_equal node, RDF[:ex].test
57
+ assert_equal node, RDF[:ex]['test']
58
+ assert_equal node, RDF[:ex][:test]
59
+ assert_equal node, RDF['ex'][:test]
60
+ end
61
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rubyrdf'
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pjstadig-rubyrdf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Paul Stadig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-07-14 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A Resource Description Framework (RDF) library for Ruby.
17
+ email:
18
+ - paul@stadig.name
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - History.txt
25
+ - License.txt
26
+ - Manifest.txt
27
+ - PostInstall.txt
28
+ - README.txt
29
+ - TODO.txt
30
+ files:
31
+ - History.txt
32
+ - License.txt
33
+ - Manifest.txt
34
+ - PostInstall.txt
35
+ - README.txt
36
+ - Rakefile
37
+ - TODO.txt
38
+ - lib/rdf.rb
39
+ - lib/rdf/blank_node.rb
40
+ - lib/rdf/error.rb
41
+ - lib/rdf/node.rb
42
+ - lib/rdf/plain_literal_node.rb
43
+ - lib/rdf/sesame/base.rb
44
+ - lib/rdf/sparql_result.rb
45
+ - lib/rdf/statement.rb
46
+ - lib/rdf/typed_literal_node.rb
47
+ - lib/rdf/uri_node.rb
48
+ - lib/rdf/version.rb
49
+ - lib/rubyrdf.rb
50
+ - test/rdf/blank_node_test.rb
51
+ - test/rdf/plain_literal_node_test.rb
52
+ - test/rdf/sesame/base_test.rb
53
+ - test/rdf/sparql_result_test.rb
54
+ - test/rdf/statement_test.rb
55
+ - test/rdf/typed_literal_node_test.rb
56
+ - test/rdf/uri_node_test.rb
57
+ - test/rdf_test.rb
58
+ - test/test_helper.rb
59
+ has_rdoc: true
60
+ homepage: http://github.com/pjstadig/rubyrdf/wikis
61
+ post_install_message: |+
62
+
63
+ For more information on rubyrdf, see http://rubyrdf.rubyforge.org
64
+
65
+ NOTE: Change this information in PostInstall.txt
66
+ You can also delete it if you don't want it.
67
+
68
+
69
+ rdoc_options:
70
+ - --main
71
+ - README.txt
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ requirements: []
87
+
88
+ rubyforge_project: rubyrdf
89
+ rubygems_version: 1.2.0
90
+ signing_key:
91
+ specification_version: 2
92
+ summary: A Resource Description Framework (RDF) library for Ruby.
93
+ test_files:
94
+ - test/rdf/blank_node_test.rb
95
+ - test/rdf/statement_test.rb
96
+ - test/rdf/plain_literal_node_test.rb
97
+ - test/rdf/sparql_result_test.rb
98
+ - test/rdf/typed_literal_node_test.rb
99
+ - test/rdf/uri_node_test.rb
100
+ - test/rdf/sesame/base_test.rb
101
+ - test/rdf_test.rb