sparql 3.1.5 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -28
  3. data/VERSION +1 -1
  4. data/bin/sparql +14 -4
  5. data/lib/sparql/algebra/aggregate.rb +1 -1
  6. data/lib/sparql/algebra/evaluatable.rb +4 -4
  7. data/lib/sparql/algebra/expression.rb +4 -1
  8. data/lib/sparql/algebra/extensions.rb +96 -29
  9. data/lib/sparql/algebra/operator/abs.rb +23 -3
  10. data/lib/sparql/algebra/operator/add.rb +21 -2
  11. data/lib/sparql/algebra/operator/alt.rb +26 -2
  12. data/lib/sparql/algebra/operator/and.rb +25 -3
  13. data/lib/sparql/algebra/operator/asc.rb +20 -1
  14. data/lib/sparql/algebra/operator/ask.rb +17 -1
  15. data/lib/sparql/algebra/operator/avg.rb +18 -2
  16. data/lib/sparql/algebra/operator/base.rb +18 -1
  17. data/lib/sparql/algebra/operator/bgp.rb +5 -1
  18. data/lib/sparql/algebra/operator/bnode.rb +34 -11
  19. data/lib/sparql/algebra/operator/bound.rb +22 -1
  20. data/lib/sparql/algebra/operator/ceil.rb +26 -3
  21. data/lib/sparql/algebra/operator/clear.rb +16 -2
  22. data/lib/sparql/algebra/operator/coalesce.rb +33 -11
  23. data/lib/sparql/algebra/operator/compare.rb +48 -33
  24. data/lib/sparql/algebra/operator/concat.rb +26 -2
  25. data/lib/sparql/algebra/operator/construct.rb +31 -7
  26. data/lib/sparql/algebra/operator/contains.rb +25 -3
  27. data/lib/sparql/algebra/operator/copy.rb +19 -2
  28. data/lib/sparql/algebra/operator/count.rb +18 -2
  29. data/lib/sparql/algebra/operator/create.rb +19 -2
  30. data/lib/sparql/algebra/operator/dataset.rb +17 -0
  31. data/lib/sparql/algebra/operator/datatype.rb +26 -7
  32. data/lib/sparql/algebra/operator/day.rb +24 -6
  33. data/lib/sparql/algebra/operator/delete.rb +27 -2
  34. data/lib/sparql/algebra/operator/delete_data.rb +23 -2
  35. data/lib/sparql/algebra/operator/delete_where.rb +24 -2
  36. data/lib/sparql/algebra/operator/desc.rb +20 -1
  37. data/lib/sparql/algebra/operator/describe.rb +27 -4
  38. data/lib/sparql/algebra/operator/distinct.rb +18 -1
  39. data/lib/sparql/algebra/operator/divide.rb +27 -3
  40. data/lib/sparql/algebra/operator/drop.rb +17 -2
  41. data/lib/sparql/algebra/operator/encode_for_uri.rb +25 -3
  42. data/lib/sparql/algebra/operator/equal.rb +13 -3
  43. data/lib/sparql/algebra/operator/exists.rb +28 -4
  44. data/lib/sparql/algebra/operator/exprlist.rb +12 -1
  45. data/lib/sparql/algebra/operator/extend.rb +33 -18
  46. data/lib/sparql/algebra/operator/filter.rb +27 -5
  47. data/lib/sparql/algebra/operator/floor.rb +26 -3
  48. data/lib/sparql/algebra/operator/graph.rb +13 -0
  49. data/lib/sparql/algebra/operator/greater_than.rb +14 -4
  50. data/lib/sparql/algebra/operator/greater_than_or_equal.rb +14 -4
  51. data/lib/sparql/algebra/operator/group.rb +34 -8
  52. data/lib/sparql/algebra/operator/group_concat.rb +20 -8
  53. data/lib/sparql/algebra/operator/hours.rb +24 -6
  54. data/lib/sparql/algebra/operator/if.rb +21 -4
  55. data/lib/sparql/algebra/operator/in.rb +18 -1
  56. data/lib/sparql/algebra/operator/insert.rb +22 -2
  57. data/lib/sparql/algebra/operator/insert_data.rb +23 -2
  58. data/lib/sparql/algebra/operator/iri.rb +22 -5
  59. data/lib/sparql/algebra/operator/is_blank.rb +20 -2
  60. data/lib/sparql/algebra/operator/is_iri.rb +20 -2
  61. data/lib/sparql/algebra/operator/is_literal.rb +20 -2
  62. data/lib/sparql/algebra/operator/is_numeric.rb +22 -4
  63. data/lib/sparql/algebra/operator/is_triple.rb +62 -0
  64. data/lib/sparql/algebra/operator/join.rb +22 -1
  65. data/lib/sparql/algebra/operator/lang.rb +26 -1
  66. data/lib/sparql/algebra/operator/lang_matches.rb +23 -2
  67. data/lib/sparql/algebra/operator/lcase.rb +24 -3
  68. data/lib/sparql/algebra/operator/left_join.rb +29 -1
  69. data/lib/sparql/algebra/operator/less_than.rb +14 -4
  70. data/lib/sparql/algebra/operator/less_than_or_equal.rb +14 -4
  71. data/lib/sparql/algebra/operator/load.rb +25 -2
  72. data/lib/sparql/algebra/operator/max.rb +18 -2
  73. data/lib/sparql/algebra/operator/md5.rb +23 -6
  74. data/lib/sparql/algebra/operator/min.rb +19 -3
  75. data/lib/sparql/algebra/operator/minus.rb +25 -7
  76. data/lib/sparql/algebra/operator/minutes.rb +24 -6
  77. data/lib/sparql/algebra/operator/modify.rb +41 -5
  78. data/lib/sparql/algebra/operator/month.rb +24 -6
  79. data/lib/sparql/algebra/operator/move.rb +20 -2
  80. data/lib/sparql/algebra/operator/multiply.rb +27 -4
  81. data/lib/sparql/algebra/operator/negate.rb +24 -4
  82. data/lib/sparql/algebra/operator/not.rb +25 -4
  83. data/lib/sparql/algebra/operator/not_equal.rb +16 -1
  84. data/lib/sparql/algebra/operator/notexists.rb +30 -6
  85. data/lib/sparql/algebra/operator/notin.rb +20 -3
  86. data/lib/sparql/algebra/operator/notoneof.rb +12 -2
  87. data/lib/sparql/algebra/operator/now.rb +25 -6
  88. data/lib/sparql/algebra/operator/object.rb +59 -0
  89. data/lib/sparql/algebra/operator/or.rb +26 -3
  90. data/lib/sparql/algebra/operator/order.rb +27 -2
  91. data/lib/sparql/algebra/operator/path.rb +29 -2
  92. data/lib/sparql/algebra/operator/path_opt.rb +21 -2
  93. data/lib/sparql/algebra/operator/path_plus.rb +21 -2
  94. data/lib/sparql/algebra/operator/path_star.rb +20 -2
  95. data/lib/sparql/algebra/operator/plus.rb +43 -4
  96. data/lib/sparql/algebra/operator/predicate.rb +59 -0
  97. data/lib/sparql/algebra/operator/prefix.rb +24 -3
  98. data/lib/sparql/algebra/operator/project.rb +51 -5
  99. data/lib/sparql/algebra/operator/rand.rb +31 -3
  100. data/lib/sparql/algebra/operator/reduced.rb +18 -1
  101. data/lib/sparql/algebra/operator/regex.rb +27 -19
  102. data/lib/sparql/algebra/operator/replace.rb +27 -7
  103. data/lib/sparql/algebra/operator/reverse.rb +20 -2
  104. data/lib/sparql/algebra/operator/round.rb +26 -3
  105. data/lib/sparql/algebra/operator/same_term.rb +25 -7
  106. data/lib/sparql/algebra/operator/sample.rb +31 -9
  107. data/lib/sparql/algebra/operator/seconds.rb +24 -6
  108. data/lib/sparql/algebra/operator/seq.rb +20 -2
  109. data/lib/sparql/algebra/operator/sequence.rb +0 -10
  110. data/lib/sparql/algebra/operator/sha1.rb +19 -2
  111. data/lib/sparql/algebra/operator/sha256.rb +19 -2
  112. data/lib/sparql/algebra/operator/sha384.rb +19 -2
  113. data/lib/sparql/algebra/operator/sha512.rb +19 -2
  114. data/lib/sparql/algebra/operator/slice.rb +27 -5
  115. data/lib/sparql/algebra/operator/str.rb +22 -2
  116. data/lib/sparql/algebra/operator/strafter.rb +26 -3
  117. data/lib/sparql/algebra/operator/strbefore.rb +26 -3
  118. data/lib/sparql/algebra/operator/strdt.rb +23 -2
  119. data/lib/sparql/algebra/operator/strends.rb +26 -4
  120. data/lib/sparql/algebra/operator/strlang.rb +26 -7
  121. data/lib/sparql/algebra/operator/strlen.rb +24 -3
  122. data/lib/sparql/algebra/operator/strstarts.rb +26 -3
  123. data/lib/sparql/algebra/operator/struuid.rb +30 -10
  124. data/lib/sparql/algebra/operator/subject.rb +61 -0
  125. data/lib/sparql/algebra/operator/substr.rb +24 -3
  126. data/lib/sparql/algebra/operator/subtract.rb +29 -3
  127. data/lib/sparql/algebra/operator/sum.rb +18 -2
  128. data/lib/sparql/algebra/operator/table.rb +42 -4
  129. data/lib/sparql/algebra/operator/timezone.rb +24 -6
  130. data/lib/sparql/algebra/operator/tz.rb +23 -6
  131. data/lib/sparql/algebra/operator/ucase.rb +24 -3
  132. data/lib/sparql/algebra/operator/union.rb +29 -6
  133. data/lib/sparql/algebra/operator/update.rb +25 -4
  134. data/lib/sparql/algebra/operator/using.rb +32 -2
  135. data/lib/sparql/algebra/operator/uuid.rb +28 -9
  136. data/lib/sparql/algebra/operator/with.rb +38 -4
  137. data/lib/sparql/algebra/operator/year.rb +24 -6
  138. data/lib/sparql/algebra/operator.rb +112 -7
  139. data/lib/sparql/algebra/sxp_extensions.rb +3 -3
  140. data/lib/sparql/grammar/meta.rb +5390 -2410
  141. data/lib/sparql/grammar/parser11.rb +119 -53
  142. data/lib/sparql/grammar/terminals11.rb +2 -0
  143. data/lib/sparql/grammar.rb +0 -25
  144. metadata +40 -34
