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 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.0
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
  #
@@ -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
- case range
221
- when RDF::RDFS.Literal, RDF.XMLLiteral, RDF.HTML then true
222
- else
223
- if range.start_with?(RDF::XSD)
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.simple? && RDF::Literal::Boolean.new(resource.value).valid?
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
@@ -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.simple? && RDF::Literal::Boolean.new(resource.value).valid?
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.simple? && RDF::Literal::DateTime.new(resource.value).valid?
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.simple? && RDF::Literal::Duration.new(value).valid?
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.simple? && RDF::Literal::Time.new(resource.value).valid?
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.simple? && RDF::Literal::Integer.new(resource.value).valid? ||
116
- resource.simple? && RDF::Literal::Double.new(resource.value).valid?
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.simple? && RDF::Literal::Double.new(resource.value).valid?
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.simple? && RDF::Literal::Integer.new(resource.value).valid?
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.simple? && RDF::Literal::AnyURI.new(resource.value).valid?
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.simple? && RDF::Literal(resource.value, :datatype => RDF::URI(range)).valid?
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.0
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-11 00:00:00.000000000 Z
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: 1.8.23.2
156
+ rubygems_version: 2.4.3
173
157
  signing_key:
174
- specification_version: 3
158
+ specification_version: 4
175
159
  summary: RDFS/OWL Reasoner for RDF.rb
176
160
  test_files: []
177
161
  has_rdoc: false