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.
- checksums.yaml +4 -4
- data/README.md +98 -87
- data/VERSION +1 -1
- data/lib/shex/algebra/and.rb +3 -12
- data/lib/shex/algebra/each_of.rb +2 -12
- data/lib/shex/algebra/import.rb +6 -0
- data/lib/shex/algebra/not.rb +3 -10
- data/lib/shex/algebra/one_of.rb +2 -12
- data/lib/shex/algebra/operator.rb +26 -13
- data/lib/shex/algebra/or.rb +3 -12
- data/lib/shex/algebra/schema.rb +2 -9
- data/lib/shex/algebra/shape.rb +4 -2
- data/lib/shex/algebra/shape_expression.rb +29 -0
- data/lib/shex/algebra/start.rb +2 -10
- data/lib/shex/algebra/stem.rb +5 -1
- data/lib/shex/algebra/stem_range.rb +3 -1
- data/lib/shex/algebra/triple_constraint.rb +1 -1
- data/lib/shex/algebra/triple_expression.rb +18 -0
- data/lib/shex/algebra.rb +0 -1
- data/lib/shex/meta.rb +25 -38
- data/lib/shex/parser.rb +112 -128
- data/lib/shex/terminals.rb +5 -25
- data/lib/shex.rb +4 -2
- metadata +4 -3
data/lib/shex/meta.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# This file is automatically generated by ebnf version 2.1
|
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", "=", :
|
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", [:
|
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", [:
|
32
|
-
EBNF::Rule.new(:_shapeOr_1, "12.1", [:
|
33
|
-
EBNF::Rule.new(:
|
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
|
75
|
-
EBNF::Rule.new(:_litNodeConstraint_1, "24.1", [:seq, "LITERAL", :
|
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(:
|
78
|
-
EBNF::Rule.new(:_litNodeConstraint_7, "24.7", [:star, :
|
79
|
-
EBNF::Rule.new(:
|
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, :
|
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(:
|
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", [:
|
153
|
-
EBNF::Rule.new(:_languageRange_1, "55.1", [:
|
154
|
-
EBNF::Rule.new(:
|
155
|
-
EBNF::Rule.new(:
|
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.
|
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" '='
|
186
|
+
# [6] start ::= "START" '=' inlineShapeExpression
|
187
187
|
start_production(:start, as_hash: true, insensitive_strings: :lower)
|
188
188
|
production(:start) do |value|
|
189
|
-
|
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
|
216
|
-
|
217
|
-
|
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
|
-
|
244
|
-
#
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
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
|
-
|
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[:
|
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
|
-
|
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
|
-
|
401
|
+
# datatype xsFacet*
|
402
|
+
facets = value[:_litNodeConstraint_6]
|
430
403
|
validate_facets(facets, :litNodeConstraint)
|
431
|
-
|
432
|
-
|
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
|
-
|
437
|
-
|
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(:
|
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.
|
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].
|
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].
|
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].
|
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
|
553
|
-
extra = extra_closed.reject {|v| v.to_s
|
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 ::=
|
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
|
-
|
605
|
-
|
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 ::= '('
|
585
|
+
# [44] bracketedTripleExpr ::= '(' tripleExpression ')' cardinality? annotation* semanticActions
|
610
586
|
start_production(:bracketedTripleExpr, as_hash: true)
|
611
587
|
production(:bracketedTripleExpr) do |value|
|
612
|
-
|
613
|
-
|
614
|
-
when Algebra::OneOf, Algebra::EachOf
|
588
|
+
case expression = value[:tripleExpression]
|
589
|
+
when Algebra::TripleExpression
|
615
590
|
else
|
616
|
-
error(nil, "Bracketed Expression requires
|
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
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
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[:
|
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 ::=
|
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
|