public void SparqlUpdateInsertCommand4() { SparqlParameterizedString command = new SparqlParameterizedString(); command.Namespaces.AddNamespace("rdf", new Uri(NamespaceMapper.RDF)); command.Namespaces.AddNamespace("rdfs", new Uri(NamespaceMapper.RDFS)); command.CommandText = "INSERT { ?s rdf:type ?class } USING NAMED <http://example.org/temp> WHERE { GRAPH ?g { ?s a ?type . ?type rdfs:subClassOf+ ?class } };"; command.CommandText += "INSERT { ?s ?property ?value } USING NAMED <http://example.org/temp> WHERE { GRAPH ?g { ?s ?p ?value . ?p rdfs:subPropertyOf+ ?property } };"; command.CommandText += "INSERT { ?s rdf:type rdfs:Class } USING NAMED <http://example.org/temp> WHERE { GRAPH ?g { ?s rdfs:subClassOf ?class } };"; command.CommandText += "INSERT { ?s rdf:type rdf:Property } USING NAMED <http://example.org/temp> WHERE { GRAPH ?g { ?s rdfs:subPropertyOf ?property } };"; TripleStore store = new TripleStore(); Graph g = new Graph(); FileLoader.Load(g, "InferenceTest.ttl"); g.BaseUri = new Uri("http://example.org/temp"); store.Add(g); SparqlUpdateParser parser = new SparqlUpdateParser(); SparqlUpdateCommandSet cmds = parser.ParseFromString(command); InMemoryDataset dataset = new InMemoryDataset(store); LeviathanUpdateProcessor processor = new LeviathanUpdateProcessor(dataset); dataset.SetDefaultGraph(store.Graph(null)); processor.ProcessCommandSet(cmds); IGraph def = store.Graph(null); TestTools.ShowGraph(def); //Apply a RDFS reasoner over the original input and output it into another graph //Should be equivalent to the default Graph Graph h = new Graph(); RdfsReasoner reasoner = new RdfsReasoner(); reasoner.Apply(g, h); TestTools.ShowGraph(h); GraphDiffReport report = h.Difference(def); if (!report.AreEqual) { TestTools.ShowDifferences(report); Assert.IsTrue(report.RemovedTriples.Count() == 1, "Should have only 1 missing Triple (due to rdfs:domain inference which is hard to encode in an INSERT command)"); } }
public void SparqlUpdateInsertCommand() { SparqlParameterizedString command = new SparqlParameterizedString(); command.Namespaces.AddNamespace("rdf", new Uri(NamespaceMapper.RDF)); command.Namespaces.AddNamespace("rdfs", new Uri(NamespaceMapper.RDFS)); command.CommandText = "INSERT { ?s rdf:type ?class } WHERE { ?s a ?type . ?type rdfs:subClassOf+ ?class };"; command.CommandText += "INSERT { ?s ?property ?value } WHERE {?s ?p ?value . ?p rdfs:subPropertyOf+ ?property };"; command.CommandText += "INSERT { ?s rdf:type rdfs:Class } WHERE { ?s rdfs:subClassOf ?class };"; command.CommandText += "INSERT { ?s rdf:type rdf:Property } WHERE { ?s rdfs:subPropertyOf ?property };"; TripleStore store = new TripleStore(); Graph g = new Graph(); FileLoader.Load(g, "InferenceTest.ttl"); g.Retract(g.Triples.Where(t => !t.IsGroundTriple)); g.BaseUri = null; store.Add(g); SparqlUpdateParser parser = new SparqlUpdateParser(); SparqlUpdateCommandSet cmds = parser.ParseFromString(command); LeviathanUpdateProcessor processor = new LeviathanUpdateProcessor(store); processor.ProcessCommandSet(cmds); TestTools.ShowGraph(g); Console.WriteLine(); //Now reload the test data and apply an RDFS reasoner over it //This should give us a Graph equivalent to the one created by the previous INSERT commands Graph h = new Graph(); FileLoader.Load(h, "InferenceTest.ttl"); h.Retract(h.Triples.Where(t => !t.IsGroundTriple)); RdfsReasoner reasoner = new RdfsReasoner(); reasoner.Apply(h); GraphDiffReport diff = h.Difference(g); if (!diff.AreEqual) { TestTools.ShowDifferences(diff); } Assert.AreEqual(h, g, "Graphs should be equal"); }