/// <summary> /// Converts the Algebra back to a Graph Pattern /// </summary> /// <returns></returns> public GraphPattern ToGraphPattern() { GraphPattern p = this._pattern.ToGraphPattern(); GraphPattern f = new GraphPattern(); f.AddFilter(this._filter); p.AddGraphPattern(f); return p; }
private void TryParseFilterFunctionCall(SparqlQueryParserContext context, IToken t, GraphPattern p) { //Gather the Terms of the Function Call Queue<IToken> funcTokens = new Queue<IToken>(); funcTokens.Enqueue(t); int openBrackets = 0; IToken next = context.Tokens.Peek(); do { if (next.TokenType == Token.LEFTBRACKET) { openBrackets++; } else if (next.TokenType == Token.RIGHTBRACKET) { openBrackets--; } funcTokens.Enqueue(next); context.Tokens.Dequeue(); next = context.Tokens.Peek(); } while (openBrackets > 0); UnaryExpressionFilter filter = new UnaryExpressionFilter(context.ExpressionParser.Parse(funcTokens)); p.IsFiltered = true; p.AddFilter(filter); }
private void TryParseFilterExists(SparqlQueryParserContext context, GraphPattern p, bool exists) { if (this._syntax == SparqlQuerySyntax.Sparql_1_0) throw new RdfParseException("EXISTS/NOT EXISTS is not supported in SPARQL 1.0"); //EXISTS/NOT EXISTS generate a new Graph Pattern GraphPattern existsClause = this.TryParseGraphPattern(context); UnaryExpressionFilter filter = new UnaryExpressionFilter(new ExistsFunction(existsClause, exists)); p.IsFiltered = true; p.AddFilter(filter); }
private void TryParseFilterRegex(SparqlQueryParserContext context, IToken t, GraphPattern p) { //Gather all the Tokens that make up the Regex IToken next = context.Tokens.Peek(); Queue<IToken> regexTokens = new Queue<IToken>(); regexTokens.Enqueue(t); int openBrackets = 0; do { if (next.TokenType == Token.LEFTBRACKET) { openBrackets++; } else if (next.TokenType == Token.RIGHTBRACKET) { openBrackets--; } regexTokens.Enqueue(next); context.Tokens.Dequeue(); next = context.Tokens.Peek(); } while (openBrackets > 0); UnaryExpressionFilter filter = new UnaryExpressionFilter(context.ExpressionParser.Parse(regexTokens)); p.IsFiltered = true; p.AddFilter(filter); }
private void TryParseFilterBuiltInCall(SparqlQueryParserContext context, IToken t, GraphPattern p) { ISparqlFilter filter; IToken next = context.Tokens.Dequeue(); //Should get a LeftBracket next if (next.TokenType != Token.LEFTBRACKET) { throw ParserHelper.Error("Unexpected Token '" + next.GetType().ToString() + "' encountered while trying to parse a Built-in Function call", next); } //Gather tokens for the FILTER expression Queue<IToken> subtokens = new Queue<IToken>(); subtokens.Enqueue(t); subtokens.Enqueue(next); int openBrackets = 1; while (openBrackets > 0) { next = context.Tokens.Dequeue(); if (next.TokenType == Token.LEFTBRACKET) { openBrackets++; } else if (next.TokenType == Token.RIGHTBRACKET) { openBrackets--; } subtokens.Enqueue(next); } ISparqlExpression expr = context.ExpressionParser.Parse(subtokens); if (expr is BoundFunction) { filter = new BoundFilter((VariableExpressionTerm)expr.Arguments.First()); } else { filter = new UnaryExpressionFilter(expr); } p.IsFiltered = true; p.AddFilter(filter); }
private void TryParseFilterExpression(SparqlQueryParserContext context, GraphPattern p) { UnaryExpressionFilter filter = new UnaryExpressionFilter(this.TryParseExpression(context, false)); p.IsFiltered = true; p.AddFilter(filter); }