redlander 0.3.3 → 0.3.5
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/README.rdoc +2 -1
- data/lib/redlander/node.rb +33 -8
- data/lib/redlander/statement.rb +9 -1
- data/lib/redlander/uri.rb +13 -2
- data/lib/redlander/version.rb +1 -1
- data/lib/redlander.rb +4 -0
- data/spec/redlander/node_spec.rb +7 -10
- metadata +57 -78
data/README.rdoc
CHANGED
@@ -12,11 +12,12 @@ Note, that you will have to install Redlander (librdf) for Redlander to work.
|
|
12
12
|
|
13
13
|
= Usage
|
14
14
|
|
15
|
-
To start doing anything with
|
15
|
+
To start doing anything useful with Redlander, you need to initialize a model first:
|
16
16
|
|
17
17
|
$ m = Redlander::Model.new
|
18
18
|
|
19
19
|
This creates a model where all RDF statements are stored in the memory. Depending on the selected storage you may need to supply extra parameters like :user or :password. Look-up the options for Storage.initialize_storage method for the list of storage options.
|
20
|
+
Naturally, you don't need to create a model if you just want to play around with independent statements, nodes and the like.
|
20
21
|
|
21
22
|
Now that you have created a model, you can access its RDF statements:
|
22
23
|
|
data/lib/redlander/node.rb
CHANGED
@@ -13,10 +13,10 @@ module Redlander
|
|
13
13
|
# - any other Ruby object, which can be coerced into a literal.
|
14
14
|
# If nothing else, a RedlandError is thrown.
|
15
15
|
#
|
16
|
-
# Note
|
16
|
+
# Note that you cannot create a resource node from an URI string,
|
17
17
|
# it must be an instance of URI. Otherwise it is treated as a string literal.
|
18
18
|
def initialize(arg = nil, role = :subject)
|
19
|
-
bound = false
|
19
|
+
@bound = false
|
20
20
|
@rdf_node = case arg
|
21
21
|
when NilClass
|
22
22
|
Redland.librdf_new_node_from_blank_identifier(Redlander.rdf_world, nil)
|
@@ -25,14 +25,18 @@ module Redlander
|
|
25
25
|
when Node
|
26
26
|
Redland.librdf_new_node_from_node(arg.rdf_node)
|
27
27
|
when Statement
|
28
|
-
|
28
|
+
# TODO: Bound nodes should better be produced
|
29
|
+
# using an explicit "factory" like Node.from_statement
|
30
|
+
# to keep the clutter in the constructor at minimum.
|
31
|
+
# (Esp. handling the "bound" stuff)
|
32
|
+
@bound = true
|
29
33
|
case role
|
30
34
|
when :subject
|
31
|
-
Redland.librdf_statement_get_subject(arg.rdf_statement)
|
35
|
+
copy_rdf_node_on_initialize(Redland.librdf_statement_get_subject(arg.rdf_statement))
|
32
36
|
when :object
|
33
|
-
Redland.librdf_statement_get_object(arg.rdf_statement)
|
37
|
+
copy_rdf_node_on_initialize(Redland.librdf_statement_get_object(arg.rdf_statement))
|
34
38
|
when :predicate
|
35
|
-
Redland.librdf_statement_get_predicate(arg.rdf_statement)
|
39
|
+
copy_rdf_node_on_initialize(Redland.librdf_statement_get_predicate(arg.rdf_statement))
|
36
40
|
else
|
37
41
|
raise RedlandError.new("Invalid role specified")
|
38
42
|
end
|
@@ -42,14 +46,20 @@ module Redlander
|
|
42
46
|
Redland.librdf_new_node_from_typed_literal(Redlander.rdf_world, value, nil, datatype.rdf_uri)
|
43
47
|
end
|
44
48
|
if @rdf_node.null?
|
45
|
-
raise RedlandError.new("Failed to create a new node") unless bound
|
49
|
+
raise RedlandError.new("Failed to create a new node") unless @bound
|
46
50
|
else
|
47
51
|
ObjectSpace.define_finalizer(self, proc { Redland.librdf_free_node(@rdf_node) })
|
48
52
|
# bound nodes cannot be added to (other) statements
|
49
|
-
freeze if bound
|
53
|
+
freeze if @bound
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
57
|
+
# Bound nodes are those belonging to a statement
|
58
|
+
# (bound nodes cannot be modified or added to other statements).
|
59
|
+
def bound?
|
60
|
+
@bound
|
61
|
+
end
|
62
|
+
|
53
63
|
def resource?
|
54
64
|
Redland.librdf_node_is_resource(@rdf_node) != 0
|
55
65
|
end
|
@@ -93,5 +103,20 @@ module Redlander
|
|
93
103
|
XmlSchema.instantiate(to_s)
|
94
104
|
end
|
95
105
|
end
|
106
|
+
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def copy_rdf_node_on_initialize(n)
|
111
|
+
if n.null?
|
112
|
+
if bound?
|
113
|
+
n
|
114
|
+
else
|
115
|
+
raise RedlandError.new("Failed to create a new node")
|
116
|
+
end
|
117
|
+
else
|
118
|
+
Redland.librdf_new_node_from_node(n)
|
119
|
+
end
|
120
|
+
end
|
96
121
|
end
|
97
122
|
end
|
data/lib/redlander/statement.rb
CHANGED
@@ -15,7 +15,7 @@ module Redlander
|
|
15
15
|
@rdf_statement = case source
|
16
16
|
when Stream
|
17
17
|
# Pull a (current) statement from the stream
|
18
|
-
Redland.librdf_stream_get_object(source.rdf_stream)
|
18
|
+
copy_rdf_statement_on_initialize(Redland.librdf_stream_get_object(source.rdf_stream))
|
19
19
|
when Hash
|
20
20
|
# Create a new statement from nodes
|
21
21
|
s = source[:subject] && Node.new(source[:subject]).rdf_node
|
@@ -105,5 +105,13 @@ module Redlander
|
|
105
105
|
yield
|
106
106
|
end
|
107
107
|
end
|
108
|
+
|
109
|
+
def copy_rdf_statement_on_initialize(s)
|
110
|
+
if s.null?
|
111
|
+
raise RedlandError.new("Failed to create a new statement")
|
112
|
+
else
|
113
|
+
Redland.librdf_new_statement_from_statement(s)
|
114
|
+
end
|
115
|
+
end
|
108
116
|
end
|
109
117
|
end
|
data/lib/redlander/uri.rb
CHANGED
@@ -8,9 +8,9 @@ module Redlander
|
|
8
8
|
Redland.librdf_new_uri(Redlander.rdf_world, source.to_s)
|
9
9
|
when Node
|
10
10
|
if source.resource?
|
11
|
-
Redland.librdf_node_get_uri(source.rdf_node)
|
11
|
+
copy_rdf_uri_on_initialize(Redland.librdf_node_get_uri(source.rdf_node))
|
12
12
|
elsif source.literal?
|
13
|
-
Redland.librdf_node_get_literal_value_datatype_uri(source.rdf_node)
|
13
|
+
copy_rdf_uri_on_initialize(Redland.librdf_node_get_literal_value_datatype_uri(source.rdf_node))
|
14
14
|
else
|
15
15
|
raise NotImplementedError.new
|
16
16
|
end
|
@@ -25,5 +25,16 @@ module Redlander
|
|
25
25
|
def to_s
|
26
26
|
Redland.librdf_uri_to_string(@rdf_uri)
|
27
27
|
end
|
28
|
+
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def copy_rdf_uri_on_initialize(u)
|
33
|
+
if u.null?
|
34
|
+
raise RedlandError.new("Failed to create URI")
|
35
|
+
else
|
36
|
+
Redland.librdf_new_uri_from_uri(u)
|
37
|
+
end
|
38
|
+
end
|
28
39
|
end
|
29
40
|
end
|
data/lib/redlander/version.rb
CHANGED
data/lib/redlander.rb
CHANGED
@@ -41,6 +41,10 @@ module Redlander
|
|
41
41
|
# 1) Convert boolean values into 'yes/no' values
|
42
42
|
# 2) Change underscores in key names into dashes ('dhar_ma' => 'dhar-ma')
|
43
43
|
# 3) Join all options as "key='value'" pairs in a comma-separated string
|
44
|
+
#
|
45
|
+
# E.g.:
|
46
|
+
# to_rdf_options {:key => true, "key_board" => 3}
|
47
|
+
# # => "key='yes',key-board='3'"
|
44
48
|
def to_rdf_options(options = {})
|
45
49
|
options.inject([]){|opts, option_pair|
|
46
50
|
key = option_pair[0].to_s.gsub(/_/, '-')
|
data/spec/redlander/node_spec.rb
CHANGED
@@ -4,12 +4,14 @@ require 'date'
|
|
4
4
|
|
5
5
|
describe Node do
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
describe "blank" do
|
8
|
+
subject { Node.new }
|
9
|
+
|
10
|
+
it { should be_blank }
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
it "should have a blank identifier for a blank node" do
|
13
|
+
subject.value.should match(/^_:\w+$/)
|
14
|
+
end
|
13
15
|
end
|
14
16
|
|
15
17
|
it "should create a resource node" do
|
@@ -72,11 +74,6 @@ describe Node do
|
|
72
74
|
node.value.xmlschema.should eql(t.xmlschema)
|
73
75
|
end
|
74
76
|
|
75
|
-
it "should have a blank identifier for a blank node" do
|
76
|
-
node = Node.new
|
77
|
-
node.value.should match(/^_:\w+$/)
|
78
|
-
end
|
79
|
-
|
80
77
|
it "should have an instance of URI for a resource node" do
|
81
78
|
resource_uri = URI.parse('http://example.com/nodes#node_1')
|
82
79
|
Node.new(resource_uri).value.should be_an_instance_of(URI::HTTP)
|
metadata
CHANGED
@@ -1,139 +1,118 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: redlander
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 3
|
10
|
-
version: 0.3.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Slava Kravchenko
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
12
|
+
date: 2012-06-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
23
15
|
name: xml_schema
|
24
|
-
|
16
|
+
requirement: &9413040 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
18
|
+
requirements:
|
27
19
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 856480538658449761
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 0
|
33
|
-
- 1
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 0.0.1
|
35
|
-
requirement: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
22
|
type: :runtime
|
38
23
|
prerelease: false
|
24
|
+
version_requirements: *9413040
|
25
|
+
- !ruby/object:Gem::Dependency
|
39
26
|
name: ffi
|
40
|
-
|
27
|
+
requirement: &9412480 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
29
|
+
requirements:
|
43
30
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
- 1
|
48
|
-
- 0
|
49
|
-
version: "1.0"
|
50
|
-
requirement: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
type: :development
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.0'
|
33
|
+
type: :runtime
|
53
34
|
prerelease: false
|
35
|
+
version_requirements: *9412480
|
36
|
+
- !ruby/object:Gem::Dependency
|
54
37
|
name: rspec
|
55
|
-
|
38
|
+
requirement: &9411960 !ruby/object:Gem::Requirement
|
56
39
|
none: false
|
57
|
-
requirements:
|
40
|
+
requirements:
|
58
41
|
- - ~>
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *9411960
|
47
|
+
description: ! ' Advanced Redland bindings.
|
48
|
+
|
49
|
+
'
|
66
50
|
email: slava.kravchenko@gmail.com
|
67
51
|
executables: []
|
68
|
-
|
69
52
|
extensions: []
|
70
|
-
|
71
|
-
extra_rdoc_files:
|
53
|
+
extra_rdoc_files:
|
72
54
|
- README.rdoc
|
73
|
-
files:
|
55
|
+
files:
|
74
56
|
- lib/redlander/error_container.rb
|
75
57
|
- lib/redlander/model.rb
|
76
58
|
- lib/redlander/model_proxy.rb
|
77
|
-
- lib/redlander/node.rb
|
78
59
|
- lib/redlander/parser.rb
|
79
60
|
- lib/redlander/parser_proxy.rb
|
80
61
|
- lib/redlander/serializer.rb
|
81
|
-
- lib/redlander/statement.rb
|
82
62
|
- lib/redlander/storage.rb
|
83
63
|
- lib/redlander/stream.rb
|
84
64
|
- lib/redlander/stream_enumerator.rb
|
85
|
-
- lib/redlander/uri.rb
|
86
65
|
- lib/redlander/version.rb
|
87
|
-
-
|
88
|
-
-
|
66
|
+
- lib/redlander/uri.rb
|
67
|
+
- lib/redlander/node.rb
|
68
|
+
- lib/redlander/statement.rb
|
89
69
|
- spec/integration/memory_leak_spec.rb
|
90
70
|
- spec/redlander/model_spec.rb
|
91
|
-
- spec/redlander/node_spec.rb
|
92
71
|
- spec/redlander/parser_spec.rb
|
93
72
|
- spec/redlander/serializer_spec.rb
|
94
73
|
- spec/redlander/statement_spec.rb
|
74
|
+
- spec/redlander/node_spec.rb
|
75
|
+
- spec/spec.opts
|
76
|
+
- spec/spec_helper.rb
|
95
77
|
- Rakefile
|
96
78
|
- lib/redlander.rb
|
97
79
|
- README.rdoc
|
98
80
|
homepage: https://github.com/cordawyn/redlander
|
99
81
|
licenses: []
|
100
|
-
|
101
82
|
post_install_message:
|
102
83
|
rdoc_options: []
|
103
|
-
|
104
|
-
require_paths:
|
84
|
+
require_paths:
|
105
85
|
- lib
|
106
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
87
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
|
112
|
-
segments:
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
segments:
|
113
93
|
- 0
|
114
|
-
|
115
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
hash: 2648553403970259996
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
96
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
121
|
-
segments:
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
segments:
|
122
102
|
- 0
|
123
|
-
|
103
|
+
hash: 2648553403970259996
|
124
104
|
requirements: []
|
125
|
-
|
126
105
|
rubyforge_project:
|
127
|
-
rubygems_version: 1.8.
|
106
|
+
rubygems_version: 1.8.15
|
128
107
|
signing_key:
|
129
108
|
specification_version: 3
|
130
109
|
summary: Advanced Redland bindings.
|
131
|
-
test_files:
|
132
|
-
- spec/spec.opts
|
133
|
-
- spec/spec_helper.rb
|
110
|
+
test_files:
|
134
111
|
- spec/integration/memory_leak_spec.rb
|
135
112
|
- spec/redlander/model_spec.rb
|
136
|
-
- spec/redlander/node_spec.rb
|
137
113
|
- spec/redlander/parser_spec.rb
|
138
114
|
- spec/redlander/serializer_spec.rb
|
139
115
|
- spec/redlander/statement_spec.rb
|
116
|
+
- spec/redlander/node_spec.rb
|
117
|
+
- spec/spec.opts
|
118
|
+
- spec/spec_helper.rb
|