From 612e5fdb5266012195dc5e75152e819ee820c3df Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Thu, 12 Sep 2024 08:54:03 +0100 Subject: [PATCH] SPARQL Grammar: initial text direction; nested reified triples --- spec/index.html | 161 ++++++++++++++++++++++++------------------------ 1 file changed, 79 insertions(+), 82 deletions(-) diff --git a/spec/index.html b/spec/index.html index a383602..b908bae 100644 --- a/spec/index.html +++ b/spec/index.html @@ -10469,6 +10469,7 @@

Grammar

and not for other path expressions. +
@@ -11289,263 +11290,256 @@

Grammar

- + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11557,245 +11551,245 @@

Grammar

[117]   ReifiedTriple   ::=  '<<' VarOrTerm Verb VarOrTerm Reifier? '>>''<<' ( VarOrTerm | ReifiedTriple ) Verb ( VarOrTerm | ReifiedTriple ) Reifier? '>>'
[118]  ReifiedTripleData  ::=  '<<' DataValueTerm ( iri | 'a' ) DataValueTerm ReifierData? '>>'
[119]   TripleTerm   ::=   '<<(' VarOrTerm Verb VarOrTerm ')>>'
[120]  [119]   TripleTermData   ::=   '<<(' DataValueTerm ( iri | 'a' ) DataValueTerm ')>>'
[121]  [120]   DataValueTerm   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | TripleTermData
[122]  [121]   VarOrIri   ::=   Var | iri
[123]  [122]   Var   ::=   VAR1 | VAR2
[124]  [123]   Expression   ::=   ConditionalOrExpression
[125]  [124]   ConditionalOrExpression   ::=   ConditionalAndExpression ( '||' ConditionalAndExpression )*
[126]  [125]   ConditionalAndExpression   ::=   ValueLogical ( '&&' ValueLogical )*
[127]  [126]   ValueLogical   ::=   RelationalExpression
[128]  [127]   RelationalExpression   ::=   NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT' 'IN' ExpressionList )?
[129]  [128]   NumericExpression   ::=   AdditiveExpression
[130]  [129]   AdditiveExpression   ::=   MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( '*' UnaryExpression ) | ( '/' UnaryExpression ) )* )*
[131]  [130]   MultiplicativeExpression   ::=   UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )*
[132]  [131]   UnaryExpression   ::=     '!' PrimaryExpression
| '+' PrimaryExpression
| '-' PrimaryExpression
| PrimaryExpression
[133]  [132]   PrimaryExpression   ::=   BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprTripleTerm
[134]  [133]   ExprVarOrTerm   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprTripleTerm
[135]  [134]   ExprTripleTerm   ::=   '<<(' ExprVarOrTerm Verb ExprVarOrTerm ')>>'
[136]  [135]   BrackettedExpression   ::=   '(' Expression ')'
[137]  [136]   BuiltInCall   ::=    Aggregate
| 'STR' '(' Expression ')'
| 'LANG' '(' Expression ')'
| 'LANGMATCHES' '(' Expression ',' Expression ')'
| 'DATATYPE' '(' Expression ')'
| 'BOUND' '(' Var ')'
| 'IRI' '(' Expression ')'
| 'URI' '(' Expression ')'
| 'BNODE' ( '(' Expression ')' | NIL )
| 'RAND' NIL
| 'ABS' '(' Expression ')'
| 'CEIL' '(' Expression ')'
| 'FLOOR' '(' Expression ')'
| 'ROUND' '(' Expression ')'
| 'CONCAT' ExpressionList
| SubstringExpression
| 'STRLEN' '(' Expression ')'
| StrReplaceExpression
| 'UCASE' '(' Expression ')'
| 'LCASE' '(' Expression ')'
| 'ENCODE_FOR_URI' '(' Expression ')'
| 'CONTAINS' '(' Expression ',' Expression ')'
| 'STRSTARTS' '(' Expression ',' Expression ')'
| 'STRENDS' '(' Expression ',' Expression ')'
| 'STRBEFORE' '(' Expression ',' Expression ')'
| 'STRAFTER' '(' Expression ',' Expression ')'
| 'YEAR' '(' Expression ')'
| 'MONTH' '(' Expression ')'
| 'DAY' '(' Expression ')'
| 'HOURS' '(' Expression ')'
| 'MINUTES' '(' Expression ')'
| 'SECONDS' '(' Expression ')'
| 'TIMEZONE' '(' Expression ')'
| 'TZ' '(' Expression ')'
| 'NOW' NIL
| 'UUID' NIL
| 'STRUUID' NIL
| 'MD5' '(' Expression ')'
| 'SHA1' '(' Expression ')'
| 'SHA256' '(' Expression ')'
| 'SHA384' '(' Expression ')'
| 'SHA512' '(' Expression ')'
| 'COALESCE' ExpressionList
| 'IF' '(' Expression ',' Expression ',' Expression ')'
| 'STRLANG' '(' Expression ',' Expression ')'
| 'STRDT' '(' Expression ',' Expression ')'
| 'sameTerm' '(' Expression ',' Expression ')'
| 'isIRI' '(' Expression ')'
| 'isURI' '(' Expression ')'
| 'isBLANK' '(' Expression ')'
| 'isLITERAL' '(' Expression ')'
| 'isNUMERIC' '(' Expression ')'
| RegexExpression
| ExistsFunc
| NotExistsFunc
| 'isTRIPLE' '(' Expression ')'
| 'TRIPLE' '(' Expression ',' Expression ',' Expression ')'
| 'SUBJECT' '(' Expression ')'
| 'PREDICATE' '(' Expression ')'
| 'OBJECT' '(' Expression ')'
  Aggregate
