public void TestGetNodeIncomingAndOutgoingNodes() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1"), new Node(2, "?var2"), }, edges = new[] { new Edge(0, "?prop0", 0, 1), new Edge(1, "?prop0", 1, 2) }, }; var queryGraph = new QueryGraph(graph); var node0 = queryGraph.Nodes[0]; var node1 = queryGraph.Nodes[1]; var node2 = queryGraph.Nodes[2]; Assert.Single(node1.GetIncomingNodes(queryGraph)); Assert.Equal(node0, node1.GetIncomingNodes(queryGraph).First()); Assert.Single(node1.GetOutgoingNodes(queryGraph)); Assert.Equal(node2, node1.GetOutgoingNodes(queryGraph).First()); }
public void TestGetInstanceOfEdges() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q5" }), }, edges = new[] { new Edge(0, "?prop0", 0, 1, new [] { "http://www.wikidata.org/prop/direct/P31" }) }, }; var queryGraph = new QueryGraph(graph); var node0 = queryGraph.Nodes[0]; var instanceOfEdges0 = node0.GetInstanceOfEdges(queryGraph).ToArray(); Assert.Single(instanceOfEdges0); Assert.Equal(0, instanceOfEdges0[0].id); var node1 = queryGraph.Nodes[1]; var instanceOfEdges1 = node1.GetInstanceOfEdges(queryGraph).ToArray(); Assert.Empty(instanceOfEdges1); }
public void TestSparql_2ConnectedNodes_3_SubjectIsGivenType_EdgeVar_2Nodes1Edge() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0", new[] { "http://www.wikidata.org/entity/Q76" }), new Node(1, "?var1"), }, edges = new[] { new Edge(0, "?prop0", 0, 1) }, }; var queryGraph = new QueryGraph(graph); var sparql = queryGraph.Nodes[1].ToSparql(queryGraph); var expectedStatements = new[] { @"<http://www.wikidata.org/entity/Q76> ?prop0 ?var1 .", }; foreach (var statement in expectedStatements) { Assert.Contains(statement, sparql.ToString()); } }
public QueryGraph(RDFExplorerGraph rdfGraph) { Nodes = new SortedDictionary <int, QueryNode>(rdfGraph.nodes.Distinct() .ToDictionary(x => x.id, x => new QueryNode(x))); Edges = new SortedDictionary <int, QueryEdge>(rdfGraph.edges.Distinct() .ToDictionary(x => x.id, x => new QueryEdge(x))); this.CheckNodeTypes(); }
public void TestTypes_3ConnectedNodes_2_N0InstanceOfN1_E1RangeN0_3Nodes2Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q5" }), new Node(2, "?var2") }, edges = new[] { new Edge(0, "?prop0", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P31" }), new Edge(1, "?prop1", 2, 0) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.Empty(queryGraph.Nodes[0].Types); Assert.NotEmpty(queryGraph.Nodes[0].InferredTypes); Assert.NotEmpty(queryGraph.Nodes[0].ParentTypes); //InstanceOf Q5 Assert.Single(queryGraph.Nodes[0].ParentTypes); Assert.Contains("Q5", queryGraph.Nodes[0].ParentTypes); Assert.Single(queryGraph.Nodes[0].InferredTypes); Assert.Contains("Q5", queryGraph.Nodes[0].InferredTypes); Assert.NotEmpty(queryGraph.Nodes[1].Types); Assert.Empty(queryGraph.Nodes[1].InferredTypes); Assert.Empty(queryGraph.Nodes[1].ParentTypes); Assert.Single(queryGraph.Nodes[1].Types); Assert.Contains("Q5", queryGraph.Nodes[1].Types); Assert.Empty(queryGraph.Nodes[2].Types); Assert.Empty(queryGraph.Nodes[2].InferredTypes); Assert.Empty(queryGraph.Nodes[2].ParentTypes); Assert.NotEmpty(queryGraph.Edges[0].DomainTypes); //Domain of P31 Assert.NotEmpty(queryGraph.Edges[0].RangeTypes); //Range of P31 Assert.Single(queryGraph.Edges[0].DomainTypes); //Domain of P31 or just Q5? Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); //Domain of P31 or just Q5? Assert.Empty(queryGraph.Edges[1].DomainTypes); //Domain of P31 Assert.NotEmpty(queryGraph.Edges[1].RangeTypes); //Range of P31 Assert.Single(queryGraph.Edges[1].RangeTypes); //Range of P31 Assert.Contains("Q5", queryGraph.Edges[1].RangeTypes); //Range of P31 }
public IActionResult Run([FromBody] RDFExplorerGraph graph) { _logger.Info("Query Start:"); _logger.Info($"Incoming Graph: {graph}"); var queryGraph = new QueryGraph(graph); StaticQueryGraphResults.QueryGraphResults.GetGraphQueryResults(queryGraph, LuceneDirectoryDefaults.EntityIndexPath, LuceneDirectoryDefaults.PropertyIndexPath); _logger.Info("Query End"); return(Json(queryGraph)); }
public void TestTypes_Inferred_3ConnectedNodes_N0P25N1_N1P27N2_E1DomainP25RangeP27_3Nodes3Edges() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?mother"), new Node(1, "?son"), new Node(2, "?country") }, edges = new[] { new Edge(0, "?motherOf", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P25" }), new Edge(1, "?fromCountry", 1, 2, new[] { "http://www.wikidata.org/prop/direct/P27" }), new Edge(2, "?propDomainRange", 0, 2) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.Equal(2, queryGraph.Nodes[0].InferredTypes.Count); Assert.Contains("Q5", queryGraph.Nodes[0].InferredTypes); //Intersect Assert.Single(queryGraph.Nodes[1].InferredTypes); Assert.Contains("Q5", queryGraph.Nodes[1].InferredTypes); Assert.Single(queryGraph.Nodes[2].InferredTypes); Assert.Contains("Q6256", queryGraph.Nodes[2].InferredTypes); Assert.Equal(2, queryGraph.Edges[0].DomainTypes.Count); Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); Assert.Single(queryGraph.Edges[0].RangeTypes); Assert.Contains("Q5", queryGraph.Edges[0].RangeTypes); Assert.Single(queryGraph.Edges[1].DomainTypes); Assert.Contains("Q5", queryGraph.Edges[1].DomainTypes); Assert.Single(queryGraph.Edges[1].RangeTypes); Assert.Contains("Q6256", queryGraph.Edges[1].RangeTypes); Assert.Equal(2, queryGraph.Edges[2].DomainTypes.Count); Assert.Contains("Q5", queryGraph.Edges[2].DomainTypes); Assert.Single(queryGraph.Edges[2].RangeTypes); Assert.Contains("Q6256", queryGraph.Edges[2].RangeTypes); }
public void TestGetNodeInstanceOfValues() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q5" }), }, edges = new[] { new Edge(0, "?prop0", 0, 1, new [] { "http://www.wikidata.org/prop/direct/P31" }) }, }; var queryGraph = new QueryGraph(graph); var node0 = queryGraph.Nodes[0]; Assert.Equal(new[] { "Q5" }, node0.GetInstanceOfValues(queryGraph).ToArray()); }
public void TestTypes_Inferred_3ConnectedNodes_N0P25N1_E1RangeP25_3Nodes2Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?mother"), new Node(1, "?son"), new Node(2, "?var2") }, edges = new[] { new Edge(0, "?motherOf", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P25" }), new Edge(1, "?propRangeP25", 2, 0) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.Equal(2, queryGraph.Nodes[0].InferredTypes.Count); Assert.Contains("Q5", queryGraph.Nodes[0].InferredTypes); Assert.Equal(5, queryGraph.Nodes[1].InferredTypes.Count); Assert.Contains("Q5", queryGraph.Nodes[1].InferredTypes); Assert.Empty(queryGraph.Nodes[2].InferredTypes); Assert.Equal(2, queryGraph.Edges[0].DomainTypes.Count); Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); Assert.Equal(5, queryGraph.Edges[0].RangeTypes.Count); Assert.Contains("Q5", queryGraph.Edges[0].RangeTypes); //Since E1 source is HUMAN, Domain HUMAN Assert.Empty(queryGraph.Edges[1].DomainTypes); Assert.Equal(2, queryGraph.Edges[1].RangeTypes.Count); Assert.Contains("Q5", queryGraph.Edges[1].RangeTypes); }
public void TestTypes_2ConnectedNodes_4_SubjectIsInstanceOfType_2Nodes1Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q5" }) }, edges = new[] { new Edge(0, "?prop0", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P31" }) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.Empty(queryGraph.Nodes[0].Types); Assert.Empty(queryGraph.Nodes[0].InferredTypes); Assert.NotEmpty(queryGraph.Nodes[0].ParentTypes); //InstanceOf Q5 Assert.Single(queryGraph.Nodes[0].ParentTypes); Assert.Contains("Q5", queryGraph.Nodes[0].ParentTypes); Assert.NotEmpty(queryGraph.Nodes[1].Types); Assert.Empty(queryGraph.Nodes[1].InferredTypes); Assert.Empty(queryGraph.Nodes[1].ParentTypes); Assert.Single(queryGraph.Nodes[1].Types); Assert.Contains("Q5", queryGraph.Nodes[1].Types); Assert.NotEmpty(queryGraph.Edges[0].DomainTypes); //Domain of P31 Assert.NotEmpty(queryGraph.Edges[0].RangeTypes); //Range of P31 Assert.Single(queryGraph.Edges[0].DomainTypes); //?human is type Q5. Domain should be Q5. Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); }
public void TestTypes_2ConnectedNodes_3_SourceIsGivenType_TargetIsGivenType_E0N0P27E1_2Nodes1Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?var0", new[] { "http://www.wikidata.org/entity/Q76" }), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q30" }) }, edges = new[] { new Edge(0, "?prop0", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P27" }) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.NotEmpty(queryGraph.Nodes[0].Types); //Q76 Assert.NotEmpty(queryGraph.Nodes[0].InferredTypes); //Domain P27 Assert.NotEmpty(queryGraph.Nodes[0].ParentTypes); Assert.Single(queryGraph.Nodes[0].Types); Assert.Contains("Q76", queryGraph.Nodes[0].Types); Assert.Equal(2, queryGraph.Nodes[0].InferredTypes.Count); Assert.NotEmpty(queryGraph.Nodes[1].Types); //Q30 Assert.NotEmpty(queryGraph.Nodes[1].InferredTypes); //Range P27 Assert.NotEmpty(queryGraph.Nodes[1].ParentTypes); Assert.Single(queryGraph.Nodes[1].Types); Assert.Contains("Q30", queryGraph.Nodes[1].Types); Assert.Single(queryGraph.Nodes[1].InferredTypes); Assert.NotEmpty(queryGraph.Edges[0].DomainTypes); Assert.NotEmpty(queryGraph.Edges[0].RangeTypes); }
public void TestSparql_5ConnectedNodes_SiblingBrothersDirectorsOfMovies_5Nodes7Edge() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?human0"), new Node(1, "?human1"), new Node(2, "?film2"), new Node(3, "?HUMAN", new[] { "http://www.wikidata.org/entity/Q5" }), new Node(4, "?FILM", new[] { "http://www.wikidata.org/entity/Q11424" }), }, edges = new[] { new Edge(0, "?instanceOfHuman0", 0, 3, new [] { "http://www.wikidata.org/prop/direct/P31" }), new Edge(1, "?instanceOfHuman1", 1, 3, new [] { "http://www.wikidata.org/prop/direct/P31" }), new Edge(2, "?instanceOfMovie2", 2, 4, new [] { "http://www.wikidata.org/prop/direct/P31" }), new Edge(3, "?sibling0", 0, 1, new [] { "http://www.wikidata.org/prop/direct/P3373" }), new Edge(4, "?sibling1", 1, 0, new [] { "http://www.wikidata.org/prop/direct/P3373" }), new Edge(5, "?director0", 2, 0, new [] { "http://www.wikidata.org/prop/direct/P57" }), new Edge(6, "?director1", 2, 1, new [] { "http://www.wikidata.org/prop/direct/P57" }), }, }; var queryGraph = new QueryGraph(graph); var sparql = queryGraph.Nodes[0].ToSparql(queryGraph); var expectedStatements = new[] { @"?human0 <http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q5> .", @"?human1 <http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q5> .", @"?film2 <http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q11424> .", @"?human0 <http://www.wikidata.org/prop/direct/P3373> ?human1 .", @"?human1 <http://www.wikidata.org/prop/direct/P3373> ?human0 .", @"?film2 <http://www.wikidata.org/prop/direct/P57> ?human0 .", @"?film2 <http://www.wikidata.org/prop/direct/P57> ?human1 .", }; foreach (var statement in expectedStatements) { Assert.Contains(statement, sparql.ToString()); } }
public void TestTypes_Inferred_2ConnectedNodes_N0P25N1_N0DRP25N1_2Nodes2Edges() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?human"), new Node(1, "?country") }, edges = new[] { new Edge(0, "?countryOfCitizenship", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P27" }), new Edge(1, "?propDomainRangeP27", 0, 1) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.Equal(2, queryGraph.Nodes[0].InferredTypes.Count); Assert.Contains("Q5", queryGraph.Nodes[0].InferredTypes); Assert.Single(queryGraph.Nodes[1].InferredTypes); Assert.Contains("Q6256", queryGraph.Nodes[1].InferredTypes); Assert.Equal(2, queryGraph.Edges[0].DomainTypes.Count); Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); Assert.Single(queryGraph.Edges[0].RangeTypes); Assert.Contains("Q6256", queryGraph.Edges[0].RangeTypes); Assert.Equal(2, queryGraph.Edges[1].DomainTypes.Count); Assert.Contains("Q5", queryGraph.Edges[1].DomainTypes); Assert.Single(queryGraph.Edges[1].RangeTypes); Assert.Contains("Q6256", queryGraph.Edges[1].RangeTypes); }
public void TestGetEdgeSourceAndTargetNodes() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0"), new Node(1, "?var1", new[] { "http://www.wikidata.org/entity/Q5" }), }, edges = new[] { new Edge(0, "?prop0", 0, 1, new [] { "http://www.wikidata.org/prop/direct/P31" }) }, }; var queryGraph = new QueryGraph(graph); var node0 = queryGraph.Nodes[0]; var node1 = queryGraph.Nodes[1]; var edge0 = queryGraph.Edges[0]; Assert.Equal(node0, edge0.GetSourceNode(queryGraph)); Assert.Equal(node1, edge0.GetTargetNode(queryGraph)); }
public static List <RDFExplorerGraph> GetGraphVariations(this RDFExplorerGraph graph) { var graphList = new List <RDFExplorerGraph> { graph }; var edges = graph.edges; var nodes = graph.nodes; var count = edges.Count(); for (var i = 0; i < Math.Pow(2, count); i++) { var newEdges = new List <Edge>(); foreach (var edge in edges) { var newEdge = new Edge(edge.id, edge.name, edge.sourceId, edge.targetId, edge.uris); if ((newEdge.id & i) == 0) { newEdge = DisableEdge(newEdge); } newEdges.Add(newEdge); } var newGraph = new RDFExplorerGraph() { nodes = nodes, edges = newEdges.ToArray() }; if (!graphList.Any(x => x.ToString().Equals(newGraph.ToString()))) { graphList.Add(newGraph); } } return(graphList); }
public void TestFromGraph() { var graph = new RDFExplorerGraph() { nodes = new[] { new Node(0, "?var0", new[] { "http://www.wikidata.org/entity/Q76" }), new Node(1, "?var1"), }, edges = new[] { new Edge(0, "?prop0", 0, 1) }, }; var queryGraph = new QueryGraph(graph); var query = queryGraph.Nodes[1].ToSparql(queryGraph); var results = GraphApiQueries.RunQuery(query.ToString()).GetIds(); foreach (var result in results) { Assert.True(result.StartsWith("Q") || result.StartsWith("P")); } }
public void TestTypes_2ConnectedNodes_1_SourceIsGivenType_2Nodes1Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?var0", new[] { "http://www.wikidata.org/entity/Q76" }), new Node(1, "?var1") }, edges = new[] { new Edge(0, "?prop0", 0, 1) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert Assert.NotEmpty(queryGraph.Nodes[0].Types); Assert.NotEmpty(queryGraph.Nodes[0].InferredTypes); //InstanceOf Q76: Q5 Assert.NotEmpty(queryGraph.Nodes[0].ParentTypes); Assert.Single(queryGraph.Nodes[0].Types); Assert.Contains("Q76", queryGraph.Nodes[0].Types); Assert.Empty(queryGraph.Nodes[1].Types); Assert.Empty(queryGraph.Nodes[1].InferredTypes); Assert.Empty(queryGraph.Nodes[1].ParentTypes); Assert.NotEmpty(queryGraph.Edges[0].DomainTypes); //InstanceOf Q76: Q5 Assert.Empty(queryGraph.Edges[0].RangeTypes); }
public void TestEqualGraphs() { // Arrange var graph1 = new RDFExplorerGraph { nodes = new[] { new Node(0, "?varDomain0"), new Node(1, "?varRange1") }, edges = new[] { new Edge(0, "?CountryOfCitizenship", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P27" }), new Edge(1, "?propDomainRange1", 0, 1) } }; var graph2 = new RDFExplorerGraph { nodes = new[] { new Node(0, "?varDomain0"), new Node(1, "?varRange1") }, edges = new[] { new Edge(0, "?CountryOfCitizenship", 0, 1, new[] { "http://www.wikidata.org/prop/direct/P27" }), new Edge(1, "?propDomainRange1", 0, 1) } }; //Are equal: Assert.Equal(graph1, graph2); //Node: Change name graph1.nodes[0].name = "cambio"; Assert.Equal(graph1, graph2); //Node: Change Id graph1.nodes[0].id = 2; Assert.NotEqual(graph1, graph2); graph1.nodes[0].id = 0; Assert.Equal(graph1, graph2); //Node: Change uris graph1.nodes[0].uris = new[] { "uri1" }; Assert.NotEqual(graph1, graph2); graph1.nodes[0].uris = new string[] { }; Assert.Equal(graph1, graph2); //Node: Add node graph1.nodes = graph1.nodes.ToList().Append(new Node { id = 2, name = "new" }).ToArray(); Assert.NotEqual(graph1, graph2); graph1.nodes = graph1.nodes.ToList().Take(2).ToArray(); Assert.Equal(graph1, graph2); //Node: Remove Node graph1.nodes = graph1.nodes.ToList().Take(1).ToArray(); Assert.NotEqual(graph1, graph2); graph1.nodes = graph1.nodes.ToList().Append(new Node { id = 1, name = "?varRange1" }).ToArray(); Assert.Equal(graph1, graph2); //Edge: Change name graph1.edges[0].name = "cambio"; Assert.Equal(graph1, graph2); //Edge: change Id graph1.edges[0].id = 2; Assert.NotEqual(graph1, graph2); graph1.edges[0].id = 0; Assert.Equal(graph1, graph2); //Edge: change source Id graph1.edges[0].sourceId = 2; Assert.NotEqual(graph1, graph2); graph1.edges[0].sourceId = 0; Assert.Equal(graph1, graph2); //Edge: change target Id graph1.edges[0].targetId = 2; Assert.NotEqual(graph1, graph2); graph1.edges[0].targetId = 1; Assert.Equal(graph1, graph2); //Edge: Change uris graph1.edges[0].uris = new string[] { }; Assert.NotEqual(graph1, graph2); graph1.edges[0].uris = new[] { "http://www.wikidata.org/prop/direct/P27", "http://www.wikidata.org/prop/direct/P27" }; Assert.NotEqual(graph1, graph2); graph1.edges[0].uris = new[] { "http://www.wikidata.org/prop/direct/P27" }; Assert.Equal(graph1, graph2); //Edge: Add node graph1.edges = graph1.edges.ToList().Append(new Edge { id = 2, name = "new" }).ToArray(); Assert.NotEqual(graph1, graph2); graph1.edges = graph1.edges.ToList().Take(2).ToArray(); Assert.Equal(graph1, graph2); //Edge: Remove Node graph1.edges = graph1.edges.ToList().Take(1).ToArray(); Assert.NotEqual(graph1, graph2); graph1.edges = graph1.edges.ToList().Append(new Edge { id = 1, name = "?warever", sourceId = 0, targetId = 0 }).ToArray(); Assert.NotEqual(graph1, graph2); graph1.edges = graph1.edges.ToList().Take(1).ToArray(); graph1.edges = graph1.edges.ToList().Append(new Edge { id = 1, name = "?warever", sourceId = 0, targetId = 1 }).ToArray(); Assert.Equal(graph1, graph2); ////Selected //graph1.selected = new Selected { id = 0, isNode = true }; //Assert.Equal(graph1, graph2); //graph1.selected = new Selected { id = 1, isNode = false }; //Assert.Equal(graph1, graph2); }
public void TestTypes_4ConnectedNodes_N1InstanceOfN3_N2InstanceOfN4_N1E1N2_E1DomainN1RangeN2_4Nodes3Edge() { var(EntitiesIndexPath, PropertiesIndexPath) = TestHelper.CreateIndexPaths(filename, BaseEntitiesIndexPath, BasePropertiesIndexPath); var graph = new RDFExplorerGraph { nodes = new[] { new Node(0, "?human"), new Node(1, "?country"), new Node(2, "human", new[] { "http://www.wikidata.org/entity/Q5" }), new Node(3, "country", new[] { "http://www.wikidata.org/entity/Q6256" }) }, edges = new[] { new Edge(0, "?prop0", 0, 1), new Edge(1, "?type1", 0, 2, new[] { "http://www.wikidata.org/prop/direct/P31" }), new Edge(2, "?type2", 1, 3, new[] { "http://www.wikidata.org/prop/direct/P31" }) } }; // Arrange var queryGraph = new QueryGraph(graph); //Act queryGraph.SetIndexPaths(EntitiesIndexPath, PropertiesIndexPath); queryGraph.SetTypesDomainsAndRanges(InMemoryQueryEngine); //Assert //?human Assert.Empty(queryGraph.Nodes[0].Types); Assert.NotEmpty(queryGraph.Nodes[0].InferredTypes); Assert.NotEmpty(queryGraph.Nodes[0].ParentTypes); //InstanceOf Q5 Assert.Single(queryGraph.Nodes[0].ParentTypes); Assert.Contains("Q5", queryGraph.Nodes[0].ParentTypes); Assert.Single(queryGraph.Nodes[0].InferredTypes); Assert.Contains("Q5", queryGraph.Nodes[0].InferredTypes); //?country Assert.Empty(queryGraph.Nodes[1].Types); Assert.NotEmpty(queryGraph.Nodes[1].InferredTypes); Assert.NotEmpty(queryGraph.Nodes[1].ParentTypes); //InstanceOf Q6256 //HUMAN Assert.NotEmpty(queryGraph.Nodes[2].Types); Assert.Empty(queryGraph.Nodes[2].InferredTypes); Assert.Empty(queryGraph.Nodes[2].ParentTypes); Assert.Single(queryGraph.Nodes[2].Types); Assert.Contains("Q5", queryGraph.Nodes[2].Types); //COUNTRY Assert.NotEmpty(queryGraph.Nodes[3].Types); Assert.Empty(queryGraph.Nodes[3].InferredTypes); Assert.Empty(queryGraph.Nodes[3].ParentTypes); Assert.Single(queryGraph.Nodes[3].Types); Assert.Contains("Q6256", queryGraph.Nodes[3].Types); //?human -> ?country Assert.NotEmpty(queryGraph.Edges[0].DomainTypes); //From the Domain of Q5 Assert.NotEmpty(queryGraph.Edges[0].RangeTypes); //From the Domain of Q6256 Assert.Single(queryGraph.Edges[0].DomainTypes); //From the Domain of Q5 Assert.Contains("Q5", queryGraph.Edges[0].DomainTypes); //From the Domain of Q5 Assert.Single(queryGraph.Edges[0].RangeTypes); //From the Domain of Q6256 Assert.Contains("Q6256", queryGraph.Edges[0].RangeTypes); //From the Domain of Q6256 //?human P31 HUMAN Assert.NotEmpty(queryGraph.Edges[1].DomainTypes); //Domain of P31 Assert.NotEmpty(queryGraph.Edges[1].RangeTypes); //Range: Q5 Assert.Single(queryGraph.Edges[1].DomainTypes); //?human is type Q5. Domain should be Q5. Assert.Contains("Q5", queryGraph.Edges[1].DomainTypes); //Domain of P31 //?country P31 COUNTRY Assert.NotEmpty(queryGraph.Edges[2].DomainTypes); //Domain of P31 Assert.NotEmpty(queryGraph.Edges[2].RangeTypes); //Range: Q6256 Assert.Single(queryGraph.Edges[2].DomainTypes); //?country is type Q6256. Domain should be Q6256. Assert.Contains("Q6256", queryGraph.Edges[2].DomainTypes); }