Skip to content

Commit

Permalink
Added support for named graphs and relational databases syntax on ShExML
Browse files Browse the repository at this point in the history
  • Loading branch information
herminiogg committed Sep 14, 2020
1 parent ea42941 commit 65f11f8
Show file tree
Hide file tree
Showing 12 changed files with 14,802 additions and 2,322 deletions.
1,239 changes: 636 additions & 603 deletions dist/yashe.bundled.min.js

Large diffs are not rendered by default.

36 changes: 7 additions & 29 deletions dist/yashe.css
Original file line number Diff line number Diff line change
Expand Up @@ -188,16 +188,9 @@
.yashe .cm-animate-fat-cursor {
width: auto;
border: 0;
-webkit-animation: blink 1.06s steps(1) infinite;
animation: blink 1.06s steps(1) infinite;
background-color: #7e7; }

@-webkit-keyframes blink {
0% { }
50% {
background-color: transparent; }
100% { } }

@keyframes blink {
0% { }
50% {
Expand Down Expand Up @@ -362,7 +355,6 @@
cursor: default;
z-index: 4; }
.yashe .CodeMirror-gutter-wrapper {
-webkit-user-select: none;
user-select: none; }
.yashe .CodeMirror-lines {
cursor: text;
Expand All @@ -384,7 +376,6 @@
position: relative;
overflow: visible;
-webkit-tap-highlight-color: transparent;
-webkit-font-variant-ligatures: none;
font-variant-ligatures: none; }
.yashe .CodeMirror-wrap pre {
word-wrap: break-word;
Expand Down Expand Up @@ -477,10 +468,6 @@
content: "\25BE"; }
.yashe .CodeMirror-foldgutter-folded:after {
content: "\25B8"; }

@-webkit-keyframes spin {
100% {
-webkit-transform: rotate(360deg); } }
.yashe .yashe_btn {
color: #333;
border: 1px solid transparent;
Expand All @@ -494,7 +481,6 @@
white-space: nowrap;
padding: 6px 12px;
border-radius: 4px;
-webkit-user-select: none;
user-select: none;
-webkit-appearance: button;
/* margin: 0; */
Expand Down Expand Up @@ -550,11 +536,9 @@
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
width: 600px;
height: auto;
display: -webkit-box;
display: flex; }
.yashe .yashe_buttons div.yashe_sharePopup .inputWrapper {
-webkit-box-flex: 100;
flex-grow: 100; }
flex-grow: 100; }
.yashe .yashe_buttons div.yashe_sharePopup input {
float: left;
width: 100%;
Expand Down Expand Up @@ -585,19 +569,15 @@
.yashe .fullscreenToggleBtns .yashe_smallscreenBtn {
display: none; }
.yashe .yashe_smallscreenBtn:hover {
-webkit-filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7);
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
.yashe .yashe_smallscreenBtn:active {
fill: #DA4567;
-webkit-transform: translateY(4px);
transform: translateY(4px); }
transform: translateY(4px); }
.yashe .yashe_fullscreenBtn:hover {
-webkit-filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7);
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
.yashe .yashe_fullscreenBtn:active {
fill: #DA4567;
-webkit-transform: translateY(4px);
transform: translateY(4px); }
transform: translateY(4px); }
.yashe .downloadBtns {
display: inline-block;
margin: 2px; }
Expand All @@ -606,12 +586,10 @@
width: 20px;
height: 20px; }
.yashe .downloadBtns:hover {
-webkit-filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7);
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
filter: invert(0.4) sepia(0.5) hue-rotate(313.2deg) saturate(16.2) brightness(1.7); }
.yashe .downloadBtns:active {
fill: #DA4567;
-webkit-transform: translateY(4px);
transform: translateY(4px); }
transform: translateY(4px); }
.yashe .inputfileBtn {
width: 0.1px;
height: 0.1px;
Expand Down
2 changes: 1 addition & 1 deletion dist/yashe.min.css

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions doc/doc.min.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion doc/doc.min.js

Large diffs are not rendered by default.

144 changes: 87 additions & 57 deletions lib/grammar/_tokenizer-table.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,28 @@ module.exports = {table:
"+": [],
"]": [],
"MATCHING": []},
"*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]" : {
"STRING_OR_VAR": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
".": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"[": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"]": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"@": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"a": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"AS": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"$": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]" : {
"STRING_OR_VAR": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
".": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"[": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"]": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"@": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"a": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"AS": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
";": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"$": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
">": []},
"*[predicateObject,;]" : {
"a": ["[predicateObject,;]","*[predicateObject,;]"],
":": ["[predicateObject,;]","*[predicateObject,;]"],
"STRING_OR_VAR": ["[predicateObject,;]","*[predicateObject,;]"],
"}": []},
"*[tripleElement,shape]" : {
"a": ["[tripleElement,shape]","*[tripleElement,shape]"],
":": ["[tripleElement,shape]","*[tripleElement,shape]"],
"STRING_OR_VAR": ["[tripleElement,shape]","*[tripleElement,shape]"],
"<": ["[tripleElement,shape]","*[tripleElement,shape]"],
"]": []},
"*decl" : {
"SOURCE": ["decl","*decl"],
"PREFIX": ["decl","*decl"],
Expand All @@ -39,26 +46,27 @@ module.exports = {table:
"FIELD": ["field","*field"],
"}": [],
"ITERATOR": []},
"*graphShape" : {
"a": ["graphShape","*graphShape"],
":": ["graphShape","*graphShape"],
"STRING_OR_VAR": ["graphShape","*graphShape"],
"<": ["graphShape","*graphShape"],
"$": []},
"*nestedIterator" : {
"ITERATOR": ["nestedIterator","*nestedIterator"],
"}": []},
"*shape" : {
"a": ["shape","*shape"],
":": ["shape","*shape"],
"STRING_OR_VAR": ["shape","*shape"],
"<": ["shape","*shape"],
"$": []},
"+[.,allowedIdentifiers]" : {
".": ["[.,allowedIdentifiers]","*[.,allowedIdentifiers]"]},
"+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]" : {
"STRING_OR_VAR": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
".": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"[": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"]": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"@": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"a": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"AS": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"$": ["[or([STRING_OR_VAR,.,[,],@,a,AS,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"]},
"+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]" : {
"STRING_OR_VAR": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
".": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"[": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"]": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"@": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"a": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"AS": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
";": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"$": ["[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]","*[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"]},
"+[predicateObject,;]" : {
"a": ["[predicateObject,;]","*[predicateObject,;]"],
":": ["[predicateObject,;]","*[predicateObject,;]"],
Expand Down Expand Up @@ -140,32 +148,39 @@ module.exports = {table:
"&": ["and","matchers"]},
"[composedVariable]" : {
".": ["composedVariable"]},
"[or([STRING_OR_VAR,.,[,],@,a,AS,$])]" : {
"STRING_OR_VAR": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
".": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"[": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"]": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"@": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"a": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"AS": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"],
"$": ["or([STRING_OR_VAR,.,[,],@,a,AS,$])"]},
"[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]" : {
"STRING_OR_VAR": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
".": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"[": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"]": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"@": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"a": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"AS": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
";": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"],
"$": ["or([STRING_OR_VAR,.,[,],@,a,AS,;,$])"]},
"[predicateObject,;]" : {
"a": ["predicateObject",";"],
":": ["predicateObject",";"],
"STRING_OR_VAR": ["predicateObject",";"]},
"[tripleElement,shape]" : {
"a": ["tripleElement","shape"],
":": ["tripleElement","shape"],
"STRING_OR_VAR": ["tripleElement","shape"],
"<": ["tripleElement","shape"]},
"allowedIdentifiers" : {
"STRING_OR_VAR": ["?AS","?a","STRING_OR_VAR"],
"a": ["?AS","?a","STRING_OR_VAR"],
"AS": ["?AS","?a","STRING_OR_VAR"]},
"allowedStrings" : {
"STRING_OR_VAR": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
".": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"[": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"]": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"@": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"a": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"AS": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"],
"$": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,$])]"]},
"STRING_OR_VAR": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
".": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"[": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"]": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"@": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"a": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"AS": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
";": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"],
"$": ["+[or([STRING_OR_VAR,.,[,],@,a,AS,;,$])]"]},
"and" : {
"AND": ["or([AND,&])"],
"&": ["or([AND,&])"]},
Expand Down Expand Up @@ -200,6 +215,13 @@ module.exports = {table:
"EXPRESSION": ["EXPRESSION","allowedIdentifiers","<","exp",">"]},
"field" : {
"FIELD": ["FIELD","allowedIdentifiers","<","allowedStrings",">"]},
"graph" : {
"[": ["[","[","*[tripleElement,shape]","]","]"]},
"graphShape" : {
"a": ["tripleElement","or([graph,shape])"],
":": ["tripleElement","or([graph,shape])"],
"STRING_OR_VAR": ["tripleElement","or([graph,shape])"],
"<": ["tripleElement","or([graph,shape])"]},
"iterator" : {
"ITERATOR": ["ITERATOR","allowedIdentifiers","<","queryClause",">","{","+field","*nestedIterator","}"]},
"langtag" : {
Expand Down Expand Up @@ -231,14 +253,15 @@ module.exports = {table:
"or([AND,&])" : {
"AND": ["AND"],
"&": ["&"]},
"or([STRING_OR_VAR,.,[,],@,a,AS,$])" : {
"or([STRING_OR_VAR,.,[,],@,a,AS,;,$])" : {
"STRING_OR_VAR": ["STRING_OR_VAR"],
".": ["."],
"[": ["["],
"]": ["]"],
"@": ["@"],
"a": ["a"],
"AS": ["AS"],
";": [";"],
"$": ["$"]},
"or([[@,?allowedIdentifiers,:,allowedIdentifiers],[<,?allowedIdentifiers,:,allowedIdentifiers,>]])" : {
"@": ["[@,?allowedIdentifiers,:,allowedIdentifiers]"],
Expand All @@ -260,6 +283,12 @@ module.exports = {table:
"STRING_OR_VAR": ["allowedIdentifiers"],
"a": ["allowedIdentifiers"],
"AS": ["allowedIdentifiers"]},
"or([graph,shape])" : {
"[": ["graph"],
":": ["shape"],
"STRING_OR_VAR": ["shape"],
"a": ["shape"],
"AS": ["shape"]},
"or([literalValue,objectElement])" : {
"STRING_OR_VAR": ["literalValue"],
"a": ["literalValue"],
Expand Down Expand Up @@ -303,6 +332,7 @@ module.exports = {table:
"queryClause" : {
"JSONPATH": ["JSONPATH","allowedStrings"],
"XMLPATH": ["XMLPATH","allowedStrings"],
"SQL": ["SQL","allowedStrings"],
"CSVPERROW": ["CSVPERROW"]},
"replacedStrings" : {
"STRINGOPERATOR": ["or([allowedIdentifiers,STRINGOPERATOR,DIGITS])","?[,,replacedStrings]"],
Expand All @@ -311,25 +341,25 @@ module.exports = {table:
"a": ["or([allowedIdentifiers,STRINGOPERATOR,DIGITS])","?[,,replacedStrings]"],
"AS": ["or([allowedIdentifiers,STRINGOPERATOR,DIGITS])","?[,,replacedStrings]"]},
"shape" : {
"a": ["tripleElement","?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
":": ["tripleElement","?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
"STRING_OR_VAR": ["tripleElement","?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
"<": ["tripleElement","?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"]},
":": ["?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
"STRING_OR_VAR": ["?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
"a": ["?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"],
"AS": ["?[allowedIdentifiers]",":","[","allowedIdentifiers","?[composedVariable]","]","{","+[predicateObject,;]","}"]},
"shapeLink" : {
"@": ["or([[@,?allowedIdentifiers,:,allowedIdentifiers],[<,?allowedIdentifiers,:,allowedIdentifiers,>]])"],
"<": ["or([[@,?allowedIdentifiers,:,allowedIdentifiers],[<,?allowedIdentifiers,:,allowedIdentifiers,>]])"]},
"shexML" : {
"$": ["*decl","*shape","$"],
"a": ["*decl","*shape","$"],
":": ["*decl","*shape","$"],
"STRING_OR_VAR": ["*decl","*shape","$"],
"<": ["*decl","*shape","$"],
"SOURCE": ["*decl","*shape","$"],
"PREFIX": ["*decl","*shape","$"],
"EXPRESSION": ["*decl","*shape","$"],
"MATCHER": ["*decl","*shape","$"],
"ITERATOR": ["*decl","*shape","$"],
"AUTOINCREMENT": ["*decl","*shape","$"]},
"$": ["*decl","*graphShape","$"],
"a": ["*decl","*graphShape","$"],
":": ["*decl","*graphShape","$"],
"STRING_OR_VAR": ["*decl","*graphShape","$"],
"<": ["*decl","*graphShape","$"],
"SOURCE": ["*decl","*graphShape","$"],
"PREFIX": ["*decl","*graphShape","$"],
"EXPRESSION": ["*decl","*graphShape","$"],
"MATCHER": ["*decl","*graphShape","$"],
"ITERATOR": ["*decl","*graphShape","$"],
"AUTOINCREMENT": ["*decl","*graphShape","$"]},
"source" : {
"SOURCE": ["SOURCE","allowedIdentifiers","<","URL",">"]},
"tripleElement" : {
Expand Down
14 changes: 10 additions & 4 deletions lib/grammar/shex11-grammar.pl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

:-dynamic '==>'/2.

shexML ==> [*(decl), *(shape), $].
shexML ==> [*(decl), *(graphShape), $].

decl ==> [or(source, prefix, expression, matcher, iterator, autoincrement)].

Expand All @@ -42,7 +42,7 @@

replacedStrings ==> [or(allowedIdentifiers, 'STRINGOPERATOR', 'DIGITS'), ?([',', replacedStrings])] .

allowedStrings ==> [+([or('STRING_OR_VAR', '.', '[', ']', '@', 'a', 'AS', '$')])] .
allowedStrings ==> [+([or('STRING_OR_VAR', '.', '[', ']', '@', 'a', 'AS', ';', '$')])] .

allowedIdentifiers ==> [?('AS'), ?('a'), 'STRING_OR_VAR'] .

Expand All @@ -57,14 +57,19 @@

queryClause ==> ['JSONPATH', allowedStrings] .
queryClause ==> ['XMLPATH', allowedStrings] .
queryClause ==> ['SQL', allowedStrings] .
queryClause ==> ['CSVPERROW'] .

union ==> [allowedIdentifiers, composedVariable, or(unions, expOperations)] .
unions ==> ['UNION', union] .
unions ==> ['JOIN', union] .
unions ==> [] .

shape ==> [tripleElement, ?([allowedIdentifiers]), ':', '[', allowedIdentifiers, ?([composedVariable]), ']', '{', +([predicateObject, ';']), '}'] .
graphShape ==> [tripleElement, or(graph, shape)] .

graph ==> ['[','[', *([tripleElement, shape]), ']', ']'] .

shape ==> [?([allowedIdentifiers]), ':', '[', allowedIdentifiers, ?([composedVariable]), ']', '{', +([predicateObject, ';']), '}'] .

predicateObject ==> [predicate, or(objectElement, shapeLink, literalValueObjectElementStart), datatype, langtag] .

Expand Down Expand Up @@ -100,7 +105,8 @@
'STRINGOPERATOR',
'JSONPATH',
'XMLPATH',
'CSVPERROW'
'CSVPERROW',
'SQL'
]).

% Terminals where name of terminal is uppercased ten content
Expand Down
Loading

0 comments on commit 65f11f8

Please sign in to comment.