/// <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); } }
/// <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); } } }
/// <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); } } }
/// <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); } }
/// <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); } }
/// <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); }
/// <summary> /// Evaluates the map and returns a graph object /// </summary> public abstract IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source) where T : IEvaluator, new();
/// <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)); }
/// <summary> /// Constructor /// </summary> /// <param name="source">default source</param> public GraphProvider(IGraphSource source) { DefaultSource = source; }
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)); } }
/// <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)); } }
/// <summary> /// Initializes a new instance of the GraphWriter class /// </summary> /// <param name="source"></param> public GraphWriter(IGraphSource source) { DefaultSource = source; Client = new UpdateClient(); }
/// <summary> /// Evaluates the empty map /// </summary> public override IEnumerable <LabelledTreeNode <object, Term> > Evaluate <T>(IGraphSource source) { yield break; }