package au.com.langdale.cimtoole.test.headless; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collections; import org.eclipse.core.runtime.CoreException; import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.RDFS; import au.com.langdale.cimtoole.test.ProjectTest; import au.com.langdale.kena.IO; import au.com.langdale.kena.ModelFactory; import au.com.langdale.kena.OntModel; import au.com.langdale.kena.OntResource; import au.com.langdale.kena.ResIterator; import au.com.langdale.kena.Resource; import au.com.langdale.kena.ResourceFactory; import au.com.langdale.workspace.ResourceOutputStream; public class KenaTests extends ProjectTest { public final String NS = "http://example.com/example#"; public final Resource eg(String name) { return ResourceFactory.createProperty(NS + name); } public final void testCreateStatement() { OntModel model = ModelFactory.createMem(); model.add(eg("s"), eg("p"), "v"); assertTrue("statement remembered", model.contains(eg("s"), eg("p"), "v")); } public final void testReadRDFXML() throws CoreException, FileNotFoundException { OntModel model = ModelFactory.createMem(); IO.read(model, new FileInputStream(getSamplesFolder() + SAMPLE_PROFILE), NS, "RDF/XML"); assertTrue("read some statements", model.size() > 0); } public final void testWriteReadXML() throws IOException, CoreException { OntModel model = ModelFactory.createMem(); model.add(eg("s"), eg("p"), "v"); ResourceOutputStream contents = new ResourceOutputStream(profile, monitor, true, true); IO.write(model, contents, NS, "RDF/XML", Collections.EMPTY_MAP); contents.close(); assertTrue("file was written", profile.exists()); model = ModelFactory.createMem(); IO.read(model, profile.getContents(), NS, "RDF/XML"); assertTrue("read some statements", model.size() > 0); assertTrue("statement remembered", model.contains(eg("s"), eg("p"), "v")); } public final void testOntResource() throws CoreException, FileNotFoundException { OntModel model = ModelFactory.createMem(); IO.read(model, new FileInputStream(getSamplesFolder() + SAMPLE_PROFILE), NS, "RDF/XML"); assertTrue("read some statements", model.size() > 0); int count = 0; ResIterator all = model.listNamedClasses(); while( all.hasNext()) { OntResource clss = all.nextResource(); assertTrue("found a class", clss != null); assertTrue("class claims to have URI", clss.isURIResource()); assertTrue("class has type", clss.hasRDFType(OWL.Class)); //assertTrue("class has a label", clss.getLabel(null) != null); //assertTrue("class has a non trivial label", clss.getLabel(null).length() > 0); count++; } assertTrue("found a dozen classes", count >= 12); } public final void testInference1() { OntModel model = ModelFactory.createTransInf(); model.add(eg("c"), RDFS.subClassOf, eg("b1")); model.add(eg("c"), RDFS.subClassOf, eg("b2")); model.add(eg("b1"), RDFS.subClassOf, eg("b2")); model.add(eg("b2"), RDFS.subClassOf, eg("b3")); OntResource c = model.createResource(eg("c").asNode()); assertTrue("closure of inheritance", c.hasSuperClass(eg("b3"))); assertTrue("spurious inference", ! c.hasSubClass(eg("b3"))); } public final void testInference2() { OntModel model = ModelFactory.createTransInf(); model.add(eg("c"), RDFS.subClassOf, eg("b1")); model.add(eg("c"), RDFS.subClassOf, eg("b2")); model.add(eg("b1"), RDFS.subClassOf, eg("b2")); model.add(eg("b2"), RDFS.subClassOf, eg("b3")); OntResource c = model.createResource(eg("c").asNode()); assertTrue("closed inheritance", ! c.hasSuperClass(eg("b3"), true)); assertTrue("indirect but asserted inheritance", ! c.hasSuperClass(eg("b2"), true)); assertTrue("direct inheritance", c.hasSuperClass(eg("b1"), true)); assertTrue("filter self from direct inheritance", ! c.hasSuperClass(c, true)); assertTrue("include self in closed inheritance", c.hasSuperClass(c)); } public final void testInference3() { OntModel model = ModelFactory.createTransInf(); model.add(eg("c"), RDFS.subClassOf, eg("b1")); model.add(eg("c"), RDFS.subClassOf, eg("b2")); model.add(eg("b1"), RDFS.subClassOf, eg("b2")); model.add(eg("b2"), RDFS.subClassOf, eg("b3")); boolean b1detect = false; OntResource c = model.createResource(eg("c").asNode()); int count = 0; ResIterator it = c.listSuperClasses(true); while(it.hasNext()) { count++; OntResource base = it.nextResource(); if(base.equals(eg("b1"))) b1detect = true; } assertTrue("direct inheritance", b1detect); assertTrue("unique result", count == 1); } }