@@ -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
@@ -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' '(' (Expression || EmbTP) 'AS' Var ')'
706
+ # [60] Bind ::= 'BIND' '(' Expression 'AS' Var ')'
705
707
  production(:Bind) do |input, data, callback|
706
- add_prod_datum :extend, [(data[:Expression] || data[:pattern]).unshift(data[:Var].first)]
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 ::= QuotedTriple | 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 ::= VarOrTerm PropertyListNotEmpty
836
+ # [75] TriplesSameSubject ::= VarOrTermOrQuotedTP 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[:VarOrTerm] || input[:TriplesNode] || input[:GraphNode]
844
- error(nil, "Expected VarOrTerm or TriplesNode or GraphNode", production: :PropertyListNotEmpty) if validate? && !subject
845
+ subject = input[:VarOrTermOrQuotedTP] || input[:TriplesNode] || input[:GraphNode]
846
+ error(nil, "Expected VarOrTermOrQuotedTP 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,17 +869,13 @@ module SPARQL::Grammar
867
869
  add_prod_datum(:path, data[:path])
868
870
  end
869
871
 
870
- # [177] AnnotationPattern ::= '{|' PropertyListNotEmpty '|}'
871
- start_production(:AnnotationPattern) do |input, data, callback|
872
- data[:TriplesNode] = prod_data[:pattern].first
873
- end
874
- production(:AnnotationPattern) do |input, data, callback|
875
- add_prod_datum(:pattern, data[:pattern])
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
876
  end
877
-
878
- # [80] Object ::= GraphNode | EmbTP
879
877
  production(:Object) do |input, data, callback|
880
- object = data[:GraphNode] || data[:EmbTP]
878
+ object = data[:GraphNode]
881
879
  add_prod_datum(:pattern, data[:pattern])
882
880
  if object
883
881
  if prod_data[:Verb]
@@ -891,8 +889,17 @@ module SPARQL::Grammar
891
889
  end
892
890
  end
893
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
894
901
 
895
- # [81] TriplesSameSubjectPath ::= VarOrTerm PropertyListPathNotEmpty | TriplesNode PropertyListPath
902
+ # [81] TriplesSameSubjectPath ::= VarOrTermOrQuotedTP PropertyListPathNotEmpty | TriplesNode PropertyListPath
896
903
  production(:TriplesSameSubjectPath) do |input, data, callback|
897
904
  add_prod_datum(:pattern, data[:pattern])
898
905
  add_prod_datum(:path, data[:path])
@@ -900,8 +907,8 @@ module SPARQL::Grammar
900
907
 
901
908
  # [83] PropertyListPathNotEmpty ::= ( VerbPath | VerbSimple ) ObjectList ( ';' ( ( VerbPath | VerbSimple ) ObjectList )? )*
902
909
  start_production(:PropertyListPathNotEmpty) do |input, data, callback|
903
- subject = input[:VarOrTerm] || input[:TriplesNode] || input[:GraphNode]
904
- error(nil, "Expected VarOrTerm, got nothing", production: :PropertyListPathNotEmpty) if validate? && !subject
910
+ subject = input[:VarOrTermOrQuotedTP] || input[:TriplesNode] || input[:GraphNode]
911
+ error(nil, "Expected VarOrTermOrQuotedTP, got nothing", production: :PropertyListPathNotEmpty) if validate? && !subject
905
912
  data[:Subject] = subject
906
913
  end
907
914
  production(:PropertyListPathNotEmpty) do |input, data, callback|
@@ -941,9 +948,13 @@ module SPARQL::Grammar
941
948
  add_prod_datum(:path, data[:path])
942
949
  end
943
950
 
944
- # [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
945
956
  production(:ObjectPath) do |input, data, callback|
946
- object = data[:VarOrTerm] || data[:TriplesNode] || data[:GraphNode]
957
+ object = data[:VarOrTermOrQuotedTP] || data[:TriplesNode] || data[:GraphNode]
947
958
  if object
948
959
  if prod_data[:Verb]
949
960
  if data[:pattern] && data[:path]
@@ -951,6 +962,9 @@ module SPARQL::Grammar
951
962
  data[:pattern].unshift(RDF::Query::Pattern.new(prod_data[:Subject].first, prod_data[:Verb], object.first))
952
963
  bgp = SPARQL::Algebra::Expression[:bgp, data[:pattern]]
953
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])
954
968
  else
