rdf-reasoner 0.2.0 → 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.
- checksums.yaml +7 -0
- data/VERSION +1 -1
- data/lib/rdf/reasoner.rb +19 -0
- data/lib/rdf/reasoner/rdfs.rb +44 -5
- data/lib/rdf/reasoner/schema.rb +10 -28
- metadata +24 -40
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: beba6739c5b868b8257113fbe7cbb61f2dd5888d
|
4
|
+
data.tar.gz: 32ad2d774c51959bb48ed65f45543db13b671678
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b212c36158e528f01379f54661c0bd6a3ff120daa7bf4a80cd9a6d3d08c2d8ed6b951221b8bae67d9f114852dd823e45773ce227ecdcc538c24b511f1d75923d
|
7
|
+
data.tar.gz: f7bf9b01e3551ca0ed1a502821415098e9d5116c4dc34f82557db68761a6b253110835df41cf118cd4b5e3de978594d0e88a99c9aba345f2b8aada030420f825
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/rdf/reasoner.rb
CHANGED
@@ -13,6 +13,25 @@ module RDF
|
|
13
13
|
autoload :Schema, 'rdf/reasoner/schema'
|
14
14
|
autoload :VERSION, 'rdf/reasoner/version'
|
15
15
|
|
16
|
+
# See http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
|
17
|
+
#
|
18
|
+
#
|
19
|
+
ISO_8601 = %r(^
|
20
|
+
# Year
|
21
|
+
([\+-]?\d{4}(?!\d{2}\b))
|
22
|
+
# Month
|
23
|
+
((-?)((0[1-9]|1[0-2])
|
24
|
+
(\3([12]\d|0[1-9]|3[01]))?
|
25
|
+
| W([0-4]\d|5[0-2])(-?[1-7])?
|
26
|
+
| (00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))
|
27
|
+
([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)
|
28
|
+
([\.,]\d+(?!:))?)?
|
29
|
+
(\17[0-5]\d([\.,]\d+)?)?
|
30
|
+
([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?
|
31
|
+
)?
|
32
|
+
)?
|
33
|
+
$)x.freeze
|
34
|
+
|
16
35
|
##
|
17
36
|
# Add entailment support for the specified regime
|
18
37
|
#
|
data/lib/rdf/reasoner/rdfs.rb
CHANGED
@@ -217,15 +217,54 @@ module RDF::Reasoner
|
|
217
217
|
if respond_to?(:range) && !(ranges = Array(self.range) - [RDF::OWL.Thing, RDF::RDFS.Resource]).empty?
|
218
218
|
if resource.literal?
|
219
219
|
ranges.all? do |range|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
if range
|
220
|
+
if [RDF::RDFS.Literal, RDF.XMLLiteral, RDF.HTML].include?(range)
|
221
|
+
true # Don't bother checking for validity
|
222
|
+
elsif range.start_with?(RDF::XSD)
|
223
|
+
# XSD types are valid if the datatype matches, or they are plain and valid according to the grammar of the range
|
224
224
|
resource.datatype == range ||
|
225
|
-
resource.
|
225
|
+
resource.plain? && RDF::Literal.new(resource.value, datatype: range).valid?
|
226
|
+
elsif range.start_with?(RDF::OGC)
|
227
|
+
case range
|
228
|
+
when RDF::OGC.boolean_str
|
229
|
+
[RDF::OGC.boolean_str, RDF::XSD.boolean].include?(resource.datatype) ||
|
230
|
+
resource.plain? && RDF::Literal::Boolean.new(resource.value).valid?
|
231
|
+
when RDF::OGC.date_time_str
|
232
|
+
# Schema.org date based on ISO 8601, mapped to appropriate XSD types for validation
|
233
|
+
case resource
|
234
|
+
when RDF::Literal::Date, RDF::Literal::Time, RDF::Literal::DateTime, RDF::Literal::Duration
|
235
|
+
resource.valid?
|
236
|
+
else
|
237
|
+
ISO_8601.match(resource.value)
|
238
|
+
end
|
239
|
+
when RDF::OGC.determiner_str
|
240
|
+
# The lexical space: "", "the", "a", "an", and "auto".
|
241
|
+
resource.plain? && (%w(the a an auto) + [""]).include?(resource.value)
|
242
|
+
when RDF::OGC.float_str
|
243
|
+
# A string representation of a 64-bit signed floating point number. Example lexical values include "1.234", "-1.234", "1.2e3", "-1.2e3", and "7E-10".
|
244
|
+
[RDF::OGC.float_str, RDF::Literal::Double, RDF::Literal::Float].include?(resource.datatype) ||
|
245
|
+
resource.plain? && RDF::Literal::Double.new(resource.value).valid?
|
246
|
+
when RDF::OGC.integer_str
|
247
|
+
resource.is_a?(RDF::Literal::Integer) ||
|
248
|
+
[RDF::OGC.integer_str].include?(resource.datatype) ||
|
249
|
+
resource.plain? && RDF::Literal::Integer.new(resource.value).valid?
|
250
|
+
when RDF::OGC.mime_type_str
|
251
|
+
# Valid mime type strings \(e.g., "application/mp3"\).
|
252
|
+
[RDF::OGC.mime_type_str].include?(resource.datatype) ||
|
253
|
+
resource.plain? && resource.value =~ %r(^[\w\-\+]+/[\w\-\+]+$)
|
254
|
+
when RDF::OGC.string
|
255
|
+
resource.plain?
|
256
|
+
when RDF::OGC.url
|
257
|
+
# A string of Unicode characters forming a valid URL having the http or https scheme.
|
258
|
+
u = RDF::URI(resource.value)
|
259
|
+
resource.datatype == RDF::OGC.url ||
|
260
|
+
resource.datatype == RDF::XSD.anyURI ||
|
261
|
+
resource.simple? && u.valid? && u.scheme.to_s =~ /^https?$/
|
226
262
|
else
|
263
|
+
# Unknown datatype
|
227
264
|
false
|
228
265
|
end
|
266
|
+
else
|
267
|
+
false
|
229
268
|
end
|
230
269
|
end
|
231
270
|
else
|
data/lib/rdf/reasoner/schema.rb
CHANGED
@@ -9,24 +9,6 @@ module RDF::Reasoner
|
|
9
9
|
#
|
10
10
|
# Extends `RDF::Vocabulary::Term` with specific entailment capabilities
|
11
11
|
module Schema
|
12
|
-
# See http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
|
13
|
-
#
|
14
|
-
#
|
15
|
-
ISO_8601 = %r(^
|
16
|
-
# Year
|
17
|
-
([\+-]?\d{4}(?!\d{2}\b))
|
18
|
-
# Month
|
19
|
-
((-?)((0[1-9]|1[0-2])
|
20
|
-
(\3([12]\d|0[1-9]|3[01]))?
|
21
|
-
| W([0-4]\d|5[0-2])(-?[1-7])?
|
22
|
-
| (00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))
|
23
|
-
([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)
|
24
|
-
([\.,]\d+(?!:))?)?
|
25
|
-
(\17[0-5]\d([\.,]\d+)?)?
|
26
|
-
([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?
|
27
|
-
)?
|
28
|
-
)?
|
29
|
-
$)x.freeze
|
30
12
|
|
31
13
|
##
|
32
14
|
# Schema.org requires that if the property has a domain, and the resource has a type that some type matches some domain.
|
@@ -86,7 +68,7 @@ module RDF::Reasoner
|
|
86
68
|
when RDF::SCHEMA.Text then resource.plain? || resource.datatype == RDF::SCHEMA.Text
|
87
69
|
when RDF::SCHEMA.Boolean
|
88
70
|
[RDF::SCHEMA.Boolean, RDF::XSD.boolean].include?(resource.datatype) ||
|
89
|
-
resource.
|
71
|
+
resource.plain? && RDF::Literal::Boolean.new(resource.value).valid?
|
90
72
|
when RDF::SCHEMA.Date
|
91
73
|
# Schema.org date based on ISO 8601, mapped to appropriate XSD types for validation
|
92
74
|
case resource
|
@@ -98,34 +80,34 @@ module RDF::Reasoner
|
|
98
80
|
when RDF::SCHEMA.DateTime
|
99
81
|
resource.datatype == RDF::SCHEMA.DateTime ||
|
100
82
|
resource.is_a?(RDF::Literal::DateTime) ||
|
101
|
-
resource.
|
83
|
+
resource.plain? && RDF::Literal::DateTime.new(resource.value).valid?
|
102
84
|
when RDF::SCHEMA.Duration
|
103
85
|
value = resource.value
|
104
86
|
value = "P#{value}" unless value.start_with?("P")
|
105
87
|
resource.datatype == RDF::SCHEMA.Duration ||
|
106
88
|
resource.is_a?(RDF::Literal::Duration) ||
|
107
|
-
resource.
|
89
|
+
resource.plain? && RDF::Literal::Duration.new(value).valid?
|
108
90
|
when RDF::SCHEMA.Time
|
109
91
|
resource.datatype == RDF::SCHEMA.Time ||
|
110
92
|
resource.is_a?(RDF::Literal::Time) ||
|
111
|
-
resource.
|
93
|
+
resource.plain? && RDF::Literal::Time.new(resource.value).valid?
|
112
94
|
when RDF::SCHEMA.Number
|
113
95
|
resource.is_a?(RDF::Literal::Numeric) ||
|
114
96
|
[RDF::SCHEMA.Number, RDF::SCHEMA.Float, RDF::SCHEMA.Integer].include?(resource.datatype) ||
|
115
|
-
resource.
|
116
|
-
resource.
|
97
|
+
resource.plain? && RDF::Literal::Integer.new(resource.value).valid? ||
|
98
|
+
resource.plain? && RDF::Literal::Double.new(resource.value).valid?
|
117
99
|
when RDF::SCHEMA.Float
|
118
100
|
resource.is_a?(RDF::Literal::Double) ||
|
119
101
|
[RDF::SCHEMA.Number, RDF::SCHEMA.Float].include?(resource.datatype) ||
|
120
|
-
resource.
|
102
|
+
resource.plain? && RDF::Literal::Double.new(resource.value).valid?
|
121
103
|
when RDF::SCHEMA.Integer
|
122
104
|
resource.is_a?(RDF::Literal::Integer) ||
|
123
105
|
[RDF::SCHEMA.Number, RDF::SCHEMA.Integer].include?(resource.datatype) ||
|
124
|
-
resource.
|
106
|
+
resource.plain? && RDF::Literal::Integer.new(resource.value).valid?
|
125
107
|
when RDF::SCHEMA.URL
|
126
108
|
resource.datatype == RDF::SCHEMA.URL ||
|
127
109
|
resource.datatype == RDF::XSD.anyURI ||
|
128
|
-
resource.
|
110
|
+
resource.plain? && RDF::Literal::AnyURI.new(resource.value).valid?
|
129
111
|
else
|
130
112
|
# If this is an XSD range, look for appropriate literal
|
131
113
|
if range.start_with?(RDF::XSD.to_s)
|
@@ -133,7 +115,7 @@ module RDF::Reasoner
|
|
133
115
|
true
|
134
116
|
else
|
135
117
|
# Valid if cast as datatype
|
136
|
-
resource.
|
118
|
+
resource.plain? && RDF::Literal(resource.value, :datatype => RDF::URI(range)).valid?
|
137
119
|
end
|
138
120
|
else
|
139
121
|
# Otherwise, presume that the range refers to a typed resource. This is allowed if the value is a plain literal
|
metadata
CHANGED
@@ -1,132 +1,117 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-reasoner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gregg Kellogg
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-12-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rdf
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.1'
|
22
|
-
- -
|
20
|
+
- - ">="
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 1.1.4.2
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- - ~>
|
27
|
+
- - "~>"
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '1.1'
|
33
|
-
- -
|
30
|
+
- - ">="
|
34
31
|
- !ruby/object:Gem::Version
|
35
32
|
version: 1.1.4.2
|
36
33
|
- !ruby/object:Gem::Dependency
|
37
34
|
name: rdf-xsd
|
38
35
|
requirement: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
|
-
- - ~>
|
37
|
+
- - "~>"
|
42
38
|
- !ruby/object:Gem::Version
|
43
39
|
version: '1.1'
|
44
40
|
type: :runtime
|
45
41
|
prerelease: false
|
46
42
|
version_requirements: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
43
|
requirements:
|
49
|
-
- - ~>
|
44
|
+
- - "~>"
|
50
45
|
- !ruby/object:Gem::Version
|
51
46
|
version: '1.1'
|
52
47
|
- !ruby/object:Gem::Dependency
|
53
48
|
name: rdf-turtle
|
54
49
|
requirement: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
50
|
requirements:
|
57
|
-
- - ~>
|
51
|
+
- - "~>"
|
58
52
|
- !ruby/object:Gem::Version
|
59
53
|
version: '1.1'
|
60
54
|
type: :runtime
|
61
55
|
prerelease: false
|
62
56
|
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
57
|
requirements:
|
65
|
-
- - ~>
|
58
|
+
- - "~>"
|
66
59
|
- !ruby/object:Gem::Version
|
67
60
|
version: '1.1'
|
68
61
|
- !ruby/object:Gem::Dependency
|
69
62
|
name: linkeddata
|
70
63
|
requirement: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
64
|
requirements:
|
73
|
-
- - ~>
|
65
|
+
- - "~>"
|
74
66
|
- !ruby/object:Gem::Version
|
75
67
|
version: '1.1'
|
76
68
|
type: :development
|
77
69
|
prerelease: false
|
78
70
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
71
|
requirements:
|
81
|
-
- - ~>
|
72
|
+
- - "~>"
|
82
73
|
- !ruby/object:Gem::Version
|
83
74
|
version: '1.1'
|
84
75
|
- !ruby/object:Gem::Dependency
|
85
76
|
name: equivalent-xml
|
86
77
|
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
78
|
requirements:
|
89
|
-
- - ~>
|
79
|
+
- - "~>"
|
90
80
|
- !ruby/object:Gem::Version
|
91
81
|
version: '0.4'
|
92
82
|
type: :development
|
93
83
|
prerelease: false
|
94
84
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
85
|
requirements:
|
97
|
-
- - ~>
|
86
|
+
- - "~>"
|
98
87
|
- !ruby/object:Gem::Version
|
99
88
|
version: '0.4'
|
100
89
|
- !ruby/object:Gem::Dependency
|
101
90
|
name: rspec
|
102
91
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
92
|
requirements:
|
105
|
-
- - ~>
|
93
|
+
- - "~>"
|
106
94
|
- !ruby/object:Gem::Version
|
107
95
|
version: '3.0'
|
108
96
|
type: :development
|
109
97
|
prerelease: false
|
110
98
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
99
|
requirements:
|
113
|
-
- - ~>
|
100
|
+
- - "~>"
|
114
101
|
- !ruby/object:Gem::Version
|
115
102
|
version: '3.0'
|
116
103
|
- !ruby/object:Gem::Dependency
|
117
104
|
name: yard
|
118
105
|
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
106
|
requirements:
|
121
|
-
- - ~>
|
107
|
+
- - "~>"
|
122
108
|
- !ruby/object:Gem::Version
|
123
109
|
version: '0.8'
|
124
110
|
type: :development
|
125
111
|
prerelease: false
|
126
112
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
113
|
requirements:
|
129
|
-
- - ~>
|
114
|
+
- - "~>"
|
130
115
|
- !ruby/object:Gem::Version
|
131
116
|
version: '0.8'
|
132
117
|
description: Reasons over RDFS/OWL vocabularies to generate statements which are entailed
|
@@ -142,36 +127,35 @@ files:
|
|
142
127
|
- README.md
|
143
128
|
- UNLICENSE
|
144
129
|
- VERSION
|
130
|
+
- lib/rdf/reasoner.rb
|
145
131
|
- lib/rdf/reasoner/extensions.rb
|
146
132
|
- lib/rdf/reasoner/owl.rb
|
147
133
|
- lib/rdf/reasoner/rdfs.rb
|
148
134
|
- lib/rdf/reasoner/schema.rb
|
149
135
|
- lib/rdf/reasoner/version.rb
|
150
|
-
- lib/rdf/reasoner.rb
|
151
136
|
homepage: http://github.com/gkellogg/rdf-reasoner
|
152
137
|
licenses:
|
153
138
|
- Public Domain
|
139
|
+
metadata: {}
|
154
140
|
post_install_message:
|
155
141
|
rdoc_options: []
|
156
142
|
require_paths:
|
157
143
|
- lib
|
158
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
145
|
requirements:
|
161
|
-
- -
|
146
|
+
- - ">="
|
162
147
|
- !ruby/object:Gem::Version
|
163
148
|
version: 1.9.3
|
164
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
-
none: false
|
166
150
|
requirements:
|
167
|
-
- -
|
151
|
+
- - ">="
|
168
152
|
- !ruby/object:Gem::Version
|
169
153
|
version: '0'
|
170
154
|
requirements: []
|
171
155
|
rubyforge_project:
|
172
|
-
rubygems_version:
|
156
|
+
rubygems_version: 2.4.3
|
173
157
|
signing_key:
|
174
|
-
specification_version:
|
158
|
+
specification_version: 4
|
175
159
|
summary: RDFS/OWL Reasoner for RDF.rb
|
176
160
|
test_files: []
|
177
161
|
has_rdoc: false
|