/// <summary>
 /// Evaluates the Change source map
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="source">query target</param>
 /// <returns></returns>
 public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
 {
     foreach (var item in InputMap.Evaluate <T>(_source))
     {
         yield return(item);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Evaluates the join map
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
        {
            var tempSet = new List <LabelledTreeNode <object, Term> >();

            foreach (var treeJoin in InputMap2.Evaluate <T>(source))
            {
                tempSet.Add(treeJoin);
            }

            foreach (var treeBase in InputMap1.Evaluate <T>(source))
            {
                var  result       = treeBase;
                bool isCompatible = false;

                foreach (var treeJoin in tempSet)
                {
                    if (JoinHelper.Compatible(treeBase, treeJoin, _addressPairList))
                    {
                        isCompatible = true;
                        result       = JoinHelper.Join(result, treeJoin, _addressPairList);
                    }
                }

                if (isCompatible)
                {
                    yield return(result);
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Evaluates the constant map
 /// </summary>
 public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
 {
     foreach (var item in _value)
     {
         yield return(new LabelledTreeNode <object, Term>(item));
     }
 }
 /// <summary>
 /// Evaluates the expression filter map
 /// </summary>
 public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
 {
     foreach (var tree in InputMap.Evaluate <T>(source))
     {
         if (_expression(tree))
         {
             yield return(tree);
         }
     }
 }
Beispiel #5
0
        /// <summary>
        /// Evaluate the Basic Graph Pattern. The evaluation is carried out by the delegate, which the client must define
        /// </summary>
        public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
        {
            if (_evaluator == null)
            {
                _evaluator = new T();
            }

            foreach (var item in _evaluator.Evaluate(_queryModel, _offset, _limit, _filter, source))
            {
                yield return(item);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Evaluates the Bind Map.
        /// </summary>
        /// <param name="source">query target</param>
        public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
        {
            foreach (var tree in InputMap.Evaluate <T>(source))
            {
                foreach (var binding in _bindingDictionary)
                {
                    if (tree.Find(binding.Key) != null)
                    {
                        tree.Find(binding.Key).Value = binding.Value;
                    }
                }

                yield return(tree);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Evaluates the slice map
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
        {
            var start = _start ?? 0;

            var count = 0;

            foreach (var item in InputMap.Evaluate <T>(source))
            {
                if (count < start)
                {
                    //skip
                }
                else if (_size.HasValue && count - start >= _size.Value)
                {
                    //skip
                }
                else
                {
                    yield return(item);
                }
                count++;
            }
        }
 /// <summary>
 /// Change the query target for all subqueries
 /// </summary>
 /// <param name="map"></param>
 /// <param name="source"></param>
 public ChangeSourceMap(IMap map, IGraphSource source) : base(map)
 {
     _source = source;
 }
        public static void Define <T>(IGraphSource <T, string> graph,
                                      Func <VerticesPair <string>, T> getEdgeDataCallback,
                                      DefinitionSet set,
                                      Func <Edge <string, T>, bool> addEdgePredicate = null)
        {
            var e = new GraphEdgeSequenceAssembler <string>();

            if ((set & DefinitionSet.Set0) != 0)
            {
                for (var idx = 0; idx < VertexSymbolsA2J.Length - 1; ++idx)
                {
                    e.Define(VertexSymbolsA2J[idx], VertexSymbolsA2J[idx + 1]);
                }
            }

            if ((set & DefinitionSet.Set1) != 0)
            {
                e.Define("E", "M");
                e.Define("F", "N");
                e.Define("G", "D");
                e.Define("B", "I");
            }

            if ((set & DefinitionSet.Set2) != 0)
            {
                e.DefineSelfLoops(VertexSymbolsA2J);
            }

            if ((set & DefinitionSet.Set3) != 0)
            {
                e["Q"].DefineTo(VertexSymbolsA2J.Take(7));                 //< A-G
                e["R"].DefineTo(VertexSymbolsA2J.Take(8));                 //< A-H
                e["S"].DefineTo(VertexSymbolsA2J.Take(9));                 //< A-I
            }

            if ((set & DefinitionSet.Set4) != 0)
            {
                e["U"].DefineFrom(VertexSymbolsA2J);
            }

            if ((set & DefinitionSet.Set5) != 0)
            {
                e.Define("X", "Y");
                e.Define("Y", "Z");
                e.Define("Z", "X");
            }

            if ((set & DefinitionSet.Set6) != 0)
            {
                e.Define("Y", "X");
                e.Define("Z", "Y");
                e.Define("X", "Z");
            }

            if ((set & DefinitionSet.Set7) != 0)
            {
                e["T"].DefineSelfLoop();
            }

            if ((set & DefinitionSet.Set8) != 0)
            {
                e.Define("J", "A");
            }

            graph.AddEdgeRange(e.AdjacentVerticesPairs, getEdgeDataCallback, addEdgePredicate);
        }
Beispiel #10
0
 /// <summary>
 /// Evaluates the map and returns a graph object
 /// </summary>
 public abstract IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source) where T : IEvaluator, new();
Beispiel #11
0
 /// <summary>
 /// Execute the query codified in the graph expression on the source
 /// </summary>
 /// <returns>A collection of graph results that match the graph expression</returns>
 public IEnumerable <LabelledTreeNode <object, Term> > Execute(GraphExpression graphExpression, IGraphSource source = null)
 {
     return(graphExpression.Map.Evaluate <T>(source ?? DefaultSource));
 }
Beispiel #12
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="source">default source</param>
 public GraphProvider(IGraphSource source)
 {
     DefaultSource = source;
 }
Beispiel #13
0
        public IEnumerable <LabelledTreeNode <object, Term> > Evaluate(LabelledTreeNode <object, Term> queryModel, int?offset, int?limit, IFilter filter, IGraphSource source)
        {
            if (source.EndPoint.Equals(TestUris.MathematiciansRepoUri)) //8 mathematicians
            {
                var archimedes = new LabelledTreeNode <object, Term>("archimedes");
                var gauss      = new LabelledTreeNode <object, Term>("gauss");
                var descartes  = new LabelledTreeNode <object, Term>("descartes");
                var euclid     = new LabelledTreeNode <object, Term>("euclid");
                var newton     = new LabelledTreeNode <object, Term>("newton");
                var pythagoras = new LabelledTreeNode <object, Term>("pythagoras");
                var euler      = new LabelledTreeNode <object, Term>("euler");
                var leibniz    = new LabelledTreeNode <object, Term>("leibniz");

                archimedes.AddChild(Biografy.Name, "Archimedes")
                .AddChild(Biografy.YearOfBirth, -287)
                .AddChild(Biografy.YearOfDeath, -212)
                .AddChild(Biografy.Nationality, "greece");

                gauss.AddChild(Biografy.Name, "Carl Friedrich Gauss")
                .AddChild(Biografy.YearOfBirth, 1777)
                .AddChild(Biografy.YearOfDeath, 1855)
                .AddChild(Biografy.Nationality, "germany");

                descartes.AddChild(Biografy.Name, "René Descartes")
                .AddChild(Biografy.YearOfBirth, 1596)
                .AddChild(Biografy.YearOfDeath, 1650)
                .AddChild(Biografy.Nationality, "france");

                euclid.AddChild(Biografy.Name, "Euclid")
                .AddChild(Biografy.YearOfBirth, -325)
                .AddChild(Biografy.YearOfDeath, -265)
                .AddChild(Biografy.Nationality, "greece");

                newton.AddChild(Biografy.Name, "Isaac Newton")
                .AddChild(Biografy.YearOfBirth, 1643)
                .AddChild(Biografy.YearOfDeath, 1727)
                .AddChild(Biografy.Nationality, "england");

                pythagoras.AddChild(Biografy.Name, "Pythagoras")
                .AddChild(Biografy.YearOfBirth, -569)
                .AddChild(Biografy.YearOfDeath, -475)
                .AddChild(Biografy.Nationality, "greece");

                euler.AddChild(Biografy.Name, "Leonhard Euler")
                .AddChild(Biografy.YearOfBirth, 1707)
                .AddChild(Biografy.YearOfDeath, 1783)
                .AddChild(Biografy.Nationality, "switzerland");

                leibniz.AddChild(Biografy.Name, "Gottfried Wilhelm Leibniz")
                .AddChild(Biografy.YearOfBirth, 1646)
                .AddChild(Biografy.YearOfDeath, 1716)
                .AddChild(Biografy.Nationality, "germany");

                yield return(archimedes);

                yield return(gauss);

                yield return(descartes);

                yield return(euclid);

                yield return(newton);

                yield return(pythagoras);

                yield return(euler);

                yield return(leibniz);
            }
            else if (source.EndPoint.Equals(TestUris.PhysicistRepoUri)) //7 physiscists
            {
                var einstein = new LabelledTreeNode <object, Term>("einstein");
                var curie    = new LabelledTreeNode <object, Term>("curie");
                var bohr     = new LabelledTreeNode <object, Term>("bohr");
                var feynman  = new LabelledTreeNode <object, Term>("feynman");
                var newton   = new LabelledTreeNode <object, Term>("newton");
                var galilei  = new LabelledTreeNode <object, Term>("galilei");
                var maxwell  = new LabelledTreeNode <object, Term>("maxwell");

                einstein.AddChild(Biografy.Name, "Albert Einstein")
                .AddChild(Biografy.YearOfBirth, 1879)
                .AddChild(Biografy.YearOfDeath, 1955)
                .AddChild(Biografy.Nationality, "germany");

                curie.AddChild(Biografy.Name, "Marie Curie")
                .AddChild(Biografy.YearOfBirth, 1867)
                .AddChild(Biografy.YearOfDeath, 1934)
                .AddChild(Biografy.Nationality, "france");

                bohr.AddChild(Biografy.Name, "Niels Bohr")
                .AddChild(Biografy.YearOfBirth, 1885)
                .AddChild(Biografy.YearOfDeath, 1962)
                .AddChild(Biografy.Nationality, "denmark");

                feynman.AddChild(Biografy.Name, "Richard Feynman")
                .AddChild(Biografy.YearOfBirth, 1918)
                .AddChild(Biografy.YearOfDeath, 1988)
                .AddChild(Biografy.Nationality, "usa");

                newton.AddChild(Biografy.Name, "Isaac Newton")
                .AddChild(Biografy.YearOfBirth, 1643)
                .AddChild(Biografy.YearOfDeath, 1727)
                .AddChild(Biografy.Nationality, "england");

                galilei.AddChild(Biografy.Name, "Galileo Galilei")
                .AddChild(Biografy.YearOfBirth, 1564)
                .AddChild(Biografy.YearOfDeath, 1642)
                .AddChild(Biografy.Nationality, "italy");

                maxwell.AddChild(Biografy.Name, "James Clerk Maxwell")
                .AddChild(Biografy.YearOfBirth, 1831)
                .AddChild(Biografy.YearOfDeath, 1879)
                .AddChild(Biografy.Nationality, "scottland");

                yield return(einstein);

                yield return(curie);

                yield return(bohr);

                yield return(feynman);

                yield return(newton);

                yield return(galilei);

                yield return(maxwell);
            }
            else if (source.EndPoint.Equals(TestUris.NationsRepouri)) //7 nations
            {
                var germany     = new LabelledTreeNode <object, Term>("germany");
                var france      = new LabelledTreeNode <object, Term>("france");
                var denmark     = new LabelledTreeNode <object, Term>("denmark");
                var greece      = new LabelledTreeNode <object, Term>("greece");
                var italy       = new LabelledTreeNode <object, Term>("italy");
                var england     = new LabelledTreeNode <object, Term>("england");
                var scottland   = new LabelledTreeNode <object, Term>("scottland");
                var usa         = new LabelledTreeNode <object, Term>("usa");
                var switzerland = new LabelledTreeNode <object, Term>("switzerland");

                germany.AddChild(Geografy.Name, "Germany")
                .AddChild(Geografy.Capital, "Berlin")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 80620000);

                france.AddChild(Geografy.Name, "France")
                .AddChild(Geografy.Capital, "Paris")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 66030000);

                denmark.AddChild(Geografy.Name, "Denmark")
                .AddChild(Geografy.Capital, "Berlin")
                .AddChild(Geografy.Continent, "Europe");

                greece.AddChild(Geografy.Name, "Greece")
                .AddChild(Geografy.Capital, "Athens")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 11030000);

                italy.AddChild(Geografy.Name, "Italy")
                .AddChild(Geografy.Capital, "Rome")
                .AddChild(Geografy.Continent, "Europe");

                england.AddChild(Geografy.Name, "England")
                .AddChild(Geografy.Capital, "Berlin")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 53010000);

                scottland.AddChild(Geografy.Name, "Scottland")
                .AddChild(Geografy.Capital, "Berlin")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 5295000);

                usa.AddChild(Geografy.Name, "United States Of America")
                .AddChild(Geografy.Capital, "Washington")
                .AddChild(Geografy.Continent, "America")
                .AddChild(Geografy.Population, 318900000);

                switzerland.AddChild(Geografy.Name, "Switzerland")
                .AddChild(Geografy.Capital, "Bern")
                .AddChild(Geografy.Continent, "Europe")
                .AddChild(Geografy.Population, 8081000);

                yield return(germany);

                yield return(france);

                yield return(denmark);

                yield return(greece);

                yield return(england);

                yield return(scottland);

                yield return(usa);

                yield return(switzerland);
            }
            else
            {
                yield return(new LabelledTreeNode <object, Term>(null));
            }
        }
Beispiel #14
0
        /// <summary>
        /// Evaluates a graph query model against a graph source
        /// </summary>
        /// <param name="queryModel">tree model of the query</param>
        /// <param name="offset">number of solutions to skip</param>
        /// <param name="limit">maximum number of solutions to take</param>
        /// <param name="filter">a bgp filter</param>
        /// <param name="source">query target</param>
        /// <returns>A collection of trees</returns>
        public IEnumerable <LabelledTreeNode <object, Term> > Evaluate(LabelledTreeNode <object, Term> queryModel, int?offset, int?limit, IFilter filter, IGraphSource source)
        {
            var queryString   = SparqlBgpWriter.Write(queryModel, offset, limit, filter);
            var client        = new SparqlJsonClient();
            var responseModel = client.ExecuteQuery(queryString, source.EndPoint);

            foreach (var solution in responseModel.Results.Bindings)
            {
                yield return(CreateResultGraph(solution, queryModel));
            }
        }
Beispiel #15
0
 /// <summary>
 /// Initializes a new instance of the GraphWriter class
 /// </summary>
 /// <param name="source"></param>
 public GraphWriter(IGraphSource source)
 {
     DefaultSource = source;
     Client        = new UpdateClient();
 }
Beispiel #16
0
 /// <summary>
 /// Evaluates the empty map
 /// </summary>
 public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source)
 {
     yield break;
 }