| 'STR' '(' Expression ')'
| 'LANG' '(' Expression ')'
| 'LANGMATCHES' '(' Expression ',' Expression ')'
| 'LANGDIR' '(' Expression ')'
| 'DATATYPE' '(' Expression ')'
| 'BOUND' '(' Var ')'
| 'IRI' '(' Expression ')'
| 'URI' '(' Expression ')'
| 'BNODE' ( '(' Expression ')' | NIL )
| 'RAND' NIL
| 'ABS' '(' Expression ')'
| 'CEIL' '(' Expression ')'
| 'FLOOR' '(' Expression ')'
| 'ROUND' '(' Expression ')'
| 'CONCAT' ExpressionList
| SubstringExpression
| 'STRLEN' '(' Expression ')'
| StrReplaceExpression
| 'UCASE' '(' Expression ')'
| 'LCASE' '(' Expression ')'
| 'ENCODE_FOR_URI' '(' Expression ')'
| 'CONTAINS' '(' Expression ',' Expression ')'
| 'STRSTARTS' '(' Expression ',' Expression ')'
| 'STRENDS' '(' Expression ',' Expression ')'
| 'STRBEFORE' '(' Expression ',' Expression ')'
| 'STRAFTER' '(' Expression ',' Expression ')'
| 'YEAR' '(' Expression ')'
| 'MONTH' '(' Expression ')'
| 'DAY' '(' Expression ')'
| 'HOURS' '(' Expression ')'
| 'MINUTES' '(' Expression ')'
| 'SECONDS' '(' Expression ')'
| 'TIMEZONE' '(' Expression ')'
| 'TZ' '(' Expression ')'
| 'NOW' NIL
| 'UUID' NIL
| 'STRUUID' NIL
| 'MD5' '(' Expression ')'
| 'SHA1' '(' Expression ')'
| 'SHA256' '(' Expression ')'
| 'SHA384' '(' Expression ')'
| 'SHA512' '(' Expression ')'
| 'COALESCE' ExpressionList
| 'IF' '(' Expression ',' Expression ',' Expression ')'
| 'STRLANG' '(' Expression ',' Expression ')'
| 'STRLANGDIR' '(' Expression ',' Expression ',' Expression ')'
| 'STRDT' '(' Expression ',' Expression ')'
| 'sameTerm' '(' Expression ',' Expression ')'
| 'isIRI' '(' Expression ')'
| 'isURI' '(' Expression ')'
| 'isBLANK' '(' Expression ')'
| 'isLITERAL' '(' Expression ')'
| 'isNUMERIC' '(' Expression ')'
| 'hasLANG' '(' Expression ')'
| 'hasLANGDIR' '(' Expression ')'
| RegexExpression
| ExistsFunc
| NotExistsFunc
| 'isTRIPLE' '(' Expression ')'
| 'TRIPLE' '(' Expression ',' Expression ',' Expression ')'
| 'SUBJECT' '(' Expression ')'
| 'PREDICATE' '(' Expression ')'
| 'OBJECT' '(' Expression ')'
[138]  [137]   RegexExpression   ::=   'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')'
[139]  [138]   SubstringExpression   ::=   'SUBSTR' '(' Expression ',' Expression ( ',' Expression )? ')'
[140]  [139]   StrReplaceExpression   ::=   'REPLACE' '(' Expression ',' Expression ',' Expression ( ',' Expression )? ')'
[141]  [140]   ExistsFunc   ::=   'EXISTS' GroupGraphPattern
[142]  [141]   NotExistsFunc   ::=   'NOT' 'EXISTS' GroupGraphPattern
[143]  [142]   Aggregate   ::=     'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')'
| 'SUM' '(' 'DISTINCT'? Expression ')'
| 'MIN' '(' 'DISTINCT'? Expression ')'
| 'MAX' '(' 'DISTINCT'? Expression ')'
| 'AVG' '(' 'DISTINCT'? Expression ')'
| 'SAMPLE' '(' 'DISTINCT'? Expression ')'
| 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')'
[144]  [143]   iriOrFunction   ::=   iri ArgList?
[145]  [144]   RDFLiteral   ::=  String ( LANGTAG | ( '^^' iri ) )?String ( LANG_DIR | '^^' iri )?
[146]  [145]   NumericLiteral   ::=   NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
[147]  [146]   NumericLiteralUnsigned   ::=   INTEGER | DECIMAL | DOUBLE
[148]  [147]   NumericLiteralPositive   ::=   INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE
[149]  [148]   NumericLiteralNegative   ::=   INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE
[150]  [149]   BooleanLiteral   ::=   'true' | 'false'
[151]  [150]   String   ::=   STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
[152]  [151]   iri   ::=   IRIREF | PrefixedName
[153]  [152]   PrefixedName   ::=   PNAME_LN | PNAME_NS
[154]  [153]   BlankNode   ::=   BLANK_NODE_LABEL | ANON
- + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11803,6 +11797,8 @@

