Exemplo n.º 1
0
        public SparqlResultSet Run(PolarTripleStore store)
        {
            ResultSet.Store = store;
            SparqlWhere.CreateNodes(store);

            foreach (SparqlNode filterConstant in FilterConstants)
            {
                filterConstant.CreateNode(store);
            }
            SparqlWhere.Run(ResultSet);


            switch (ResultSet.ResultType)
            {
            case ResultType.Describe:
                ResultSet.GraphResult = store.CreateGraph();
                var variablesIndexes = variables.Select(s => ResultSet.Variables[s].index).ToArray();
                foreach (var result in ResultSet.Results)
                {
                    foreach (var variableIndex in variablesIndexes)
                    {
                        foreach (var triple in store.GetTriplesWithSubject(result[variableIndex]))
                        {
                            ResultSet.GraphResult.Assert(triple);
                        }
                        foreach (var triple in store.GetTriplesWithObject(result[variableIndex]))
                        {
                            ResultSet.GraphResult.Assert(triple);
                        }
                    }
                }
                ResultSet.GraphResult.Build();
                break;

            case ResultType.Select:
                foreach (var func in ListSolutionModifiersOrder)
                {
                    ResultSet.Results = new List <SparqlResult>(func(ResultSet.Results));
                }

                if (!all)
                {
                    ResultSet = new SparqlResultSet(ResultSet, variables);
                }
                ResultSet.DistinctReduse(isDistinct, isReduce);
                foreach (var func in ListSolutionModifiersCount)
                {
                    ResultSet.Results = new List <SparqlResult>(func(ResultSet.Results));
                }
                break;

            case ResultType.Construct:
                ResultSet.GraphResult = store.CreateGraph();
                foreach (var result in ResultSet.Results)
                {
                    Func <SparqlNode, INode> GetValueNode = node =>
                    {
                        if (node is VariableNode)
                        {
                            return(result[(node as VariableNode).index]);
                        }
                        SparqlUriNode uriNode = node as SparqlUriNode;
                        if (uriNode != null)
                        {
                            return(store.GetUriNode(uriNode.Uri) ??
                                   ResultSet.GraphResult.CreateUriNode(uriNode.Uri));
                        }
                        SparqlLiteralNode literlNode = node as SparqlLiteralNode;
                        if (literlNode != null)
                        {
                            return(store.GetLiteralNode(literlNode.type.Uri, literlNode.Content, literlNode.lang) ??
                                   (literlNode.lang != null
                                           ? ResultSet.GraphResult.CreateLiteralNode(literlNode.Content.ToString(),
                                                                                     literlNode.lang)
                                           : ResultSet.GraphResult.CreateLiteralNode(literlNode.Content.ToString(),
                                                                                     literlNode.type.Uri)));
                        }
                        throw new NotImplementedException();
                    };
                    foreach (var sparqlTriplet in Construct.Triples.Cast <SparqlTriple>())
                    {
                        ResultSet.GraphResult.Assert(new Triple(GetValueNode(sparqlTriplet.Subj),
                                                                GetValueNode(sparqlTriplet.Pred),
                                                                GetValueNode(sparqlTriplet.Obj)));
                    }
                }
                ResultSet.GraphResult.Build();
                break;

            case ResultType.Ask:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(ResultSet);
        }
Exemplo n.º 2
0
 public UnionWhere(SparqlResultSet resultSet)
 {
     sparqlResultSet = resultSet;
     startVariable   = resultSet.Variables.Count;
 }
Exemplo n.º 3
0
 public SparqlFilter(SparqlResultSet resultSet)
 {
     this.resultSet = resultSet;
 }
Exemplo n.º 4
0
 public OptionalWhere(SparqlResultSet sparqlResultSet)
 {
     this.sparqlResultSet = sparqlResultSet;
 }
Exemplo n.º 5
0
 public SparqlQuery(RdfQuery11Translator q)
 {
     this.q    = q;
     ResultSet = new SparqlResultSet(q.prolog);
 }