955
969
  add_pattern(:Object, subject: prod_data[:Subject], predicate: prod_data[:Verb], object: object)
956
970
  add_prod_datum(:pattern, data[:pattern])
@@ -964,6 +978,16 @@ module SPARQL::Grammar
964
978
  end
965
979
  end
966
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
+
967
991
  # [88] Path ::= PathAlternative
968
992
  # output is a :Path or :iri
969
993
  production(:Path) do |input, data, callback|
@@ -1092,29 +1116,24 @@ module SPARQL::Grammar
1092
1116
  add_prod_datum(:path, data[:path])
1093
1117
  end
1094
1118
 
1095
- # [104] GraphNode ::= VarOrTerm | TriplesNode
1119
+ # [104] GraphNode ::= VarOrTermOrQuotedTP | TriplesNode
1096
1120
  production(:GraphNode) do |input, data, callback|
1097
- term = data[:VarOrTerm] || data[:TriplesNode]
1121
+ term = data[:VarOrTermOrQuotedTP] || data[:TriplesNode]
1098
1122
  add_prod_datum(:pattern, data[:pattern])
1099
1123
  add_prod_datum(:GraphNode, term)
1100
1124
  end
1101
1125
 
1102
- # [105] GraphNodePath ::= VarOrTerm | TriplesNodePath
1126
+ # [105] GraphNodePath ::= VarOrTermOrQuotedTP | TriplesNodePath
1103
1127
  production(:GraphNodePath) do |input, data, callback|
