acts_as_rdf 0.1.4 → 0.1.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/VERSION +1 -1
- data/lib/acts_as_rdf.rb +69 -49
- data/test/test_to_rdf.rb +7 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/acts_as_rdf.rb
CHANGED
@@ -12,12 +12,9 @@ module ActsAsRdf
|
|
12
12
|
module ClassMethods
|
13
13
|
|
14
14
|
def acts_as_rdf(options = {})
|
15
|
-
configuration = {
|
16
|
-
'rdf' => RDF,
|
17
|
-
|
18
|
-
'xsd' => 'http://www.w3.org/2001/XMLSchema#',
|
19
|
-
'owl' => RDF::OWL
|
20
|
-
}
|
15
|
+
configuration = {
|
16
|
+
:prefixes => {'rdf' => RDF, 'rdfs' => RDF::RDFS, 'xsd' => 'http://www.w3.org/2001/XMLSchema#', 'owl' => RDF::OWL},
|
17
|
+
:ontology_name => 'ontology'
|
21
18
|
}
|
22
19
|
configuration.update(options) if options.is_a?(Hash)
|
23
20
|
|
@@ -32,6 +29,13 @@ module ActsAsRdf
|
|
32
29
|
'#{configuration[:prefixes]}'
|
33
30
|
end
|
34
31
|
|
32
|
+
def get_ontology_name
|
33
|
+
'#{configuration[:ontology_name]}'
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.to_rdfs(request = nil, format = :rdfxml)
|
37
|
+
new.to_rdfs(request, format)
|
38
|
+
end
|
35
39
|
EOV
|
36
40
|
end
|
37
41
|
end
|
@@ -39,77 +43,93 @@ module ActsAsRdf
|
|
39
43
|
# All the methods available to a record that has had <tt>acts_as_rdf</tt> specified.
|
40
44
|
module InstanceMethods
|
41
45
|
|
42
|
-
#
|
46
|
+
# format is for active_rdf library
|
43
47
|
def to_rdf(request = nil, format = :rdfxml)
|
44
|
-
|
45
|
-
return to_output(graph, request, format)
|
46
|
-
end
|
47
|
-
|
48
|
-
protected
|
49
|
-
|
50
|
-
def to_graph(request, graph = RDF::Graph.new)
|
48
|
+
base_uri = RDF::URI.new(get_base_uri(request))
|
51
49
|
|
52
|
-
|
53
|
-
self.
|
54
|
-
graph = self.to_graph(request, graph)
|
55
|
-
end
|
56
|
-
else
|
57
|
-
graph << [to_uri(self, request), RDF.type, to_uri(self.class, request)]
|
50
|
+
RDF::Writer.for(format).buffer(:base_uri => base_uri, :default_namespace => base_uri, :prefixes => get_prefixes()) do |writer|
|
51
|
+
writer << [to_uri(self, base_uri), RDF.type, to_ontology_uri(self, base_uri)]
|
58
52
|
|
59
53
|
self.attributes.each do |attr, value|
|
60
|
-
|
54
|
+
writer << [to_uri(self, base_uri), to_uri(attr, base_uri), RDF::Literal.new(value)]
|
61
55
|
if ('name'.eql?(attr)) then
|
62
|
-
|
56
|
+
writer << [to_uri(self, base_uri), RDF::RDFS.label, RDF::Literal.new(value)]
|
63
57
|
end
|
64
58
|
end
|
65
59
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
association_objects.each do |obj|
|
74
|
-
graph << [to_uri(self, request), to_uri(soc.class_name, request), to_uri(obj, request)]
|
75
|
-
end
|
76
|
-
else
|
77
|
-
graph << [to_uri(self, request), to_uri(soc.class_name, request), to_uri(association_objects, request)]
|
60
|
+
self.class.reflect_on_all_associations.each do |soc|
|
61
|
+
if self.respond_to? soc.name
|
62
|
+
association_objects = self.send soc.name
|
63
|
+
if association_objects != nil
|
64
|
+
if 'Array'.eql?(association_objects.class.name)
|
65
|
+
association_objects.each do |obj|
|
66
|
+
writer << [to_uri(self, base_uri), to_uri(soc.class_name, base_uri), to_uri(obj, base_uri)]
|
78
67
|
end
|
68
|
+
else
|
69
|
+
writer << [to_uri(self, base_uri), to_uri(soc.class_name, base_uri), to_uri(association_objects, base_uri)]
|
79
70
|
end
|
80
71
|
end
|
81
72
|
end
|
82
73
|
end
|
83
74
|
end
|
84
|
-
|
85
|
-
return graph
|
86
75
|
end
|
87
76
|
|
88
|
-
|
77
|
+
# this will return the rdfs schema for this model in owl.
|
78
|
+
def to_rdfs(request = nil, format = :rdfxml)
|
89
79
|
base_uri = RDF::URI.new(get_base_uri(request))
|
90
80
|
|
91
|
-
|
92
|
-
|
93
|
-
|
81
|
+
RDF::Writer.for(format).buffer(:base_uri => base_uri, :default_namespace => base_uri, :prefixes => get_prefixes()) do |writer|
|
82
|
+
writer << [to_ontology_uri(self, base_uri), RDF::RDFS.label, RDF::Literal.new(self.class.name)]
|
83
|
+
writer << [to_uri(self, base_uri), RDF.type, RDF::OWL['Class']]
|
84
|
+
|
85
|
+
self.attributes.each do |attr, value|
|
86
|
+
writer << [to_uri(attr, base_uri), RDF.type, RDF::OWL['DatatypeProperty']]
|
87
|
+
writer << [to_uri(attr, base_uri), RDF::RDFS.label, RDF::Literal.new(attr)]
|
88
|
+
writer << [to_uri(attr, base_uri), RDF::RDFS.domain, to_ontology_uri(attr, base_uri)]
|
89
|
+
obj = RDF::Literal.new(value)
|
90
|
+
if obj.has_datatype? then
|
91
|
+
writer << [to_uri(attr, base_uri), RDF::RDFS.range, RDF::Literal.new(value).datatype]
|
92
|
+
end
|
94
93
|
end
|
95
|
-
|
94
|
+
socs = self.class.reflect_on_all_associations
|
95
|
+
socs.each do |soc|
|
96
|
+
writer << [to_uri(soc.class_name, base_uri), RDF.type, RDF::OWL['ObjectProperty']]
|
97
|
+
writer << [to_uri(soc.class_name, base_uri), RDF::RDFS.label, RDF::Literal.new(soc.class_name)]
|
98
|
+
writer << [to_uri(soc.class_name, base_uri), RDF::RDFS.domain, to_ontology_uri(soc, base_uri)]
|
99
|
+
|
100
|
+
# ranges
|
101
|
+
if self.respond_to? soc.name
|
102
|
+
association_objects = self.send soc.name # needs to handle plural case
|
103
|
+
if !association_objects.nil?
|
104
|
+
association_objects = association_objects[0]
|
105
|
+
end
|
106
|
+
if !association_objects.nil?
|
107
|
+
writer << [to_ontology_uri(soc.class_name, base_uri), RDF::RDFS.range, to_ontology_uri(association_objects, base_uri)]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
96
112
|
end
|
97
113
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
114
|
+
protected
|
115
|
+
|
116
|
+
def to_uri(thing, base_uri)
|
117
|
+
if ('String'.eql?(thing.class.name) || 'Class'.eql?(thing.class.name))
|
118
|
+
RDF::URI.new("#{base_uri}/#{thing.to_s}")
|
119
|
+
else
|
120
|
+
RDF::URI.new("#{base_uri}/#{thing.class.name.tableize}/#{thing.id}")
|
104
121
|
end
|
122
|
+
end
|
105
123
|
|
106
|
-
|
124
|
+
def to_ontology_uri(thing, base_uri)
|
125
|
+
RDF::URI.new("#{base_uri}/#{get_ontology_name()}/##{thing.class.name}")
|
107
126
|
end
|
108
127
|
|
109
128
|
def get_base_uri(request)
|
110
|
-
request.nil? ? "http://
|
129
|
+
request.nil? ? "http://localhost" : "#{request.protocol}://#{request.host}:#{request.port}"
|
111
130
|
end
|
112
131
|
end
|
132
|
+
|
113
133
|
end
|
114
134
|
|
115
135
|
ActiveRecord::Base.class_eval { include ActsAsRdf }
|
data/test/test_to_rdf.rb
CHANGED
@@ -12,6 +12,13 @@ class RdfTest < Test::Unit::TestCase
|
|
12
12
|
teardown_db
|
13
13
|
end
|
14
14
|
|
15
|
+
def test_to_rdfs
|
16
|
+
puts '***** Mixin'
|
17
|
+
puts Mixin.to_rdfs
|
18
|
+
puts '***** MixinRelation'
|
19
|
+
puts MixinRelation.to_rdfs
|
20
|
+
end
|
21
|
+
|
15
22
|
def test_to_rdf
|
16
23
|
formats = [:rdfxml, :turtle, :ntriples]
|
17
24
|
formats.each do |format|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew Sodt
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-04 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|