private SparqlUpdateCommand TryParseDeleteDataCommand(SparqlUpdateParserContext context)
        {
            DeleteDataCommand cmd;

            SparqlQueryParserContext subContext = new SparqlQueryParserContext(context.Tokens);

            subContext.Query.BaseUri                        = context.BaseUri;
            subContext.Query.NamespaceMap                   = context.NamespaceMap;
            subContext.ExpressionParser.NamespaceMap        = context.NamespaceMap;
            subContext.ExpressionParser.ExpressionFactories = context.ExpressionFactories;
            subContext.ExpressionFactories                  = context.ExpressionFactories;
            subContext.ExpressionParser.QueryParser         = context.QueryParser;
            subContext.CheckBlankNodeScope                  = false;
            GraphPattern gp = context.QueryParser.TryParseGraphPattern(subContext, context.Tokens.LastTokenType != Token.LEFTCURLYBRACKET);

            // Validate that the Graph Pattern is simple
            // Check it doesn't contain anything other than Triple Patterns or if it does it just contains a single GRAPH Pattern
            if (gp.IsFiltered)
            {
                throw new RdfParseException("A FILTER Clause cannot occur in a DELETE DATA Command");
            }
            else if (gp.IsOptional)
            {
                throw new RdfParseException("An OPTIONAL Clause cannot occur in a DELETE DATA Command");
            }
            else if (gp.IsUnion)
            {
                throw new RdfParseException("A UNION Clause cannot occur in a DELETE DATA Command");
            }
            else if (gp.HasChildGraphPatterns)
            {
                if (!gp.ChildGraphPatterns.All(p => (p.IsGraph && p.GraphSpecifier.TokenType != Token.VARIABLE) || (!p.IsExists && !p.IsMinus && !p.IsNotExists && !p.IsOptional && !p.IsOptional && !p.IsService && !p.IsSubQuery && !p.IsUnion && !p.IsGraph)))
                {
                    throw new RdfParseException("A DELETE DATA Command may only contain a combination of Triple Patterns and GRAPH clauses, GRAPH clauses must specify a Graph URI");
                }
                else if (gp.ChildGraphPatterns.Any(p => p.HasChildGraphPatterns))
                {
                    throw new RdfParseException("A DELETE DATA Command may not contain nested Graph Patterns");
                }
                else if (gp.ChildGraphPatterns.Count == 1 && gp.ChildGraphPatterns[0].IsGraph && gp.TriplePatterns.Count == 0)
                {
                    cmd = new DeleteDataCommand(gp.ChildGraphPatterns[0]);
                }
                else if (gp.HasChildGraphPatterns)
                {
                    cmd = new DeleteDataCommand(gp);
                }
                else
                {
                    throw new RdfParseException("Nested Graph Patterns cannot occur in a DELETE DATA Command");
                }
            }
            else
            {
                // OK
                cmd = new DeleteDataCommand(gp);
            }

            return(cmd);
        }
示例#2
0
 /// <summary>
 /// Processes a DELETE DATA command
 /// </summary>
 /// <param name="cmd">DELETE Data Command</param>
 public void ProcessDeleteDataCommand(DeleteDataCommand cmd)
 {
     this.ProcessCommand(cmd);
 }
示例#3
0
 /// <summary>
 /// Processes a DELETE DATA command.
 /// </summary>
 /// <param name="cmd">Delete Data Command.</param>
 /// <param name="context">SPARQL Update Evaluation Context.</param>
 protected virtual void ProcessDeleteDataCommandInternal(DeleteDataCommand cmd, SparqlUpdateEvaluationContext context)
 {
     cmd.Evaluate(context);
 }
示例#4
0
 /// <summary>
 /// Processes a DELETE DATA command.
 /// </summary>
 /// <param name="cmd">DELETE Data Command.</param>
 public void ProcessDeleteDataCommand(DeleteDataCommand cmd)
 {
     ProcessDeleteDataCommandInternal(cmd, GetContext());
 }