1104
- term = data[:VarOrTerm] || data[:TriplesNode]
1128
+ term = data[:VarOrTermOrQuotedTP] || data[:TriplesNode]
1105
1129
  add_prod_datum(:pattern, data[:pattern])
1106
1130
  add_prod_datum(:path, data[:path])
1107
1131
  add_prod_datum(:GraphNode, term)
1108
1132
  end
1109
1133
 
1110
- # [106] VarOrTerm ::= Var | GraphTerm
1111
- production(:VarOrTerm) do |input, data, callback|
1112
- data.values.each {|v| add_prod_datum(:VarOrTerm, v)}
1113
- end
1114
-
1115
- # [106s] VarOrTermOrEmbTP ::= Var | GraphTerm | EmbTP
1116
- production(:VarOrTermOrEmbTP) do |input, data, callback|
1117
- data.values.each {|v| add_prod_datum(:VarOrTerm, v)}
1134
+ # [106s] VarOrTermOrQuotedTP ::= Var | GraphTerm | EmbTP
1135
+ production(:VarOrTermOrQuotedTP) do |input, data, callback|
1136
+ data.values.each {|v| add_prod_datum(:VarOrTermOrQuotedTP, v)}
1118
1137
  end
1119
1138
 
1120
1139
  # [107] VarOrIri ::= Var | iri
