sparql 3.1.2 → 3.1.7
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 +13 -12
- data/VERSION +1 -1
- data/bin/sparql +20 -11
- data/lib/sinatra/sparql.rb +1 -1
- data/lib/sparql.rb +5 -6
- data/lib/sparql/algebra.rb +4 -4
- data/lib/sparql/algebra/aggregate.rb +1 -1
- data/lib/sparql/algebra/evaluatable.rb +4 -4
- data/lib/sparql/algebra/expression.rb +46 -31
- data/lib/sparql/algebra/extensions.rb +52 -25
- data/lib/sparql/algebra/operator.rb +22 -17
- data/lib/sparql/algebra/operator/abs.rb +1 -1
- data/lib/sparql/algebra/operator/avg.rb +8 -1
- data/lib/sparql/algebra/operator/bgp.rb +1 -1
- data/lib/sparql/algebra/operator/bnode.rb +1 -1
- data/lib/sparql/algebra/operator/ceil.rb +1 -1
- data/lib/sparql/algebra/operator/compare.rb +39 -33
- data/lib/sparql/algebra/operator/construct.rb +2 -1
- data/lib/sparql/algebra/operator/contains.rb +1 -1
- data/lib/sparql/algebra/operator/count.rb +1 -1
- data/lib/sparql/algebra/operator/dataset.rb +1 -1
- data/lib/sparql/algebra/operator/datatype.rb +1 -1
- data/lib/sparql/algebra/operator/day.rb +1 -1
- data/lib/sparql/algebra/operator/delete.rb +2 -2
- data/lib/sparql/algebra/operator/delete_where.rb +1 -1
- data/lib/sparql/algebra/operator/divide.rb +1 -1
- data/lib/sparql/algebra/operator/encode_for_uri.rb +1 -1
- data/lib/sparql/algebra/operator/equal.rb +1 -1
- data/lib/sparql/algebra/operator/extend.rb +2 -12
- data/lib/sparql/algebra/operator/floor.rb +1 -1
- data/lib/sparql/algebra/operator/graph.rb +1 -1
- data/lib/sparql/algebra/operator/greater_than.rb +3 -2
- data/lib/sparql/algebra/operator/greater_than_or_equal.rb +2 -2
- data/lib/sparql/algebra/operator/group_concat.rb +1 -1
- data/lib/sparql/algebra/operator/hours.rb +1 -1
- data/lib/sparql/algebra/operator/insert.rb +1 -1
- data/lib/sparql/algebra/operator/iri.rb +1 -1
- data/lib/sparql/algebra/operator/is_blank.rb +1 -1
- data/lib/sparql/algebra/operator/is_iri.rb +1 -1
- data/lib/sparql/algebra/operator/is_literal.rb +1 -1
- data/lib/sparql/algebra/operator/is_numeric.rb +1 -1
- data/lib/sparql/algebra/operator/is_triple.rb +30 -0
- data/lib/sparql/algebra/operator/lang.rb +1 -1
- data/lib/sparql/algebra/operator/lang_matches.rb +1 -1
- data/lib/sparql/algebra/operator/lcase.rb +1 -1
- data/lib/sparql/algebra/operator/left_join.rb +4 -0
- data/lib/sparql/algebra/operator/less_than.rb +3 -2
- data/lib/sparql/algebra/operator/less_than_or_equal.rb +2 -2
- data/lib/sparql/algebra/operator/max.rb +8 -1
- data/lib/sparql/algebra/operator/md5.rb +1 -1
- data/lib/sparql/algebra/operator/min.rb +8 -1
- data/lib/sparql/algebra/operator/minutes.rb +1 -1
- data/lib/sparql/algebra/operator/month.rb +1 -1
- data/lib/sparql/algebra/operator/multiply.rb +1 -1
- data/lib/sparql/algebra/operator/negate.rb +1 -1
- data/lib/sparql/algebra/operator/not.rb +1 -1
- data/lib/sparql/algebra/operator/not_equal.rb +3 -1
- data/lib/sparql/algebra/operator/now.rb +1 -1
- data/lib/sparql/algebra/operator/object.rb +27 -0
- data/lib/sparql/algebra/operator/order.rb +7 -1
- data/lib/sparql/algebra/operator/plus.rb +1 -1
- data/lib/sparql/algebra/operator/predicate.rb +27 -0
- data/lib/sparql/algebra/operator/rand.rb +1 -1
- data/lib/sparql/algebra/operator/regex.rb +1 -1
- data/lib/sparql/algebra/operator/replace.rb +1 -1
- data/lib/sparql/algebra/operator/round.rb +1 -1
- data/lib/sparql/algebra/operator/same_term.rb +1 -1
- data/lib/sparql/algebra/operator/sample.rb +9 -2
- data/lib/sparql/algebra/operator/seconds.rb +1 -1
- data/lib/sparql/algebra/operator/sha1.rb +1 -1
- data/lib/sparql/algebra/operator/sha256.rb +1 -1
- data/lib/sparql/algebra/operator/sha384.rb +1 -1
- data/lib/sparql/algebra/operator/sha512.rb +1 -1
- data/lib/sparql/algebra/operator/str.rb +1 -1
- data/lib/sparql/algebra/operator/strafter.rb +1 -1
- data/lib/sparql/algebra/operator/strbefore.rb +1 -1
- data/lib/sparql/algebra/operator/strdt.rb +1 -1
- data/lib/sparql/algebra/operator/strends.rb +1 -1
- data/lib/sparql/algebra/operator/strlang.rb +1 -1
- data/lib/sparql/algebra/operator/strlen.rb +1 -1
- data/lib/sparql/algebra/operator/strstarts.rb +1 -1
- data/lib/sparql/algebra/operator/struuid.rb +1 -1
- data/lib/sparql/algebra/operator/subject.rb +29 -0
- data/lib/sparql/algebra/operator/substr.rb +1 -1
- data/lib/sparql/algebra/operator/subtract.rb +1 -1
- data/lib/sparql/algebra/operator/sum.rb +1 -1
- data/lib/sparql/algebra/operator/timezone.rb +1 -1
- data/lib/sparql/algebra/operator/triple.rb +27 -0
- data/lib/sparql/algebra/operator/tz.rb +1 -1
- data/lib/sparql/algebra/operator/ucase.rb +1 -1
- data/lib/sparql/algebra/operator/uuid.rb +1 -1
- data/lib/sparql/algebra/operator/with.rb +1 -1
- data/lib/sparql/algebra/operator/year.rb +1 -1
- data/lib/sparql/extensions.rb +6 -12
- data/lib/sparql/grammar.rb +2 -28
- data/lib/sparql/grammar/meta.rb +5739 -2365
- data/lib/sparql/grammar/parser11.rb +119 -59
- data/lib/sparql/grammar/terminals11.rb +3 -0
- data/lib/sparql/results.rb +17 -9
- metadata +31 -42
@@ -23,6 +23,7 @@ module SPARQL::Grammar
|
|
23
23
|
STRAFTER STRBEFORE STRDT STRENDS STRLANG STRLEN STRSTARTS STRUUID STR
|
24
24
|
TIMEZONE TZ UCASE URI UUID YEAR
|
25
25
|
isBLANK isIRI isURI isLITERAL isNUMERIC sameTerm
|
26
|
+
isTRIPLE TRIPLE SUBJECT PREDICATE OBJECT
|
26
27
|
}.map {|s| s.downcase.to_sym}.freeze
|
27
28
|
|
28
29
|
BUILTIN_RULES = [:aggregate, :regex, :substr, :replace, :exists, :notexists].freeze
|
@@ -184,6 +185,7 @@ module SPARQL::Grammar
|
|
184
185
|
|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|STRUUID|SUBSTR|STR|SUM
|
185
186
|
|TIMEZONE|TZ|UCASE|UNDEF|URI|UUID|YEAR
|
186
187
|
|isBLANK|isIRI|isURI|isLITERAL|isNUMERIC|sameTerm
|
188
|
+
|isTRIPLE|TRIPLE|SUBJECT|PREDICATE|OBJECT
|
187
189
|
}x
|
188
190
|
add_prod_datum(token.value.downcase.to_sym, token.value.downcase.to_sym)
|
189
191
|
else
|
@@ -586,7 +588,7 @@ module SPARQL::Grammar
|
|
586
588
|
production(:GroupGraphPatternSub) do |input, data, callback|
|
587
589
|
debug("GroupGraphPatternSub") {"q #{data[:query].inspect}"}
|
588
590
|
|
589
|
-
res = case data[:query].length
|
591
|
+
res = case Array(data[:query]).length
|
590
592
|
when 0 then SPARQL::Algebra::Operator::BGP.new
|
591
593
|
when 1 then data[:query].first
|
592
594
|
when 2
|
@@ -647,7 +649,7 @@ module SPARQL::Grammar
|
|
647
649
|
data[:input_query] = input.delete(:query) || [SPARQL::Algebra::Operator::BGP.new]
|
648
650
|
end
|
649
651
|
production(:GraphPatternNotTriples) do |input, data, callback|
|
650
|
-
lhs = data[:input_query].first
|
652
|
+
lhs = Array(data[:input_query]).first
|
651
653
|
|
652
654
|
# Filter trickls up to GroupGraphPatternSub
|
653
655
|
add_prod_datum(:filter, data[:filter])
|
@@ -701,9 +703,9 @@ module SPARQL::Grammar
|
|
701
703
|
end
|
702
704
|
end
|
703
705
|
|
704
|
-
# [60] Bind ::= 'BIND' '('
|
706
|
+
# [60] Bind ::= 'BIND' '(' Expression 'AS' Var ')'
|
705
707
|
production(:Bind) do |input, data, callback|
|
706
|
-
add_prod_datum :extend, [
|
708
|
+
add_prod_datum :extend, [data[:Expression].unshift(data[:Var].first)]
|
707
709
|
end
|
708
710
|
|
709
711
|
# [61] InlineData ::= 'VALUES' DataBlock
|
@@ -752,7 +754,7 @@ module SPARQL::Grammar
|
|
752
754
|
end
|
753
755
|
end
|
754
756
|
|
755
|
-
# [65] DataBlockValue ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF'
|
757
|
+
# [65] DataBlockValue ::= EmbTD | iri | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF'
|
756
758
|
production(:DataBlockValue) do |input, data, callback|
|
757
759
|
add_prod_datum :DataBlockValue, data.values.first
|
758
760
|
end
|
@@ -831,7 +833,7 @@ module SPARQL::Grammar
|
|
831
833
|
add_prod_datum(:ConstructTemplate, data[:ConstructTemplate])
|
832
834
|
end
|
833
835
|
|
834
|
-
# [75] TriplesSameSubject ::=
|
836
|
+
# [75] TriplesSameSubject ::= VarOrTermOrEmbTP PropertyListNotEmpty
|
835
837
|
# | TriplesNode PropertyList
|
836
838
|
production(:TriplesSameSubject) do |input, data, callback|
|
837
839
|
add_prod_datum(:pattern, data[:pattern])
|
@@ -840,8 +842,8 @@ module SPARQL::Grammar
|
|
840
842
|
# [77] PropertyListNotEmpty ::= Verb ObjectList
|
841
843
|
# ( ';' ( Verb ObjectList )? )*
|
842
844
|
start_production(:PropertyListNotEmpty) do |input, data, callback|
|
843
|
-
subject = input[:
|
844
|
-
error(nil, "Expected
|
845
|
+
subject = input[:VarOrTermOrEmbTP] || input[:TriplesNode] || input[:GraphNode]
|
846
|
+
error(nil, "Expected VarOrTermOrEmbTP or TriplesNode or GraphNode", production: :PropertyListNotEmpty) if validate? && !subject
|
845
847
|
data[:Subject] = subject
|
846
848
|
end
|
847
849
|
production(:PropertyListNotEmpty) do |input, data, callback|
|
@@ -867,13 +869,17 @@ module SPARQL::Grammar
|
|
867
869
|
add_prod_datum(:path, data[:path])
|
868
870
|
end
|
869
871
|
|
870
|
-
# [80] Object ::= GraphNode
|
872
|
+
# [80] Object ::= GraphNode AnnotationPattern?
|
873
|
+
start_production(:Object) do |input, data, callback|
|
874
|
+
data[:Subject] = Array(input[:Subject]).first
|
875
|
+
data[:Verb] = Array(input[:Verb]).first
|
876
|
+
end
|
871
877
|
production(:Object) do |input, data, callback|
|
872
|
-
object = data[:
|
878
|
+
object = data[:GraphNode]
|
879
|
+
add_prod_datum(:pattern, data[:pattern])
|
873
880
|
if object
|
874
881
|
if prod_data[:Verb]
|
875
882
|
add_pattern(:Object, subject: prod_data[:Subject], predicate: prod_data[:Verb], object: object)
|
876
|
-
add_prod_datum(:pattern, data[:pattern])
|
877
883
|
elsif prod_data[:VerbPath]
|
878
884
|
add_prod_datum(:path,
|
879
885
|
SPARQL::Algebra::Expression(:path,
|
@@ -883,8 +889,17 @@ module SPARQL::Grammar
|
|
883
889
|
end
|
884
890
|
end
|
885
891
|
end
|
892
|
+
start_production(:_Object_1) do |input, data, callback|
|
893
|
+
pattern = RDF::Query::Pattern.new(input[:Subject], input[:Verb], input[:GraphNode].first)
|
894
|
+
error("ObjectPath", "Expected Verb",
|
895
|
+
production: :_Object_1) unless input[:Verb]
|
896
|
+
data[:TriplesNode] = [pattern]
|
897
|
+
end
|
898
|
+
production(:_Object_1) do |input, data, callback|
|
899
|
+
add_prod_datum(:pattern, data[:pattern])
|
900
|
+
end
|
886
901
|
|
887
|
-
# [81] TriplesSameSubjectPath ::=
|
902
|
+
# [81] TriplesSameSubjectPath ::= VarOrTermOrEmbTP PropertyListPathNotEmpty | TriplesNode PropertyListPath
|
888
903
|
production(:TriplesSameSubjectPath) do |input, data, callback|
|
889
904
|
add_prod_datum(:pattern, data[:pattern])
|
890
905
|
add_prod_datum(:path, data[:path])
|
@@ -892,8 +907,8 @@ module SPARQL::Grammar
|
|
892
907
|
|
893
908
|
# [83] PropertyListPathNotEmpty ::= ( VerbPath | VerbSimple ) ObjectList ( ';' ( ( VerbPath | VerbSimple ) ObjectList )? )*
|
894
909
|
start_production(:PropertyListPathNotEmpty) do |input, data, callback|
|
895
|
-
subject = input[:
|
896
|
-
error(nil, "Expected
|
910
|
+
subject = input[:VarOrTermOrEmbTP] || input[:TriplesNode] || input[:GraphNode]
|
911
|
+
error(nil, "Expected VarOrTermOrEmbTP, got nothing", production: :PropertyListPathNotEmpty) if validate? && !subject
|
897
912
|
data[:Subject] = subject
|
898
913
|
end
|
899
914
|
production(:PropertyListPathNotEmpty) do |input, data, callback|
|
@@ -933,9 +948,13 @@ module SPARQL::Grammar
|
|
933
948
|
add_prod_datum(:path, data[:path])
|
934
949
|
end
|
935
950
|
|
936
|
-
# [87] ObjectPath ::= GraphNodePath
|
951
|
+
# [87] ObjectPath ::= GraphNodePath AnnotationPatternPath?
|
952
|
+
start_production(:ObjectPath) do |input, data, callback|
|
953
|
+
data[:Subject] = Array(input[:Subject]).first
|
954
|
+
data[:Verb] = Array(input[:Verb]).first
|
955
|
+
end
|
937
956
|
production(:ObjectPath) do |input, data, callback|
|
938
|
-
object = data[:
|
957
|
+
object = data[:VarOrTermOrEmbTP] || data[:TriplesNode] || data[:GraphNode]
|
939
958
|
if object
|
940
959
|
if prod_data[:Verb]
|
941
960
|
if data[:pattern] && data[:path]
|
@@ -943,6 +962,9 @@ module SPARQL::Grammar
|
|
943
962
|
data[:pattern].unshift(RDF::Query::Pattern.new(prod_data[:Subject].first, prod_data[:Verb], object.first))
|
944
963
|
bgp = SPARQL::Algebra::Expression[:bgp, data[:pattern]]
|
945
964
|
add_prod_datum(:path, SPARQL::Algebra::Expression[:sequence, bgp, *data[:path]])
|
965
|
+
elsif data[:path]
|
966
|
+
# AnnotationPatternPath case
|
967
|
+
add_prod_datum(:path, data[:path])
|
946
968
|
else
|
947
969
|
add_pattern(:Object, subject: prod_data[:Subject], predicate: prod_data[:Verb], object: object)
|
948
970
|
add_prod_datum(:pattern, data[:pattern])
|
@@ -956,6 +978,16 @@ module SPARQL::Grammar
|
|
956
978
|
end
|
957
979
|
end
|
958
980
|
end
|
981
|
+
start_production(:_ObjectPath_1) do |input, data, callback|
|
982
|
+
pattern = RDF::Query::Pattern.new(input[:Subject], input[:Verb], input[:GraphNode].first)
|
983
|
+
error("ObjectPath", "Expected Verb",
|
984
|
+
production: :_ObjectPath_1) unless input[:Verb]
|
985
|
+
data[:TriplesNode] = [pattern]
|
986
|
+
end
|
987
|
+
production(:_ObjectPath_1) do |input, data, callback|
|
988
|
+
add_prod_datum(:pattern, data[:pattern])
|
989
|
+
end
|
990
|
+
|
959
991
|
# [88] Path ::= PathAlternative
|
960
992
|
# output is a :Path or :iri
|
961
993
|
production(:Path) do |input, data, callback|
|
@@ -1084,29 +1116,24 @@ module SPARQL::Grammar
|
|
1084
1116
|
add_prod_datum(:path, data[:path])
|
1085
1117
|
end
|
1086
1118
|
|
1087
|
-
# [104] GraphNode ::=
|
1119
|
+
# [104] GraphNode ::= VarOrTermOrEmbTP | TriplesNode
|
1088
1120
|
production(:GraphNode) do |input, data, callback|
|
1089
|
-
term = data[:
|
1121
|
+
term = data[:VarOrTermOrEmbTP] || data[:TriplesNode]
|
1090
1122
|
add_prod_datum(:pattern, data[:pattern])
|
1091
1123
|
add_prod_datum(:GraphNode, term)
|
1092
1124
|
end
|
1093
1125
|
|
1094
|
-
# [105] GraphNodePath ::=
|
1126
|
+
# [105] GraphNodePath ::= VarOrTermOrEmbTP | TriplesNodePath
|
1095
1127
|
production(:GraphNodePath) do |input, data, callback|
|
1096
|
-
term = data[:
|
1128
|
+
term = data[:VarOrTermOrEmbTP] || data[:TriplesNode]
|
1097
1129
|
add_prod_datum(:pattern, data[:pattern])
|
1098
1130
|
add_prod_datum(:path, data[:path])
|
1099
1131
|
add_prod_datum(:GraphNode, term)
|
1100
1132
|
end
|
1101
1133
|
|
1102
|
-
# [106] VarOrTerm ::= Var | GraphTerm
|
1103
|
-
production(:VarOrTerm) do |input, data, callback|
|
1104
|
-
data.values.each {|v| add_prod_datum(:VarOrTerm, v)}
|
1105
|
-
end
|
1106
|
-
|
1107
1134
|
# [106s] VarOrTermOrEmbTP ::= Var | GraphTerm | EmbTP
|
1108
1135
|
production(:VarOrTermOrEmbTP) do |input, data, callback|
|
1109
|
-
data.values.each {|v| add_prod_datum(:
|
1136
|
+
data.values.each {|v| add_prod_datum(:VarOrTermOrEmbTP, v)}
|
1110
1137
|
end
|
1111
1138
|
|
1112
1139
|
# [107] VarOrIri ::= Var | iri
|
@@ -1114,11 +1141,6 @@ module SPARQL::Grammar
|
|
1114
1141
|
data.values.each {|v| add_prod_datum(:VarOrIri, v)}
|
1115
1142
|
end
|
1116
1143
|
|
1117
|
-
# [107s] VarOrBlankNodeOrIriOrEmbTP ::= Var | BlankNode| iri | EmbTP
|
1118
|
-
production(:VarOrBlankNodeOrIriOrEmbTP) do |input, data, callback|
|
1119
|
-
data.values.each {|v| add_prod_datum(:VarOrBlankNodeOrIriOrEmbTP, v)}
|
1120
|
-
end
|
1121
|
-
|
1122
1144
|
# [109] GraphTerm ::= iri | RDFLiteral | NumericLiteral
|
1123
1145
|
# | BooleanLiteral | BlankNode | NIL
|
1124
1146
|
production(:GraphTerm) do |input, data, callback|
|
@@ -1129,17 +1151,22 @@ module SPARQL::Grammar
|
|
1129
1151
|
data[:NIL])
|
1130
1152
|
end
|
1131
1153
|
|
1132
|
-
# [
|
1154
|
+
# [174] EmbTP ::= '<<' EmbSubjectOrObject Verb EmbSubjectOrObject '>>'
|
1133
1155
|
production(:EmbTP) do |input, data, callback|
|
1134
|
-
subject = data[:
|
1156
|
+
subject, object = data[:EmbSubjectOrObject]
|
1135
1157
|
predicate = data[:Verb]
|
1136
|
-
object = data[:VarOrTerm]
|
1137
1158
|
add_pattern(:EmbTP,
|
1138
1159
|
subject: subject,
|
1139
1160
|
predicate: predicate,
|
1140
1161
|
object: object)
|
1141
1162
|
end
|
1142
1163
|
|
1164
|
+
# [175] EmbSubjectOrObject ::= Var | BlankNode | iri | RDFLiteral
|
1165
|
+
# | NumericLiteral | BooleanLiteral | EmbTP
|
1166
|
+
production(:EmbSubjectOrObject) do |input, data, callback|
|
1167
|
+
data.values.each {|v| add_prod_datum(:EmbSubjectOrObject, v)}
|
1168
|
+
end
|
1169
|
+
|
1143
1170
|
# [110] Expression ::= ConditionalOrExpression
|
1144
1171
|
production(:Expression) do |input, data, callback|
|
1145
1172
|
add_prod_datum(:Expression, data[:Expression])
|
@@ -1279,6 +1306,7 @@ module SPARQL::Grammar
|
|
1279
1306
|
# | iriOrFunction | RDFLiteral
|
1280
1307
|
# | NumericLiteral | BooleanLiteral
|
1281
1308
|
# | Var
|
1309
|
+
# | ExprEmbTP
|
1282
1310
|
production(:PrimaryExpression) do |input, data, callback|
|
1283
1311
|
if data[:Expression]
|
1284
1312
|
add_prod_datum(:Expression, data[:Expression])
|
@@ -1292,12 +1320,29 @@ module SPARQL::Grammar
|
|
1292
1320
|
add_prod_datum(:Expression, data[:literal])
|
1293
1321
|
elsif data[:Var]
|
1294
1322
|
add_prod_datum(:Expression, data[:Var])
|
1323
|
+
elsif data[:pattern]
|
1324
|
+
add_prod_datum(:Expression, data[:pattern])
|
1295
1325
|
end
|
1296
1326
|
|
1297
1327
|
# Keep track of this for parent UnaryExpression production
|
1298
1328
|
add_prod_datum(:UnaryExpression, data[:UnaryExpression])
|
1299
1329
|
end
|
1300
1330
|
|
1331
|
+
# [119a] ExprEmbTP ::= '<<' ExprVarOrTerm Verb ExprVarOrTerm '>>'
|
1332
|
+
production(:ExprEmbTP) do |input, data, callback|
|
1333
|
+
subject, object = data[:ExprVarOrTerm]
|
1334
|
+
predicate = data[:Verb]
|
1335
|
+
add_pattern(:ExprEmbTP,
|
1336
|
+
subject: subject,
|
1337
|
+
predicate: predicate,
|
1338
|
+
object: object)
|
1339
|
+
end
|
1340
|
+
|
1341
|
+
# [119b] ExprVarOrTerm ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprEmbTP
|
1342
|
+
production(:ExprVarOrTerm) do |input, data, callback|
|
1343
|
+
data.values.each {|v| add_prod_datum(:ExprVarOrTerm, v)}
|
1344
|
+
end
|
1345
|
+
|
1301
1346
|
# [121] BuiltInCall ::= Aggregate
|
1302
1347
|
# | 'STR' '(' Expression ')'
|
1303
1348
|
# | 'LANG' '(' Expression ')'
|
@@ -1462,6 +1507,43 @@ module SPARQL::Grammar
|
|
1462
1507
|
add_prod_datum(:UnaryExpression, data[:UnaryExpression])
|
1463
1508
|
end
|
1464
1509
|
|
1510
|
+
# [177] AnnotationPattern ::= '{|' PropertyListNotEmpty '|}'
|
1511
|
+
#start_production(:AnnotationPattern) do |input, data, callback|
|
1512
|
+
# data[:TriplesNode] = prod_data[:TriplesNode].first
|
1513
|
+
#end
|
1514
|
+
#production(:AnnotationPattern) do |input, data, callback|
|
1515
|
+
# add_prod_datum(:pattern, data[:pattern])
|
1516
|
+
#end
|
1517
|
+
|
1518
|
+
# [178] AnnotationPatternPath ::= '{|' PropertyListPathNotEmpty '|}'
|
1519
|
+
start_production(:AnnotationPatternPath) do |input, data, callback|
|
1520
|
+
data[:TriplesNode] = input[:TriplesNode]
|
1521
|
+
end
|
1522
|
+
production(:AnnotationPatternPath) do |input, data, callback|
|
1523
|
+
if data[:pattern]
|
1524
|
+
add_prod_datum(:pattern, data[:pattern])
|
1525
|
+
elsif data[:path]
|
1526
|
+
# Replace the subject in the path with the node being annotated.
|
1527
|
+
data[:path].first.operands[0] = data[:TriplesNode]
|
1528
|
+
add_prod_datum(:path, data[:path])
|
1529
|
+
end
|
1530
|
+
end
|
1531
|
+
|
1532
|
+
# [179] EmbTD ::= '<<' DataValueTerm ( iri | 'a' ) DataValueTerm '>>'
|
1533
|
+
production(:EmbTD) do |input, data, callback|
|
1534
|
+
subject, object = data[:DataValueTerm]
|
1535
|
+
predicate = data[:iri]
|
1536
|
+
add_pattern(:EmbTD,
|
1537
|
+
subject: subject,
|
1538
|
+
predicate: predicate,
|
1539
|
+
object: object)
|
1540
|
+
end
|
1541
|
+
|
1542
|
+
# [180] DataValueTerm ::= EmbTD | iri | RDFLiteral | NumericLiteral | BooleanLiteral
|
1543
|
+
production(:DataValueTerm) do |input, data, callback|
|
1544
|
+
add_prod_datum :DataValueTerm, data.values.first
|
1545
|
+
end
|
1546
|
+
|
1465
1547
|
##
|
1466
1548
|
# Initializes a new parser instance.
|
1467
1549
|
#
|
@@ -1479,10 +1561,8 @@ module SPARQL::Grammar
|
|
1479
1561
|
# definitions.
|
1480
1562
|
# @option options [Boolean] :validate (false)
|
1481
1563
|
# whether to validate the parsed statements and values
|
1482
|
-
# @option options [
|
1483
|
-
#
|
1484
|
-
# @option options [Boolean] :debug
|
1485
|
-
# Detailed debug output
|
1564
|
+
# @option options [Logger, #write, #<<] :logger
|
1565
|
+
# Record error/info/debug output
|
1486
1566
|
# @yield [parser] `self`
|
1487
1567
|
# @yieldparam [SPARQL::Grammar::Parser] parser
|
1488
1568
|
# @yieldreturn [void] ignored
|
@@ -1494,10 +1574,6 @@ module SPARQL::Grammar
|
|
1494
1574
|
end
|
1495
1575
|
@input.encode!(Encoding::UTF_8) if @input.respond_to?(:encode!)
|
1496
1576
|
@options = {anon_base: "b0", validate: false}.merge(options)
|
1497
|
-
@options[:debug] ||= case
|
1498
|
-
when options[:progress] then 2
|
1499
|
-
when options[:validate] then 1
|
1500
|
-
end
|
1501
1577
|
|
1502
1578
|
debug("base IRI") {base_uri.inspect}
|
1503
1579
|
debug("validate") {validate?.inspect}
|
@@ -1558,23 +1634,7 @@ module SPARQL::Grammar
|
|
1558
1634
|
follow: FOLLOW,
|
1559
1635
|
whitespace: WS,
|
1560
1636
|
**@options
|
1561
|
-
)
|
1562
|
-
case context
|
1563
|
-
when :trace
|
1564
|
-
level, lineno, depth, *args = data
|
1565
|
-
message = args.to_sse
|
1566
|
-
d_str = depth > 100 ? ' ' * 100 + '+' : ' ' * depth
|
1567
|
-
str = "[#{lineno}](#{level})#{d_str}#{message}".chop
|
1568
|
-
case @options[:debug]
|
1569
|
-
when Array
|
1570
|
-
@options[:debug] << str unless level > 2
|
1571
|
-
when TrueClass
|
1572
|
-
$stderr.puts str
|
1573
|
-
when Integer
|
1574
|
-
$stderr.puts(str) if level <= @options[:debug]
|
1575
|
-
end
|
1576
|
-
end
|
1577
|
-
end
|
1637
|
+
)
|
1578
1638
|
|
1579
1639
|
# The last thing on the @prod_data stack is the result
|
1580
1640
|
@result = case
|
@@ -108,9 +108,11 @@ module SPARQL::Grammar
|
|
108
108
|
|TIMEZONE|TO|TZ|UCASE|UNDEF|UNION|URI|USING|UUID|VALUES
|
109
109
|
|WHERE|WITH|YEAR
|
110
110
|
|isBLANK|isIRI|isURI|isLITERAL|isNUMERIC|sameTerm
|
111
|
+
|isTRIPLE|TRIPLE|SUBJECT|PREDICATE|OBJECT
|
111
112
|
|true
|
112
113
|
|false
|
113
114
|
|<<|>>
|
115
|
+
|\{\||\|\}
|
114
116
|
|&&|!=|!|<=|>=|\^\^|\|\||[\(\),.;\[\]\{\}\+\-=<>\?\^\|\*\/a]
|
115
117
|
)xim.freeze
|
116
118
|
|
@@ -132,6 +134,7 @@ module SPARQL::Grammar
|
|
132
134
|
TIMEZONE TO TZ UCASE UNDEF UNION URI USING UUID
|
133
135
|
VALUES WHERE WITH YEAR
|
134
136
|
isBLANK isIRI isURI isLITERAL isNUMERIC sameTerm
|
137
|
+
isTRIPLE TRIPLE SUBJECT PREDICATE OBJECT
|
135
138
|
true false
|
136
139
|
} + [
|
137
140
|
"DELETE DATA",
|
data/lib/sparql/results.rb
CHANGED
@@ -34,9 +34,9 @@ module SPARQL
|
|
34
34
|
{
|
35
35
|
type: 'triple',
|
36
36
|
value: {
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
subject: format.call(value.subject),
|
38
|
+
predicate: format.call(value.predicate),
|
39
|
+
object: format.call(value.object)
|
40
40
|
}
|
41
41
|
}
|
42
42
|
end
|
@@ -81,9 +81,9 @@ module SPARQL
|
|
81
81
|
end
|
82
82
|
when RDF::Statement
|
83
83
|
xml.triple do
|
84
|
-
xml.
|
85
|
-
xml.
|
86
|
-
xml.
|
84
|
+
xml.subject {format.call(s.subject)}
|
85
|
+
xml.predicate {format.call(s.predicate)}
|
86
|
+
xml.object {format.call(s.object)}
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -140,9 +140,8 @@ module SPARQL
|
|
140
140
|
# Generate Solutions as CSV
|
141
141
|
# @return [String]
|
142
142
|
# @see https://www.w3.org/TR/2013/REC-sparql11-results-csv-tsv-20130321/
|
143
|
-
def to_csv
|
143
|
+
def to_csv(bnode_map: {})
|
144
144
|
require 'csv' unless defined?(::CSV)
|
145
|
-
bnode_map = {}
|
146
145
|
bnode_gen = "_:a"
|
147
146
|
CSV.generate(row_sep: "\r\n") do |csv|
|
148
147
|
csv << variable_names.to_a
|
@@ -155,6 +154,10 @@ module SPARQL
|
|
155
154
|
bnode_gen = bnode_gen.succ
|
156
155
|
this
|
157
156
|
end
|
157
|
+
when RDF::Statement
|
158
|
+
RDF::Query::Solutions(
|
159
|
+
RDF::Query::Solution.new(subject: term.subject, predicate: term.predicate, object: term.object)
|
160
|
+
).to_csv(bnode_map: bnode_map).split.last.strip
|
158
161
|
else
|
159
162
|
solution[n].to_s.strip
|
160
163
|
end
|
@@ -175,10 +178,15 @@ module SPARQL
|
|
175
178
|
case term = solution[n]
|
176
179
|
when RDF::Literal::Integer, RDF::Literal::Decimal, RDF::Literal::Double
|
177
180
|
term.canonicalize.to_s
|
181
|
+
when RDF::Statement
|
182
|
+
emb_stmt = RDF::Query::Solutions(
|
183
|
+
RDF::Query::Solution.new(subject: term.subject, predicate: term.predicate, object: term.object)
|
184
|
+
).to_tsv.split("\n").last.strip
|
185
|
+
emb_stmt.gsub(/[\t\n\r]/, "\t" => '\t', "\n" => '\n', "\r" => '\r')
|
178
186
|
when nil
|
179
187
|
""
|
180
188
|
else
|
181
|
-
RDF::NTriples.serialize(term).strip
|
189
|
+
RDF::NTriples.serialize(term).strip.gsub(/[\t\n\r]/, "\t" => '\t', "\n" => '\n', "\r" => '\r')
|
182
190
|
end
|
183
191
|
end.join("\t")
|
184
192
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
- Arto Bendiken
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '3.1'
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 3.1.
|
23
|
+
version: 3.1.14
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '3.1'
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.1.
|
33
|
+
version: 3.1.14
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rdf-aggregate-repo
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,16 +49,16 @@ dependencies:
|
|
49
49
|
name: ebnf
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.1'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.1'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: builder
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,9 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.1'
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 3.1.2
|
97
100
|
type: :runtime
|
98
101
|
prerelease: false
|
99
102
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -101,6 +104,9 @@ dependencies:
|
|
101
104
|
- - "~>"
|
102
105
|
- !ruby/object:Gem::Version
|
103
106
|
version: '3.1'
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.1.2
|
104
110
|
- !ruby/object:Gem::Dependency
|
105
111
|
name: rdf-xsd
|
106
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,48 +183,28 @@ dependencies:
|
|
177
183
|
requirements:
|
178
184
|
- - "~>"
|
179
185
|
- !ruby/object:Gem::Version
|
180
|
-
version: '3.
|
181
|
-
type: :development
|
182
|
-
prerelease: false
|
183
|
-
version_requirements: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '3.0'
|
188
|
-
- !ruby/object:Gem::Dependency
|
189
|
-
name: open-uri-cached
|
190
|
-
requirement: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - "~>"
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0.0'
|
195
|
-
- - ">="
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: 0.0.5
|
186
|
+
version: '3.1'
|
198
187
|
type: :development
|
199
188
|
prerelease: false
|
200
189
|
version_requirements: !ruby/object:Gem::Requirement
|
201
190
|
requirements:
|
202
191
|
- - "~>"
|
203
192
|
- !ruby/object:Gem::Version
|
204
|
-
version: '
|
205
|
-
- - ">="
|
206
|
-
- !ruby/object:Gem::Version
|
207
|
-
version: 0.0.5
|
193
|
+
version: '3.1'
|
208
194
|
- !ruby/object:Gem::Dependency
|
209
195
|
name: rspec
|
210
196
|
requirement: !ruby/object:Gem::Requirement
|
211
197
|
requirements:
|
212
198
|
- - "~>"
|
213
199
|
- !ruby/object:Gem::Version
|
214
|
-
version: '3.
|
200
|
+
version: '3.10'
|
215
201
|
type: :development
|
216
202
|
prerelease: false
|
217
203
|
version_requirements: !ruby/object:Gem::Requirement
|
218
204
|
requirements:
|
219
205
|
- - "~>"
|
220
206
|
- !ruby/object:Gem::Version
|
221
|
-
version: '3.
|
207
|
+
version: '3.10'
|
222
208
|
- !ruby/object:Gem::Dependency
|
223
209
|
name: rspec-its
|
224
210
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,18 +225,16 @@ dependencies:
|
|
239
225
|
requirements:
|
240
226
|
- - "~>"
|
241
227
|
- !ruby/object:Gem::Version
|
242
|
-
version: 0.9
|
228
|
+
version: '0.9'
|
243
229
|
type: :development
|
244
230
|
prerelease: false
|
245
231
|
version_requirements: !ruby/object:Gem::Requirement
|
246
232
|
requirements:
|
247
233
|
- - "~>"
|
248
234
|
- !ruby/object:Gem::Version
|
249
|
-
version: 0.9
|
250
|
-
description:
|
251
|
-
|
252
|
-
Implements SPARQL grammar parsing to SPARQL Algebra, SPARQL Algebra processing
|
253
|
-
and includes SPARQL Client for accessing remote repositories.
|
235
|
+
version: '0.9'
|
236
|
+
description: SPARQL Implements SPARQL 1.1 Query, Update and result formats for the
|
237
|
+
Ruby RDF.rb library suite.
|
254
238
|
email: public-rdf-ruby@w3.org
|
255
239
|
executables:
|
256
240
|
- sparql
|
@@ -328,6 +312,7 @@ files:
|
|
328
312
|
- lib/sparql/algebra/operator/is_iri.rb
|
329
313
|
- lib/sparql/algebra/operator/is_literal.rb
|
330
314
|
- lib/sparql/algebra/operator/is_numeric.rb
|
315
|
+
- lib/sparql/algebra/operator/is_triple.rb
|
331
316
|
- lib/sparql/algebra/operator/join.rb
|
332
317
|
- lib/sparql/algebra/operator/lang.rb
|
333
318
|
- lib/sparql/algebra/operator/lang_matches.rb
|
@@ -352,6 +337,7 @@ files:
|
|
352
337
|
- lib/sparql/algebra/operator/notin.rb
|
353
338
|
- lib/sparql/algebra/operator/notoneof.rb
|
354
339
|
- lib/sparql/algebra/operator/now.rb
|
340
|
+
- lib/sparql/algebra/operator/object.rb
|
355
341
|
- lib/sparql/algebra/operator/or.rb
|
356
342
|
- lib/sparql/algebra/operator/order.rb
|
357
343
|
- lib/sparql/algebra/operator/path.rb
|
@@ -359,6 +345,7 @@ files:
|
|
359
345
|
- lib/sparql/algebra/operator/path_plus.rb
|
360
346
|
- lib/sparql/algebra/operator/path_star.rb
|
361
347
|
- lib/sparql/algebra/operator/plus.rb
|
348
|
+
- lib/sparql/algebra/operator/predicate.rb
|
362
349
|
- lib/sparql/algebra/operator/prefix.rb
|
363
350
|
- lib/sparql/algebra/operator/project.rb
|
364
351
|
- lib/sparql/algebra/operator/rand.rb
|
@@ -386,11 +373,13 @@ files:
|
|
386
373
|
- lib/sparql/algebra/operator/strlen.rb
|
387
374
|
- lib/sparql/algebra/operator/strstarts.rb
|
388
375
|
- lib/sparql/algebra/operator/struuid.rb
|
376
|
+
- lib/sparql/algebra/operator/subject.rb
|
389
377
|
- lib/sparql/algebra/operator/substr.rb
|
390
378
|
- lib/sparql/algebra/operator/subtract.rb
|
391
379
|
- lib/sparql/algebra/operator/sum.rb
|
392
380
|
- lib/sparql/algebra/operator/table.rb
|
393
381
|
- lib/sparql/algebra/operator/timezone.rb
|
382
|
+
- lib/sparql/algebra/operator/triple.rb
|
394
383
|
- lib/sparql/algebra/operator/tz.rb
|
395
384
|
- lib/sparql/algebra/operator/ucase.rb
|
396
385
|
- lib/sparql/algebra/operator/union.rb
|
@@ -414,7 +403,7 @@ homepage: https://github.com/ruby-rdf/sparql
|
|
414
403
|
licenses:
|
415
404
|
- Unlicense
|
416
405
|
metadata: {}
|
417
|
-
post_install_message:
|
406
|
+
post_install_message:
|
418
407
|
rdoc_options: []
|
419
408
|
require_paths:
|
420
409
|
- lib
|
@@ -429,8 +418,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
429
418
|
- !ruby/object:Gem::Version
|
430
419
|
version: '0'
|
431
420
|
requirements: []
|
432
|
-
rubygems_version: 3.
|
433
|
-
signing_key:
|
421
|
+
rubygems_version: 3.2.15
|
422
|
+
signing_key:
|
434
423
|
specification_version: 4
|
435
424
|
summary: SPARQL Query and Update library for Ruby.
|
436
425
|
test_files: []
|