pomegranate 0.9
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.markdown +77 -0
- data/Rakefile +22 -0
- data/coverage/index.html +279 -0
- data/coverage/lib-pomegranate-rdfs_plus_rulebook_rb.html +951 -0
- data/coverage/lib-pomegranate_rb.html +639 -0
- data/lib/pomegranate.rb +29 -0
- data/lib/pomegranate/rdfs_plus_rulebook.rb +327 -0
- data/lib/pomegranate/rdfs_rulebook.rb +188 -0
- data/pomegranate.gemspec +16 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/unit/owl_equivalent_class_spec.rb +42 -0
- data/spec/unit/owl_equivalent_property_spec.rb +45 -0
- data/spec/unit/owl_functional_property_spec.rb +42 -0
- data/spec/unit/owl_inverse_functional_property_spec.rb +41 -0
- data/spec/unit/owl_inverse_of_spec.rb +45 -0
- data/spec/unit/owl_same_as_spec.rb +51 -0
- data/spec/unit/owl_symmetric_property_spec.rb +42 -0
- data/spec/unit/owl_transitive_property_spec.rb +47 -0
- data/spec/unit/rdfs_domain_spec.rb +43 -0
- data/spec/unit/rdfs_range_spec.rb +45 -0
- data/spec/unit/rdfs_subclass_of_spec.rb +45 -0
- data/spec/unit/rdfs_subproperty_of_spec.rb +46 -0
- metadata +85 -0
data/README.markdown
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
Pomegranate Release 0.9 (December 30th 2008)
|
2
|
+
===================================
|
3
|
+
|
4
|
+
**Git**: [http://github.com/pius/pomegranate](http://github.com/pius/pomegranate)
|
5
|
+
**Author**: Pius Uzamere, [The Uyiosa Corporation](http://www.uyiosa.com)
|
6
|
+
|
7
|
+
**Copyright**: Pius Uzamere © 2008
|
8
|
+
**License**: The Lesser GNU Public License
|
9
|
+
|
10
|
+
|
11
|
+
SYNOPSIS
|
12
|
+
--------
|
13
|
+
|
14
|
+
Pomegranate is a Ruby library for inferencing over a corpus of triples with RDFS and OWL properties. Implements the [RDF Schema Language (RDFs)](http://www.w3.org/TR/rdf-schema/) properties as a set of production rules. The rules are executed by [Ruleby](http://ruleby.org), a forward-chaining Ruby inferencing engine that implements the Rete algorithm.
|
15
|
+
|
16
|
+
|
17
|
+
FEATURE LIST
|
18
|
+
------------
|
19
|
+
|
20
|
+
1. **Pomegranate can inference over basic RDFS**: When finished, this library will have a full test suite and can serve as a maintainable reference implementation of an RDFS inferencer in Ruby. In particular, the following statements are supported:
|
21
|
+
|
22
|
+
* rdfs:subClassOf
|
23
|
+
* rdfs:subPropertyOf
|
24
|
+
* rdfs:domain
|
25
|
+
* rdfs:range
|
26
|
+
|
27
|
+
|
28
|
+
2. **Pomegranate can inference over RDFS-Plus (RDFS plus a small subset of OWL)**: RDFS-Plus, as defined in "Semantic Web for the Working Ontologist" is RDFS plus a small subset of OWL, commonly used in the field. In particular, the following statements are supported:
|
29
|
+
|
30
|
+
* rdfs:subClassOf
|
31
|
+
* rdfs:subPropertyOf
|
32
|
+
* rdfs:domain
|
33
|
+
* rdfs:range
|
34
|
+
* owl:inverseOf
|
35
|
+
* owl:SymmetricProperty
|
36
|
+
* owl:TransitiveProperty
|
37
|
+
* owl:equivalentClass
|
38
|
+
* owl:equivalentProperty
|
39
|
+
* owl:sameAs
|
40
|
+
* owl:FunctionalProperty
|
41
|
+
* owl:InverseFunctionalProperty
|
42
|
+
|
43
|
+
|
44
|
+
USAGE
|
45
|
+
-----
|
46
|
+
|
47
|
+
1. **Make Sure You've Got the Dependencies installed**
|
48
|
+
|
49
|
+
Pomegranate depends on Ruleby (http://ruleby.org).
|
50
|
+
|
51
|
+
> sudo gem install ruleby
|
52
|
+
|
53
|
+
2. **Clone the Repository and Install the Gem from Source**
|
54
|
+
|
55
|
+
> git clone git://github.com/pius/pomegranate.git
|
56
|
+
> cd pomegranate
|
57
|
+
> gem build pomegranate.gemspec
|
58
|
+
> sudo gem install pomegranate
|
59
|
+
|
60
|
+
|
61
|
+
3. **Require the gem in your code, play with it**
|
62
|
+
|
63
|
+
For usage, the best thing is to click through the [documentation](http://pius.github.com/pomegranate). I tried to make it really thorough. If you need more guidance, check out the specs, which demonstrate precisely how to instantiate triples and run the inferencing engine.
|
64
|
+
|
65
|
+
|
66
|
+
4. **Contribute!**
|
67
|
+
|
68
|
+
Fork my repository (http://github.com/pius/pomegranate), make some changes, and send along a pull request!
|
69
|
+
|
70
|
+
The best way to contribute is to add a unit test for a specific OWL property that does not parse and then add (and/or tweak) rules such that your new test case plus all the others pass.
|
71
|
+
|
72
|
+
|
73
|
+
COPYRIGHT
|
74
|
+
---------
|
75
|
+
|
76
|
+
Pomegranate was created in 2008 by Pius Uzamere (pius -AT- alum -DOT- mit -DOT- edu) and is
|
77
|
+
licensed under the LGPL.
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
require 'pathname'
|
6
|
+
|
7
|
+
task :default => [ :spec ]
|
8
|
+
|
9
|
+
desc 'Run specifications'
|
10
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
11
|
+
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
12
|
+
t.spec_files = Pathname.glob(Pathname.new(__FILE__).dirname + 'spec/**/*_spec.rb')
|
13
|
+
|
14
|
+
begin
|
15
|
+
t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
|
16
|
+
t.rcov_opts << '--exclude' << 'spec'
|
17
|
+
t.rcov_opts << '--text-summary'
|
18
|
+
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
19
|
+
rescue Exception
|
20
|
+
# rcov not installed
|
21
|
+
end
|
22
|
+
end
|
data/coverage/index.html
ADDED
@@ -0,0 +1,279 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>C0 code coverage information</title>
|
3
|
+
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
4
|
+
<style type='text/css'>span.cross-ref-title {
|
5
|
+
font-size: 140%;
|
6
|
+
}
|
7
|
+
span.cross-ref a {
|
8
|
+
text-decoration: none;
|
9
|
+
}
|
10
|
+
span.cross-ref {
|
11
|
+
background-color:#f3f7fa;
|
12
|
+
border: 1px dashed #333;
|
13
|
+
margin: 1em;
|
14
|
+
padding: 0.5em;
|
15
|
+
overflow: hidden;
|
16
|
+
}
|
17
|
+
a.crossref-toggle {
|
18
|
+
text-decoration: none;
|
19
|
+
}
|
20
|
+
span.marked0 {
|
21
|
+
background-color: rgb(185, 210, 200);
|
22
|
+
display: block;
|
23
|
+
}
|
24
|
+
span.marked1 {
|
25
|
+
background-color: rgb(190, 215, 205);
|
26
|
+
display: block;
|
27
|
+
}
|
28
|
+
span.inferred0 {
|
29
|
+
background-color: rgb(255, 255, 240);
|
30
|
+
display: block;
|
31
|
+
}
|
32
|
+
span.inferred1 {
|
33
|
+
background-color: rgb(255, 255, 240);
|
34
|
+
display: block;
|
35
|
+
}
|
36
|
+
span.uncovered0 {
|
37
|
+
background-color: rgb(225, 110, 110);
|
38
|
+
display: block;
|
39
|
+
}
|
40
|
+
span.uncovered1 {
|
41
|
+
background-color: rgb(235, 120, 120);
|
42
|
+
display: block;
|
43
|
+
}
|
44
|
+
span.overview {
|
45
|
+
border-bottom: 8px solid black;
|
46
|
+
}
|
47
|
+
div.overview {
|
48
|
+
border-bottom: 8px solid black;
|
49
|
+
}
|
50
|
+
body {
|
51
|
+
font-family: verdana, arial, helvetica;
|
52
|
+
}
|
53
|
+
div.footer {
|
54
|
+
font-size: 68%;
|
55
|
+
margin-top: 1.5em;
|
56
|
+
}
|
57
|
+
h1, h2, h3, h4, h5, h6 {
|
58
|
+
margin-bottom: 0.5em;
|
59
|
+
}
|
60
|
+
h5 {
|
61
|
+
margin-top: 0.5em;
|
62
|
+
}
|
63
|
+
.hidden {
|
64
|
+
display: none;
|
65
|
+
}
|
66
|
+
div.separator {
|
67
|
+
height: 10px;
|
68
|
+
}
|
69
|
+
/* Commented out for better readability, esp. on IE */
|
70
|
+
/*
|
71
|
+
table tr td, table tr th {
|
72
|
+
font-size: 68%;
|
73
|
+
}
|
74
|
+
td.value table tr td {
|
75
|
+
font-size: 11px;
|
76
|
+
}
|
77
|
+
*/
|
78
|
+
table.percent_graph {
|
79
|
+
height: 12px;
|
80
|
+
border: #808080 1px solid;
|
81
|
+
empty-cells: show;
|
82
|
+
}
|
83
|
+
table.percent_graph td.covered {
|
84
|
+
height: 10px;
|
85
|
+
background: #00f000;
|
86
|
+
}
|
87
|
+
table.percent_graph td.uncovered {
|
88
|
+
height: 10px;
|
89
|
+
background: #e00000;
|
90
|
+
}
|
91
|
+
table.percent_graph td.NA {
|
92
|
+
height: 10px;
|
93
|
+
background: #eaeaea;
|
94
|
+
}
|
95
|
+
table.report {
|
96
|
+
border-collapse: collapse;
|
97
|
+
width: 100%;
|
98
|
+
}
|
99
|
+
table.report td.heading {
|
100
|
+
background: #dcecff;
|
101
|
+
border: #d0d0d0 1px solid;
|
102
|
+
font-weight: bold;
|
103
|
+
text-align: center;
|
104
|
+
}
|
105
|
+
table.report td.heading:hover {
|
106
|
+
background: #c0ffc0;
|
107
|
+
}
|
108
|
+
table.report td.text {
|
109
|
+
border: #d0d0d0 1px solid;
|
110
|
+
}
|
111
|
+
table.report td.value,
|
112
|
+
table.report td.lines_total,
|
113
|
+
table.report td.lines_code {
|
114
|
+
text-align: right;
|
115
|
+
border: #d0d0d0 1px solid;
|
116
|
+
}
|
117
|
+
table.report tr.light {
|
118
|
+
background-color: rgb(240, 240, 245);
|
119
|
+
}
|
120
|
+
table.report tr.dark {
|
121
|
+
background-color: rgb(230, 230, 235);
|
122
|
+
}
|
123
|
+
</style>
|
124
|
+
<script type='text/javascript'>
|
125
|
+
// <![CDATA[
|
126
|
+
function toggleCode( id ) {
|
127
|
+
if ( document.getElementById )
|
128
|
+
elem = document.getElementById( id );
|
129
|
+
else if ( document.all )
|
130
|
+
elem = eval( "document.all." + id );
|
131
|
+
else
|
132
|
+
return false;
|
133
|
+
|
134
|
+
elemStyle = elem.style;
|
135
|
+
|
136
|
+
if ( elemStyle.display != "block" ) {
|
137
|
+
elemStyle.display = "block"
|
138
|
+
} else {
|
139
|
+
elemStyle.display = "none"
|
140
|
+
}
|
141
|
+
|
142
|
+
return true;
|
143
|
+
}
|
144
|
+
|
145
|
+
// Make cross-references hidden by default
|
146
|
+
document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
|
147
|
+
// ]]>
|
148
|
+
</script>
|
149
|
+
</head>
|
150
|
+
<body><h3>C0 code coverage information</h3>
|
151
|
+
<p>Generated on Tue Dec 30 10:28:10 -0500 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.3</a>
|
152
|
+
</p>
|
153
|
+
<hr/>
|
154
|
+
<table class='report'><thead><tr><td class='heading'>Name</td>
|
155
|
+
<td class='heading'>Total lines</td>
|
156
|
+
<td class='heading'>Lines of code</td>
|
157
|
+
<td class='heading'>Total coverage</td>
|
158
|
+
<td class='heading'>Code coverage</td>
|
159
|
+
</tr>
|
160
|
+
</thead>
|
161
|
+
<tbody><tr class='light'><td>TOTAL</td>
|
162
|
+
<td class='lines_total'><tt>558</tt>
|
163
|
+
</td>
|
164
|
+
<td class='lines_code'><tt>203</tt>
|
165
|
+
</td>
|
166
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.9%</tt>
|
167
|
+
</td>
|
168
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
|
169
|
+
<td class='uncovered' width='1'/>
|
170
|
+
</tr>
|
171
|
+
</table>
|
172
|
+
</td>
|
173
|
+
</tr>
|
174
|
+
</table>
|
175
|
+
</td>
|
176
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>97.5%</tt>
|
177
|
+
</td>
|
178
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='98'/>
|
179
|
+
<td class='uncovered' width='2'/>
|
180
|
+
</tr>
|
181
|
+
</table>
|
182
|
+
</td>
|
183
|
+
</tr>
|
184
|
+
</table>
|
185
|
+
</td>
|
186
|
+
</tr>
|
187
|
+
<tr class='dark'><td><a href='lib-pomegranate_rb.html'>lib/pomegranate.rb</a>
|
188
|
+
</td>
|
189
|
+
<td class='lines_total'><tt>29</tt>
|
190
|
+
</td>
|
191
|
+
<td class='lines_code'><tt>11</tt>
|
192
|
+
</td>
|
193
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
|
194
|
+
</td>
|
195
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
196
|
+
<td class='uncovered' width='0'/>
|
197
|
+
</tr>
|
198
|
+
</table>
|
199
|
+
</td>
|
200
|
+
</tr>
|
201
|
+
</table>
|
202
|
+
</td>
|
203
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
|
204
|
+
</td>
|
205
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
206
|
+
<td class='uncovered' width='0'/>
|
207
|
+
</tr>
|
208
|
+
</table>
|
209
|
+
</td>
|
210
|
+
</tr>
|
211
|
+
</table>
|
212
|
+
</td>
|
213
|
+
</tr>
|
214
|
+
<tr class='light'><td><a href='lib-pomegranate-rdfs_plus_rulebook_rb.html'>lib/pomegranate/rdfs_plus_rulebook.rb</a>
|
215
|
+
</td>
|
216
|
+
<td class='lines_total'><tt>341</tt>
|
217
|
+
</td>
|
218
|
+
<td class='lines_code'><tt>116</tt>
|
219
|
+
</td>
|
220
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.8%</tt>
|
221
|
+
</td>
|
222
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
|
223
|
+
<td class='uncovered' width='1'/>
|
224
|
+
</tr>
|
225
|
+
</table>
|
226
|
+
</td>
|
227
|
+
</tr>
|
228
|
+
</table>
|
229
|
+
</td>
|
230
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>97.4%</tt>
|
231
|
+
</td>
|
232
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='97'/>
|
233
|
+
<td class='uncovered' width='3'/>
|
234
|
+
</tr>
|
235
|
+
</table>
|
236
|
+
</td>
|
237
|
+
</tr>
|
238
|
+
</table>
|
239
|
+
</td>
|
240
|
+
</tr>
|
241
|
+
<tr class='dark'><td><a href='lib-pomegranate-rdfs_rulebook_rb.html'>lib/pomegranate/rdfs_rulebook.rb</a>
|
242
|
+
</td>
|
243
|
+
<td class='lines_total'><tt>188</tt>
|
244
|
+
</td>
|
245
|
+
<td class='lines_code'><tt>76</tt>
|
246
|
+
</td>
|
247
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.9%</tt>
|
248
|
+
</td>
|
249
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
|
250
|
+
<td class='uncovered' width='1'/>
|
251
|
+
</tr>
|
252
|
+
</table>
|
253
|
+
</td>
|
254
|
+
</tr>
|
255
|
+
</table>
|
256
|
+
</td>
|
257
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>97.4%</tt>
|
258
|
+
</td>
|
259
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='97'/>
|
260
|
+
<td class='uncovered' width='3'/>
|
261
|
+
</tr>
|
262
|
+
</table>
|
263
|
+
</td>
|
264
|
+
</tr>
|
265
|
+
</table>
|
266
|
+
</td>
|
267
|
+
</tr>
|
268
|
+
</tbody>
|
269
|
+
</table>
|
270
|
+
<hr/>
|
271
|
+
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
272
|
+
version 0.8.1.3.</p>
|
273
|
+
<p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml11' height='31' alt='Valid XHTML 1.1!' width='88'/>
|
274
|
+
</a>
|
275
|
+
<a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
|
276
|
+
</a>
|
277
|
+
</p>
|
278
|
+
</body>
|
279
|
+
</html>
|
@@ -0,0 +1,951 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>lib/pomegranate/rdfs_plus_rulebook.rb - C0 code coverage information</title>
|
3
|
+
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
4
|
+
<style type='text/css'>span.cross-ref-title {
|
5
|
+
font-size: 140%;
|
6
|
+
}
|
7
|
+
span.cross-ref a {
|
8
|
+
text-decoration: none;
|
9
|
+
}
|
10
|
+
span.cross-ref {
|
11
|
+
background-color:#f3f7fa;
|
12
|
+
border: 1px dashed #333;
|
13
|
+
margin: 1em;
|
14
|
+
padding: 0.5em;
|
15
|
+
overflow: hidden;
|
16
|
+
}
|
17
|
+
a.crossref-toggle {
|
18
|
+
text-decoration: none;
|
19
|
+
}
|
20
|
+
span.marked0 {
|
21
|
+
background-color: rgb(185, 210, 200);
|
22
|
+
display: block;
|
23
|
+
}
|
24
|
+
span.marked1 {
|
25
|
+
background-color: rgb(190, 215, 205);
|
26
|
+
display: block;
|
27
|
+
}
|
28
|
+
span.inferred0 {
|
29
|
+
background-color: rgb(255, 255, 240);
|
30
|
+
display: block;
|
31
|
+
}
|
32
|
+
span.inferred1 {
|
33
|
+
background-color: rgb(255, 255, 240);
|
34
|
+
display: block;
|
35
|
+
}
|
36
|
+
span.uncovered0 {
|
37
|
+
background-color: rgb(225, 110, 110);
|
38
|
+
display: block;
|
39
|
+
}
|
40
|
+
span.uncovered1 {
|
41
|
+
background-color: rgb(235, 120, 120);
|
42
|
+
display: block;
|
43
|
+
}
|
44
|
+
span.overview {
|
45
|
+
border-bottom: 8px solid black;
|
46
|
+
}
|
47
|
+
div.overview {
|
48
|
+
border-bottom: 8px solid black;
|
49
|
+
}
|
50
|
+
body {
|
51
|
+
font-family: verdana, arial, helvetica;
|
52
|
+
}
|
53
|
+
div.footer {
|
54
|
+
font-size: 68%;
|
55
|
+
margin-top: 1.5em;
|
56
|
+
}
|
57
|
+
h1, h2, h3, h4, h5, h6 {
|
58
|
+
margin-bottom: 0.5em;
|
59
|
+
}
|
60
|
+
h5 {
|
61
|
+
margin-top: 0.5em;
|
62
|
+
}
|
63
|
+
.hidden {
|
64
|
+
display: none;
|
65
|
+
}
|
66
|
+
div.separator {
|
67
|
+
height: 10px;
|
68
|
+
}
|
69
|
+
/* Commented out for better readability, esp. on IE */
|
70
|
+
/*
|
71
|
+
table tr td, table tr th {
|
72
|
+
font-size: 68%;
|
73
|
+
}
|
74
|
+
td.value table tr td {
|
75
|
+
font-size: 11px;
|
76
|
+
}
|
77
|
+
*/
|
78
|
+
table.percent_graph {
|
79
|
+
height: 12px;
|
80
|
+
border: #808080 1px solid;
|
81
|
+
empty-cells: show;
|
82
|
+
}
|
83
|
+
table.percent_graph td.covered {
|
84
|
+
height: 10px;
|
85
|
+
background: #00f000;
|
86
|
+
}
|
87
|
+
table.percent_graph td.uncovered {
|
88
|
+
height: 10px;
|
89
|
+
background: #e00000;
|
90
|
+
}
|
91
|
+
table.percent_graph td.NA {
|
92
|
+
height: 10px;
|
93
|
+
background: #eaeaea;
|
94
|
+
}
|
95
|
+
table.report {
|
96
|
+
border-collapse: collapse;
|
97
|
+
width: 100%;
|
98
|
+
}
|
99
|
+
table.report td.heading {
|
100
|
+
background: #dcecff;
|
101
|
+
border: #d0d0d0 1px solid;
|
102
|
+
font-weight: bold;
|
103
|
+
text-align: center;
|
104
|
+
}
|
105
|
+
table.report td.heading:hover {
|
106
|
+
background: #c0ffc0;
|
107
|
+
}
|
108
|
+
table.report td.text {
|
109
|
+
border: #d0d0d0 1px solid;
|
110
|
+
}
|
111
|
+
table.report td.value,
|
112
|
+
table.report td.lines_total,
|
113
|
+
table.report td.lines_code {
|
114
|
+
text-align: right;
|
115
|
+
border: #d0d0d0 1px solid;
|
116
|
+
}
|
117
|
+
table.report tr.light {
|
118
|
+
background-color: rgb(240, 240, 245);
|
119
|
+
}
|
120
|
+
table.report tr.dark {
|
121
|
+
background-color: rgb(230, 230, 235);
|
122
|
+
}
|
123
|
+
</style>
|
124
|
+
<script type='text/javascript'>
|
125
|
+
// <![CDATA[
|
126
|
+
function toggleCode( id ) {
|
127
|
+
if ( document.getElementById )
|
128
|
+
elem = document.getElementById( id );
|
129
|
+
else if ( document.all )
|
130
|
+
elem = eval( "document.all." + id );
|
131
|
+
else
|
132
|
+
return false;
|
133
|
+
|
134
|
+
elemStyle = elem.style;
|
135
|
+
|
136
|
+
if ( elemStyle.display != "block" ) {
|
137
|
+
elemStyle.display = "block"
|
138
|
+
} else {
|
139
|
+
elemStyle.display = "none"
|
140
|
+
}
|
141
|
+
|
142
|
+
return true;
|
143
|
+
}
|
144
|
+
|
145
|
+
// Make cross-references hidden by default
|
146
|
+
document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
|
147
|
+
// ]]>
|
148
|
+
</script>
|
149
|
+
<style type='text/css'>span.run0 {
|
150
|
+
background-color: rgb(178, 204, 255);
|
151
|
+
display: block;
|
152
|
+
}
|
153
|
+
span.run1 {
|
154
|
+
background-color: rgb(178, 206, 255);
|
155
|
+
display: block;
|
156
|
+
}
|
157
|
+
span.run2 {
|
158
|
+
background-color: rgb(178, 209, 255);
|
159
|
+
display: block;
|
160
|
+
}
|
161
|
+
span.run3 {
|
162
|
+
background-color: rgb(178, 211, 255);
|
163
|
+
display: block;
|
164
|
+
}
|
165
|
+
span.run4 {
|
166
|
+
background-color: rgb(178, 214, 255);
|
167
|
+
display: block;
|
168
|
+
}
|
169
|
+
span.run5 {
|
170
|
+
background-color: rgb(178, 218, 255);
|
171
|
+
display: block;
|
172
|
+
}
|
173
|
+
span.run6 {
|
174
|
+
background-color: rgb(178, 220, 255);
|
175
|
+
display: block;
|
176
|
+
}
|
177
|
+
span.run7 {
|
178
|
+
background-color: rgb(178, 223, 255);
|
179
|
+
display: block;
|
180
|
+
}
|
181
|
+
span.run8 {
|
182
|
+
background-color: rgb(178, 225, 255);
|
183
|
+
display: block;
|
184
|
+
}
|
185
|
+
span.run9 {
|
186
|
+
background-color: rgb(178, 228, 255);
|
187
|
+
display: block;
|
188
|
+
}
|
189
|
+
span.run10 {
|
190
|
+
background-color: rgb(178, 232, 255);
|
191
|
+
display: block;
|
192
|
+
}
|
193
|
+
span.run11 {
|
194
|
+
background-color: rgb(178, 234, 255);
|
195
|
+
display: block;
|
196
|
+
}
|
197
|
+
span.run12 {
|
198
|
+
background-color: rgb(178, 237, 255);
|
199
|
+
display: block;
|
200
|
+
}
|
201
|
+
span.run13 {
|
202
|
+
background-color: rgb(178, 239, 255);
|
203
|
+
display: block;
|
204
|
+
}
|
205
|
+
span.run14 {
|
206
|
+
background-color: rgb(178, 242, 255);
|
207
|
+
display: block;
|
208
|
+
}
|
209
|
+
span.run15 {
|
210
|
+
background-color: rgb(178, 246, 255);
|
211
|
+
display: block;
|
212
|
+
}
|
213
|
+
span.run16 {
|
214
|
+
background-color: rgb(178, 248, 255);
|
215
|
+
display: block;
|
216
|
+
}
|
217
|
+
span.run17 {
|
218
|
+
background-color: rgb(178, 251, 255);
|
219
|
+
display: block;
|
220
|
+
}
|
221
|
+
span.run18 {
|
222
|
+
background-color: rgb(178, 253, 255);
|
223
|
+
display: block;
|
224
|
+
}
|
225
|
+
span.run19 {
|
226
|
+
background-color: rgb(178, 255, 253);
|
227
|
+
display: block;
|
228
|
+
}
|
229
|
+
span.run20 {
|
230
|
+
background-color: rgb(178, 255, 249);
|
231
|
+
display: block;
|
232
|
+
}
|
233
|
+
span.run21 {
|
234
|
+
background-color: rgb(178, 255, 247);
|
235
|
+
display: block;
|
236
|
+
}
|
237
|
+
span.run22 {
|
238
|
+
background-color: rgb(178, 255, 244);
|
239
|
+
display: block;
|
240
|
+
}
|
241
|
+
span.run23 {
|
242
|
+
background-color: rgb(178, 255, 242);
|
243
|
+
display: block;
|
244
|
+
}
|
245
|
+
span.run24 {
|
246
|
+
background-color: rgb(178, 255, 239);
|
247
|
+
display: block;
|
248
|
+
}
|
249
|
+
span.run25 {
|
250
|
+
background-color: rgb(178, 255, 235);
|
251
|
+
display: block;
|
252
|
+
}
|
253
|
+
span.run26 {
|
254
|
+
background-color: rgb(178, 255, 233);
|
255
|
+
display: block;
|
256
|
+
}
|
257
|
+
span.run27 {
|
258
|
+
background-color: rgb(178, 255, 230);
|
259
|
+
display: block;
|
260
|
+
}
|
261
|
+
span.run28 {
|
262
|
+
background-color: rgb(178, 255, 228);
|
263
|
+
display: block;
|
264
|
+
}
|
265
|
+
span.run29 {
|
266
|
+
background-color: rgb(178, 255, 225);
|
267
|
+
display: block;
|
268
|
+
}
|
269
|
+
span.run30 {
|
270
|
+
background-color: rgb(178, 255, 221);
|
271
|
+
display: block;
|
272
|
+
}
|
273
|
+
span.run31 {
|
274
|
+
background-color: rgb(178, 255, 219);
|
275
|
+
display: block;
|
276
|
+
}
|
277
|
+
span.run32 {
|
278
|
+
background-color: rgb(178, 255, 216);
|
279
|
+
display: block;
|
280
|
+
}
|
281
|
+
span.run33 {
|
282
|
+
background-color: rgb(178, 255, 214);
|
283
|
+
display: block;
|
284
|
+
}
|
285
|
+
span.run34 {
|
286
|
+
background-color: rgb(178, 255, 211);
|
287
|
+
display: block;
|
288
|
+
}
|
289
|
+
span.run35 {
|
290
|
+
background-color: rgb(178, 255, 207);
|
291
|
+
display: block;
|
292
|
+
}
|
293
|
+
span.run36 {
|
294
|
+
background-color: rgb(178, 255, 205);
|
295
|
+
display: block;
|
296
|
+
}
|
297
|
+
span.run37 {
|
298
|
+
background-color: rgb(178, 255, 202);
|
299
|
+
display: block;
|
300
|
+
}
|
301
|
+
span.run38 {
|
302
|
+
background-color: rgb(178, 255, 200);
|
303
|
+
display: block;
|
304
|
+
}
|
305
|
+
span.run39 {
|
306
|
+
background-color: rgb(178, 255, 197);
|
307
|
+
display: block;
|
308
|
+
}
|
309
|
+
span.run40 {
|
310
|
+
background-color: rgb(178, 255, 193);
|
311
|
+
display: block;
|
312
|
+
}
|
313
|
+
span.run41 {
|
314
|
+
background-color: rgb(178, 255, 191);
|
315
|
+
display: block;
|
316
|
+
}
|
317
|
+
span.run42 {
|
318
|
+
background-color: rgb(178, 255, 188);
|
319
|
+
display: block;
|
320
|
+
}
|
321
|
+
span.run43 {
|
322
|
+
background-color: rgb(178, 255, 186);
|
323
|
+
display: block;
|
324
|
+
}
|
325
|
+
span.run44 {
|
326
|
+
background-color: rgb(178, 255, 183);
|
327
|
+
display: block;
|
328
|
+
}
|
329
|
+
span.run45 {
|
330
|
+
background-color: rgb(178, 255, 179);
|
331
|
+
display: block;
|
332
|
+
}
|
333
|
+
span.run46 {
|
334
|
+
background-color: rgb(179, 255, 178);
|
335
|
+
display: block;
|
336
|
+
}
|
337
|
+
span.run47 {
|
338
|
+
background-color: rgb(182, 255, 178);
|
339
|
+
display: block;
|
340
|
+
}
|
341
|
+
span.run48 {
|
342
|
+
background-color: rgb(184, 255, 178);
|
343
|
+
display: block;
|
344
|
+
}
|
345
|
+
span.run49 {
|
346
|
+
background-color: rgb(187, 255, 178);
|
347
|
+
display: block;
|
348
|
+
}
|
349
|
+
span.run50 {
|
350
|
+
background-color: rgb(191, 255, 178);
|
351
|
+
display: block;
|
352
|
+
}
|
353
|
+
span.run51 {
|
354
|
+
background-color: rgb(193, 255, 178);
|
355
|
+
display: block;
|
356
|
+
}
|
357
|
+
span.run52 {
|
358
|
+
background-color: rgb(196, 255, 178);
|
359
|
+
display: block;
|
360
|
+
}
|
361
|
+
span.run53 {
|
362
|
+
background-color: rgb(198, 255, 178);
|
363
|
+
display: block;
|
364
|
+
}
|
365
|
+
span.run54 {
|
366
|
+
background-color: rgb(201, 255, 178);
|
367
|
+
display: block;
|
368
|
+
}
|
369
|
+
span.run55 {
|
370
|
+
background-color: rgb(205, 255, 178);
|
371
|
+
display: block;
|
372
|
+
}
|
373
|
+
span.run56 {
|
374
|
+
background-color: rgb(207, 255, 178);
|
375
|
+
display: block;
|
376
|
+
}
|
377
|
+
span.run57 {
|
378
|
+
background-color: rgb(210, 255, 178);
|
379
|
+
display: block;
|
380
|
+
}
|
381
|
+
span.run58 {
|
382
|
+
background-color: rgb(212, 255, 178);
|
383
|
+
display: block;
|
384
|
+
}
|
385
|
+
span.run59 {
|
386
|
+
background-color: rgb(215, 255, 178);
|
387
|
+
display: block;
|
388
|
+
}
|
389
|
+
span.run60 {
|
390
|
+
background-color: rgb(219, 255, 178);
|
391
|
+
display: block;
|
392
|
+
}
|
393
|
+
span.run61 {
|
394
|
+
background-color: rgb(221, 255, 178);
|
395
|
+
display: block;
|
396
|
+
}
|
397
|
+
span.run62 {
|
398
|
+
background-color: rgb(224, 255, 178);
|
399
|
+
display: block;
|
400
|
+
}
|
401
|
+
span.run63 {
|
402
|
+
background-color: rgb(226, 255, 178);
|
403
|
+
display: block;
|
404
|
+
}
|
405
|
+
span.run64 {
|
406
|
+
background-color: rgb(229, 255, 178);
|
407
|
+
display: block;
|
408
|
+
}
|
409
|
+
span.run65 {
|
410
|
+
background-color: rgb(233, 255, 178);
|
411
|
+
display: block;
|
412
|
+
}
|
413
|
+
span.run66 {
|
414
|
+
background-color: rgb(235, 255, 178);
|
415
|
+
display: block;
|
416
|
+
}
|
417
|
+
span.run67 {
|
418
|
+
background-color: rgb(238, 255, 178);
|
419
|
+
display: block;
|
420
|
+
}
|
421
|
+
span.run68 {
|
422
|
+
background-color: rgb(240, 255, 178);
|
423
|
+
display: block;
|
424
|
+
}
|
425
|
+
span.run69 {
|
426
|
+
background-color: rgb(243, 255, 178);
|
427
|
+
display: block;
|
428
|
+
}
|
429
|
+
span.run70 {
|
430
|
+
background-color: rgb(247, 255, 178);
|
431
|
+
display: block;
|
432
|
+
}
|
433
|
+
span.run71 {
|
434
|
+
background-color: rgb(249, 255, 178);
|
435
|
+
display: block;
|
436
|
+
}
|
437
|
+
span.run72 {
|
438
|
+
background-color: rgb(252, 255, 178);
|
439
|
+
display: block;
|
440
|
+
}
|
441
|
+
span.run73 {
|
442
|
+
background-color: rgb(255, 255, 178);
|
443
|
+
display: block;
|
444
|
+
}
|
445
|
+
span.run74 {
|
446
|
+
background-color: rgb(255, 252, 178);
|
447
|
+
display: block;
|
448
|
+
}
|
449
|
+
span.run75 {
|
450
|
+
background-color: rgb(255, 248, 178);
|
451
|
+
display: block;
|
452
|
+
}
|
453
|
+
span.run76 {
|
454
|
+
background-color: rgb(255, 246, 178);
|
455
|
+
display: block;
|
456
|
+
}
|
457
|
+
span.run77 {
|
458
|
+
background-color: rgb(255, 243, 178);
|
459
|
+
display: block;
|
460
|
+
}
|
461
|
+
span.run78 {
|
462
|
+
background-color: rgb(255, 240, 178);
|
463
|
+
display: block;
|
464
|
+
}
|
465
|
+
span.run79 {
|
466
|
+
background-color: rgb(255, 238, 178);
|
467
|
+
display: block;
|
468
|
+
}
|
469
|
+
span.run80 {
|
470
|
+
background-color: rgb(255, 234, 178);
|
471
|
+
display: block;
|
472
|
+
}
|
473
|
+
span.run81 {
|
474
|
+
background-color: rgb(255, 232, 178);
|
475
|
+
display: block;
|
476
|
+
}
|
477
|
+
span.run82 {
|
478
|
+
background-color: rgb(255, 229, 178);
|
479
|
+
display: block;
|
480
|
+
}
|
481
|
+
span.run83 {
|
482
|
+
background-color: rgb(255, 226, 178);
|
483
|
+
display: block;
|
484
|
+
}
|
485
|
+
span.run84 {
|
486
|
+
background-color: rgb(255, 224, 178);
|
487
|
+
display: block;
|
488
|
+
}
|
489
|
+
span.run85 {
|
490
|
+
background-color: rgb(255, 220, 178);
|
491
|
+
display: block;
|
492
|
+
}
|
493
|
+
span.run86 {
|
494
|
+
background-color: rgb(255, 218, 178);
|
495
|
+
display: block;
|
496
|
+
}
|
497
|
+
span.run87 {
|
498
|
+
background-color: rgb(255, 215, 178);
|
499
|
+
display: block;
|
500
|
+
}
|
501
|
+
span.run88 {
|
502
|
+
background-color: rgb(255, 212, 178);
|
503
|
+
display: block;
|
504
|
+
}
|
505
|
+
span.run89 {
|
506
|
+
background-color: rgb(255, 210, 178);
|
507
|
+
display: block;
|
508
|
+
}
|
509
|
+
span.run90 {
|
510
|
+
background-color: rgb(255, 206, 178);
|
511
|
+
display: block;
|
512
|
+
}
|
513
|
+
span.run91 {
|
514
|
+
background-color: rgb(255, 204, 178);
|
515
|
+
display: block;
|
516
|
+
}
|
517
|
+
span.run92 {
|
518
|
+
background-color: rgb(255, 201, 178);
|
519
|
+
display: block;
|
520
|
+
}
|
521
|
+
span.run93 {
|
522
|
+
background-color: rgb(255, 198, 178);
|
523
|
+
display: block;
|
524
|
+
}
|
525
|
+
span.run94 {
|
526
|
+
background-color: rgb(255, 196, 178);
|
527
|
+
display: block;
|
528
|
+
}
|
529
|
+
span.run95 {
|
530
|
+
background-color: rgb(255, 192, 178);
|
531
|
+
display: block;
|
532
|
+
}
|
533
|
+
span.run96 {
|
534
|
+
background-color: rgb(255, 189, 178);
|
535
|
+
display: block;
|
536
|
+
}
|
537
|
+
span.run97 {
|
538
|
+
background-color: rgb(255, 187, 178);
|
539
|
+
display: block;
|
540
|
+
}
|
541
|
+
span.run98 {
|
542
|
+
background-color: rgb(255, 184, 178);
|
543
|
+
display: block;
|
544
|
+
}
|
545
|
+
span.run99 {
|
546
|
+
background-color: rgb(255, 182, 178);
|
547
|
+
display: block;
|
548
|
+
}
|
549
|
+
span.run100 {
|
550
|
+
background-color: rgb(255, 178, 178);
|
551
|
+
display: block;
|
552
|
+
}
|
553
|
+
</style>
|
554
|
+
</head>
|
555
|
+
<body><h3>C0 code coverage information</h3>
|
556
|
+
<p>Generated on Tue Dec 30 10:28:11 -0500 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.3</a>
|
557
|
+
</p>
|
558
|
+
<hr/>
|
559
|
+
<pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
560
|
+
</span><span class='marked1'>and this: this line is also marked as covered.
|
561
|
+
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
|
562
|
+
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
|
563
|
+
</span><span class='uncovered0'>Finally, here's a line marked as not executed.
|
564
|
+
</span></pre>
|
565
|
+
<table class='report'><thead><tr><td class='heading'>Name</td>
|
566
|
+
<td class='heading'>Total lines</td>
|
567
|
+
<td class='heading'>Lines of code</td>
|
568
|
+
<td class='heading'>Total coverage</td>
|
569
|
+
<td class='heading'>Code coverage</td>
|
570
|
+
</tr>
|
571
|
+
</thead>
|
572
|
+
<tbody><tr class='light'><td><a href='lib-pomegranate-rdfs_plus_rulebook_rb.html'>lib/pomegranate/rdfs_plus_rulebook.rb</a>
|
573
|
+
</td>
|
574
|
+
<td class='lines_total'><tt>341</tt>
|
575
|
+
</td>
|
576
|
+
<td class='lines_code'><tt>116</tt>
|
577
|
+
</td>
|
578
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>98.8%</tt>
|
579
|
+
</td>
|
580
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='99'/>
|
581
|
+
<td class='uncovered' width='1'/>
|
582
|
+
</tr>
|
583
|
+
</table>
|
584
|
+
</td>
|
585
|
+
</tr>
|
586
|
+
</table>
|
587
|
+
</td>
|
588
|
+
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>97.4%</tt>
|
589
|
+
</td>
|
590
|
+
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='97'/>
|
591
|
+
<td class='uncovered' width='3'/>
|
592
|
+
</tr>
|
593
|
+
</table>
|
594
|
+
</td>
|
595
|
+
</tr>
|
596
|
+
</table>
|
597
|
+
</td>
|
598
|
+
</tr>
|
599
|
+
</tbody>
|
600
|
+
</table>
|
601
|
+
<pre><span class="inferred0"><a name="line1"></a> 1 # This file is part of the Pomegranate project (http://pius.github.com/pomegranate/)
|
602
|
+
</span><span class="inferred1"><a name="line2"></a> 2 #
|
603
|
+
</span><span class="inferred0"><a name="line3"></a> 3 # This application is free software; you can redistribute it and/or
|
604
|
+
</span><span class="inferred1"><a name="line4"></a> 4 # modify it under the terms of the Ruby license defined in the
|
605
|
+
</span><span class="inferred0"><a name="line5"></a> 5 # LICENSE.txt file.
|
606
|
+
</span><span class="inferred1"><a name="line6"></a> 6 #
|
607
|
+
</span><span class="inferred0"><a name="line7"></a> 7 # Copyright (c) 2008 Pius Uzamere. All rights reserved.
|
608
|
+
</span><span class="inferred1"><a name="line8"></a> 8 #
|
609
|
+
</span><span class="inferred0"><a name="line9"></a> 9 # * Authors: Pius Uzamere
|
610
|
+
</span><span class="inferred1"><a name="line10"></a> 10 #
|
611
|
+
</span><span class="inferred0"><a name="line11"></a> 11
|
612
|
+
</span><span class="marked1"><a name="line12"></a> 12 $LOAD_PATH << File.join(File.dirname(__FILE__), '../lib/')
|
613
|
+
</span><span class="marked0"><a name="line13"></a> 13 require 'lib/pomegranate/rdfs_rulebook'
|
614
|
+
</span><span class="inferred1"><a name="line14"></a> 14
|
615
|
+
</span><span class="marked0"><a name="line15"></a> 15 class RdfsPlusRulebook < RdfsRulebook
|
616
|
+
</span><span class="inferred1"><a name="line16"></a> 16
|
617
|
+
</span><span class="marked0"><a name="line17"></a> 17 def rules
|
618
|
+
</span><span class="marked1"><a name="line18"></a> 18 rdfs_rules
|
619
|
+
</span><span class="marked0"><a name="line19"></a> 19 rdfs_plus_rules
|
620
|
+
</span><span class="inferred1"><a name="line20"></a> 20 end
|
621
|
+
</span><span class="inferred0"><a name="line21"></a> 21
|
622
|
+
</span><span class="inferred1"><a name="line22"></a> 22 #nodoc
|
623
|
+
</span><span class="marked0"><a name="line23"></a> 23 def rdfs_plus_rules
|
624
|
+
</span><span class="inferred1"><a name="line24"></a> 24 ##
|
625
|
+
</span><span class="inferred0"><a name="line25"></a> 25 # Implements Type Propagation through owl:inverseOf
|
626
|
+
</span><span class="inferred1"><a name="line26"></a> 26 #
|
627
|
+
</span><span class="inferred0"><a name="line27"></a> 27 # ==== Semantics
|
628
|
+
</span><span class="inferred1"><a name="line28"></a> 28 # Given:
|
629
|
+
</span><span class="inferred0"><a name="line29"></a> 29 # P owl:inverseOf Q
|
630
|
+
</span><span class="inferred1"><a name="line30"></a> 30 # x P y
|
631
|
+
</span><span class="inferred0"><a name="line31"></a> 31 #
|
632
|
+
</span><span class="inferred1"><a name="line32"></a> 32 # Infer:
|
633
|
+
</span><span class="inferred0"><a name="line33"></a> 33 # y Q x
|
634
|
+
</span><span class="inferred1"><a name="line34"></a> 34 #
|
635
|
+
</span><span class="inferred0"><a name="line35"></a> 35 # ==== Example
|
636
|
+
</span><span class="inferred1"><a name="line36"></a> 36 # p = Triple.new(":Pius", ":took_a_class_taught_by", ":Winston");
|
637
|
+
</span><span class="inferred0"><a name="line37"></a> 37 # h = Triple.new(":took_a_class_taught_by", "owl:inverseOf", ":taught")
|
638
|
+
</span><span class="inferred1"><a name="line38"></a> 38 # assert p; assert h; #=> infers a triple ~= Triple.new(":Winston", "taught", ":Pius")
|
639
|
+
</span><span class="inferred0"><a name="line39"></a> 39 #
|
640
|
+
</span><span class="inferred1"><a name="line40"></a> 40 # @author Pius Uzamere
|
641
|
+
</span><span class="marked0"><a name="line41"></a> 41 def owl_inverse_of
|
642
|
+
</span><span class="inferred1"><a name="line42"></a> 42 end
|
643
|
+
</span><span class="inferred0"><a name="line43"></a> 43
|
644
|
+
</span><span class="marked1"><a name="line44"></a> 44 rule :owl_inverse_of,
|
645
|
+
</span><span class="marked0"><a name="line45"></a> 45 [Triple,:fact,{m.predicate=>:pred, m.object => :new_subj, m.subject => :new_obj}],
|
646
|
+
</span><span class="marked1"><a name="line46"></a> 46 [Triple,:ont_statement,{m.object => :inferred_pred},m.predicate=="owl:inverseOf", m.subject == b(:pred)],
|
647
|
+
</span><span class="marked0"><a name="line47"></a> 47 [:not, Triple, m.predicate==b(:inferred_pred), m.subject==b(:new_subj), m.object==b(:new_obj)] do |v|
|
648
|
+
</span><span class="marked1"><a name="line48"></a> 48 inferred_property = v[:ont_statement].object
|
649
|
+
</span><span class="marked0"><a name="line49"></a> 49 obj = v[:fact].subject
|
650
|
+
</span><span class="marked1"><a name="line50"></a> 50 subj = v[:fact].object
|
651
|
+
</span><span class="marked0"><a name="line51"></a> 51 assert Triple.new(subj, inferred_property, obj)
|
652
|
+
</span><span class="marked1"><a name="line52"></a> 52 puts "Made type inference based on owl:inverseOf: Triple(#{subj}, #{inferred_property}, #{obj})"
|
653
|
+
</span><span class="inferred0"><a name="line53"></a> 53 end
|
654
|
+
</span><span class="inferred1"><a name="line54"></a> 54
|
655
|
+
</span><span class="inferred0"><a name="line55"></a> 55 ##
|
656
|
+
</span><span class="inferred1"><a name="line56"></a> 56 # Implements Type Propagation through owl:SymmetricProperty
|
657
|
+
</span><span class="inferred0"><a name="line57"></a> 57 #
|
658
|
+
</span><span class="inferred1"><a name="line58"></a> 58 # ==== Semantics
|
659
|
+
</span><span class="inferred0"><a name="line59"></a> 59 # Given:
|
660
|
+
</span><span class="inferred1"><a name="line60"></a> 60 # P rdf:type owl:SymmetricProperty
|
661
|
+
</span><span class="inferred0"><a name="line61"></a> 61 #
|
662
|
+
</span><span class="inferred1"><a name="line62"></a> 62 # Infer:
|
663
|
+
</span><span class="inferred0"><a name="line63"></a> 63 # P owl:inverseOf P
|
664
|
+
</span><span class="inferred1"><a name="line64"></a> 64 #
|
665
|
+
</span><span class="inferred0"><a name="line65"></a> 65 # ==== Example
|
666
|
+
</span><span class="inferred1"><a name="line66"></a> 66 # p = Triple.new(":Pius", ":was_in_a_class_with", ":Adam");
|
667
|
+
</span><span class="inferred0"><a name="line67"></a> 67 # h = Triple.new(":was_in_a_class_with", "rdf:type", "owl:SymmetricProperty")
|
668
|
+
</span><span class="inferred1"><a name="line68"></a> 68 # assert p; assert h; #=> infers a triple ~= Triple.new(":Adam", ":was_in_a_class_with", ":Pius")
|
669
|
+
</span><span class="inferred0"><a name="line69"></a> 69 #
|
670
|
+
</span><span class="inferred1"><a name="line70"></a> 70 # @author Pius Uzamere
|
671
|
+
</span><span class="marked0"><a name="line71"></a> 71 def owl_symmetric_property
|
672
|
+
</span><span class="inferred1"><a name="line72"></a> 72 end
|
673
|
+
</span><span class="inferred0"><a name="line73"></a> 73
|
674
|
+
</span><span class="marked1"><a name="line74"></a> 74 rule :owl_symmetric_property,
|
675
|
+
</span><span class="marked0"><a name="line75"></a> 75 [Triple,:ont_statement,m.predicate=="rdf:type",m.object=="owl:SymmetricProperty"] do |v|
|
676
|
+
</span><span class="marked1"><a name="line76"></a> 76 prop = v[:ont_statement].subject
|
677
|
+
</span><span class="marked0"><a name="line77"></a> 77 assert Triple.new(prop, "owl:inverseOf", prop)
|
678
|
+
</span><span class="marked1"><a name="line78"></a> 78 puts "Made type inference based on owl:SymmetricProperty: Triple(#{prop}, owl:inverseOf, #{prop})"
|
679
|
+
</span><span class="inferred0"><a name="line79"></a> 79 end
|
680
|
+
</span><span class="inferred1"><a name="line80"></a> 80
|
681
|
+
</span><span class="inferred0"><a name="line81"></a> 81 ##
|
682
|
+
</span><span class="inferred1"><a name="line82"></a> 82 # Implements Type Propagation through owl:TransitiveProperty
|
683
|
+
</span><span class="inferred0"><a name="line83"></a> 83 #
|
684
|
+
</span><span class="inferred1"><a name="line84"></a> 84 # ==== Semantics
|
685
|
+
</span><span class="inferred0"><a name="line85"></a> 85 # Given:
|
686
|
+
</span><span class="inferred1"><a name="line86"></a> 86 # P rdf:type owl:TransitiveProperty
|
687
|
+
</span><span class="inferred0"><a name="line87"></a> 87 # X P Y
|
688
|
+
</span><span class="inferred1"><a name="line88"></a> 88 # X P Z
|
689
|
+
</span><span class="inferred0"><a name="line89"></a> 89 #
|
690
|
+
</span><span class="inferred1"><a name="line90"></a> 90 # Infer:
|
691
|
+
</span><span class="inferred0"><a name="line91"></a> 91 # X P Z
|
692
|
+
</span><span class="inferred1"><a name="line92"></a> 92 #
|
693
|
+
</span><span class="inferred0"><a name="line93"></a> 93 # ==== Example
|
694
|
+
</span><span class="inferred1"><a name="line94"></a> 94 # p = Triple.new(":Dirichlet", ":is_an_academic_ancestor_of", ":Minsky");
|
695
|
+
</span><span class="inferred0"><a name="line95"></a> 95 # h = Triple.new(":Poisson", ":is_an_academic_ancestor_of", ":Dirichlet");
|
696
|
+
</span><span class="inferred1"><a name="line96"></a> 96 # j = Triple.new(":is_an_academic_ancestor_of", "rdf:type", "owl:TransitiveProperty");
|
697
|
+
</span><span class="inferred0"><a name="line97"></a> 97 # assert p; assert h; assert j; #=> infers a triple ~= Triple.new(":Poisson", ":is_an_academic_ancestor_of", ":Minsky")
|
698
|
+
</span><span class="inferred1"><a name="line98"></a> 98 #
|
699
|
+
</span><span class="inferred0"><a name="line99"></a> 99 # @author Pius Uzamere
|
700
|
+
</span><span class="marked1"><a name="line100"></a>100 def owl_transitive_property
|
701
|
+
</span><span class="inferred0"><a name="line101"></a>101 end
|
702
|
+
</span><span class="inferred1"><a name="line102"></a>102
|
703
|
+
</span><span class="marked0"><a name="line103"></a>103 rule :owl_transitive_property,
|
704
|
+
</span><span class="marked1"><a name="line104"></a>104 [Triple,:ont_statement,{m.subject => :trans_prop},m.predicate=="rdf:type",m.object=="owl:TransitiveProperty"],
|
705
|
+
</span><span class="marked0"><a name="line105"></a>105 [Triple,:fact1,{m.predicate=>:predi, m.subject => :sub, m.object => :trans_obj}, m.predicate == b(:trans_prop), m.subject.not== m.object],
|
706
|
+
</span><span class="marked1"><a name="line106"></a>106 [Triple,:fact2, m.predicate==b(:predi), m.subject==b(:trans_obj), m.predicate.not=="owl:inverseOf", m.object.not== b(:sub) ] do |v|
|
707
|
+
</span><span class="marked0"><a name="line107"></a>107 subj = v[:fact1].subject
|
708
|
+
</span><span class="marked1"><a name="line108"></a>108 obj = v[:fact2].object
|
709
|
+
</span><span class="marked0"><a name="line109"></a>109 prop = v[:ont_statement].subject
|
710
|
+
</span><span class="marked1"><a name="line110"></a>110 assert Triple.new(subj, prop, obj)
|
711
|
+
</span><span class="marked0"><a name="line111"></a>111 puts "Made type inference based on owl:TransitiveProperty: Triple(#{subj}, #{prop}, #{obj})"
|
712
|
+
</span><span class="marked1"><a name="line112"></a>112 if subj == ":Pius" && obj == ":Uzamere" && prop == ":is_an_academic_ancestor_of"
|
713
|
+
</span><span class="uncovered0"><a name="line113"></a>113 raise "ho" + v[:ont_statement].inspect + v[:fact1].inspect + v[:fact2].inspect
|
714
|
+
</span><span class="uncovered1"><a name="line114"></a>114 end
|
715
|
+
</span><span class="uncovered0"><a name="line115"></a>115
|
716
|
+
</span><span class="uncovered1"><a name="line116"></a>116 end
|
717
|
+
</span><span class="inferred0"><a name="line117"></a>117
|
718
|
+
</span><span class="inferred1"><a name="line118"></a>118 ##
|
719
|
+
</span><span class="inferred0"><a name="line119"></a>119 # Implements Class Equivalence through owl:equivalentClass
|
720
|
+
</span><span class="inferred1"><a name="line120"></a>120 #
|
721
|
+
</span><span class="inferred0"><a name="line121"></a>121 # ==== Semantics
|
722
|
+
</span><span class="inferred1"><a name="line122"></a>122 # Given:
|
723
|
+
</span><span class="inferred0"><a name="line123"></a>123 # A owl:equivalentClass B
|
724
|
+
</span><span class="inferred1"><a name="line124"></a>124 # r rdf:type A
|
725
|
+
</span><span class="inferred0"><a name="line125"></a>125 #
|
726
|
+
</span><span class="inferred1"><a name="line126"></a>126 # Infer:
|
727
|
+
</span><span class="inferred0"><a name="line127"></a>127 # r rdf:type B
|
728
|
+
</span><span class="inferred1"><a name="line128"></a>128 #
|
729
|
+
</span><span class="inferred0"><a name="line129"></a>129 # AND
|
730
|
+
</span><span class="inferred1"><a name="line130"></a>130 #
|
731
|
+
</span><span class="inferred0"><a name="line131"></a>131 # Given:
|
732
|
+
</span><span class="inferred1"><a name="line132"></a>132 # C owl:equivalentClass D
|
733
|
+
</span><span class="inferred0"><a name="line133"></a>133 # C rdfs:subClassOf D
|
734
|
+
</span><span class="inferred1"><a name="line134"></a>134 # z rdf:type D
|
735
|
+
</span><span class="inferred0"><a name="line135"></a>135 #
|
736
|
+
</span><span class="inferred1"><a name="line136"></a>136 # Infer:
|
737
|
+
</span><span class="inferred0"><a name="line137"></a>137 # z rdf:type C
|
738
|
+
</span><span class="inferred1"><a name="line138"></a>138 #
|
739
|
+
</span><span class="inferred0"><a name="line139"></a>139 # ==== Example
|
740
|
+
</span><span class="inferred1"><a name="line140"></a>140 # p = Triple.new("mit:class", "owl:equivalentClass", "mit:subject");
|
741
|
+
</span><span class="inferred0"><a name="line141"></a>141 # h = Triple.new(":6.111", "rdf:type", "mit:class");
|
742
|
+
</span><span class="inferred1"><a name="line142"></a>142 # assert p; assert h; #=> infers a triple ~= Triple.new(":6.111", ":rdf:type", ":mit:subject")
|
743
|
+
</span><span class="inferred0"><a name="line143"></a>143 #
|
744
|
+
</span><span class="inferred1"><a name="line144"></a>144 # @author Pius Uzamere
|
745
|
+
</span><span class="marked0"><a name="line145"></a>145 def owl_equivalent_class
|
746
|
+
</span><span class="inferred1"><a name="line146"></a>146 end
|
747
|
+
</span><span class="inferred0"><a name="line147"></a>147
|
748
|
+
</span><span class="marked1"><a name="line148"></a>148 rule :owl_equivalent_class,
|
749
|
+
</span><span class="marked0"><a name="line149"></a>149 [Triple,:ont_statement,m.predicate=="owl:equivalentClass"] do |v|
|
750
|
+
</span><span class="marked1"><a name="line150"></a>150 assert Triple.new("owl:equivalentClass", "rdf:type", "owl:SymmetricProperty")
|
751
|
+
</span><span class="marked0"><a name="line151"></a>151 assert Triple.new("owl:equivalentClass", "rdfs:subPropertyOf", "rdfs:subClassOf")
|
752
|
+
</span><span class="inferred1"><a name="line152"></a>152 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences
|
753
|
+
</span><span class="inferred0"><a name="line153"></a>153 end
|
754
|
+
</span><span class="inferred1"><a name="line154"></a>154
|
755
|
+
</span><span class="inferred0"><a name="line155"></a>155
|
756
|
+
</span><span class="inferred1"><a name="line156"></a>156 ##
|
757
|
+
</span><span class="inferred0"><a name="line157"></a>157 # Implements Property Equivalence through owl:equivalentProperty
|
758
|
+
</span><span class="inferred1"><a name="line158"></a>158 #
|
759
|
+
</span><span class="inferred0"><a name="line159"></a>159 # ==== Semantics
|
760
|
+
</span><span class="inferred1"><a name="line160"></a>160 # Given:
|
761
|
+
</span><span class="inferred0"><a name="line161"></a>161 # A owl:equivalentProperty B
|
762
|
+
</span><span class="inferred1"><a name="line162"></a>162 # r A c
|
763
|
+
</span><span class="inferred0"><a name="line163"></a>163 #
|
764
|
+
</span><span class="inferred1"><a name="line164"></a>164 # Infer:
|
765
|
+
</span><span class="inferred0"><a name="line165"></a>165 # r B C
|
766
|
+
</span><span class="inferred1"><a name="line166"></a>166 #
|
767
|
+
</span><span class="inferred0"><a name="line167"></a>167 # AND
|
768
|
+
</span><span class="inferred1"><a name="line168"></a>168 #
|
769
|
+
</span><span class="inferred0"><a name="line169"></a>169 # Given:
|
770
|
+
</span><span class="inferred1"><a name="line170"></a>170 # C owl:equivalentClass D
|
771
|
+
</span><span class="inferred0"><a name="line171"></a>171 # C rdfs:subClassOf D
|
772
|
+
</span><span class="inferred1"><a name="line172"></a>172 # z rdf:type D
|
773
|
+
</span><span class="inferred0"><a name="line173"></a>173 #
|
774
|
+
</span><span class="inferred1"><a name="line174"></a>174 # Infer:
|
775
|
+
</span><span class="inferred0"><a name="line175"></a>175 # z rdf:type C
|
776
|
+
</span><span class="inferred1"><a name="line176"></a>176 #
|
777
|
+
</span><span class="inferred0"><a name="line177"></a>177 # ==== Example
|
778
|
+
</span><span class="inferred1"><a name="line178"></a>178 # p = Triple.new("mit:took_class", "owl:equivalentProperty", "mit:took_course");
|
779
|
+
</span><span class="inferred0"><a name="line179"></a>179 # h = Triple.new(":Pius", "mit:took_course", ":6.111");
|
780
|
+
</span><span class="inferred1"><a name="line180"></a>180 # assert p; assert h; #=> infers a triple ~= Triple.new(":Pius", "mit:took_class", ":6.111")
|
781
|
+
</span><span class="inferred0"><a name="line181"></a>181 #
|
782
|
+
</span><span class="inferred1"><a name="line182"></a>182 # @author Pius Uzamere
|
783
|
+
</span><span class="inferred0"><a name="line183"></a>183
|
784
|
+
</span><span class="marked1"><a name="line184"></a>184 def owl_equivalent_property
|
785
|
+
</span><span class="inferred0"><a name="line185"></a>185 end
|
786
|
+
</span><span class="inferred1"><a name="line186"></a>186
|
787
|
+
</span><span class="marked0"><a name="line187"></a>187 rule :owl_equivalent_property,
|
788
|
+
</span><span class="marked1"><a name="line188"></a>188 [Triple,:ont_statement,m.predicate=="owl:equivalentProperty"] do |v|
|
789
|
+
</span><span class="marked0"><a name="line189"></a>189 assert Triple.new("owl:equivalentProperty", "rdf:type", "owl:SymmetricProperty")
|
790
|
+
</span><span class="marked1"><a name="line190"></a>190 assert Triple.new("owl:equivalentProperty", "rdfs:subPropertyOf", "rdfs:subPropertyOf")
|
791
|
+
</span><span class="inferred0"><a name="line191"></a>191 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences
|
792
|
+
</span><span class="inferred1"><a name="line192"></a>192 end
|
793
|
+
</span><span class="inferred0"><a name="line193"></a>193
|
794
|
+
</span><span class="inferred1"><a name="line194"></a>194 ##
|
795
|
+
</span><span class="inferred0"><a name="line195"></a>195 # Implements Individual Equivalence through owl:sameAs
|
796
|
+
</span><span class="inferred1"><a name="line196"></a>196 #
|
797
|
+
</span><span class="inferred0"><a name="line197"></a>197 # ==== Semantics
|
798
|
+
</span><span class="inferred1"><a name="line198"></a>198 # Given:
|
799
|
+
</span><span class="inferred0"><a name="line199"></a>199 # x owl:sameAs y
|
800
|
+
</span><span class="inferred1"><a name="line200"></a>200 # o P x
|
801
|
+
</span><span class="inferred0"><a name="line201"></a>201 #
|
802
|
+
</span><span class="inferred1"><a name="line202"></a>202 # Infer:
|
803
|
+
</span><span class="inferred0"><a name="line203"></a>203 # o P y
|
804
|
+
</span><span class="inferred1"><a name="line204"></a>204 #
|
805
|
+
</span><span class="inferred0"><a name="line205"></a>205 # AND
|
806
|
+
</span><span class="inferred1"><a name="line206"></a>206 #
|
807
|
+
</span><span class="inferred0"><a name="line207"></a>207 # Given:
|
808
|
+
</span><span class="inferred1"><a name="line208"></a>208 # x owl:sameAs y
|
809
|
+
</span><span class="inferred0"><a name="line209"></a>209 # x P o
|
810
|
+
</span><span class="inferred1"><a name="line210"></a>210 #
|
811
|
+
</span><span class="inferred0"><a name="line211"></a>211 # Infer:
|
812
|
+
</span><span class="inferred1"><a name="line212"></a>212 # z rdf:type C
|
813
|
+
</span><span class="inferred0"><a name="line213"></a>213 #
|
814
|
+
</span><span class="inferred1"><a name="line214"></a>214 # ==== Example
|
815
|
+
</span><span class="inferred0"><a name="line215"></a>215 # p = Triple.new(":Pius", "owl:sameAs", ":Uzamere");
|
816
|
+
</span><span class="inferred1"><a name="line216"></a>216 # h = Triple.new(":Pius", "mit:took_course", ":6.171");
|
817
|
+
</span><span class="inferred0"><a name="line217"></a>217 # assert p; assert h; #=> infers a triple ~= Triple.new(":Uzamere", "mit:took_course", ":6.171")
|
818
|
+
</span><span class="inferred1"><a name="line218"></a>218 #
|
819
|
+
</span><span class="inferred0"><a name="line219"></a>219 # @author Pius Uzamere
|
820
|
+
</span><span class="inferred1"><a name="line220"></a>220
|
821
|
+
</span><span class="marked0"><a name="line221"></a>221 def owl_same_as
|
822
|
+
</span><span class="inferred1"><a name="line222"></a>222 end
|
823
|
+
</span><span class="inferred0"><a name="line223"></a>223
|
824
|
+
</span><span class="marked1"><a name="line224"></a>224 rule :owl_same_as_symmetricity,
|
825
|
+
</span><span class="marked0"><a name="line225"></a>225 [Triple,:ont_statement, m.predicate=="owl:sameAs"] do |v|
|
826
|
+
</span><span class="marked1"><a name="line226"></a>226 assert Triple.new("owl:sameAs", "rdf:type", "owl:SymmetricProperty")
|
827
|
+
</span><span class="marked0"><a name="line227"></a>227 puts "asserting the symmetricity of owl:sameAs"
|
828
|
+
</span><span class="inferred1"><a name="line228"></a>228 end
|
829
|
+
</span><span class="inferred0"><a name="line229"></a>229
|
830
|
+
</span><span class="inferred1"><a name="line230"></a>230
|
831
|
+
</span><span class="marked0"><a name="line231"></a>231 rule :owl_same_as_when_subject,
|
832
|
+
</span><span class="inferred1"><a name="line232"></a>232
|
833
|
+
</span><span class="marked0"><a name="line233"></a>233 [Triple,:ont_statement,{m.subject => :original, m.object => :doppelganger}, m.predicate=="owl:sameAs"],
|
834
|
+
</span><span class="marked1"><a name="line234"></a>234 [Triple,:fact, {m.predicate => :p, m.object => :common_object}, m.subject == b(:original), m.subject.not== b(:doppelganger), m.predicate.not== "owl:sameAs"],
|
835
|
+
</span><span class="marked0"><a name="line235"></a>235 [:not, Triple, m.predicate==b(:p), m.subject==b(:doppelganger), m.object==b(:common_object)] do |v|
|
836
|
+
</span><span class="inferred1"><a name="line236"></a>236
|
837
|
+
</span><span class="marked0"><a name="line237"></a>237 subj = v[:ont_statement].object
|
838
|
+
</span><span class="marked1"><a name="line238"></a>238 pred = v[:fact].predicate
|
839
|
+
</span><span class="marked0"><a name="line239"></a>239 obj = v[:fact].object
|
840
|
+
</span><span class="inferred1"><a name="line240"></a>240
|
841
|
+
</span><span class="marked0"><a name="line241"></a>241 puts "Made type inference based on owl:sameAs: Triple(#{subj}, #{pred}, #{obj})"
|
842
|
+
</span><span class="marked1"><a name="line242"></a>242 assert Triple.new(subj, pred, obj)
|
843
|
+
</span><span class="inferred0"><a name="line243"></a>243 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences
|
844
|
+
</span><span class="inferred1"><a name="line244"></a>244 end
|
845
|
+
</span><span class="inferred0"><a name="line245"></a>245
|
846
|
+
</span><span class="marked1"><a name="line246"></a>246 rule :owl_same_as_when_object,
|
847
|
+
</span><span class="marked0"><a name="line247"></a>247 [Triple,:ont_statement,{m.object => :original, m.subject => :doppelganger}, m.predicate=="owl:sameAs"],
|
848
|
+
</span><span class="marked1"><a name="line248"></a>248 [Triple,:fact, {m.predicate => :p, m.object => :ob, m.subject => :common_subject}, m.object == b(:original), m.object.not== b(:doppelganger), m.predicate.not== "owl:sameAs"],
|
849
|
+
</span><span class="marked0"><a name="line249"></a>249 [:not, Triple, m.predicate==b(:p), m.subject==b(:common_subject), m.object==b(:doppelganger)] do |v|
|
850
|
+
</span><span class="inferred1"><a name="line250"></a>250
|
851
|
+
</span><span class="marked0"><a name="line251"></a>251 obj = v[:ont_statement].subject
|
852
|
+
</span><span class="marked1"><a name="line252"></a>252 pred = v[:fact].predicate
|
853
|
+
</span><span class="marked0"><a name="line253"></a>253 subj = v[:fact].subject
|
854
|
+
</span><span class="inferred1"><a name="line254"></a>254
|
855
|
+
</span><span class="marked0"><a name="line255"></a>255 puts "Made type inference based on owl:sameAs: Triple(#{subj}, #{pred}, #{obj})"
|
856
|
+
</span><span class="marked1"><a name="line256"></a>256 assert Triple.new(subj, pred, obj)
|
857
|
+
</span><span class="inferred0"><a name="line257"></a>257 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences
|
858
|
+
</span><span class="inferred1"><a name="line258"></a>258 end
|
859
|
+
</span><span class="inferred0"><a name="line259"></a>259
|
860
|
+
</span><span class="inferred1"><a name="line260"></a>260 ##
|
861
|
+
</span><span class="inferred0"><a name="line261"></a>261 # owl:FunctionalProperty
|
862
|
+
</span><span class="inferred1"><a name="line262"></a>262 #
|
863
|
+
</span><span class="inferred0"><a name="line263"></a>263 # ==== Semantics
|
864
|
+
</span><span class="inferred1"><a name="line264"></a>264 # Given:
|
865
|
+
</span><span class="inferred0"><a name="line265"></a>265 # P rdf:type owl:FunctionalProperty
|
866
|
+
</span><span class="inferred1"><a name="line266"></a>266 # x P y
|
867
|
+
</span><span class="inferred0"><a name="line267"></a>267 # x P z
|
868
|
+
</span><span class="inferred1"><a name="line268"></a>268 #
|
869
|
+
</span><span class="inferred0"><a name="line269"></a>269 # Infer:
|
870
|
+
</span><span class="inferred1"><a name="line270"></a>270 # y owl:sameAs z
|
871
|
+
</span><span class="inferred0"><a name="line271"></a>271 #
|
872
|
+
</span><span class="inferred1"><a name="line272"></a>272 # ==== Example
|
873
|
+
</span><span class="inferred0"><a name="line273"></a>273 # p = Triple.new("mit:had_academic_advisor", "rdf:type", "owl:FunctionalProperty");
|
874
|
+
</span><span class="inferred1"><a name="line274"></a>274 # h = Triple.new(":Pius", "mit:had_academic_advisor", ":Hal");
|
875
|
+
</span><span class="inferred0"><a name="line275"></a>275 # d = Triple.new(":Pius", "mit:had_academic_advisor", ":Dude_Who_Wrote_SICP_With_Gerald_Sussman");
|
876
|
+
</span><span class="inferred1"><a name="line276"></a>276 # assert p; assert h; assert d; #=> infers a triple ~= Triple.new(":Hal", "owl:sameAs", ":Dude_Who_Wrote_SICP_With_Gerald_Sussman")
|
877
|
+
</span><span class="inferred0"><a name="line277"></a>277 #
|
878
|
+
</span><span class="inferred1"><a name="line278"></a>278 # @author Pius Uzamere
|
879
|
+
</span><span class="inferred0"><a name="line279"></a>279
|
880
|
+
</span><span class="marked1"><a name="line280"></a>280 def owl_functional_property
|
881
|
+
</span><span class="inferred0"><a name="line281"></a>281 end
|
882
|
+
</span><span class="inferred1"><a name="line282"></a>282
|
883
|
+
</span><span class="marked0"><a name="line283"></a>283 rule :owl_functional_property,
|
884
|
+
</span><span class="marked1"><a name="line284"></a>284 [Triple,:ont_statement,{m.subject => :the_prop}, m.predicate == "rdf:type", m.object=="owl:FunctionalProperty"],
|
885
|
+
</span><span class="marked0"><a name="line285"></a>285 [Triple,:fact1, {m.subject => :common_subject, m.object => :first_object}, m.predicate == b(:the_prop)],
|
886
|
+
</span><span class="marked1"><a name="line286"></a>286 [Triple,:fact2, {m.object => :second_object}, m.subject == b(:common_subject), m.predicate == b(:the_prop)] do |v|
|
887
|
+
</span><span class="inferred0"><a name="line287"></a>287
|
888
|
+
</span><span class="marked1"><a name="line288"></a>288 subj = v[:fact1].object
|
889
|
+
</span><span class="marked0"><a name="line289"></a>289 obj = v[:fact2].object
|
890
|
+
</span><span class="inferred1"><a name="line290"></a>290
|
891
|
+
</span><span class="marked0"><a name="line291"></a>291 puts "Made type inference based on owl:FunctionalProperty: Triple(#{subj}, owl:sameAs, #{obj})"
|
892
|
+
</span><span class="marked1"><a name="line292"></a>292 assert Triple.new(subj, "owl:sameAs", obj)
|
893
|
+
</span><span class="inferred0"><a name="line293"></a>293 end
|
894
|
+
</span><span class="inferred1"><a name="line294"></a>294
|
895
|
+
</span><span class="inferred0"><a name="line295"></a>295 ##
|
896
|
+
</span><span class="inferred1"><a name="line296"></a>296 # owl:InverseFunctionalProperty
|
897
|
+
</span><span class="inferred0"><a name="line297"></a>297 #
|
898
|
+
</span><span class="inferred1"><a name="line298"></a>298 # ==== Semantics
|
899
|
+
</span><span class="inferred0"><a name="line299"></a>299 # Given:
|
900
|
+
</span><span class="inferred1"><a name="line300"></a>300 # P rdf:type owl:InverseFunctionalProperty
|
901
|
+
</span><span class="inferred0"><a name="line301"></a>301 # z P x
|
902
|
+
</span><span class="inferred1"><a name="line302"></a>302 # y P x
|
903
|
+
</span><span class="inferred0"><a name="line303"></a>303 #
|
904
|
+
</span><span class="inferred1"><a name="line304"></a>304 # Infer:
|
905
|
+
</span><span class="inferred0"><a name="line305"></a>305 # y owl:sameAs z
|
906
|
+
</span><span class="inferred1"><a name="line306"></a>306 #
|
907
|
+
</span><span class="inferred0"><a name="line307"></a>307 # ==== Example
|
908
|
+
</span><span class="inferred1"><a name="line308"></a>308 # p = Triple.new("mit:lived_alone_fall_2004_in", "rdf:type", "owl:FunctionalProperty");
|
909
|
+
</span><span class="inferred0"><a name="line309"></a>309 # h = Triple.new(":Pius", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House");
|
910
|
+
</span><span class="inferred1"><a name="line310"></a>310 # d = Triple.new(":2004_UA_President", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House");
|
911
|
+
</span><span class="inferred0"><a name="line311"></a>311 # assert p; assert h; assert d; #=> infers a triple ~= Triple.new(":Pius", "owl:sameAs", ":2004_UA_President")
|
912
|
+
</span><span class="inferred1"><a name="line312"></a>312 #
|
913
|
+
</span><span class="inferred0"><a name="line313"></a>313 # @author Pius Uzamere
|
914
|
+
</span><span class="inferred1"><a name="line314"></a>314
|
915
|
+
</span><span class="marked0"><a name="line315"></a>315 def owl_inverse_functional_property
|
916
|
+
</span><span class="inferred1"><a name="line316"></a>316 end
|
917
|
+
</span><span class="inferred0"><a name="line317"></a>317
|
918
|
+
</span><span class="marked1"><a name="line318"></a>318 rule :owl_inverse_functional_property,
|
919
|
+
</span><span class="marked0"><a name="line319"></a>319 [Triple,:ont_statement,{m.subject => :the_prop}, m.predicate == "rdf:type", m.object=="owl:InverseFunctionalProperty"],
|
920
|
+
</span><span class="marked1"><a name="line320"></a>320 [Triple,:fact1, {m.object => :common_object, m.subject => :first_subject}, m.predicate == b(:the_prop)],
|
921
|
+
</span><span class="marked0"><a name="line321"></a>321 [Triple,:fact2, {m.subject => :second_subject}, m.object == b(:common_object), m.predicate == b(:the_prop)] do |v|
|
922
|
+
</span><span class="inferred1"><a name="line322"></a>322
|
923
|
+
</span><span class="marked0"><a name="line323"></a>323 subj = v[:fact1].subject
|
924
|
+
</span><span class="marked1"><a name="line324"></a>324 obj = v[:fact2].subject
|
925
|
+
</span><span class="inferred0"><a name="line325"></a>325
|
926
|
+
</span><span class="marked1"><a name="line326"></a>326 puts "Made type inference based on owl:InverseFunctionalProperty: Triple(#{subj}, owl:sameAs, #{obj})"
|
927
|
+
</span><span class="marked0"><a name="line327"></a>327 assert Triple.new(subj, "owl:sameAs", obj)
|
928
|
+
</span><span class="inferred1"><a name="line328"></a>328 end
|
929
|
+
</span><span class="inferred0"><a name="line329"></a>329
|
930
|
+
</span><span class="inferred1"><a name="line330"></a>330 end
|
931
|
+
</span><span class="inferred0"><a name="line331"></a>331 end
|
932
|
+
</span><span class="inferred1"><a name="line332"></a>332
|
933
|
+
</span><span class="marked0"><a name="line333"></a>333 @e = engine :engine do |e|
|
934
|
+
</span><span class="marked1"><a name="line334"></a>334 RdfsPlusRulebook.new(e).rules
|
935
|
+
</span><span class="inferred0"><a name="line335"></a>335
|
936
|
+
</span><span class="marked1"><a name="line336"></a>336 p = Triple.new("mit:lived_alone_fall_2004_in", "rdf:type", "owl:InverseFunctionalProperty");
|
937
|
+
</span><span class="marked0"><a name="line337"></a>337 h = Triple.new(":Pius", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House");
|
938
|
+
</span><span class="marked1"><a name="line338"></a>338 d = Triple.new(":2004_UA_President", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House");
|
939
|
+
</span><span class="marked0"><a name="line339"></a>339 e.assert p; e.assert h; e.assert d;
|
940
|
+
</span><span class="marked1"><a name="line340"></a>340 e.match
|
941
|
+
</span><span class="inferred0"><a name="line341"></a>341 end
|
942
|
+
</span></pre><hr/>
|
943
|
+
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
944
|
+
version 0.8.1.3.</p>
|
945
|
+
<p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
|
946
|
+
</a>
|
947
|
+
<a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
|
948
|
+
</a>
|
949
|
+
</p>
|
950
|
+
</body>
|
951
|
+
</html>
|