shex 0.6.3 → 0.6.4

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/lib/shex/meta.rb CHANGED
@@ -1,4 +1,4 @@
1
- # This file is automatically generated by ebnf version 2.1.3
1
+ # This file is automatically generated by ebnf version 2.2.1
2
2
  # Derived from etc/shex.ebnf
3
3
  module ShEx::Meta
4
4
  RULES = [
@@ -8,34 +8,21 @@ module ShEx::Meta
8
8
  EBNF::Rule.new(:_shexDoc_3, "1.3", [:seq, :_shexDoc_4, :_shexDoc_5]).extend(EBNF::PEG::Rule),
9
9
  EBNF::Rule.new(:_shexDoc_4, "1.4", [:alt, :notStartAction, :startActions]).extend(EBNF::PEG::Rule),
10
10
  EBNF::Rule.new(:_shexDoc_5, "1.5", [:star, :statement]).extend(EBNF::PEG::Rule),
11
- EBNF::Rule.new(:directive, "2", [:alt, :baseDecl, :prefixDecl]).extend(EBNF::PEG::Rule),
11
+ EBNF::Rule.new(:directive, "2", [:alt, :baseDecl, :prefixDecl, :importDecl]).extend(EBNF::PEG::Rule),
12
12
  EBNF::Rule.new(:baseDecl, "3", [:seq, "BASE", :IRIREF]).extend(EBNF::PEG::Rule),
13
13
  EBNF::Rule.new(:prefixDecl, "4", [:seq, "PREFIX", :PNAME_NS, :IRIREF]).extend(EBNF::PEG::Rule),
14
+ EBNF::Rule.new(:importDecl, "4.5", [:seq, "IMPORT", :IRIREF]).extend(EBNF::PEG::Rule),
14
15
  EBNF::Rule.new(:notStartAction, "5", [:alt, :start, :shapeExprDecl]).extend(EBNF::PEG::Rule),
15
- EBNF::Rule.new(:start, "6", [:seq, "START", "=", :_start_1, :_start_2, :_start_3]).extend(EBNF::PEG::Rule),
16
- EBNF::Rule.new(:_start_1, "6.1", [:opt, "NOT"]).extend(EBNF::PEG::Rule),
17
- EBNF::Rule.new(:_start_2, "6.2", [:alt, :shapeAtomNoRef, :shapeRef]).extend(EBNF::PEG::Rule),
18
- EBNF::Rule.new(:_start_3, "6.3", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
16
+ EBNF::Rule.new(:start, "6", [:seq, "START", "=", :inlineShapeExpression]).extend(EBNF::PEG::Rule),
19
17
  EBNF::Rule.new(:startActions, "7", [:plus, :codeDecl]).extend(EBNF::PEG::Rule),
20
18
  EBNF::Rule.new(:statement, "8", [:alt, :directive, :notStartAction]).extend(EBNF::PEG::Rule),
21
19
  EBNF::Rule.new(:shapeExprDecl, "9", [:seq, :shapeExprLabel, :_shapeExprDecl_1]).extend(EBNF::PEG::Rule),
22
20
  EBNF::Rule.new(:_shapeExprDecl_1, "9.1", [:alt, :shapeExpression, "EXTERNAL"]).extend(EBNF::PEG::Rule),
23
- EBNF::Rule.new(:shapeExpression, "10", [:alt, :_shapeExpression_1, :_shapeExpression_2, :_shapeExpression_3]).extend(EBNF::PEG::Rule),
24
- EBNF::Rule.new(:_shapeExpression_1, "10.1", [:seq, :_shapeExpression_4, :shapeAtomNoRef, :_shapeExpression_5]).extend(EBNF::PEG::Rule),
25
- EBNF::Rule.new(:_shapeExpression_4, "10.4", [:opt, "NOT"]).extend(EBNF::PEG::Rule),
26
- EBNF::Rule.new(:_shapeExpression_5, "10.5", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
27
- EBNF::Rule.new(:_shapeExpression_2, "10.2", [:seq, "NOT", :shapeRef, :_shapeExpression_6]).extend(EBNF::PEG::Rule),
28
- EBNF::Rule.new(:_shapeExpression_6, "10.6", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
29
- EBNF::Rule.new(:_shapeExpression_3, "10.3", [:seq, :shapeRef, :shapeOr]).extend(EBNF::PEG::Rule),
21
+ EBNF::Rule.new(:shapeExpression, "10", [:seq, :shapeOr]).extend(EBNF::PEG::Rule),
30
22
  EBNF::Rule.new(:inlineShapeExpression, "11", [:seq, :inlineShapeOr]).extend(EBNF::PEG::Rule),
31
- EBNF::Rule.new(:shapeOr, "12", [:alt, :_shapeOr_1, :_shapeOr_2]).extend(EBNF::PEG::Rule),
32
- EBNF::Rule.new(:_shapeOr_1, "12.1", [:plus, :_shapeOr_3]).extend(EBNF::PEG::Rule),
33
- EBNF::Rule.new(:_shapeOr_3, "12.3", [:seq, "OR", :shapeAnd]).extend(EBNF::PEG::Rule),
34
- EBNF::Rule.new(:_shapeOr_2, "12.2", [:seq, :_shapeOr_4, :_shapeOr_5]).extend(EBNF::PEG::Rule),
35
- EBNF::Rule.new(:_shapeOr_4, "12.4", [:plus, :_shapeOr_6]).extend(EBNF::PEG::Rule),
36
- EBNF::Rule.new(:_shapeOr_6, "12.6", [:seq, "AND", :shapeNot]).extend(EBNF::PEG::Rule),
37
- EBNF::Rule.new(:_shapeOr_5, "12.5", [:star, :_shapeOr_7]).extend(EBNF::PEG::Rule),
38
- EBNF::Rule.new(:_shapeOr_7, "12.7", [:seq, "OR", :shapeAnd]).extend(EBNF::PEG::Rule),
23
+ EBNF::Rule.new(:shapeOr, "12", [:seq, :shapeAnd, :_shapeOr_1]).extend(EBNF::PEG::Rule),
24
+ EBNF::Rule.new(:_shapeOr_1, "12.1", [:star, :_shapeOr_2]).extend(EBNF::PEG::Rule),
25
+ EBNF::Rule.new(:_shapeOr_2, "12.2", [:seq, "OR", :shapeAnd]).extend(EBNF::PEG::Rule),
39
26
  EBNF::Rule.new(:inlineShapeOr, "13", [:seq, :inlineShapeAnd, :_inlineShapeOr_1]).extend(EBNF::PEG::Rule),
40
27
  EBNF::Rule.new(:_inlineShapeOr_1, "13.1", [:star, :_inlineShapeOr_2]).extend(EBNF::PEG::Rule),
41
28
  EBNF::Rule.new(:_inlineShapeOr_2, "13.2", [:seq, "OR", :inlineShapeAnd]).extend(EBNF::PEG::Rule),
@@ -71,16 +58,14 @@ module ShEx::Meta
71
58
  EBNF::Rule.new(:inlineShapeOrRef, "22", [:alt, :inlineShapeDefinition, :shapeRef]).extend(EBNF::PEG::Rule),
72
59
  EBNF::Rule.new(:shapeRef, "23", [:alt, :ATPNAME_LN, :ATPNAME_NS, :_shapeRef_1]).extend(EBNF::PEG::Rule),
73
60
  EBNF::Rule.new(:_shapeRef_1, "23.1", [:seq, "@", :shapeExprLabel]).extend(EBNF::PEG::Rule),
74
- EBNF::Rule.new(:litNodeConstraint, "24", [:alt, :_litNodeConstraint_1, :_litNodeConstraint_2, :_litNodeConstraint_3, :_litNodeConstraint_4, :_litNodeConstraint_5]).extend(EBNF::PEG::Rule),
75
- EBNF::Rule.new(:_litNodeConstraint_1, "24.1", [:seq, "LITERAL", :_litNodeConstraint_6]).extend(EBNF::PEG::Rule),
61
+ EBNF::Rule.new(:litNodeConstraint, "24", [:alt, :_litNodeConstraint_1, :_litNodeConstraint_2, :_litNodeConstraint_3, :_litNodeConstraint_4]).extend(EBNF::PEG::Rule),
62
+ EBNF::Rule.new(:_litNodeConstraint_1, "24.1", [:seq, "LITERAL", :_litNodeConstraint_5]).extend(EBNF::PEG::Rule),
63
+ EBNF::Rule.new(:_litNodeConstraint_5, "24.5", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
64
+ EBNF::Rule.new(:_litNodeConstraint_2, "24.2", [:seq, :datatype, :_litNodeConstraint_6]).extend(EBNF::PEG::Rule),
76
65
  EBNF::Rule.new(:_litNodeConstraint_6, "24.6", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
77
- EBNF::Rule.new(:_litNodeConstraint_2, "24.2", [:seq, :nonLiteralKind, :_litNodeConstraint_7]).extend(EBNF::PEG::Rule),
78
- EBNF::Rule.new(:_litNodeConstraint_7, "24.7", [:star, :stringFacet]).extend(EBNF::PEG::Rule),
79
- EBNF::Rule.new(:_litNodeConstraint_3, "24.3", [:seq, :datatype, :_litNodeConstraint_8]).extend(EBNF::PEG::Rule),
80
- EBNF::Rule.new(:_litNodeConstraint_8, "24.8", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
81
- EBNF::Rule.new(:_litNodeConstraint_4, "24.4", [:seq, :valueSet, :_litNodeConstraint_9]).extend(EBNF::PEG::Rule),
82
- EBNF::Rule.new(:_litNodeConstraint_9, "24.9", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
83
- EBNF::Rule.new(:_litNodeConstraint_5, "24.5", [:plus, :numericFacet]).extend(EBNF::PEG::Rule),
66
+ EBNF::Rule.new(:_litNodeConstraint_3, "24.3", [:seq, :valueSet, :_litNodeConstraint_7]).extend(EBNF::PEG::Rule),
67
+ EBNF::Rule.new(:_litNodeConstraint_7, "24.7", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
68
+ EBNF::Rule.new(:_litNodeConstraint_4, "24.4", [:plus, :numericFacet]).extend(EBNF::PEG::Rule),
84
69
  EBNF::Rule.new(:nonLitNodeConstraint, "25", [:alt, :_nonLitNodeConstraint_1, :_nonLitNodeConstraint_2]).extend(EBNF::PEG::Rule),
85
70
  EBNF::Rule.new(:_nonLitNodeConstraint_1, "25.1", [:seq, :nonLiteralKind, :_nonLitNodeConstraint_3]).extend(EBNF::PEG::Rule),
86
71
  EBNF::Rule.new(:_nonLitNodeConstraint_3, "25.3", [:star, :stringFacet]).extend(EBNF::PEG::Rule),
@@ -116,11 +101,10 @@ module ShEx::Meta
116
101
  EBNF::Rule.new(:_groupTripleExpr_3, "40.3", [:opt, :unaryTripleExpr]).extend(EBNF::PEG::Rule),
117
102
  EBNF::Rule.new(:unaryTripleExpr, "43", [:alt, :_unaryTripleExpr_1, :include]).extend(EBNF::PEG::Rule),
118
103
  EBNF::Rule.new(:_unaryTripleExpr_1, "43.1", [:seq, :_unaryTripleExpr_2, :_unaryTripleExpr_3]).extend(EBNF::PEG::Rule),
119
- EBNF::Rule.new(:_unaryTripleExpr_2, "43.2", [:opt, :productionLabel]).extend(EBNF::PEG::Rule),
104
+ EBNF::Rule.new(:_unaryTripleExpr_2, "43.2", [:opt, :_unaryTripleExpr_4]).extend(EBNF::PEG::Rule),
105
+ EBNF::Rule.new(:_unaryTripleExpr_4, "43.4", [:seq, "$", :tripleExprLabel]).extend(EBNF::PEG::Rule),
120
106
  EBNF::Rule.new(:_unaryTripleExpr_3, "43.3", [:alt, :tripleConstraint, :bracketedTripleExpr]).extend(EBNF::PEG::Rule),
121
- EBNF::Rule.new(:productionLabel, "43a", [:seq, "$", :_productionLabel_1]).extend(EBNF::PEG::Rule),
122
- EBNF::Rule.new(:_productionLabel_1, "43a.1", [:alt, :iri, :blankNode]).extend(EBNF::PEG::Rule),
123
- EBNF::Rule.new(:bracketedTripleExpr, "44", [:seq, "(", :oneOfTripleExpr, ")", :_bracketedTripleExpr_1, :_bracketedTripleExpr_2, :semanticActions]).extend(EBNF::PEG::Rule),
107
+ EBNF::Rule.new(:bracketedTripleExpr, "44", [:seq, "(", :tripleExpression, ")", :_bracketedTripleExpr_1, :_bracketedTripleExpr_2, :semanticActions]).extend(EBNF::PEG::Rule),
124
108
  EBNF::Rule.new(:_bracketedTripleExpr_1, "44.1", [:opt, :cardinality]).extend(EBNF::PEG::Rule),
125
109
  EBNF::Rule.new(:_bracketedTripleExpr_2, "44.2", [:star, :annotation]).extend(EBNF::PEG::Rule),
126
110
  EBNF::Rule.new(:tripleConstraint, "45", [:seq, :_tripleConstraint_1, :predicate, :inlineShapeExpression, :_tripleConstraint_2, :_tripleConstraint_3, :semanticActions]).extend(EBNF::PEG::Rule),
@@ -149,10 +133,13 @@ module ShEx::Meta
149
133
  EBNF::Rule.new(:_literalRange_3, "53.3", [:star, :literalExclusion]).extend(EBNF::PEG::Rule),
150
134
  EBNF::Rule.new(:literalExclusion, "54", [:seq, "-", :literal, :_literalExclusion_1]).extend(EBNF::PEG::Rule),
151
135
  EBNF::Rule.new(:_literalExclusion_1, "54.1", [:opt, "~"]).extend(EBNF::PEG::Rule),
152
- EBNF::Rule.new(:languageRange, "55", [:seq, :LANGTAG, :_languageRange_1]).extend(EBNF::PEG::Rule),
153
- EBNF::Rule.new(:_languageRange_1, "55.1", [:opt, :_languageRange_2]).extend(EBNF::PEG::Rule),
154
- EBNF::Rule.new(:_languageRange_2, "55.2", [:seq, "~", :_languageRange_3]).extend(EBNF::PEG::Rule),
155
- EBNF::Rule.new(:_languageRange_3, "55.3", [:star, :languageExclusion]).extend(EBNF::PEG::Rule),
136
+ EBNF::Rule.new(:languageRange, "55", [:alt, :_languageRange_1, :_languageRange_2]).extend(EBNF::PEG::Rule),
137
+ EBNF::Rule.new(:_languageRange_1, "55.1", [:seq, :LANGTAG, :_languageRange_3]).extend(EBNF::PEG::Rule),
138
+ EBNF::Rule.new(:_languageRange_3, "55.3", [:opt, :_languageRange_4]).extend(EBNF::PEG::Rule),
139
+ EBNF::Rule.new(:_languageRange_4, "55.4", [:seq, "~", :_languageRange_5]).extend(EBNF::PEG::Rule),
140
+ EBNF::Rule.new(:_languageRange_5, "55.5", [:star, :languageExclusion]).extend(EBNF::PEG::Rule),
141
+ EBNF::Rule.new(:_languageRange_2, "55.2", [:seq, "@", "~", :_languageRange_6]).extend(EBNF::PEG::Rule),
142
+ EBNF::Rule.new(:_languageRange_6, "55.6", [:star, :languageExclusion]).extend(EBNF::PEG::Rule),
156
143
  EBNF::Rule.new(:languageExclusion, "56", [:seq, "-", :LANGTAG, :_languageExclusion_1]).extend(EBNF::PEG::Rule),
157
144
  EBNF::Rule.new(:_languageExclusion_1, "56.1", [:opt, "~"]).extend(EBNF::PEG::Rule),
158
145
  EBNF::Rule.new(:include, "57", [:seq, "&", :tripleExprLabel]).extend(EBNF::PEG::Rule),
data/lib/shex/parser.rb CHANGED
@@ -21,17 +21,11 @@ module ShEx
21
21
  attr_reader :options
22
22
 
23
23
  ##
24
- # The current input string being processed. XXX
24
+ # The current input string being processed.
25
25
  #
26
26
  # @return [String]
27
27
  attr_accessor :input
28
28
 
29
- ##
30
- # The current input tokens being processed. XXX
31
- #
32
- # @return [Array<Token>]
33
- attr_reader :tokens
34
-
35
29
  ##
36
30
  # The internal representation of the result using hierarchy of RDF objects and ShEx::Operator
37
31
  # objects.
@@ -160,12 +154,12 @@ module ShEx
160
154
  operands += semacts
161
155
  operands += starts
162
156
  operands << expressions.unshift(:shapes) unless expressions.empty?
163
- Algebra::Schema.new(*operands, **options)
157
+ Algebra::Schema.new(*operands, **self.options)
164
158
  end
165
159
  start_production(:_shexDoc_2, as_hash: true)
166
160
  start_production(:_shexDoc_3, as_hash: true)
167
161
 
168
- # [2] directive ::= baseDecl | prefixDecl
162
+ # [2] directive ::= baseDecl | prefixDecl | importDecl
169
163
 
170
164
  # [3] baseDecl ::= "BASE" IRIREF
171
165
  start_production(:baseDecl, as_hash: true, insensitive_strings: :lower)
@@ -182,15 +176,19 @@ module ShEx
182
176
  [:prefix, pfx.to_s, value[:IRIREF]]
183
177
  end
184
178
 
179
+ # [4] importDecl ::= "IMPORT" IRIREF
180
+ start_production(:importDecl, as_hash: true, insensitive_strings: :lower)
181
+ production(:importDecl) do |value|
182
+ Algebra::Import.new(value[:IRIREF], **self.options)
183
+ end
184
+
185
185
  # [5] notStartAction ::= start | shapeExprDecl
186
- # [6] start ::= "START" '=' "NOT"? (shapeAtomNoRef | shapeRef) shapeOr?
186
+ # [6] start ::= "START" '=' inlineShapeExpression
187
187
  start_production(:start, as_hash: true, insensitive_strings: :lower)
188
188
  production(:start) do |value|
189
- expr = value[:_start_2]
190
- expr = value[:_start_3].call(expr) if value[:_start_3]
191
- expr = Algebra::Not.new(expr) if value[:__start_1]
192
- Algebra::Start.new(expr)
189
+ Algebra::Start.new(value[:inlineShapeExpression], **self.options)
193
190
  end
191
+
194
192
  # [7] startActions ::= codeDecl+
195
193
 
196
194
  # [8] statement ::= directive | notStartAction
@@ -203,62 +201,36 @@ module ShEx
203
201
  when Algebra::NodeConstraint, Algebra::Or, Algebra::And, Algebra::Not, Algebra::Shape, RDF::Resource
204
202
  value[:_shapeExprDecl_1]
205
203
  when /external/i
206
- Algebra::External.new()
204
+ Algebra::External.new(**options)
207
205
  else
208
- Algebra::Shape.new()
206
+ Algebra::Shape.new(**options)
209
207
  end
210
208
  expression.id = id if id && !expression.is_a?(RDF::Resource)
211
209
 
212
210
  expression
213
211
  end
214
212
 
215
- # [10] shapeExpression ::= "NOT"? shapeAtomNoRef shapeOr?
216
- # | "NOT" shapeRef shapeOr?
217
- # | shapeRef shapeOr
218
- start_production(:_shapeExpression_1, as_hash: true, insensitive_strings: :lower)
219
- production(:_shapeExpression_1) do |value|
220
- # "NOT"? shapeAtomNoRef shapeOr?
221
- expr = value[:shapeAtomNoRef]
222
- expr = Algebra::Not.new(expr) if value[:_shapeExpression_4]
223
- expr = value[:_shapeExpression_5].call(expr) if value[:_shapeExpression_5]
224
- expr
225
- end
226
- start_production(:_shapeExpression_2, as_hash: true, insensitive_strings: :lower)
227
- production(:_shapeExpression_2) do |value|
228
- # "NOT" shapeRef shapeOr?
229
- expr = Algebra::Not.new(value[:shapeRef])
230
- expr = value[:_shapeExpression_6].call(expr) if value[:_shapeExpression_6]
231
- expr
232
- end
233
- start_production(:_shapeExpression_3, as_hash: true)
234
- production(:_shapeExpression_3) do |value|
235
- # shapeRef shapeOr
236
- value[:shapeOr].call(value[:shapeRef])
213
+ # [10] shapeExpression ::= shapeOr
214
+ production(:shapeExpression) do |value|
215
+ value.first[:shapeOr]
237
216
  end
238
217
 
239
218
  # [11] inlineShapeExpression ::= inlineShapeOr
240
219
  production(:inlineShapeExpression) do |value|
241
220
  value.first[:inlineShapeOr]
242
221
  end
243
- # [12] shapeOr ::= ("OR" shapeAnd)+
244
- # | ("AND" shapeNot)+ ("OR" shapeAnd)*
245
- # As shapeOr has an implicit first parameter from the invoking production's first element, the result is a block which will accept the value of that production and apply it to any RHS expression found here.
246
- start_production(:_shapeOr_1, insensitive_strings: :lower)
247
- production(:_shapeOr_1) do |value|
248
- # ("OR" shapeAnd)+
249
- -> (lhs) {Algebra::Or.new(lhs, *value.map {|v| v.last[:shapeAnd]})}
250
- end
251
- start_production(:_shapeOr_2, as_hash: true, insensitive_strings: :lower)
252
- production(:_shapeOr_2) do |value|
253
- # ("AND" shapeNot)+ ("OR" shapeAnd)*
254
- ands = value[:_shapeOr_4].map {|v| v.last[:shapeNot]}
255
- ors = value[:_shapeOr_5].map {|v| v.last[:shapeAnd]}
256
- if ors.empty?
257
- -> (lhs) {Algebra::And.new(lhs, *ands)}
222
+
223
+ # [12] shapeOr ::= shapeAnd ("OR" shapeAnd)*
224
+ start_production(:shapeOr, as_hash: true)
225
+ production(:shapeOr) do |value|
226
+ if value[:_shapeOr_1].empty?
227
+ value[:shapeAnd]
258
228
  else
259
- -> (lhs) {ShapeOr(Algebra::And.new(lhs, ands), *ors)}
229
+ lhs = value[:_shapeOr_1].map {|v| v.last[:shapeAnd]}
230
+ Algebra::Or.new(value[:shapeAnd], *lhs, **self.options)
260
231
  end
261
232
  end
233
+ start_production(:_shapeOr_2, insensitive_strings: :lower)
262
234
 
263
235
  # [13] inlineShapeOr ::= inlineShapeAnd ("OR" inlineShapeAnd)*
264
236
  start_production(:inlineShapeOr, as_hash: true)
@@ -267,7 +239,7 @@ module ShEx
267
239
  value[:inlineShapeAnd]
268
240
  else
269
241
  lhs = value[:_inlineShapeOr_1].map {|v| v.last[:inlineShapeAnd]}
270
- Algebra::Or.new(value[:inlineShapeAnd], *lhs)
242
+ Algebra::Or.new(value[:inlineShapeAnd], *lhs, **self.options)
271
243
  end
272
244
  end
273
245
  start_production(:_inlineShapeOr_2, insensitive_strings: :lower)
@@ -279,7 +251,7 @@ module ShEx
279
251
  value[:shapeNot]
280
252
  else
281
253
  lhs = value[:_shapeAnd_1].map {|v| v.last[:shapeNot]}
282
- Algebra::And.new(value[:shapeNot], *lhs)
254
+ Algebra::And.new(value[:shapeNot], *lhs, **self.options)
283
255
  end
284
256
  end
285
257
  start_production(:_shapeAnd_2, insensitive_strings: :lower)
@@ -291,7 +263,7 @@ module ShEx
291
263
  value[:inlineShapeNot]
292
264
  else
293
265
  lhs = value[:_inlineShapeAnd_1].map {|v| v.last[:inlineShapeNot]}
294
- Algebra::And.new(value[:inlineShapeNot], *lhs)
266
+ Algebra::And.new(value[:inlineShapeNot], *lhs, **self.options)
295
267
  end
296
268
  end
297
269
  start_production(:_inlineShapeAnd_2, insensitive_strings: :lower)
@@ -300,7 +272,7 @@ module ShEx
300
272
  start_production(:shapeNot, as_hash: true)
301
273
  production(:shapeNot) do |value|
302
274
  atom = value[:shapeAtom]
303
- value[:_shapeNot_1] ? Algebra::Not.new(atom) : atom
275
+ value[:_shapeNot_1] ? Algebra::Not.new(atom || Algebra::Shape.new(**options), **self.options) : atom
304
276
  end
305
277
  start_production(:_shapeNot_1, insensitive_strings: :lower)
306
278
 
@@ -308,7 +280,7 @@ module ShEx
308
280
  start_production(:inlineShapeNot, as_hash: true)
309
281
  production(:inlineShapeNot) do |value|
310
282
  atom = value[:inlineShapeAtom]
311
- value[:_inlineShapeNot] ? Algebra::Not.new(atom) : atom
283
+ value[:_inlineShapeNot_1] ? Algebra::Not.new(atom || Algebra::Shape.new(**options), **self.options) : atom
312
284
  end
313
285
  start_production(:_inlineShapeNot_1, insensitive_strings: :lower)
314
286
 
@@ -334,7 +306,7 @@ module ShEx
334
306
  case expressions.length
335
307
  when 0 then nil
336
308
  when 1 then expressions.first
337
- else Algebra::And.new(*expressions)
309
+ else Algebra::And.new(*expressions, **self.options)
338
310
  end
339
311
  end
340
312
  start_production(:_shapeAtom_1, as_hash: true)
@@ -365,7 +337,7 @@ module ShEx
365
337
  case expressions.length
366
338
  when 0 then nil
367
339
  when 1 then expressions.first
368
- else Algebra::And.new(*expressions)
340
+ else Algebra::And.new(*expressions, **self.options)
369
341
  end
370
342
  end
371
343
  start_production(:_shapeAtomNoRef_1, as_hash: true)
@@ -396,7 +368,7 @@ module ShEx
396
368
  case expressions.length
397
369
  when 0 then nil
398
370
  when 1 then expressions.first
399
- else Algebra::And.new(*expressions)
371
+ else Algebra::And.new(*expressions, **self.options)
400
372
  end
401
373
  end
402
374
  start_production(:_inlineShapeAtom_1, as_hash: true)
@@ -414,40 +386,45 @@ module ShEx
414
386
  end
415
387
 
416
388
  # [24] litNodeConstraint ::= "LITERAL" xsFacet*
417
- # | nonLiteralKind stringFacet*
418
389
  # | datatype xsFacet*
419
390
  # | valueSet xsFacet*
420
391
  # | numericFacet+
421
392
  start_production(:_litNodeConstraint_1, as_hash: true, insensitive_strings: :lower)
422
393
  production(:_litNodeConstraint_1) do |value|
423
- facets = value[:_litNodeConstraint_6]
394
+ # LITERAL" xsFacet*
395
+ facets = value[:_litNodeConstraint_5]
424
396
  validate_facets(facets, :litNodeConstraint)
425
- Algebra::NodeConstraint.new(:literal, *facets)
397
+ Algebra::NodeConstraint.new(:literal, *facets, **self.options)
426
398
  end
427
399
  start_production(:_litNodeConstraint_2, as_hash: true)
428
400
  production(:_litNodeConstraint_2) do |value|
429
- facets = Array(value[:_litNodeConstraint_7])
401
+ # datatype xsFacet*
402
+ facets = value[:_litNodeConstraint_6]
430
403
  validate_facets(facets, :litNodeConstraint)
431
- attrs = Array(value[:nonLiteralKind]) + facets
432
- Algebra::NodeConstraint.new(*attrs.compact)
404
+
405
+ # Numeric Facet Constraints can only be used when datatype is derived from the set of SPARQL 1.1 Operand Data Types
406
+ l = RDF::Literal("0", datatype: value[:datatype])
407
+ facets.each do |f|
408
+ error(nil, "#{f.first} constraint may only be used once on a numeric datatype (#{value[:datatype]})", production: :litNodeConstraint) if
409
+ f.to_s.match(/digits|inclusive|exclusive/) &&
410
+ !l.is_a?(RDF::Literal::Numeric)
411
+ end
412
+
413
+ attrs = [[:datatype, value[:datatype]]] + facets
414
+ Algebra::NodeConstraint.new(*attrs.compact, **self.options)
433
415
  end
434
416
  start_production(:_litNodeConstraint_3, as_hash: true)
435
417
  production(:_litNodeConstraint_3) do |value|
436
- facets = value[:_litNodeConstraint_8]
437
- validate_facets(facets, :litNodeConstraint)
438
- attrs = [[:datatype, value[:datatype]]] + facets
439
- Algebra::NodeConstraint.new(*attrs.compact)
440
- end
441
- start_production(:_litNodeConstraint_4, as_hash: true)
442
- production(:_litNodeConstraint_4) do |value|
443
- facets = value[:_litNodeConstraint_9]
418
+ # valueSet xsFacet*
419
+ facets = value[:_litNodeConstraint_7]
444
420
  validate_facets(facets, :litNodeConstraint)
445
421
  attrs = value[:valueSet]+ facets
446
- Algebra::NodeConstraint.new(*attrs.compact)
422
+ Algebra::NodeConstraint.new(*attrs.compact, **self.options)
447
423
  end
448
- production(:_litNodeConstraint_5) do |value|
424
+ production(:_litNodeConstraint_4) do |value|
425
+ # numericFacet+
449
426
  validate_facets(value, :litNodeConstraint)
450
- Algebra::NodeConstraint.new(*value)
427
+ Algebra::NodeConstraint.new(*value, **self.options)
451
428
  end
452
429
 
453
430
  # [25] nonLitNodeConstraint ::= nonLiteralKind stringFacet*
@@ -458,12 +435,12 @@ module ShEx
458
435
  facets = Array(value[:_nonLitNodeConstraint_3])
459
436
  validate_facets(facets, :nonLitNodeConstraint)
460
437
  attrs = Array(value[:nonLiteralKind]) + facets
461
- Algebra::NodeConstraint.new(*attrs.compact)
438
+ Algebra::NodeConstraint.new(*attrs.compact, **self.options)
462
439
  end
463
440
  production(:_nonLitNodeConstraint_2) do |value|
464
441
  # stringFacet+
465
442
  validate_facets(value, :nonLitNodeConstraint)
466
- Algebra::NodeConstraint.new(*value)
443
+ Algebra::NodeConstraint.new(*value, **self.options)
467
444
  end
468
445
 
469
446
  def validate_facets(facets, prod)
@@ -478,7 +455,7 @@ module ShEx
478
455
  # [26] nonLiteralKind ::= "IRI" | "BNODE" | "NONLITERAL"
479
456
  start_production(:nonLiteralKind, insensitive_strings: :lower)
480
457
  production(:nonLiteralKind) do |value|
481
- value.downcase.to_sym
458
+ value.to_sym
482
459
  end
483
460
 
484
461
  # [27] xsFacet ::= stringFacet | numericFacet
@@ -507,7 +484,7 @@ module ShEx
507
484
  end
508
485
  start_production(:_stringFacet_1, as_hash: true)
509
486
  production(:_stringFacet_1) do |value|
510
- [value[:stringLength].downcase.to_sym, value[:INTEGER]]
487
+ [value[:stringLength].to_sym, value[:INTEGER]]
511
488
  end
512
489
 
513
490
  # [29] stringLength ::= "LENGTH" | "MINLENGTH" | "MAXLENGTH"
@@ -517,11 +494,11 @@ module ShEx
517
494
  # | numericLength INTEGER
518
495
  start_production(:_numericFacet_1, as_hash: true)
519
496
  production(:_numericFacet_1) do |value|
520
- [value[:numericRange].downcase.to_sym, value[:numericLiteral]]
497
+ [value[:numericRange].to_sym, value[:numericLiteral]]
521
498
  end
522
499
  start_production(:_numericFacet_2, as_hash: true)
523
500
  production(:_numericFacet_2) do |value|
524
- [value[:numericLength].downcase.to_sym, value[:INTEGER]]
501
+ [value[:numericLength].to_sym, value[:INTEGER]]
525
502
  end
526
503
 
527
504
  # [31] numericRange ::= "MININCLUSIVE" | "MINEXCLUSIVE" | "MAXINCLUSIVE" | "MAXEXCLUSIVE"
@@ -549,15 +526,15 @@ module ShEx
549
526
  value[:_inlineShapeDefinition_2])
550
527
  end
551
528
  def shape_definition(extra_closed, expression, annotations = [], semact = [])
552
- closed = extra_closed.any? {|v| v.to_s.downcase == 'closed'}
553
- extra = extra_closed.reject {|v| v.to_s.downcase == 'closed'}
529
+ closed = extra_closed.any? {|v| v.to_s == 'closed'}
530
+ extra = extra_closed.reject {|v| v.to_s == 'closed'}
554
531
  attrs = extra
555
532
  attrs << :closed if closed
556
533
  attrs << expression if expression
557
534
  attrs += annotations
558
535
  attrs += semact
559
536
 
560
- Algebra::Shape.new(*attrs)
537
+ Algebra::Shape.new(*attrs, **self.options)
561
538
  end
562
539
  private :shape_definition
563
540
 
@@ -576,7 +553,7 @@ module ShEx
576
553
  start_production(:oneOfTripleExpr, as_hash: true)
577
554
  production(:oneOfTripleExpr) do |value|
578
555
  expressions = [value[:groupTripleExpr]] + value[:_oneOfTripleExpr_1]
579
- expressions.length == 1 ? expressions.first : Algebra::OneOf.new(*expressions)
556
+ expressions.length == 1 ? expressions.first : Algebra::OneOf.new(*expressions, **self.options)
580
557
  end
581
558
  production(:_oneOfTripleExpr_2) do |value|
582
559
  value.last[:groupTripleExpr]
@@ -586,13 +563,13 @@ module ShEx
586
563
  start_production(:groupTripleExpr, as_hash: true)
587
564
  production(:groupTripleExpr) do |value|
588
565
  expressions = [value[:unaryTripleExpr]] + value[:_groupTripleExpr_1]
589
- expressions.length == 1 ? expressions.first : Algebra::EachOf.new(*expressions)
566
+ expressions.length == 1 ? expressions.first : Algebra::EachOf.new(*expressions, **self.options)
590
567
  end
591
568
  production(:_groupTripleExpr_2) do |value|
592
569
  value.last[:_groupTripleExpr_3]
593
570
  end
594
571
 
595
- # [43] unaryTripleExpr ::= productionLabel? (tripleConstraint | bracketedTripleExpr) | include
572
+ # [43] unaryTripleExpr ::= ('$' tripleExprLabel)? (tripleConstraint | bracketedTripleExpr) | include
596
573
  start_production(:_unaryTripleExpr_1, as_hash: true)
597
574
  production(:_unaryTripleExpr_1) do |value|
598
575
  expression = value[:_unaryTripleExpr_3]
@@ -600,20 +577,18 @@ module ShEx
600
577
 
601
578
  expression
602
579
  end
603
-
604
- # [43a] productionLabel ::= '$' (iri | blankNode)
605
- production(:productionLabel) do |value|
606
- value.last[:_productionLabel_1]
580
+ production(:_unaryTripleExpr_4) do |value|
581
+ # '$' tripleExprLabel
582
+ value.last[:tripleExprLabel]
607
583
  end
608
584
 
609
- # [44] bracketedTripleExpr ::= '(' oneOfTripleExpr ')' cardinality? annotation* semanticActions
585
+ # [44] bracketedTripleExpr ::= '(' tripleExpression ')' cardinality? annotation* semanticActions
610
586
  start_production(:bracketedTripleExpr, as_hash: true)
611
587
  production(:bracketedTripleExpr) do |value|
612
- # XXX cardinality? annotation* semanticActions
613
- case expression = value[:oneOfTripleExpr]
614
- when Algebra::OneOf, Algebra::EachOf
588
+ case expression = value[:tripleExpression]
589
+ when Algebra::TripleExpression
615
590
  else
616
- error(nil, "Bracketed Expression requires multiple contained expressions", production: :bracketedTripleExpr)
591
+ error(nil, "Bracketed Expression requires contained triple expression", production: :bracketedTripleExpr)
617
592
  end
618
593
  cardinality = value[:_bracketedTripleExpr_1] || {}
619
594
  attrs = [
@@ -641,7 +616,7 @@ module ShEx
641
616
  attrs += value[:_tripleConstraint_3]
642
617
  attrs += value[:semanticActions]
643
618
 
644
- Algebra::TripleConstraint.new(*attrs) # unless attrs.empty?
619
+ Algebra::TripleConstraint.new(*attrs, **self.options) # unless attrs.empty?
645
620
  end
646
621
 
647
622
  # [46] cardinality ::= '*' | '+' | '?' | REPEAT_RANGE
@@ -662,7 +637,7 @@ module ShEx
662
637
 
663
638
  # [49] valueSetValue ::= iriRange | literalRange | languageRange | '.' exclusion+
664
639
  production(:valueSetValue) do |value|
665
- Algebra::Value.new(value)
640
+ Algebra::Value.new(value, **self.options)
666
641
  end
667
642
  production(:_valueSetValue_1) do |value|
668
643
  # All exclusions must be consistent IRI/Literal/Language
@@ -672,28 +647,28 @@ module ShEx
672
647
  unless value.all? {|e| e.is_a?(Algebra::IriStem) || e.is_a?(RDF::URI)}
673
648
  error(nil, "Exclusions must all be IRI type")
674
649
  end
675
- Algebra::IriStemRange.new(:wildcard, value.unshift(:exclusions))
650
+ Algebra::IriStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
676
651
  when Algebra::LiteralStem, RDF::Literal
677
652
  unless value.all? {|e| e.is_a?(Algebra::LiteralStem) || e.is_a?(RDF::Literal)}
678
653
  error(nil, "Exclusions must all be Literal type")
679
654
  end
680
- Algebra::LiteralStemRange.new(:wildcard, value.unshift(:exclusions))
655
+ Algebra::LiteralStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
681
656
  else
682
657
  unless value.all? {|e| e.is_a?(Algebra::LanguageStem) || e.is_a?(String)}
683
658
  error(nil, "Exclusions must all be Language type")
684
659
  end
685
- Algebra::LanguageStemRange.new(:wildcard, value.unshift(:exclusions))
660
+ Algebra::LanguageStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
686
661
  end
687
662
  end
688
663
 
689
- # [50] exclusion ::= '-' (iri | literal | LANGTAG) '~'?
664
+ # [50] exclusion ::= '.' '-' (iri | literal | LANGTAG) '~'?
690
665
  start_production(:exclusion, as_hash: true)
691
666
  production(:exclusion) do |value|
692
667
  if value[:_exclusion_2]
693
668
  case value[:_exclusion_1]
694
- when RDF::URI then Algebra::IriStem.new(value[:_exclusion_1])
695
- when RDF::Literal then Algebra::LiteralStem.new(value[:_exclusion_1])
696
- else Algebra::LanguageStem.new(value[:_exclusion_1])
669
+ when RDF::URI then Algebra::IriStem.new(value[:_exclusion_1], **self.options)
670
+ when RDF::Literal then Algebra::LiteralStem.new(value[:_exclusion_1], **self.options)
671
+ else Algebra::LanguageStem.new(value[:_exclusion_1], **self.options)
697
672
  end
698
673
  else
699
674
  value[:_exclusion_1]
@@ -706,9 +681,9 @@ module ShEx
706
681
  if value.last[:_iriRange_1]
707
682
  exclusions = value.last[:_iriRange_1].last[:_iriRange_3]
708
683
  if exclusions.empty?
709
- Algebra::IriStem.new(iri)
684
+ Algebra::IriStem.new(iri, **self.options)
710
685
  else
711
- Algebra::IriStemRange.new(iri, exclusions.unshift(:exclusions))
686
+ Algebra::IriStemRange.new(iri, exclusions.unshift(:exclusions), **self.options)
712
687
  end
713
688
  else
714
689
  iri
@@ -718,7 +693,7 @@ module ShEx
718
693
  # [52] iriExclusion ::= '-' iri '~'?
719
694
  start_production(:iriExclusion, as_hash: true)
720
695
  production(:iriExclusion) do |value|
721
- value[:_iriExclusion_1] ? Algebra::IriStem.new(value[:iri]) : value[:iri]
696
+ value[:_iriExclusion_1] ? Algebra::IriStem.new(value[:iri], **self.options) : value[:iri]
722
697
  end
723
698
 
724
699
  # [53] literalRange ::= literal ('~' literalExclusion*)?
@@ -726,11 +701,10 @@ module ShEx
726
701
  lit = value.first[:literal]
727
702
  if value.last[:_literalRange_1]
728
703
  exclusions = value.last[:_literalRange_1].last[:_literalRange_3]
729
- # FIXME Algebra::LiteralStemRange.new(:wildcard, exclusions)
730
704
  if exclusions.empty?
731
- Algebra::LiteralStem.new(lit)
705
+ Algebra::LiteralStem.new(lit, **self.options)
732
706
  else
733
- Algebra::LiteralStemRange.new(lit, exclusions.unshift(:exclusions))
707
+ Algebra::LiteralStemRange.new(lit, exclusions.unshift(:exclusions), **self.options)
734
708
  end
735
709
  else
736
710
  lit
@@ -741,32 +715,41 @@ module ShEx
741
715
  start_production(:literalExclusion, as_hash: true)
742
716
  production(:literalExclusion) do |value|
743
717
  val = value[:literal]
744
- value[:_literalExclusion_1] ? Algebra::LiteralStem.new(val) : val
718
+ value[:_literalExclusion_1] ? Algebra::LiteralStem.new(val, **self.options) : val
745
719
  end
746
720
 
747
721
  # [55] languageRange ::= LANGTAG ('~' languageExclusion*)?
748
- start_production(:languageRange, as_hash: true)
749
- production(:languageRange) do |value|
750
- exclusions = value[:_languageRange_1] if value[:_languageRange_1]
751
- pattern = !!value[:_languageRange_1]
722
+ # | '@' '~' languageExclusion*
723
+ start_production(:_languageRange_1, as_hash: true)
724
+ production(:_languageRange_1) do |value|
725
+ exclusions = value[:_languageRange_3] if value[:_languageRange_3]
726
+ pattern = !!value[:_languageRange_3]
752
727
  if pattern && exclusions.empty?
753
- Algebra::LanguageStem.new(value[:LANGTAG])
728
+ Algebra::LanguageStem.new(value[:LANGTAG], **self.options)
754
729
  elsif pattern
755
- Algebra::LanguageStemRange.new(value[:LANGTAG], exclusions.unshift(:exclusions))
730
+ Algebra::LanguageStemRange.new(value[:LANGTAG], exclusions.unshift(:exclusions), **self.options)
756
731
  else
757
- Algebra::Language.new(value[:LANGTAG])
732
+ Algebra::Language.new(value[:LANGTAG], **self.options)
758
733
  end
759
734
  end
760
735
  start_production(:_languageRange_2, as_hash: true)
761
736
  production(:_languageRange_2) do |value|
762
- value[:_languageRange_3]
737
+ exclusions = value[:_languageRange_6]
738
+ if exclusions.empty?
739
+ Algebra::LanguageStem.new('', **self.options)
740
+ else
741
+ Algebra::LanguageStemRange.new('', exclusions.unshift(:exclusions), **self.options)
742
+ end
743
+ end
744
+ production(:_languageRange_4) do |value|
745
+ value.last[:_languageRange_5]
763
746
  end
764
747
 
765
748
  # [56] languageExclusion ::= '-' LANGTAG '~'?
766
749
  start_production(:languageExclusion, as_hash: true)
767
750
  production(:languageExclusion) do |value|
768
751
  val = value[:LANGTAG]
769
- value[:_languageExclusion_1] ? Algebra::LanguageStem.new(val) : val
752
+ value[:_languageExclusion_1] ? Algebra::LanguageStem.new(val, **self.options) : val
770
753
  end
771
754
 
772
755
  # [57] include ::= '&' tripleExprLabel
@@ -777,7 +760,7 @@ module ShEx
777
760
  # [58] annotation ::= '//' predicate (iri | literal)
778
761
  start_production(:annotation, as_hash: true)
779
762
  production(:annotation) do |value|
780
- Algebra::Annotation.new([:predicate, value[:predicate]], value[:_annotation_1])
763
+ Algebra::Annotation.new([:predicate, value[:predicate]], value[:_annotation_1], **self.options)
781
764
  end
782
765
 
783
766
  # [59] semanticActions ::= codeDecl*
@@ -786,7 +769,7 @@ module ShEx
786
769
  start_production(:codeDecl, as_hash: true)
787
770
  production(:codeDecl) do |value|
788
771
  code = value[:_codeDecl_1] unless value[:_codeDecl_1] == '%'
789
- Algebra::SemAct.new(*[value[:iri], code].compact)
772
+ Algebra::SemAct.new(*[value[:iri], code].compact, **self.options)
790
773
  end
791
774
 
792
775
  # [13t] literal ::= rdfLiteral | numericLiteral | booleanLiteral
@@ -815,7 +798,8 @@ module ShEx
815
798
  value.last[:datatype]
816
799
  end
817
800
 
818
- # [134s] booleanLiteral ::= 'true' | 'false'
801
+ # [134s] booleanLiteral ::= "true" | "false"
802
+ start_production(:booleanLiteral, insensitive_strings: :lower)
819
803
  production(:booleanLiteral) do |value|
820
804
  literal(value == 'true')
821
805
  end