sparql 3.1.5 → 3.2.0

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.
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.