예제 #1
0
 /// <summary>
 /// Converts the Algebra back to a SPARQL Query
 /// </summary>
 /// <returns></returns>
 public SparqlQuery ToQuery()
 {
     SparqlQuery q = new SparqlQuery();
     q.RootGraphPattern = this.ToGraphPattern();
     q.Optimise();
     return q;
 }
        /// <summary>
        /// Converts the Algebra back to a SPARQL Query
        /// </summary>
        /// <returns></returns>
        public SparqlQuery ToQuery()
        {
            SparqlQuery q = new SparqlQuery();

            q.RootGraphPattern = ToGraphPattern();
            q.AddVariable(_graphVar, true);
            q.Optimise();
            return(q);
        }
예제 #3
0
        /// <summary>
        /// Converts the Algebra back to a SPARQL Query.
        /// </summary>
        /// <returns></returns>
        public SparqlQuery ToQuery()
        {
            var q = new SparqlQuery {
                RootGraphPattern = ToGraphPattern()
            };

            q.Optimise();
            return(q);
        }
예제 #4
0
파일: Filter.cs 프로젝트: jmahmud/RDFer
 /// <summary>
 /// Converts the Algebra back to a SPARQL Query
 /// </summary>
 /// <returns></returns>
 public SparqlQuery ToQuery()
 {
     SparqlQuery q = new SparqlQuery();
     q.RootGraphPattern = this.ToGraphPattern();
     q.Optimise();
     return q;
 }
예제 #5
0
        internal static INode ToSpinRdf(this SparqlQuery query, IGraph g)
        {
            INode             root     = g.CreateBlankNode();
            SpinVariableTable varTable = new SpinVariableTable(g);

            //Ensure the Query is optimised so that all the elements are placed in Graph Patterns
            //so we can serialized them OK
            query.Optimise();

            switch (query.QueryType)
            {
            case SparqlQueryType.Ask:
                g.Assert(root, RDF.PropertyType, SP.ClassAsk);
                break;

            case SparqlQueryType.Construct:
                g.Assert(root, RDF.PropertyType, SP.ClassConstruct);
                break;

            case SparqlQueryType.Describe:
            case SparqlQueryType.DescribeAll:
                throw new SpinException("DESCRIBE queries cannot be represented in SPIN RDF Syntax");

            case SparqlQueryType.Select:
            case SparqlQueryType.SelectAll:
            case SparqlQueryType.SelectAllDistinct:
            case SparqlQueryType.SelectAllReduced:
            case SparqlQueryType.SelectDistinct:
            case SparqlQueryType.SelectReduced:
                g.Assert(root, RDF.PropertyType, SP.ClassSelect);
                break;

            case SparqlQueryType.Unknown:
                throw new SpinException("Unknown query types cannot be represented in SPIN RDF Syntax");
            }

            //Process the WHERE clause
            g.Assert(root, SP.PropertyWhere, query.RootGraphPattern.ToSpinRdf(g, varTable));

            //Add Variables for a SELECT query
            if (SparqlSpecsHelper.IsSelectQuery(query.QueryType))
            {
                switch (query.QueryType)
                {
                case SparqlQueryType.Select:
                case SparqlQueryType.SelectDistinct:
                case SparqlQueryType.SelectReduced:
                    //Only Add Variables for SELECTs with explicit variable lists
                    INode vars = g.CreateBlankNode();
                    g.Assert(root, SP.PropertyResultVariables, vars);

                    //Get the Variables and generate the Nodes we'll use to help represent them
                    List <SparqlVariable> vs = query.Variables.Where(v => v.IsResultVariable).ToList();

                    for (int i = 0; i < vs.Count; i++)
                    {
                        SparqlVariable v   = vs[i];
                        INode          var = varTable[v.Name];
                        g.Assert(vars, RDF.PropertyFirst, var);
                        if (i < vs.Count - 1)
                        {
                            INode temp = g.CreateBlankNode();
                            g.Assert(vars, RDF.PropertyRest, temp);
                            vars = temp;
                        }
                        // TODO check that was commented before modifications
                        //g.Assert(var, RDF.type, SP.Variable);

                        if (v.IsAggregate)
                        {
                            g.Assert(var, SP.PropertyAs, g.CreateLiteralNode(v.Name, XSD.string_.Uri));
                            g.Assert(var, SP.PropertyExpression, v.Aggregate.ToSpinRdf(g, varTable));
                        }
                        else if (v.IsProjection)
                        {
                            g.Assert(var, SP.PropertyAs, g.CreateLiteralNode(v.Name, XSD.string_.Uri));
                            //TODO check for this
                            //g.Assert(var, SP.expression, v.Projection.ToSpinRdf(query.RootGraphPattern, g, varTable));
                        }
                        else
                        {
                            g.Assert(var, SP.PropertyVarName, g.CreateLiteralNode(v.Name, XSD.string_.Uri));
                        }
                    }
                    g.Assert(vars, RDF.PropertyRest, RDF.Nil);

                    break;
                }
            }

            //Add DISTINCT/REDUCED modifiers if appropriate
            if (query.HasDistinctModifier)
            {
                switch (query.QueryType)
                {
                case SparqlQueryType.SelectAllDistinct:
                case SparqlQueryType.SelectDistinct:
                    g.Assert(root, SP.PropertyDistinct, RDFUtil.TRUE);
                    break;

                case SparqlQueryType.SelectAllReduced:
                case SparqlQueryType.SelectReduced:
                    g.Assert(root, SP.PropertyReduced, RDFUtil.TRUE);
                    break;
                }
            }

            //Add LIMIT and/or OFFSET if appropriate
            if (query.Limit > -1)
            {
                g.Assert(root, SP.PropertyLimit, query.Limit.ToLiteral(g));
            }
            if (query.Offset > 0)
            {
                g.Assert(root, SP.PropertyOffset, query.Offset.ToLiteral(g));
            }

            //Add ORDER BY if appropriate
            if (query.OrderBy != null)
            {
                g.Assert(root, SP.PropertyOrderBy, query.OrderBy.ToSpinRdf(g, varTable));
            }

            //Add GROUP BY and HAVING
            if (query.GroupBy != null)
            {
                throw new SpinException("GROUP BY clauses are not yet representable in SPIN RDF Syntax");
            }
            if (query.Having != null)
            {
                throw new SpinException("HAVING clauses are not yet representable in SPIN RDF Syntax");
            }

            return(root);
        }
 /// <summary>
 /// Converts the Algebra back to a SPARQL Query
 /// </summary>
 /// <returns></returns>
 public SparqlQuery ToQuery()
 {
     SparqlQuery q = new SparqlQuery();
     q.RootGraphPattern = this.ToGraphPattern();
     q.AddVariable(this._graphVar, true);
     q.Optimise();
     return q;
 }