@@ -1132,22 +1151,6 @@ module SPARQL::Grammar
1132
1151
  data[:NIL])
1133
1152
  end
1134
1153
 
1135
- # [174] EmbTP ::= '<<' EmbSubjectOrObject Verb EmbSubjectOrObject '>>'
1136
- production(:EmbTP) do |input, data, callback|
1137
- subject, object = data[:EmbSubjectOrObject]
1138
- predicate = data[:Verb]
1139
- add_pattern(:EmbTP,
1140
- subject: subject,
1141
- predicate: predicate,
1142
- object: object)
1143
- end
1144
-
1145
- # [175] EmbSubjectOrObject ::= Var | BlankNode | iri | RDFLiteral
1146
- # | NumericLiteral | BooleanLiteral | EmbTP
1147
- production(:EmbSubjectOrObject) do |input, data, callback|
1148
- data.values.each {|v| add_prod_datum(:EmbSubjectOrObject, v)}
1149
- end
1150
-
1151
1154
  # [110] Expression ::= ConditionalOrExpression
1152
1155
  production(:Expression) do |input, data, callback|
1153
1156
  add_prod_datum(:Expression, data[:Expression])
@@ -1287,6 +1290,7 @@ module SPARQL::Grammar
1287
1290
  # | iriOrFunction | RDFLiteral
1288
1291
  # | NumericLiteral | BooleanLiteral
1289
1292
  # | Var
1293
+ # | ExprQuotedTP
1290
1294
  production(:PrimaryExpression) do |input, data, callback|
1291
1295
  if data[:Expression]
1292
1296
  add_prod_datum(:Expression, data[:Expression])
@@ -1300,6 +1304,8 @@ module SPARQL::Grammar
1300
1304
  add_prod_datum(:Expression, data[:literal])
1301
1305
  elsif data[:Var]
1302
1306
  add_prod_datum(:Expression, data[:Var])
1307
+ elsif data[:pattern]
1308
+ add_prod_datum(:Expression, data[:pattern])
1303
1309
  end
1304
1310
 
1305
1311
  # Keep track of this for parent UnaryExpression production
@@ -1470,6 +1476,66 @@ module SPARQL::Grammar
1470
1476
  add_prod_datum(:UnaryExpression, data[:UnaryExpression])
1471
1477
  end
1472
1478
 
1479
+ # [174] QuotedTP ::= '<<' qtSubjectOrObject Verb qtSubjectOrObject '>>'
1480
+ production(:QuotedTP) do |input, data, callback|
1481
+ subject, object = data[:qtSubjectOrObject]
1482
+ predicate = data[:Verb]
1483
+ add_pattern(:QuotedTP,
1484
+ subject: subject,
1485
+ predicate: predicate,
1486
+ object: object)
1487
+ end
1488
+
1489
+ # [175] QuotedTriple ::= '<<' DataValueTerm (iri | 'a') DataValueTerm '>>'
1490
+ production(:QuotedTriple) do |input, data, callback|
1491
+ subject, object = data[:DataValueTerm]
1492
+ predicate = data[:iri]
1493
+ add_pattern(:QuotedTriple,
1494
+ subject: subject,
1495
+ predicate: predicate,
1496
+ object: object)
1497
+ end
1498
+
1499
+ # [176] qtSubjectOrObject ::= Var | BlankNode | iri | RDFLiteral
1500
+ # | NumericLiteral | BooleanLiteral | QuotedTP
1501
+ production(:qtSubjectOrObject) do |input, data, callback|
1502
+ data.values.each {|v| add_prod_datum(:qtSubjectOrObject, v)}
1503
+ end
1504
+
1505
+ # [177] DataValueTerm ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | QuotedTriple
1506
+ production(:DataValueTerm) do |input, data, callback|
1507
+ add_prod_datum :DataValueTerm, data.values.first
1508
+ end
1509
+
1510
+ # [180] AnnotationPatternPath ::= '{|' PropertyListPathNotEmpty '|}'
1511
+ start_production(:AnnotationPatternPath) do |input, data, callback|
1512
+ data[:TriplesNode] = input[:TriplesNode]
1513
+ end
1514
+ production(:AnnotationPatternPath) do |input, data, callback|
1515
+ if data[:pattern]
1516
+ add_prod_datum(:pattern, data[:pattern])
1517
+ elsif data[:path]
1518
+ # Replace the subject in the path with the node being annotated.
1519
+ data[:path].first.operands[0] = data[:TriplesNode]
1520
+ add_prod_datum(:path, data[:path])
1521
+ end
1522
+ end
1523
+
1524
+ # [181] ExprQuotedTP ::= '<<' ExprVarOrTerm Verb ExprVarOrTerm '>>'
1525
+ production(:ExprQuotedTP) do |input, data, callback|
1526
+ subject, object = data[:ExprVarOrTerm]
1527
+ predicate = data[:Verb]
1528
+ add_pattern(:ExprQuotedTP,
1529
+ subject: subject,
1530
+ predicate: predicate,
1531
+ object: object)
1532
+ end
1533
+
1534
+ # [182] ExprVarOrTerm ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprQuotedTP
1535
+ production(:ExprVarOrTerm) do |input, data, callback|
1536
+ data.values.each {|v| add_prod_datum(:ExprVarOrTerm, v)}
1537
+ end
1538
+
1473
1539
  ##
