Beispiel #1
0
        internal Func <SparqlResult, dynamic> Call(SparqlUriNode name, IEnumerable <Func <SparqlResult, dynamic> > args)
        {
            if (name.Uri.AbsoluteUri == XmlSchema.XMLSchemaDouble.AbsoluteUri)
            {
                return(result =>
                {
                    dynamic o = (args.First()(result));
                    if (o is string)
                    {
                        return (double.Parse(o.Replace(".", ",")));
                    }
                    if (o is double || o is int || o is float)
                    {
                        return (double)o;
                    }
                    throw new NotImplementedException();
                });
            }

            throw new NotImplementedException("mathod call " + name);
            //   if (name == ts.LiteralStore.@double)
            //    return store =>
            //Expression.Call(typeof(double).GetMethod("Parse", new[] { typeof(string), typeof(NumberStyles), typeof(CultureInfo) }), args.First(), Expression.Constant(NumberStyles.Any), Expression.Constant(new CultureInfo("en-us")));
        }
Beispiel #2
0
 public SparqlLiteralNode(SparqlUriNode type, string content, string lang)
 {
     this.type = type;
     Content   = content;
     this.lang = lang;
 }
Beispiel #3
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);
        }