{"id":66,"date":"2023-11-13T22:23:51","date_gmt":"2023-11-14T03:23:51","guid":{"rendered":"https:\/\/kgsql.com\/?page_id=66"},"modified":"2023-11-13T22:23:51","modified_gmt":"2023-11-14T03:23:51","slug":"syntax","status":"publish","type":"page","link":"https:\/\/kgsql.com\/index.php\/syntax\/","title":{"rendered":"Syntax"},"content":{"rendered":"<pre>\ngrammar KGSQL;\n\n\/**\n * Knowledge Graph System Query Language ANTLR4 Grammar.  \n *\/\n\n@header {\npackage kgsql.parser;\n}\n\nroot : command;\n\ncommand : prologue ( selectQuery | askQuery\n  | constructQuery | insertRequest | deleteRequest );\n\nprologue : prefixDecl*;\n\nprefixDecl : Prefix NameSpace Identifier;\n\nselectQuery : Select Variable+ whereClause;\n\naskQuery : Ask whereClause;\n\nconstructQuery : Construct patternBlock whereClause;\n\ninsertRequest : Insert patternBlock whereClause;\n\ndeleteRequest : Delete Variable+ whereClause;\n\nwhereClause : Where?\n  '{' patternBlock? ( filter '.'? patternBlock? )* '}';\n\npatternBlock : patternsSameSubject ( '.' patternBlock? )?;\n\nfilter : Filter constraint;\n\npatternsSameSubject : ( noun | linkedList ) predicateList?;\n\npredicateList : verb objectList ( ';' ( verb objectList )? )*;\n\nobjectList : object ( ',' object )*;\n\nobject : noun | linkedList;\n\nnoun : resourceOrVariable multiplicity?\n  | '[' resourceOrVariable resourceOrVariable? typeUnion ']' multiplicity?;\n\nverb : typeUnion multiplicity? | '[' resourceOrVariable typeUnion ']' multiplicity?;\n\ntypeUnion : Variable | prefixedName ( '|' prefixedName )*;\n\nresourceOrVariable : prefixedName | typedLiteral | numericLiteral | True | False | Variable;\n\nlinkedList : '(' ( resourceOrVariable | linkedList )* ')'\n  | '[' '(' ( resourceOrVariable | linkedList )* ')' prefixedName ']';\n\nprefixedName : NameSpace LocalName;\n\nconstraint : '(' expression ')' | LocalName '(' expressionList? ')';\n\nexpressionList : expression ( ',' expression )*;\n\nexpression : conditionalAndExpression ( '||' conditionalAndExpression )*;\n\nconditionalAndExpression : relationalExpression ( '&&' relationalExpression )*;\n\nrelationalExpression : additiveExpression ( '=' additiveExpression | '!=' additiveExpression\n  | '<' additiveExpression | '>' additiveExpression\n  | '<=' additiveExpression | '>=' additiveExpression )?;\n\nadditiveExpression : multiplicativeExpression ('+' multiplicativeExpression\n  | '-' multiplicativeExpression | NatPositive | NatNegative | RealPositive | RealNegative )*;\n\nmultiplicativeExpression : unaryExpression ( '*' unaryExpression | '\/' unaryExpression )*;\n\nunaryExpression : primaryExpression | '+' primaryExpression | '-' primaryExpression | '!' primaryExpression;\n\nprimaryExpression : '(' expression ')' | LocalName '(' expressionList? ')' | resourceOrVariable | askQuery;\n\ntypedLiteral : Literal Lang? | '[' Literal Lang? prefixedName ']' | Literal Lang? '^^' prefixedName;\n\nnumericLiteral : Nat | NatPositive | NatNegative | UnsignedReal | RealPositive | RealNegative;\n\nmultiplicity : '{' integer '}' | '{' integer '..' integer '}';\n\ninteger : Nat | NatPositive | NatNegative | '*';\n\n\/\/ Lexical Scanner Tokens\n\n\/\/ In general, KGSQL is case-sensitive,\n\/\/ but the following reserved words are case-insensitive:\n\nPrefix : [Pp][Rr][Ee][Ff][Ii][Xx] WS;\nSelect : [Ss][Ee][Ll][Ee][Cc][Tt] WS;\nAsk : [Aa][Ss][Kk] WS;\nConstruct : [Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt] WS;\nInsert : [Ii][Nn][Ss][Ee][Rr][Tt] WS;\nDelete : [Dd][Ee][Ll][Ee][Tt][Ee] WS;\nWhere : [Ww][Hh][Ee][Rr][Ee];\nFilter : [Ff][Ii][Ll][Tt][Ee][Rr];\nTrue : [Tt][Rr][Uu][Ee];\nFalse : [Ff][Aa][Ll][Ss][Ee];\n\n\/\/ Identifiers\n\/\/ The forbidden characters in an identifier are: spaces \" < > \\ ^ ` { | }\n\nIdentifier : '<' (~[\\u0000-\\u0020\\u0022\\u003C\\u003E\\u005C\\u005E\\u0060\\u007B\\u007C\\u007D])* '>';\n\n\/\/ Language Codes\n\nLang : '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*;\n\n\/\/ Numbers\n\nfragment UnsignedDecimal : [0-9]+ '.' [0-9]+? | '.' [0-9]+;\nfragment Exponent : [eE] [+-]? [0-9]+;\nfragment UnsignedDouble : [0-9]+ '.' [0-9]+? Exponent | '.' [0-9]+ Exponent | [0-9]+ Exponent;\n\nNat : [0-9]+;\nNatPositive : '+' Nat;\nNatNegative : '-' Nat;\nUnsignedReal : UnsignedDecimal | UnsignedDouble;\nRealPositive : '+' UnsignedReal;\nRealNegative : '-' UnsignedReal;\n\n\/\/ String Literals\n\nfragment EscapedCharacter : '\\\\' [tbnrf'\"];\nfragment StringLiteral1 : '\\'' ( (~[\\u0027\\u005C\\u000A\\u000D]) | EscapedCharacter )* '\\'';\nfragment StringLiteral2 : '\"' ( (~[\\u0022\\u005C\\u000A\\u000D]) | EscapedCharacter )* '\"';\nLiteral : StringLiteral1 | StringLiteral2;\n\n\/\/ Names\n\nfragment CharsBase : [A-Z] | [a-z] | [\\u00C0-\\u00D6] | [\\u00D8-\\u00F6] | [\\u00F8-\\u02FF]\n | [\\u0370-\\u037D] | [\\u037F-\\u1FFF] | [\\u200C-\\u200D] | [\\u2070-\\u218F] | [\\u2C00-\\u2FEF]\n | [\\u3001-\\uD7FF] | [\\uF900-\\uFDCF] | [\\uFDF0-\\uFFFD];\nfragment CharsU : CharsBase | '_';\nfragment VarName : ( CharsU | [0-9] ) ( CharsU | [0-9] | [\\u00B7] | [\\u0300-\\u036F] | [\\u203F-\\u2040] )*;\nfragment Chars : CharsU | '-' | [0-9] | [\\u00B7] | [\\u0300-\\u036F] | [\\u203F-\\u2040];\nfragment PrefixName : CharsBase ( ( Chars | '.' )* Chars )?;\n\nNameSpace : ':' | PrefixName ':';\nLocalName : ( CharsU | [0-9] ) ( ( Chars | '.' )* Chars )?;\nVariable : ( '?' | '$' ) VarName;\n\n\/\/ Whitespace\n\nfragment WS : (' '|'\\t'|'\\n'|'\\r')+;\nS :  WS -> skip;\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>grammar KGSQL; \/** * Knowledge Graph System Query Language ANTLR4 Grammar. *\/ @header { package kgsql.parser; } root : command; command : prologue ( selectQuery | askQuery | constructQuery | insertRequest | deleteRequest ); prologue : prefixDecl*; prefixDecl : Prefix NameSpace Identifier; selectQuery : Select Variable+ whereClause; askQuery : Ask whereClause; constructQuery : Construct patternBlock [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-66","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/pages\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/comments?post=66"}],"version-history":[{"count":1,"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/pages\/66\/revisions"}],"predecessor-version":[{"id":67,"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/pages\/66\/revisions\/67"}],"wp:attachment":[{"href":"https:\/\/kgsql.com\/index.php\/wp-json\/wp\/v2\/media?parent=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}