public void StorageVirtuosoConfigSerialization() { NTriplesFormatter formatter = new NTriplesFormatter(); VirtuosoManager manager = VirtuosoTest.GetConnection(); try { Assert.IsNotNull(manager); Graph g = new Graph(); INode rdfType = g.CreateUriNode(new Uri(RdfSpecsHelper.RdfType)); INode dnrType = g.CreateUriNode(UriFactory.Create(ConfigurationLoader.PropertyType)); INode objFactory = g.CreateUriNode(UriFactory.Create(ConfigurationLoader.ClassObjectFactory)); INode virtFactory = g.CreateLiteralNode("VDS.RDF.Configuration.VirtuosoObjectFactory, dotNetRDF.Data.Virtuoso"); INode genericManager = g.CreateUriNode(UriFactory.Create(ConfigurationLoader.ClassStorageProvider)); INode virtManager = g.CreateLiteralNode("VDS.RDF.Storage.VirtuosoManager, dotNetRDF.Data.Virtuoso"); //Serialize Configuration ConfigurationSerializationContext context = new ConfigurationSerializationContext(g); manager.SerializeConfiguration(context); Console.WriteLine("Serialized Configuration"); foreach (Triple t in g.Triples) { Console.WriteLine(t.ToString(formatter)); } Console.WriteLine(); //Ensure that it was serialized INode factory = g.GetTriplesWithPredicateObject(rdfType, objFactory).Select(t => t.Subject).FirstOrDefault(); Assert.IsNotNull(factory, "Should be an object factory in the serialized configuration"); Assert.IsTrue(g.ContainsTriple(new Triple(factory, dnrType, virtFactory)), "Should contain a Triple declaring the dnr:type to be the Virtuoso Object factory type"); INode objNode = g.GetTriplesWithPredicateObject(rdfType, genericManager).Select(t => t.Subject).FirstOrDefault(); Assert.IsNotNull(objNode, "Should be a generic manager in the serialized configuration"); Assert.IsTrue(g.ContainsTriple(new Triple(objNode, dnrType, virtManager)), "Should contain a Triple declaring the dnr:type to be the Virtuoso Manager type"); //Serialize again manager.SerializeConfiguration(context); Console.WriteLine("Serialized Configuration (after 2nd pass)"); foreach (Triple t in g.Triples) { Console.WriteLine(t.ToString(formatter)); } Console.WriteLine(); //Ensure that object factory has not been serialized again Assert.AreEqual(1, g.GetTriplesWithPredicateObject(rdfType, objFactory).Count(), "Should only be 1 Object Factory registered even after a 2nd serializer pass"); //Now try to load the object ConfigurationLoader.AutoConfigureObjectFactories(g); Object loadedObj = ConfigurationLoader.LoadObject(g, objNode); if (loadedObj is VirtuosoManager) { Assert.AreEqual(manager.ToString(), loadedObj.ToString(), "String forms should be equal"); } else { Assert.Fail("Returned an object of type '" + loadedObj.GetType().FullName + "' when deserializing"); } } finally { if (manager != null) { manager.Dispose(); } } }