Grammar

[155]  [154]   IRIREF   ::=   '<' ([^<>"{}|^`\]-[#x00-#x20])* '>'
[156]  [155]   PNAME_NS   ::=   PN_PREFIX? ':'
[157]  [156]   PNAME_LN   ::=   PNAME_NS PN_LOCAL
[158]  [157]   BLANK_NODE_LABEL   ::=   '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
[159]  [158]   VAR1   ::=   '?' VARNAME
[160]  [159]   VAR2   ::=   '$' VARNAME
[161]  LANGTAG[160]  LANG_DIR   ::=  '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*'@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* ('--' [a-zA-Z]+)?
[162]  [161]   INTEGER   ::=   [0-9]+
[163]  [162]   DECIMAL   ::=   [0-9]* '.' [0-9]+
[164]  [163]   DOUBLE   ::=   [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT
[165]  [164]   INTEGER_POSITIVE   ::=   '+' INTEGER
[166]  [165]   DECIMAL_POSITIVE   ::=   '+' DECIMAL
[167]  [166]   DOUBLE_POSITIVE   ::=   '+' DOUBLE
[168]  [167]   INTEGER_NEGATIVE   ::=   '-' INTEGER
[169]  [168]   DECIMAL_NEGATIVE   ::=   '-' DECIMAL
[170]  [169]   DOUBLE_NEGATIVE   ::=   '-' DOUBLE
[171]  [170]   EXPONENT   ::=   [eE] [+-]? [0-9]+
[172]  [171]   STRING_LITERAL1   ::=   "'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'"
[173]  [172]   STRING_LITERAL2   ::=   '"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"'
[174]  [173]   STRING_LITERAL_LONG1   ::=   "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''"
[175]  [174]   STRING_LITERAL_LONG2   ::=   '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""'
[176]  [175]   ECHAR   ::=   '\' [tbnrf\"']
[177]  [176]   NIL   ::=   '(' WS* ')'
[178]  [177]   WS   ::=   #x20 | #x9 | #xD | #xA
[179]  [178]   ANON   ::=   '[' WS* ']'
[180]  [179]   PN_CHARS_BASE   ::=   [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[181]  [180]   PN_CHARS_U   ::=   PN_CHARS_BASE | '_'
[182]  [181]   VARNAME   ::=   ( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*
[183]  [182]   PN_CHARS   ::=   PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
[184]  [183]   PN_PREFIX   ::=   PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)?
[185]  [184]   PN_LOCAL   ::=   (PN_CHARS_U | ':' | [0-9] | PLX ) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX) )?
[186]  [185]   PLX   ::=   PERCENT | PN_LOCAL_ESC
[187]  [186]   PERCENT   ::=   '%' HEX HEX
[188]  [187]   HEX   ::=   [0-9] | [A-F] | [a-f]
[189]  [188]   PN_LOCAL_ESC   ::=   '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )
+ + @@ -11889,6 +11885,7 @@

Changes between SPARQL 1.1 Query Language and SPARQL 1.2 Query Language

  • Remove concepts of plain and simple literals, in favor of explicit mentions of xsd:string
  • Update grammar for triple terms, reifiers, reified triples, annotation syntax, and triple term functions in
  • +
  • Update grammar for initial text direction syntax and functions in
  • Migrate XML Schema references to 1.1
  • Update references to XPath from 2.0 to 3.1
  • Add functions on triple terms to