tripod 0.2 → 0.2.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/lib/tripod/finders.rb +79 -42
- data/lib/tripod/version.rb +1 -1
- data/tripod.gemspec +1 -1
- metadata +22 -20
data/lib/tripod/finders.rb
CHANGED
@@ -4,6 +4,81 @@
|
|
4
4
|
module Tripod::Finders
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
# FOLLOWING METHODS NOT PART OF THE PUBLIC API:
|
8
|
+
## private methods
|
9
|
+
def self.included(base)
|
10
|
+
|
11
|
+
class << base
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def select_uris_and_graphs(criteria, opts)
|
16
|
+
select_results = Tripod::SparqlClient::Query.select(criteria)
|
17
|
+
|
18
|
+
# data will contain a map of uris against graphs.
|
19
|
+
data = {}
|
20
|
+
|
21
|
+
select_results.each do |r|
|
22
|
+
uri_variable = opts[:uri_variable] || 'uri'
|
23
|
+
graph_variable = opts[:graph_variable] || 'graph'
|
24
|
+
data[ r[uri_variable]["value"] ] = r[graph_variable]["value"]
|
25
|
+
end
|
26
|
+
|
27
|
+
data
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_and_hydrate_resources(uris_and_graphs, opts={})
|
31
|
+
|
32
|
+
triples_repository = create_resources(uris_and_graphs)
|
33
|
+
resources = hydrate_resources(uris_and_graphs, triples_repository, opts)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_resources(uris_and_graphs)
|
38
|
+
|
39
|
+
triples_repository = RDF::Repository.new()
|
40
|
+
|
41
|
+
if uris_and_graphs.keys.length > 0
|
42
|
+
uris_sparql_str = uris_and_graphs.keys.map{ |u| "<#{u}>" }.join(" ")
|
43
|
+
|
44
|
+
# Do a big describe statement, and read the results into an in-memory repo
|
45
|
+
triples = Tripod::SparqlClient::Query::describe("DESCRIBE #{uris_sparql_str}")
|
46
|
+
RDF::Reader.for(:ntriples).new(triples) do |reader|
|
47
|
+
reader.each_statement do |statement|
|
48
|
+
triples_repository << statement
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
triples_repository
|
54
|
+
end
|
55
|
+
|
56
|
+
def hydrate_resources(uris_and_graphs, triples_repository, opts={})
|
57
|
+
|
58
|
+
resources =[]
|
59
|
+
|
60
|
+
uris_and_graphs.each_pair do |u,g|
|
61
|
+
r = self.new(u,g)
|
62
|
+
data_graph = RDF::Graph.new
|
63
|
+
triples_repository.query( [RDF::URI.new(u), :predicate, :object] ) do |statement|
|
64
|
+
data_graph << statement
|
65
|
+
end
|
66
|
+
|
67
|
+
hydrate_opts = {:graph => data_graph}
|
68
|
+
hydrate_opts[:only] = opts[:only_hydrate]
|
69
|
+
|
70
|
+
r.hydrate!(:graph => data_graph)
|
71
|
+
r.new_record = false
|
72
|
+
resources << r
|
73
|
+
end
|
74
|
+
|
75
|
+
resources
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
7
82
|
module ClassMethods
|
8
83
|
|
9
84
|
# Find a +Resource+ by its uri (and, optionally, by its graph if there are more than one).
|
@@ -59,51 +134,13 @@ module Tripod::Finders
|
|
59
134
|
#
|
60
135
|
# @option options [ String ] uri_variable The name of the uri variable in thh query, if not 'uri'
|
61
136
|
# @option options [ String ] graph_variable The name of the uri variable in thh query, if not 'graph'
|
137
|
+
# @option options [ String, RDF:URI, Array] only_hydrate a single predicate or list of predicates to hydrate the returned objects with. If ommited, does a full hydrate
|
62
138
|
#
|
63
139
|
# @return [ Array ] An array of hydrated resources of this class's type.
|
64
140
|
def where(criteria, opts={})
|
65
|
-
|
66
|
-
|
67
|
-
select_results = Tripod::SparqlClient::Query.select(criteria)
|
68
|
-
|
69
|
-
# data will contain a map of uris against graphs.
|
70
|
-
data = {}
|
71
|
-
|
72
|
-
select_results.each do |r|
|
73
|
-
uri_variable = opts[:uri_variable] || 'uri'
|
74
|
-
graph_variable = opts[:graph_variable] || 'graph'
|
75
|
-
data[ r[uri_variable]["value"] ] = r[graph_variable]["value"]
|
76
|
-
end
|
77
|
-
|
78
|
-
resources = []
|
79
|
-
|
80
|
-
if data.keys.length > 0
|
81
|
-
|
82
|
-
uris_sparql_str = data.keys.map{ |u| "<#{u}>" }.join(" ")
|
83
|
-
|
84
|
-
# 2. Do a big describe statement, and read the results into an in-memory repo
|
85
|
-
triples = Tripod::SparqlClient::Query::describe("DESCRIBE #{uris_sparql_str}")
|
86
|
-
triples_repository = RDF::Repository.new()
|
87
|
-
RDF::Reader.for(:ntriples).new(triples) do |reader|
|
88
|
-
reader.each_statement do |statement|
|
89
|
-
triples_repository << statement
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# 3. for each of our uris, make a resource, with a graph of triples for that uri from the in-mem repo
|
94
|
-
data.each_pair do |u,g|
|
95
|
-
r = self.new(u,g)
|
96
|
-
data_graph = RDF::Graph.new
|
97
|
-
triples_repository.query( [RDF::URI.new(u), :predicate, :object] ) do |statement|
|
98
|
-
data_graph << statement
|
99
|
-
end
|
100
|
-
r.hydrate!(:graph => data_graph)
|
101
|
-
r.new_record = false
|
102
|
-
resources << r
|
103
|
-
end
|
104
|
-
end
|
105
|
-
resources
|
106
|
-
|
141
|
+
uris_and_graphs = select_uris_and_graphs(criteria, opts)
|
142
|
+
create_and_hydrate_resources(uris_and_graphs, opts)
|
107
143
|
end
|
144
|
+
|
108
145
|
end
|
109
146
|
end
|
data/lib/tripod/version.rb
CHANGED
data/tripod.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require File.expand_path('../lib/tripod/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["
|
5
|
+
gem.authors = ["Ric Roberts", "Bill Roberts", "Asa Calow"]
|
6
6
|
gem.email = ["ric@swirrl.com"]
|
7
7
|
gem.description = %q{RDF ruby ORM}
|
8
8
|
gem.summary = %q{Active Model style RDF ORM}
|
metadata
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tripod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
-
|
8
|
+
- Ric Roberts
|
9
|
+
- Bill Roberts
|
10
|
+
- Asa Calow
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
@@ -13,7 +15,7 @@ date: 2013-02-05 00:00:00.000000000 Z
|
|
13
15
|
dependencies:
|
14
16
|
- !ruby/object:Gem::Dependency
|
15
17
|
name: rest-client
|
16
|
-
requirement: &
|
18
|
+
requirement: &70338965901200 !ruby/object:Gem::Requirement
|
17
19
|
none: false
|
18
20
|
requirements:
|
19
21
|
- - ! '>='
|
@@ -21,10 +23,10 @@ dependencies:
|
|
21
23
|
version: '0'
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
|
-
version_requirements: *
|
26
|
+
version_requirements: *70338965901200
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: activemodel
|
27
|
-
requirement: &
|
29
|
+
requirement: &70338965900320 !ruby/object:Gem::Requirement
|
28
30
|
none: false
|
29
31
|
requirements:
|
30
32
|
- - ~>
|
@@ -32,10 +34,10 @@ dependencies:
|
|
32
34
|
version: '3.1'
|
33
35
|
type: :runtime
|
34
36
|
prerelease: false
|
35
|
-
version_requirements: *
|
37
|
+
version_requirements: *70338965900320
|
36
38
|
- !ruby/object:Gem::Dependency
|
37
39
|
name: equivalent-xml
|
38
|
-
requirement: &
|
40
|
+
requirement: &70338965915940 !ruby/object:Gem::Requirement
|
39
41
|
none: false
|
40
42
|
requirements:
|
41
43
|
- - ! '>='
|
@@ -43,10 +45,10 @@ dependencies:
|
|
43
45
|
version: '0'
|
44
46
|
type: :runtime
|
45
47
|
prerelease: false
|
46
|
-
version_requirements: *
|
48
|
+
version_requirements: *70338965915940
|
47
49
|
- !ruby/object:Gem::Dependency
|
48
50
|
name: rdf
|
49
|
-
requirement: &
|
51
|
+
requirement: &70338965914940 !ruby/object:Gem::Requirement
|
50
52
|
none: false
|
51
53
|
requirements:
|
52
54
|
- - ~>
|
@@ -54,10 +56,10 @@ dependencies:
|
|
54
56
|
version: '1.0'
|
55
57
|
type: :runtime
|
56
58
|
prerelease: false
|
57
|
-
version_requirements: *
|
59
|
+
version_requirements: *70338965914940
|
58
60
|
- !ruby/object:Gem::Dependency
|
59
61
|
name: rdf-rdfxml
|
60
|
-
requirement: &
|
62
|
+
requirement: &70338965913560 !ruby/object:Gem::Requirement
|
61
63
|
none: false
|
62
64
|
requirements:
|
63
65
|
- - ! '>='
|
@@ -65,10 +67,10 @@ dependencies:
|
|
65
67
|
version: '0'
|
66
68
|
type: :runtime
|
67
69
|
prerelease: false
|
68
|
-
version_requirements: *
|
70
|
+
version_requirements: *70338965913560
|
69
71
|
- !ruby/object:Gem::Dependency
|
70
72
|
name: rdf-n3
|
71
|
-
requirement: &
|
73
|
+
requirement: &70338965912940 !ruby/object:Gem::Requirement
|
72
74
|
none: false
|
73
75
|
requirements:
|
74
76
|
- - ! '>='
|
@@ -76,10 +78,10 @@ dependencies:
|
|
76
78
|
version: '0'
|
77
79
|
type: :runtime
|
78
80
|
prerelease: false
|
79
|
-
version_requirements: *
|
81
|
+
version_requirements: *70338965912940
|
80
82
|
- !ruby/object:Gem::Dependency
|
81
83
|
name: rdf-json
|
82
|
-
requirement: &
|
84
|
+
requirement: &70338965912360 !ruby/object:Gem::Requirement
|
83
85
|
none: false
|
84
86
|
requirements:
|
85
87
|
- - ! '>='
|
@@ -87,10 +89,10 @@ dependencies:
|
|
87
89
|
version: '0'
|
88
90
|
type: :runtime
|
89
91
|
prerelease: false
|
90
|
-
version_requirements: *
|
92
|
+
version_requirements: *70338965912360
|
91
93
|
- !ruby/object:Gem::Dependency
|
92
94
|
name: json-ld
|
93
|
-
requirement: &
|
95
|
+
requirement: &70338965911540 !ruby/object:Gem::Requirement
|
94
96
|
none: false
|
95
97
|
requirements:
|
96
98
|
- - ! '>='
|
@@ -98,10 +100,10 @@ dependencies:
|
|
98
100
|
version: '0'
|
99
101
|
type: :runtime
|
100
102
|
prerelease: false
|
101
|
-
version_requirements: *
|
103
|
+
version_requirements: *70338965911540
|
102
104
|
- !ruby/object:Gem::Dependency
|
103
105
|
name: guid
|
104
|
-
requirement: &
|
106
|
+
requirement: &70338965910800 !ruby/object:Gem::Requirement
|
105
107
|
none: false
|
106
108
|
requirements:
|
107
109
|
- - ! '>='
|
@@ -109,7 +111,7 @@ dependencies:
|
|
109
111
|
version: '0'
|
110
112
|
type: :runtime
|
111
113
|
prerelease: false
|
112
|
-
version_requirements: *
|
114
|
+
version_requirements: *70338965910800
|
113
115
|
description: RDF ruby ORM
|
114
116
|
email:
|
115
117
|
- ric@swirrl.com
|