package org.drools.semantics.builder; import org.drools.KnowledgeBase; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.io.Resource; import org.drools.io.impl.BaseResource; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.semantics.lang.DLReasonerTemplateManager; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.OWLOntologyDocumentSource; import org.semanticweb.owlapi.io.StreamDocumentSource; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; import org.semanticweb.owlapi.model.OWLOntologyManager; import java.io.IOException; public class DLReasonerBuilderImpl implements DLReasonerBuilder { private static DLReasonerBuilder instance = new DLReasonerBuilderImpl(); public static DLReasonerBuilder getInstance() { return instance; } private DLReasonerBuilderImpl() { } public OWLOntology parseOntology( Resource[] resources ) { try { OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntologyLoaderConfiguration config = new OWLOntologyLoaderConfiguration(); config.setMissingOntologyHeaderStrategy( OWLOntologyLoaderConfiguration.MissingOntologyHeaderStrategy.IMPORT_GRAPH ); OWLOntology onto = null; for ( Resource res : resources ) { OWLOntologyDocumentSource source = new StreamDocumentSource( res.getInputStream() ); onto = manager.loadOntologyFromOntologyDocument( source, config ); } return onto; } catch (IOException e) { e.printStackTrace(); } catch (OWLOntologyCreationException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return null; } public OWLOntology parseOntology(Resource resource) { return parseOntology( new Resource[] { resource } ); } public String buildTableauRules( OWLOntology ontologyDescr, Resource[] visitor ) { KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); for ( Resource res : visitor ) { knowledgeBuilder.add( res, ((BaseResource) res).getResourceType() ); } if ( knowledgeBuilder.hasErrors() ) { System.err.println( knowledgeBuilder.getErrors().toString() ); return null; } KnowledgeBase tabKB = knowledgeBuilder.newKnowledgeBase(); if (tabKB != null) { StatefulKnowledgeSession ksession = tabKB.newStatefulKnowledgeSession(); StringBuilder out = new StringBuilder(); ksession.setGlobal( "out", out ); ksession.setGlobal( "registry", DLReasonerTemplateManager.getTableauRegistry( DLReasonerTemplateManager.DLFamilies.FALC) ); ksession.fireAllRules(); ksession.insert( ontologyDescr ); ksession.fireAllRules(); String tableauRules = out.toString(); ksession.dispose(); return tableauRules; } return null; } }