1474
1540
  # Initializes a new parser instance.
1475
1541
  #
@@ -1746,8 +1812,8 @@ module SPARQL::Grammar
1746
1812
  value = RDF::URI(value)
1747
1813
  if base_uri && value.relative?
1748
1814
  u = base_uri.join(value)
1749
- u.lexical = "<#{value}>" unless resolve_iris?
1750
- u
1815
+ #u.lexical = "<#{value}>" unless resolve_iris?
1816
+ #u
1751
1817
  else
1752
1818
  value
1753
1819
  end
@@ -1759,8 +1825,8 @@ module SPARQL::Grammar
1759
1825
  debug {"ns(#{prefix.inspect}): base: '#{base}', suffix: '#{suffix}'"}
1760
1826
  iri = iri(base + suffix.to_s)
1761
1827
  # Cause URI to be serialized as a lexical
1762
- iri.lexical = "#{prefix}:#{suffix}" unless resolve_iris?
1763
- iri
1828
+ #iri.lexical = "#{prefix}:#{suffix}" unless resolve_iris?
1829
+ #iri
1764
1830
  end
1765
1831
 
1766
1832
  # Create a literal
@@ -108,6 +108,7 @@ 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
  |<<|>>
@@ -133,6 +134,7 @@ module SPARQL::Grammar
133
134
  TIMEZONE TO TZ UCASE UNDEF UNION URI USING UUID
134
135
  VALUES WHERE WITH YEAR
135
136
  isBLANK isIRI isURI isLITERAL isNUMERIC sameTerm
137
+ isTRIPLE TRIPLE SUBJECT PREDICATE OBJECT
136
138
  true false
