rdf-reasoner 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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