DOCUMENT START NON-TERMINALS CompilationUnit := Query // **** Debug point Query := Prolog ( SelectClause | ConstructClause | DescribeClause | AskClause ) ( GraphClause )* ( NamedGraphClause )* ( WhereClause )? ( LimitClause )? Prolog := ( BaseDecl )? ( PrefixDecl )* SelectClause := ( ( )? ) DescribeClause := ( ( VarOrURI )+ | ) ConstructClause := ( ConstructPattern | ) ConstructPattern := TripleTemplate ( TripleTemplate )* ( )? TripleTemplate := ( VarOrURI | BNode ) VarOrURI ( VarOrLiteral | BNode ) // -------- AskClause := SourceSelector := URI GraphClause := ( SourceSelector )+ NamedGraphClause := ( SourceSelector )+ WhereClause := ( )? GraphPattern LimitClause := Integer // ---- General Graph Pattern // -- all the pattern operators: UNION/OR, AND GraphPattern := GraphOrPattern GraphOrPattern := GraphAndPattern ( GraphAndPattern )* GraphAndPattern := GroupGraphPattern // ---- Pattern grouping. GroupGraphPattern := PatternGroup // ---- Multiple elements of graph pattern // Group without the enclosing brackets // Would like not to need after {} expression. PatternGroup := PatternElement ( PatternElement )* ( )? // ---- All the elements that can make up a pattern PatternElement := ( TriplePatternList | SourceGraphPattern | OptionalGraphPattern | GraphPattern | UnsaidGraphPattern | ConstraintPattern ) // ---- Definitions of each SourceGraphPattern := ( GroupGraphPattern | VarOrURI GroupGraphPattern ) OptionalGraphPattern := ( GroupGraphPattern | PatternGroup ) UnsaidGraphPattern := GroupGraphPattern ConstraintPattern := Expression // Triple patterns with property and object lists TriplePatternList := Triples // ---- Triples := VarOrURI PropertyList PropertyList := VarOrURI ObjectList ( PropertyList )* ObjectList := VarOrLiteral ( ObjectList )* // ---- VarOrURI := ( VarAsNode | URI ) VarOrLiteral := ( VarAsNode | Literal ) VarAsNode := VarAsExpr := BaseDecl := QuotedURI PrefixDecl := ( QuotedURI | QuotedURI ) /******************************************************************/ // Constraint syntax follows. // **** Debug point Expression := ConditionalOrExpression ConditionalOrExpression := ConditionalXorExpression ( ConditionalXorExpression )* ConditionalXorExpression := ConditionalAndExpression ConditionalAndExpression := ValueLogical ( ValueLogical )* // End of boolean expressions /******************************************************************/ // PatternElements that are not operations on boolean terms. ValueLogical := StringEqualityExpression StringEqualityExpression := NumericalLogical ( NumericalLogical | NumericalLogical | PatternLiteral | PatternLiteral )* // Expressions that involve comparing numbers. NumericalLogical := EqualityExpression EqualityExpression := RelationalExpression ( RelationalExpression | RelationalExpression )? RelationalExpression := NumericExpression ( NumericExpression | NumericExpression | NumericExpression | NumericExpression )? /******************************************************************/ // **** Debug point NumericExpression := AdditiveExpression AdditiveExpression := MultiplicativeExpression ( MultiplicativeExpression | MultiplicativeExpression )* MultiplicativeExpression := UnaryExpression ( UnaryExpression | UnaryExpression | UnaryExpression )* UnaryExpression := ( | ) BuiltinExpression | BuiltinExpression | BuiltinExpression | BuiltinExpression BuiltinExpression := VarAsExpr | VarOrLiteralAsExpr | VarOrLiteralAsExpr | VarOrLiteralAsExpr | VarOrLiteralAsExpr | VarOrLiteralAsExpr | VarOrLiteralAsExpr | URI Expression | PrimaryExpression PrimaryExpression := ( VarAsExpr | Literal | FunctionCall | Expression ) FunctionCall := URI ArgList ArgList := ( VarOrLiteralAsExpr ( VarOrLiteralAsExpr )* )? /******************************************************************/ // Literal terms (as in query literals - any value in the query) // Not "RDF literals". VarOrLiteralAsExpr := ( Literal | VarAsExpr ) Literal := URI | NumericLiteral | TextLiteral NumericLiteral := Integer | FloatingPoint TextLiteral := ( | ) ( )? ( URI )? PatternLiteral := // Node URL() : { Node n ; } // { // //QuotedURI() // n = URI() { return n ; } // } URI := QuotedURI | QName QName := ( | ) BNode := QuotedURI := Integer := | FloatingPoint := DOCUMENT END