DOCUMENT START NON-TERMINALS CompilationUnit := Query Query := Prolog ( SelectClause | ConstructClause | DescribeClause | AskClause ) DatasetClause ( WhereClause )? ( OrderClause )? ( LimitClause )? ( OffsetClause )? Prolog := ( BaseDecl )? ( PrefixDecl )* BaseDecl := QuotedURIref PrefixDecl := QuotedURIref // ---- Query type clauses SelectClause := ( ( )? ) DescribeClause := ( ( VarOrURI )+ | ) ConstructClause := ConstructTemplate AskClause := DatasetClause := ( DefaultGraphClause )? ( NamedGraphClause )* DefaultGraphClause := SourceSelector NamedGraphClause := SourceSelector SourceSelector := URI WhereClause := ( )? GroupGraphPattern OrderClause := ( OrderCondition )+ OrderCondition := ( ( | ) OrderExpression | OrderExpression ) OrderExpression := ( FunctionCall | Var ) LimitClause := OffsetClause := // Element QueryPattern() : { Element el ; } // { // // el = GroupGraphPattern() { return el ; } // // { ElementGroup elg = new ElementGroup() ; } // ( // el = GraphPatternNotTriples() { elg.addElement(el) ; } // ()? // QueryPatternTail(elg) // | // Triples(elg) // ()? // ( el = GraphPatternNotTriples() { elg.addElement(el) ; } // ()? // QueryPatternTail(elg) // )? // ) // // { return compressGroupOfOneGroup(elg) ; } // } QueryPatternTail := ( Triples ( )? )? ( GraphPatternNotTriples ( )? QueryPatternTail )? // ---- General Graph Pattern // Basic building block. GroupGraphPattern := GraphPatternList GraphPatternList := ( Triples ( )? )? ( GraphPatternNotTriples ( )? GraphPatternList | ) // ---- All the elements that can make up a pattern GraphPattern := Triples | GraphPatternNotTriples GraphPatternNotTriples := OptionalGraphPattern | UnionGraphPattern | GroupGraphPattern | GraphGraphPattern | UnsaidGraphPattern | Constraint // ---- Definitions of each pattern element OptionalGraphPattern := GroupGraphPattern GraphGraphPattern := VarOrBNodeOrURI GroupGraphPattern UnionGraphPattern := GroupGraphPattern ( GroupGraphPattern )* UnsaidGraphPattern := GroupGraphPattern Constraint := Expression // -------- Construct patterns ConstructTemplate := Triples // -------- Triple lists with property and object lists Triples := Triples1 ( Triples )? Triples1 := VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList PropertyList := ( PropertyListNotEmpty )? PropertyListNotEmpty := Verb ObjectList PropertyListTail | Reification PropertyListTail := ( PropertyList )? ObjectList := Object ObjectTail ObjectTail := ( ObjectList )? Verb := ( VarOrURI | ) Object := ( VarOrTerm | TriplesNode ) // -------- Triple expansions // Anything that can stand in a node slot and which is // a number of triples TriplesNode := Collection | BlankNodePropertyList | Reification BlankNodePropertyList := PropertyList Reification := "<<" GraphNode GraphNode GraphNode ">>" // ------- RDF collections Collection := ( GraphNode )+ // -------- Nodes in a graph pattern or template GraphNode := VarOrTerm | TriplesNode VarOrTerm := ( Var | GraphTerm ) // Property + DESCRIBE VarOrURI := ( Var | URI ) // GRAPH VarOrBNodeOrURI := ( Var | BlankNode | URI ) Var := ( | ) GraphTerm := RDFTerm | // Constraint syntax follows. // **** Debug point Expression := ConditionalOrExpression ConditionalOrExpression := ConditionalAndExpression ( ConditionalAndExpression )* ConditionalAndExpression := ValueLogical ( ValueLogical )* // End of boolean expressions ValueLogical := RelationalExpression RelationalExpression := NumericExpression ( NumericExpression | NumericExpression | NumericExpression | NumericExpression | NumericExpression | NumericExpression )? // **** Debug point NumericExpression := AdditiveExpression AdditiveExpression := MultiplicativeExpression ( MultiplicativeExpression | MultiplicativeExpression )* MultiplicativeExpression := UnaryExpression ( UnaryExpression | UnaryExpression )* UnaryExpression := CallExpression | CallExpression | CallExpression | CallExpression CallExpression := Expression | Expression | Expression | Expression String ( String )? | Var | Expression | Expression | Expression | FunctionCall | PrimaryExpression PrimaryExpression := ( Var | RDFTerm | Expression ) FunctionCall := URI ArgList ArgList := ( Expression ( Expression )* )? // Term as used in expressions RDFTerm := URI | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode NumericLiteral := Integer | FloatingPoint RDFLiteral := String ( ( ) | ( URI ) )? BooleanLiteral := | String := ( | | | ) URI := QuotedURIref | QName QName := ( | ) BlankNode := | QuotedURIref := Integer := FloatingPoint := DOCUMENT END