package org.semanticweb.HermiT.structural; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.semanticweb.HermiT.Configuration; import org.semanticweb.HermiT.model.DLClause; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLHasKeyAxiom; public class ClausificationTest extends AbstractStructuralTest { static { System.setProperty("entityExpansionLimit",String.valueOf(Integer.MAX_VALUE)); } public ClausificationTest(String name) { super(name); } public void testBasic() throws Exception { assertClausification("res/basic-input.xml","res/basic-control.txt"); } public void testNominals1() throws Exception { assertClausification("res/nominals-1-input.xml","res/nominals-1-control.txt"); } public void testNominals2() throws Exception { assertClausification("res/nominals-2-input.xml","res/nominals-2-control.txt"); } public void testNominals3() throws Exception { assertClausification("res/nominals-3-input.xml","res/nominals-3-control.txt"); } public void testNominals4() throws Exception { assertClausification("res/nominals-4-input.xml","res/nominals-4-control.txt"); } public void testAsymmetry() throws Exception { String axioms = "Declaration(ObjectProperty(:as))"; axioms += "Declaration(ObjectProperty(:as))"; axioms += "Declaration(NamedIndividual(:a))"; axioms += "Declaration(NamedIndividual(:b))"; axioms += "AsymmetricObjectProperty(:as)"; axioms += "SubObjectPropertyOf(:r :as)"; axioms += "ObjectPropertyAssertion(:r :a :b)"; axioms += "ObjectPropertyAssertion(:as :b :a)"; loadOntologyWithAxioms(axioms); assertDLClauses(getControl("res/asymmetry-control.txt")); } public void testExistsSelf1() throws Exception { assertClausification("res/has-self-1-input.owl","res/has-self-1-control.txt"); } public void testExistsSelf2() throws Exception { assertClausification("res/has-self-2-input.owl","res/has-self-2-control.txt"); } public void testHasKeys() throws Exception { OWLClausification clausifier=new OWLClausification(new Configuration()); OWLHasKeyAxiom key = m_dataFactory.getOWLHasKeyAxiom(m_dataFactory.getOWLClass(IRI.create("int:C_test")), m_dataFactory.getOWLObjectProperty(IRI.create("int:r_test")), m_dataFactory.getOWLDataProperty(IRI.create("int:dp_test"))); DLClause clause=clausifier.clausifyKey(key); Set<String> bAtoms=new HashSet<String>(); bAtoms.add("<internal:nam#Named>(X)"); bAtoms.add("<internal:nam#Named>(X2)"); bAtoms.add("<int:C_test>(X)"); bAtoms.add("<int:C_test>(X2)"); bAtoms.add("<int:r_test>(X,Y0)"); bAtoms.add("<int:r_test>(X2,Y0)"); bAtoms.add("<internal:nam#Named>(Y0)"); bAtoms.add("<int:dp_test>(X,Y1)"); bAtoms.add("<int:dp_test>(X2,Y2)"); assertTrue(bAtoms.size()==clause.getBodyLength()); for (int i=0;i<clause.getBodyLength();i++) { assertTrue(bAtoms.contains(clause.getBodyAtom(i).toString())); } Set<String> hAtoms=new HashSet<String>(); hAtoms.add("X == X2"); hAtoms.add("Y1 != Y2"); assertTrue(hAtoms.size()==clause.getHeadLength()); for (int i=0;i<clause.getHeadLength();i++) { assertTrue(hAtoms.contains(clause.getHeadAtom(i).toString())); } } protected String[] getControl(String resource) throws Exception { if (resource==null) return null; List<String> control=new ArrayList<String>(); BufferedReader reader=new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(resource))); try { String line=reader.readLine(); while (line!=null) { control.add(line); line=reader.readLine(); } } finally { reader.close(); } String[] controlArray=new String[control.size()]; control.toArray(controlArray); return controlArray; } protected void assertClausification(String ontologyResource,String controlResource) throws Exception { loadOntologyFromResource(ontologyResource); assertDLClauses(getControl(controlResource)); } protected void assertDLClauses(String[] control) throws Exception { List<String> actualStrings = getDLClauses(); assertContainsAll(this.getName(),actualStrings,control); } }