<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ontologforum.com/index.php?action=history&amp;feed=atom&amp;title=KGSQL%2FGrammar</id>
	<title>KGSQL/Grammar - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ontologforum.com/index.php?action=history&amp;feed=atom&amp;title=KGSQL%2FGrammar"/>
	<link rel="alternate" type="text/html" href="https://ontologforum.com/index.php?title=KGSQL/Grammar&amp;action=history"/>
	<updated>2026-06-11T21:12:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://ontologforum.com/index.php?title=KGSQL/Grammar&amp;diff=3942&amp;oldid=prev</id>
		<title>imported&gt;KennethBaclawski at 14:52, 14 July 2021</title>
		<link rel="alternate" type="text/html" href="https://ontologforum.com/index.php?title=KGSQL/Grammar&amp;diff=3942&amp;oldid=prev"/>
		<updated>2021-07-14T14:52:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
grammar KGSQL;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Knowledge Graph System Query Language ANTLR4 Grammar.  &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
@header {&lt;br /&gt;
package kgsql.parser;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
root : command;&lt;br /&gt;
&lt;br /&gt;
command : prologue ( selectQuery | askQuery&lt;br /&gt;
  | constructQuery | insertRequest | deleteRequest );&lt;br /&gt;
&lt;br /&gt;
prologue : prefixDecl*;&lt;br /&gt;
&lt;br /&gt;
prefixDecl : Prefix NameSpace Identifier;&lt;br /&gt;
&lt;br /&gt;
selectQuery : Select Variable+ whereClause;&lt;br /&gt;
&lt;br /&gt;
askQuery : Ask whereClause;&lt;br /&gt;
&lt;br /&gt;
constructQuery : Construct triplesBlock whereClause;&lt;br /&gt;
&lt;br /&gt;
insertRequest : Insert triplesBlock whereClause;&lt;br /&gt;
&lt;br /&gt;
deleteRequest : Delete Variable+ whereClause;&lt;br /&gt;
&lt;br /&gt;
whereClause : Where? &lt;br /&gt;
  '{' triplesBlock? ( filter '.'? triplesBlock? )* '}';&lt;br /&gt;
&lt;br /&gt;
triplesBlock : triplesSameSubject ( '.' triplesBlock? )?;&lt;br /&gt;
&lt;br /&gt;
filter : Filter constraint;&lt;br /&gt;
&lt;br /&gt;
triplesSameSubject : ( noun | linkedList ) predicateList?;&lt;br /&gt;
&lt;br /&gt;
predicateList : verb objectList ( ';' ( verb objectList )? )*;&lt;br /&gt;
&lt;br /&gt;
objectList : object ( ',' object )*;&lt;br /&gt;
&lt;br /&gt;
object : noun | linkedList;&lt;br /&gt;
&lt;br /&gt;
noun : resourceOrVariable multiplicity? &lt;br /&gt;
  | '[' resourceOrVariable resourceOrVariable? typeUnion ']'&lt;br /&gt;
     multiplicity?;&lt;br /&gt;
&lt;br /&gt;
verb : typeUnion multiplicity? &lt;br /&gt;
  | '[' resourceOrVariable typeUnion ']' multiplicity?;&lt;br /&gt;
&lt;br /&gt;
typeUnion : Variable | prefixedName ( '|' prefixedName )*;&lt;br /&gt;
&lt;br /&gt;
resourceOrVariable : prefixedName | typedLiteral&lt;br /&gt;
  | numericLiteral | True | False | Variable;&lt;br /&gt;
&lt;br /&gt;
linkedList : '(' ( resourceOrVariable | linkedList )* ')' &lt;br /&gt;
 | '[' '(' ( resourceOrVariable | linkedList )* ')' &lt;br /&gt;
      prefixedName ']';&lt;br /&gt;
&lt;br /&gt;
prefixedName : NameSpace LocalName;&lt;br /&gt;
&lt;br /&gt;
constraint : '(' expression ')'&lt;br /&gt;
  | LocalName '(' expressionList? ')';&lt;br /&gt;
&lt;br /&gt;
expressionList : expression ( ',' expression )*;&lt;br /&gt;
&lt;br /&gt;
expression : conditionalAndExpression &lt;br /&gt;
  ( '||' conditionalAndExpression )*;&lt;br /&gt;
&lt;br /&gt;
conditionalAndExpression : relationalExpression &lt;br /&gt;
  ( '&amp;amp;&amp;amp;' relationalExpression )*;&lt;br /&gt;
&lt;br /&gt;
relationalExpression : additiveExpression &lt;br /&gt;
  ( '=' additiveExpression &lt;br /&gt;
  | '!=' additiveExpression&lt;br /&gt;
  | '&amp;lt;' additiveExpression&lt;br /&gt;
  | '&amp;gt;' additiveExpression&lt;br /&gt;
  | '&amp;lt;=' additiveExpression&lt;br /&gt;
  | '&amp;gt;=' additiveExpression )?;&lt;br /&gt;
&lt;br /&gt;
additiveExpression : multiplicativeExpression&lt;br /&gt;
  ('+' multiplicativeExpression&lt;br /&gt;
  | '-' multiplicativeExpression&lt;br /&gt;
  | NatPositive&lt;br /&gt;
  | NatNegative&lt;br /&gt;
  | RealPositive&lt;br /&gt;
  | RealNegative )*;&lt;br /&gt;
&lt;br /&gt;
multiplicativeExpression : unaryExpression&lt;br /&gt;
  ( '*' unaryExpression | '/' unaryExpression )*;&lt;br /&gt;
&lt;br /&gt;
unaryExpression : primaryExpression&lt;br /&gt;
  | '+' primaryExpression &lt;br /&gt;
  | '-' primaryExpression&lt;br /&gt;
  | '!' primaryExpression;&lt;br /&gt;
&lt;br /&gt;
primaryExpression : '(' expression ')'&lt;br /&gt;
  | LocalName '(' expressionList? ')'&lt;br /&gt;
  | resourceOrVariable | askQuery;&lt;br /&gt;
&lt;br /&gt;
typedLiteral : Literal Lang?&lt;br /&gt;
  | '[' Literal Lang? prefixedName ']'&lt;br /&gt;
  | Literal Lang? '^^' prefixedName;&lt;br /&gt;
&lt;br /&gt;
numericLiteral : Nat | NatPositive | NatNegative&lt;br /&gt;
  | UnsignedReal | RealPositive | RealNegative;&lt;br /&gt;
&lt;br /&gt;
multiplicity : '{' integer '}' | '{' integer '..' integer '}';&lt;br /&gt;
&lt;br /&gt;
integer : Nat | NatPositive | NatNegative | '*';&lt;br /&gt;
&lt;br /&gt;
// Lexical Scanner Tokens&lt;br /&gt;
&lt;br /&gt;
// In general, KGSQL is case-sensitive,&lt;br /&gt;
// but the following reserved words are case-insensitive:&lt;br /&gt;
&lt;br /&gt;
Prefix : [Pp][Rr][Ee][Ff][Ii][Xx] WS;&lt;br /&gt;
Select : [Ss][Ee][Ll][Ee][Cc][Tt] WS;&lt;br /&gt;
Ask : [Aa][Ss][Kk] WS;&lt;br /&gt;
Construct : [Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt] WS;&lt;br /&gt;
Insert : [Ii][Nn][Ss][Ee][Rr][Tt] WS;&lt;br /&gt;
Delete : [Dd][Ee][Ll][Ee][Tt][Ee] WS;&lt;br /&gt;
Where : [Ww][Hh][Ee][Rr][Ee];&lt;br /&gt;
Filter : [Ff][Ii][Ll][Tt][Ee][Rr];&lt;br /&gt;
True : [Tt][Rr][Uu][Ee];&lt;br /&gt;
False : [Ff][Aa][Ll][Ss][Ee];&lt;br /&gt;
&lt;br /&gt;
// Identifiers&lt;br /&gt;
// The forbidden characters in an identifier are: spaces &amp;quot; &amp;lt; &amp;gt; \ ^ ` { | }&lt;br /&gt;
&lt;br /&gt;
Identifier : '&amp;lt;' (~[\u0000-\u0020\u0022\u003C\u003E\u005C\u005E\u0060\u007B\u007C\u007D])* '&amp;gt;';&lt;br /&gt;
&lt;br /&gt;
// Language Codes&lt;br /&gt;
&lt;br /&gt;
Lang : '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*;&lt;br /&gt;
&lt;br /&gt;
// Numbers&lt;br /&gt;
&lt;br /&gt;
fragment UnsignedDecimal : [0-9]+ '.' [0-9]+? | '.' [0-9]+;&lt;br /&gt;
fragment Exponent : [eE] [+-]? [0-9]+;&lt;br /&gt;
fragment UnsignedDouble : [0-9]+ '.' [0-9]+? Exponent&lt;br /&gt;
  | '.' [0-9]+ Exponent | [0-9]+ Exponent;&lt;br /&gt;
&lt;br /&gt;
Nat : [0-9]+;&lt;br /&gt;
NatPositive : '+' Nat;&lt;br /&gt;
NatNegative : '-' Nat;&lt;br /&gt;
UnsignedReal : UnsignedDecimal | UnsignedDouble;&lt;br /&gt;
RealPositive : '+' UnsignedReal;&lt;br /&gt;
RealNegative : '-' UnsignedReal;&lt;br /&gt;
&lt;br /&gt;
// String Literals&lt;br /&gt;
&lt;br /&gt;
fragment EscapedCharacter : '\\' [tbnrf'&amp;quot;];&lt;br /&gt;
fragment StringLiteral1 : '\'' ( (~[\u0027\u005C\u000A\u000D])&lt;br /&gt;
  | EscapedCharacter )* '\'';&lt;br /&gt;
fragment StringLiteral2 : '&amp;quot;' ( (~[\u0022\u005C\u000A\u000D])&lt;br /&gt;
  | EscapedCharacter )* '&amp;quot;';&lt;br /&gt;
Literal : StringLiteral1 | StringLiteral2;&lt;br /&gt;
&lt;br /&gt;
// Names&lt;br /&gt;
&lt;br /&gt;
fragment CharsBase : [A-Z] | [a-z] | [\u00C0-\u00D6]&lt;br /&gt;
  | [\u00D8-\u00F6] | [\u00F8-\u02FF] | [\u0370-\u037D]&lt;br /&gt;
  | [\u037F-\u1FFF] | [\u200C-\u200D] | [\u2070-\u218F]&lt;br /&gt;
  | [\u2C00-\u2FEF] | [\u3001-\uD7FF] | [\uF900-\uFDCF]&lt;br /&gt;
  | [\uFDF0-\uFFFD];&lt;br /&gt;
fragment CharsU : CharsBase | '_';&lt;br /&gt;
fragment VarName : ( CharsU | [0-9] ) ( CharsU | [0-9]&lt;br /&gt;
  | [\u00B7] | [\u0300-\u036F] | [\u203F-\u2040] )*;&lt;br /&gt;
fragment Chars : CharsU | '-' | [0-9] | [\u00B7] &lt;br /&gt;
  | [\u0300-\u036F] | [\u203F-\u2040];&lt;br /&gt;
fragment PrefixName : CharsBase ( ( Chars | '.' )* Chars )?;&lt;br /&gt;
&lt;br /&gt;
NameSpace : ':' | PrefixName ':';&lt;br /&gt;
LocalName : ( CharsU | [0-9] ) ( ( Chars | '.' )* Chars )?;&lt;br /&gt;
Variable : ( '?' | '$' ) VarName;&lt;br /&gt;
&lt;br /&gt;
// Whitespace&lt;br /&gt;
&lt;br /&gt;
fragment WS : (' '|'\t'|'\n'|'\r')+;&lt;br /&gt;
S :  WS -&amp;gt; skip;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;KennethBaclawski</name></author>
	</entry>
</feed>