137
139
  } + [
138
140
  "DELETE DATA",
@@ -192,31 +192,6 @@ module SPARQL
192
192
  # PREFIX foaf: <http://xmlns.com/foaf/0.1/>
193
193
  # PREFIX dct: <http://purl.org/dc/elements/1.1/>
194
194
  #
195
- # SELECT ?age ?src WHERE {
196
- # ?bob foaf:name "Bob" .
197
- # BIND( <<?bob foaf:age ?age>> AS ?t ) .
198
- # ?t dct:source ?src .
199
- # }
200
- #
201
- # SXP:
202
- #
203
- # (prefix
204
- # (
205
- # (: <http://bigdata.com>)
206
- # (foaf: <http://xmlns.com/foaf/0.1/>)
207
- # (dct: <http://purl.org/dc/elements/1.1/>))
208
- # (project
209
- # (?age ?src)
210
- # (join
211
- # (extend ((?t (triple ?bob foaf:age ?age))) (bgp (triple ?bob foaf:name "Bob")))
212
- # (bgp (triple ?t dct:source ?src))) ))
213
- #
214
- # SPARQL:
215
- #
216
- # PREFIX : <http://bigdata.com>
217
- # PREFIX foaf: <http://xmlns.com/foaf/0.1/>
218
- # PREFIX dct: <http://purl.org/dc/elements/1.1/>
219
- #
220
195
  # CONSTRUCT {
221
196
  # ?bob foaf:name "Bob" .
222
197
  # <<?bob foaf:age ?age>> dct:creator <http://example.com/crawlers#c1>;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparql
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.5
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-18 00:00:00.000000000 Z
12
+ date: 2021-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdf
@@ -17,48 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.1'
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 3.1.8
20
+ version: '3.2'
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
25
  - - "~>"
29
26
  - !ruby/object:Gem::Version
30
- version: '3.1'
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 3.1.8
27
+ version: '3.2'
34
28
  - !ruby/object:Gem::Dependency
35
29
  name: rdf-aggregate-repo
36
30
  requirement: !ruby/object:Gem::Requirement
37
31
  requirements:
38
32
  - - "~>"
39
33
  - !ruby/object:Gem::Version
40
- version: '3.1'
34
+ version: '3.2'
41
35
  type: :runtime
42
36
  prerelease: false
43
37
  version_requirements: !ruby/object:Gem::Requirement
44
38
  requirements:
45
39
  - - "~>"
46
40
  - !ruby/object:Gem::Version
47
- version: '3.1'
41
+ version: '3.2'
48
42
  - !ruby/object:Gem::Dependency
49
43
  name: ebnf
50
44
  requirement: !ruby/object:Gem::Requirement
51
45
  requirements:
52
46
  - - "~>"
53
47
  - !ruby/object:Gem::Version
54
- version: '2.1'
48
+ version: '2.2'
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
52
  requirements:
59
53
  - - "~>"
60
54
  - !ruby/object:Gem::Version
61
- version: '2.1'
55
+ version: '2.2'
62
56
  - !ruby/object:Gem::Dependency
63
57
  name: builder
64
58
  requirement: !ruby/object:Gem::Requirement
@@ -73,82 +67,90 @@ dependencies:
73
67
  - - "~>"
74
68
  - !ruby/object:Gem::Version
75
69
  version: '3.2'
70
+ - !ruby/object:Gem::Dependency
71
+ name: logger
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.4'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1.4'
76
84
  - !ruby/object:Gem::Dependency
77
85
  name: sxp
78
86
  requirement: !ruby/object:Gem::Requirement
79
87
  requirements:
80
88
  - - "~>"
81
89
  - !ruby/object:Gem::Version
82
- version: '1.1'
90
+ version: '1.2'
83
91
  type: :runtime
84
92
  prerelease: false
85
93
  version_requirements: !ruby/object:Gem::Requirement
86
94
  requirements:
87
95
  - - "~>"
88
96
  - !ruby/object:Gem::Version
89
- version: '1.1'
97
+ version: '1.2'
90
98
  - !ruby/object:Gem::Dependency
91
99
  name: sparql-client
92
100
  requirement: !ruby/object:Gem::Requirement
93
101
  requirements:
94
102
  - - "~>"
95
103
  - !ruby/object:Gem::Version
96
- version: '3.1'
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: 3.1.2
104
+ version: '3.2'
100
105
  type: :runtime
101
106
  prerelease: false
102
107
  version_requirements: !ruby/object:Gem::Requirement
103
108
  requirements:
104
109
  - - "~>"
105
110
  - !ruby/object:Gem::Version
106
- version: '3.1'
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: 3.1.2
111
+ version: '3.2'
110
112
  - !ruby/object:Gem::Dependency
111
113
  name: rdf-xsd
112
114
  requirement: !ruby/object:Gem::Requirement
113
115
  requirements:
114
116
  - - "~>"
115
117
  - !ruby/object:Gem::Version
116
- version: '3.1'
118
+ version: '3.2'
117
119
  type: :runtime
118
120
  prerelease: false
119
121
  version_requirements: !ruby/object:Gem::Requirement
120
122
  requirements:
121
123
  - - "~>"
122
124
  - !ruby/object:Gem::Version
123
- version: '3.1'
125
+ version: '3.2'
124
126
  - !ruby/object:Gem::Dependency
125
127
  name: sinatra
126
128
  requirement: !ruby/object:Gem::Requirement
127
129
  requirements:
128
130
  - - "~>"
129
131
  - !ruby/object:Gem::Version
130
- version: '2.0'
132
+ version: '2.1'
131
133
  type: :development
132
134
  prerelease: false
133
135
  version_requirements: !ruby/object:Gem::Requirement
134
136
  requirements:
135
137
  - - "~>"
136
138
  - !ruby/object:Gem::Version
137
- version: '2.0'
139
+ version: '2.1'
138
140
  - !ruby/object:Gem::Dependency
139
141
  name: rack
140
142
  requirement: !ruby/object:Gem::Requirement
141
143
  requirements:
142
144
  - - "~>"
143
145
  - !ruby/object:Gem::Version
144
- version: '2.0'
146
+ version: '2.2'
145
147
  type: :development
146
148
  prerelease: false
147
149
  version_requirements: !ruby/object:Gem::Requirement
148
150
  requirements:
149
151
  - - "~>"
150
152
  - !ruby/object:Gem::Version
151
- version: '2.0'
153
+ version: '2.2'
152
154
  - !ruby/object:Gem::Dependency
153
155
  name: rack-test
154
156
  requirement: !ruby/object:Gem::Requirement
@@ -169,14 +171,14 @@ dependencies:
169
171
  requirements:
170
172
  - - "~>"
171
173
  - !ruby/object:Gem::Version
172
- version: '3.1'
174
+ version: '3.2'
173
175
  type: :development
174
176
  prerelease: false
175
177
  version_requirements: !ruby/object:Gem::Requirement
176
178
  requirements:
177
179
  - - "~>"
178
180
  - !ruby/object:Gem::Version
179
- version: '3.1'
181
+ version: '3.2'
180
182
  - !ruby/object:Gem::Dependency
181
183
  name: linkeddata
182
184
  requirement: !ruby/object:Gem::Requirement
@@ -312,6 +314,7 @@ files:
312
314
  - lib/sparql/algebra/operator/is_iri.rb
313
315
  - lib/sparql/algebra/operator/is_literal.rb
314
316
  - lib/sparql/algebra/operator/is_numeric.rb
317
+ - lib/sparql/algebra/operator/is_triple.rb
315
318
  - lib/sparql/algebra/operator/join.rb
316
319
  - lib/sparql/algebra/operator/lang.rb
317
320
  - lib/sparql/algebra/operator/lang_matches.rb
@@ -336,6 +339,7 @@ files:
336
339
  - lib/sparql/algebra/operator/notin.rb
337
340
  - lib/sparql/algebra/operator/notoneof.rb
338
341
  - lib/sparql/algebra/operator/now.rb
342
+ - lib/sparql/algebra/operator/object.rb
339
343
  - lib/sparql/algebra/operator/or.rb
340
344
  - lib/sparql/algebra/operator/order.rb
341
345
  - lib/sparql/algebra/operator/path.rb
@@ -343,6 +347,7 @@ files:
343
347
  - lib/sparql/algebra/operator/path_plus.rb
344
348
  - lib/sparql/algebra/operator/path_star.rb
345
349
  - lib/sparql/algebra/operator/plus.rb
350
+ - lib/sparql/algebra/operator/predicate.rb
346
351
  - lib/sparql/algebra/operator/prefix.rb
347
352
  - lib/sparql/algebra/operator/project.rb
348
353
  - lib/sparql/algebra/operator/rand.rb
@@ -370,6 +375,7 @@ files:
370
375
  - lib/sparql/algebra/operator/strlen.rb
371
376
  - lib/sparql/algebra/operator/strstarts.rb
372
377
  - lib/sparql/algebra/operator/struuid.rb
378
+ - lib/sparql/algebra/operator/subject.rb
373
379
  - lib/sparql/algebra/operator/substr.rb
374
380
  - lib/sparql/algebra/operator/subtract.rb
375
381
  - lib/sparql/algebra/operator/sum.rb
@@ -406,14 +412,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
406
412
  requirements:
407
413
  - - ">="
408
414
  - !ruby/object:Gem::Version
409
- version: '2.4'
415
+ version: '2.6'
410
416
  required_rubygems_version: !ruby/object:Gem::Requirement
411
417
  requirements:
412
418
  - - ">="
413
419
  - !ruby/object:Gem::Version
414
420
  version: '0'
415
421
  requirements: []
416
- rubygems_version: 3.0.8
422
+ rubygems_version: 3.3.3
417
423
  signing_key:
418
424
  specification_version: 4
419
425
  summary: SPARQL Query and Update library for Ruby.