Author: anuzzolese Date: Tue May 10 16:46:22 2011 New Revision: 1101540 URL: http://svn.apache.org/viewvc?rev=1101540&view=rev Log: STANBOL-194 Added the missing method getClosure to the usage of OntologyInputSource of RefactorEnhancementEngine.
Modified: incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java Modified: incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java?rev=1101540&r1=1101539&r2=1101540&view=diff ============================================================================== --- incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java (original) +++ incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java Tue May 10 16:46:22 2011 @@ -34,9 +34,7 @@ import org.apache.stanbol.entityhub.serv import org.apache.stanbol.entityhub.servicesapi.site.ReferencedSiteManager; import org.apache.stanbol.ontologymanager.ontonet.api.DuplicateIDException; import org.apache.stanbol.ontologymanager.ontonet.api.ONManager; -import org.apache.stanbol.ontologymanager.ontonet.api.io.BlankOntologySource; import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource; -import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource; import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope; import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScopeFactory; import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace; @@ -67,13 +65,15 @@ import org.slf4j.LoggerFactory; /** * - * This an engine to post-process the enhancements. Its main goal is to refactor the RDF produced by the - * enhancement applying some vocabulary related to a specific task. + * This an engine to post-process the enhancements. Its main goal is to + * refactor the RDF produced by the enhancement applying some vocabulary related + * to a specific task. * * To do that, exploit a Refactor recipe and an ontology scope of OntoNet. * - * The first implementation is targeted to SEO use case. * It retrieves data by dereferencing the entities, * - * includes the DBpedia ontology * refactor the data using the google rich snippets vocabulary. + * The first implementation is targeted to SEO use case. * It retrieves data by + * dereferencing the entities, * includes the DBpedia ontology * refactor the + * data using the google rich snippets vocabulary. * * @author andrea.nuzzolese * @@ -83,536 +83,652 @@ import org.slf4j.LoggerFactory; @Service(EnhancementEngine.class) public class RefactorEnhancementEngine implements EnhancementEngine, ServiceProperties { - /* - * TODO This are the scope and recipe IDs to be used by this implementation In future implementation this - * will be configurable - */ - - @Property(value = "http://incubator.apache.org/stanbol/enhancer/engines/refactor/scope") - public static final String SCOPE = "engine.refactor.scope"; + /* + * TODO This are the scope and recipe IDs to be used by this implementation + * In future implementation this will be configurable + */ + + @Property(value = "http://incubator.apache.org/stanbol/enhancer/engines/refactor/scope") + public static final String SCOPE = "engine.refactor.scope"; - @Property(value = "") - public static final String RECIPE_URI = "engine.refactor.recipe"; + @Property(value = "") + public static final String RECIPE_URI = "engine.refactor.recipe"; - @Property(value = {"http://ontologydesignpatterns.org/ont/iks/kres/dbpedia_demo.owl", ""}, cardinality = 1000, description = "To fix a set of resolvable ontology URIs for the scope's ontologies.") - public static final String SCOPE_CORE_ONTOLOGY = "engine.refactor.scope.core.ontology"; + @Property(value={"http://ontologydesignpatterns.org/ont/iks/kres/dbpedia_demo.owl",""}, cardinality=1000, description="To fix a set of resolvable ontology URIs for the scope's ontologies.") + public static final String SCOPE_CORE_ONTOLOGY ="engine.refactor.scope.core.ontology"; - @Property(boolValue = true, description = "If true: the previously generated RDF is deleted and substituted with the new one. If false: the new one is appended to the old RDF. Possible value: true or false.") + @Property(boolValue=true, description="If true: the previously generated RDF is deleted and substituted with the new one. If false: the new one is appended to the old RDF. Possible value: true or false.") public static final String APPEND_OTHER_ENHANCEMENT_GRAPHS = "engine.refactor.append.graphs"; - - @Property(boolValue = true, description = "If true: entities are fetched via the EntityHub. If false: entities are fetched on-line. Possible value: true or false.") + + @Property(boolValue=true, description="If true: entities are fetched via the EntityHub. If false: entities are fetched on-line. Possible value: true or false.") public static final String USAGE_OF_ENTITY_HUB = "engine.refactor.entityhub"; - @Reference - ONManager onManager; + @Reference + ONManager onManager; - @Reference - ReferencedSiteManager referencedSiteManager; + @Reference + ReferencedSiteManager referencedSiteManager; - @Reference - RuleStore ruleStore; + @Reference + RuleStore ruleStore; - @Reference - Reasoner reasoner; + @Reference + Reasoner reasoner; - @Reference - Refactorer refactorer; + @Reference + Refactorer refactorer; - private OntologyScope scope; - private IRI recipeIRI; + private OntologyScope scope; + private IRI recipeIRI; private boolean graph_append; private boolean useEntityHub; - private final Logger log = LoggerFactory.getLogger(getClass()); - - @Override - public int canEnhance(ContentItem ci) throws EngineException { - /* - * Dulcifier can enhance only content items that are previously enhanced by other enhancement engines, - * as it must be the last engine in the chain. - * - * Works only if some enhancement has been produced. - */ - MGraph mGraph = ci.getMetadata(); - if (mGraph != null) { - return ENHANCE_SYNCHRONOUS; - } else { - return CANNOT_ENHANCE; - } - } - - @Override - public void computeEnhancements(ContentItem ci) throws EngineException { - /* - * Retrieve the graph - */ - final MGraph mGraph = ci.getMetadata(); - - /* - * We filter the entities recognized by the engines - */ - UriRef fiseEntityReference = new UriRef("http://fise.iks-project.eu/ontology/entity-reference"); - Iterator<Triple> tripleIt = mGraph.filter(null, fiseEntityReference, null); - - /* - * Now we prepare the OntoNet environment. First we create the OntoNet session in which run the whole - */ - final IRI sessionIRI = createAndAddSessionSpaceToScope(); - - /* - * We retrieve the session space - */ - OntologySpace sessionSpace = scope.getSessionSpace(sessionIRI); - - while (tripleIt.hasNext()) { - Triple triple = tripleIt.next(); - Resource entityReference = triple.getObject(); - /* - * the entity uri - */ - final String entityReferenceString = entityReference.toString().replace("<", "").replace(">", ""); - log.debug("Trying to resolve entity " + entityReferenceString); - /** - * We fetch the entity in the OntologyInputSource object - */ - try { - - final IRI fetchedIri = IRI.create(entityReferenceString); - - /* - * The RDF graph of an entity is fetched via the EntityHub. The getEntityOntology is a method - * the do the job of asking the entity to the EntityHub and wrap the RDF graph into an - * OWLOntology. - */ - OWLOntology fetched = null; - - if (useEntityHub) { - fetched = getEntityOntology(entityReferenceString); - } else { - Dereferencer dereferencer = new Dereferencer(); - try { - fetched = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument( - dereferencer.resolve(entityReferenceString)); - } catch (OWLOntologyCreationException e) { - log.error("An error occurred while trying to create the ontology related to the entity " - + entityReferenceString); - } catch (FileNotFoundException e) { - log.error("The entity " + entityReferenceString + " does not exist or is unreachable"); - } - } - - if (fetched != null) { - final OWLOntology fetchedFinal = fetched; - OntologyInputSource ontologySource = new OntologyInputSource() { - - @Override - public boolean hasRootOntology() { - return (fetchedFinal != null); - } - - @Override - public boolean hasPhysicalIRI() { - return true; - } - - @Override - public OWLOntology getRootOntology() { - return fetchedFinal; - } - - @Override - public IRI getPhysicalIRI() { - return fetchedIri; - } - - @Override - public Set<OWLOntology> getClosure() { - return fetchedFinal.getOWLOntologyManager().getImportsClosure(fetchedFinal); - } - }; - sessionSpace.addOntology(ontologySource); - } - - log.debug("Added " + entityReferenceString + " to the session space of scope " - + scope.getID().toString(), this); - - } catch (UnmodifiableOntologySpaceException e) { - log.error("Cannot load the entity", e); - } - - } - - /* - * Now we merge the RDF from the T-box - the ontologies - and the A-box - the RDF data fetched - */ - - final OWLOntologyManager man = OWLManager.createOWLOntologyManager(); - - OWLOntologySetProvider provider = new OWLOntologySetProvider() { + private final Logger log = LoggerFactory.getLogger(getClass()); - @Override - public Set<OWLOntology> getOntologies() { - - Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); - OntologySpace sessionSpace = scope.getSessionSpace(sessionIRI); - ontologies.addAll(sessionSpace.getOntologies()); - - /* - * We add to the set the graph containing the metadata generated by previous enhancement - * engines. It is important becaus we want to menage during the refactoring also some - * information fron that graph. As the graph is provided as a Clerezza MGraph, we first need - * to convert it to an OWLAPI OWLOntology. There is no chance that the mGraph could be null as - * it was previously controlled by the JobManager through the canEnhance method and the - * computeEnhancement is always called iff the former returns true. - */ - OWLOntology fiseMetadataOntology = OWLAPIToClerezzaConverter - .clerezzaMGraphToOWLOntology(mGraph); - ontologies.add(fiseMetadataOntology); - return ontologies; - } - }; - - /* - * We merge all the ontologies from the session space of the scope into a single ontology that will be - * used for the refactoring. - */ - OWLOntologyMerger merger = new OWLOntologyMerger(provider); - - OWLOntology ontology; - try { - ontology = merger.createMergedOntology(man, - IRI.create("http://fise.iks-project.eu/dulcifier/integrity-check")); - - /* - * To perform the refactoring of the ontology to a given vocabulary we use the Stanbol Refactor. - */ - - log.debug("Refactoring recipe IRI is : " + recipeIRI); - - /* - * We pass the ontology and the recipe IRI to the Refactor that returns the refactored graph - * expressed by using the given vocabulary. - */ - try { - - Recipe recipe = ruleStore.getRecipe(recipeIRI); - - log.debug("Rules in the recipe are : " + recipe.getkReSRuleList().size(), this); - - log.debug("The ontology to be refactor is : " + ontology, this); - - ontology = refactorer.ontologyRefactoring(ontology, recipeIRI); - - } catch (RefactoringException e) { - log.error("The refactoring engine failed the execution.", e); - } catch (NoSuchRecipeException e) { - log.error("The recipe with ID " + recipeIRI + " does not exists", e); - } - - log.debug("Merged ontologies in " + ontology); - - /* - * The new generated ontology is converted to Clarezza format and than added os substitued to the - * old mGraph. - */ - if (graph_append) { - mGraph.addAll(OWLAPIToClerezzaConverter.owlOntologyToClerezzaTriples(ontology)); - log.debug("Metadata of the content passd have been substituted", this); - } else { - mGraph.removeAll(mGraph); - mGraph.addAll(OWLAPIToClerezzaConverter.owlOntologyToClerezzaTriples(ontology)); - log.debug("Metadata of the content is appended to the existent one", this); - } - - /* - * The session needs to be destroyed, as it is no more useful. - */ - onManager.getSessionManager().destroySession(sessionIRI); - - } catch (OWLOntologyCreationException e) { - log.error("Cannot create the ontology for the refactoring", e); - } - } - - /** - * Setup the KReS session - * - * @return - */ - private IRI createAndAddSessionSpaceToScope() { - /* - * Retrieve the session manager - */ - SessionManager sessionManager = onManager.getSessionManager(); - log.debug("Starting create session for the dulcifier"); - - /* - * Create and setup the session. TODO FIXME This is an operation that should be made easier for - * developers to do through the API - */ - Session session = sessionManager.createSession(); - OntologySpaceFactory ontologySpaceFactory = onManager.getOntologySpaceFactory(); - OntologySpace sessionSpace = ontologySpaceFactory.createSessionOntologySpace(scope.getID()); - scope.addSessionSpace(sessionSpace, session.getID()); - - /* - * Finally, we return the session ID to be used by the caller - */ - log.debug("Session " + session.getID() + " created", this); - return session.getID(); - } + @Override + public int canEnhance(ContentItem ci) throws EngineException { + /* + * Dulcifier can enhance only content items that are previously enhanced + * by other enhancement engines, as it must be the last engine in the chain. + * + * Works only if some enhancement has been produced. + */ + MGraph mGraph = ci.getMetadata(); + if (mGraph != null) { + return ENHANCE_SYNCHRONOUS; + } else { + return CANNOT_ENHANCE; + } + } + + @Override + public void computeEnhancements(ContentItem ci) throws EngineException { + /* + * Retrieve the graph + */ + final MGraph mGraph = ci.getMetadata(); + + /* + * We filter the entities recognized by the engines + */ + UriRef fiseEntityReference = new UriRef("http://fise.iks-project.eu/ontology/entity-reference"); + Iterator<Triple> tripleIt = mGraph.filter(null, fiseEntityReference,null); + + /* + * Now we prepare the OntoNet environment. First we create the OntoNet session + * in which run the whole + */ + final IRI sessionIRI = createAndAddSessionSpaceToScope(); + + + /* + * We retrieve the session space + */ + OntologySpace sessionSpace = scope.getSessionSpace(sessionIRI); + + while (tripleIt.hasNext()) { + Triple triple = tripleIt.next(); + Resource entityReference = triple.getObject(); + /* + * the entity uri + */ + final String entityReferenceString = entityReference.toString() + .replace("<", "").replace(">", ""); + log.debug("Trying to resolve entity " + entityReferenceString); + /** + * We fetch the entity in the OntologyInputSource object + */ + try { + + + final IRI fetchedIri = IRI.create(entityReferenceString); + + /* + * The RDF graph of an entity is fetched via the EntityHub. + * The getEntityOntology is a method the do the job of asking + * the entity to the EntityHub and wrap the RDF graph into + * an OWLOntology. + */ + OWLOntology fetched = null; + + if(useEntityHub){ + fetched = getEntityOntology(entityReferenceString); + } + else{ + Dereferencer dereferencer = new Dereferencer(); + try { + fetched = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(dereferencer.resolve(entityReferenceString)); + } catch (OWLOntologyCreationException e) { + log.error("An error occurred while trying to create the ontology related to the entity " + entityReferenceString); + } catch (FileNotFoundException e) { + log.error("The entity " + entityReferenceString + " does not exist or is unreachable"); + } + } + + if(fetched != null){ + final OWLOntology fetchedFinal = fetched; + OntologyInputSource ontologySource = new OntologyInputSource() { + + @Override + public boolean hasRootOntology() { + return (fetchedFinal != null); + } + + @Override + public boolean hasPhysicalIRI() { + return true; + } + + @Override + public OWLOntology getRootOntology() { + return fetchedFinal; + } + + @Override + public IRI getPhysicalIRI() { + return fetchedIri; + } + + @Override + public Set<OWLOntology> getClosure() { + // TODO Auto-generated method stub + return null; + } + }; + sessionSpace.addOntology(ontologySource); + } + + log.debug("Added " + entityReferenceString + + " to the session space of scope " + + scope.getID().toString(), this); + + + } catch (UnmodifiableOntologySpaceException e) { + log.error("Cannot load the entity",e); + } + + } + + /* + * Now we merge the RDF from the T-box - the ontologies - and the A-box + * - the RDF data fetched + * + */ + + final OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + + OWLOntologySetProvider provider = new OWLOntologySetProvider() { + + @Override + public Set<OWLOntology> getOntologies() { + + Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); + OntologySpace sessionSpace = scope.getSessionSpace(sessionIRI); + ontologies.addAll(sessionSpace.getOntologies()); + + /* + * We add to the set the graph containing the metadata generated by previous + * enhancement engines. It is important becaus we want to menage during the refactoring + * also some information fron that graph. + * As the graph is provided as a Clerezza MGraph, we first need to convert it to an OWLAPI + * OWLOntology. + * There is no chance that the mGraph could be null as it was previously controlled by the JobManager + * through the canEnhance method and the computeEnhancement is always called iff the former returns true. + */ + OWLOntology fiseMetadataOntology = OWLAPIToClerezzaConverter.clerezzaMGraphToOWLOntology(mGraph); + ontologies.add(fiseMetadataOntology); + return ontologies; + } + }; + + /* + * We merge all the ontologies from the session space of the scope into + * a single ontology that will be used for the refactoring. + */ + OWLOntologyMerger merger = new OWLOntologyMerger(provider); + + OWLOntology ontology; + try { + ontology = merger.createMergedOntology(man,IRI.create("http://fise.iks-project.eu/dulcifier/integrity-check")); + + /* + * To perform the refactoring of the ontology to a given + * vocabulary we use the Stanbol Refactor. + */ + + log.debug("Refactoring recipe IRI is : " + recipeIRI); + + /* + * We pass the ontology and the recipe IRI to the Refactor that + * returns the refactored graph expressed by using the given + * vocabulary. + */ + try { + + Recipe recipe = ruleStore.getRecipe(recipeIRI); + + log.debug("Rules in the recipe are : "+ recipe.getkReSRuleList().size(), this); + + log.debug("The ontology to be refactor is : " + ontology, this); + + ontology = refactorer.ontologyRefactoring(ontology, recipeIRI); + + } catch (RefactoringException e) { + log.error("The refactoring engine failed the execution.", e); + } catch (NoSuchRecipeException e) { + log.error("The recipe with ID " + recipeIRI + + " does not exists", e); + } + + log.debug("Merged ontologies in " + ontology); + + /* + * The new generated ontology is converted to Clarezza format and than added os substitued to the old mGraph. + */ + if(graph_append){ + mGraph.addAll(OWLAPIToClerezzaConverter.owlOntologyToClerezzaTriples(ontology)); + log.debug("Metadata of the content passd have been substituted",this); + } + else{ + mGraph.removeAll(mGraph); + mGraph.addAll(OWLAPIToClerezzaConverter.owlOntologyToClerezzaTriples(ontology)); + log.debug("Metadata of the content is appended to the existent one",this); + } + + /* + * The session needs to be destroyed, as it is no more useful. + */ + onManager.getSessionManager().destroySession(sessionIRI); + + } catch (OWLOntologyCreationException e) { + log.error("Cannot create the ontology for the refactoring", e); + } + } + + /** + * Setup the KReS session + * + * @return + */ + private IRI createAndAddSessionSpaceToScope() { + /* + * Retrieve the session manager + */ + SessionManager sessionManager = onManager.getSessionManager(); + log.debug("Starting create session for the dulcifier"); + + /* + * Create and setup the session. TODO FIXME This is an operation that + * should be made easier for developers to do through the API + */ + Session session = sessionManager.createSession(); + OntologySpaceFactory ontologySpaceFactory = onManager.getOntologySpaceFactory(); + OntologySpace sessionSpace = ontologySpaceFactory.createSessionOntologySpace(scope.getID()); + scope.addSessionSpace(sessionSpace, session.getID()); + + /* + * Finally, we return the session ID to be used by the caller + */ + log.debug("Session " + session.getID() + " created", this); + return session.getID(); + } /** * To create the input source necesary to load the ontology inside the scope. - * - * @param uri - * -- A resolvable string uri. + * @param uri -- A resolvable string uri. * @return An OntologyInputSource */ - private OntologyInputSource oisForScope(final String uri) { - try { - return new RootOntologyIRISource(IRI.create(uri)); - } catch (OWLOntologyCreationException e) { - log.error("Failed to load scope ontology {}", uri, e); - return null; + private OntologyInputSource oisForScope(final String uri){ + /* + * The scope factory needs an OntologyInputSource as input for the core + * ontology space. We want to use the dbpedia ontology as core ontology + * of our scope. + */ + OntologyInputSource ois = new OntologyInputSource() { + + @Override + public boolean hasRootOntology() { + return true; + } + + @Override + public boolean hasPhysicalIRI() { + return false; + } + + @Override + public OWLOntology getRootOntology() { + + InputStream inputStream; + try { + /* + * The input stream for the dbpedia ontology is obtained + * through the dereferencer component. + */ + + + //inputStream = dereferencer.resolve(uri); + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + return manager.loadOntologyFromOntologyDocument(IRI.create(uri)); + + + //return getEntityOntology(uri); + } catch (Exception e) { + log.error("Cannot load the ontology "+uri, e); + } + /** If some errors occur **/ + return null; + } + + @Override + public IRI getPhysicalIRI() { + return null; + } + + @Override + public Set<OWLOntology> getClosure() { + // TODO Auto-generated method stub + return null; + } + }; + + return ois; } - } + /** * Activating the component - * * @param context */ - protected void activate(ComponentContext context) { - - /* - * Read property to indicate if the the new eanchment metada must be append to the existing mGraph - */ - graph_append = ((Boolean) context.getProperties().get(APPEND_OTHER_ENHANCEMENT_GRAPHS)) - .booleanValue(); - - useEntityHub = ((Boolean) context.getProperties().get(USAGE_OF_ENTITY_HUB)).booleanValue(); - - /* - * Get the Scope Factory from the ONM of KReS that allows to create new scopes - */ - OntologyScopeFactory scopeFactory = onManager.getOntologyScopeFactory(); - - /* - * Adding ontologies to the scope core ontology. 1) Get all the ontologies from the property. 2) - * Create a base scope with an empity ontology. 3) Retrieve the ontology space from the scope. 4) Add - * the ontologies to the scope via ontology space. - */ - // Step 1 - Object obj = context.getProperties().get(SCOPE_CORE_ONTOLOGY); + protected void activate(ComponentContext context) { + + /* + * Read property to indicate if the the new eanchment metada must be append to the existing mGraph + */ + graph_append = ((Boolean)context.getProperties().get(APPEND_OTHER_ENHANCEMENT_GRAPHS)).booleanValue(); + + useEntityHub = ((Boolean)context.getProperties().get(USAGE_OF_ENTITY_HUB)).booleanValue(); + + /* + * Get the Scope Factory from the ONM of KReS that allows to create new + * scopes + */ + OntologyScopeFactory scopeFactory = onManager.getOntologyScopeFactory(); + + + /* + * Adding ontologies to the scope core ontology. + * 1) Get all the ontologies from the property. + * 2) Create a base scope with an empity ontology. + * 3) Retrieve the ontology space from the scope. + * 4) Add the ontologies to the scope via ontology space. + */ + //Step 1 + Object obj = context.getProperties().get(SCOPE_CORE_ONTOLOGY); String[] coreScopeOntologySet; - if (obj instanceof String[]) { - coreScopeOntologySet = (String[]) obj; - } else { - String[] aux = new String[1]; - aux[0] = (String) obj; - coreScopeOntologySet = aux; + if(obj instanceof String[]){ + coreScopeOntologySet = (String[]) obj; } - - // Step 2 - OntologyInputSource oisbase = new BlankOntologySource(); - - IRI dulcifierScopeIRI = IRI.create((String) context.getProperties().get(SCOPE)); + else{ + String[] aux = new String[1]; + aux[0] = (String) obj; + coreScopeOntologySet =aux; + } + + //Step 2 + OntologyInputSource oisbase = new OntologyInputSource() { + + @Override + public boolean hasRootOntology() { + return true; + } + + @Override + public boolean hasPhysicalIRI() { + return false; + } + + @Override + public OWLOntology getRootOntology() { + + try { + /* + * The input stream for the dbpedia ontology is obtained + * through the dereferencer component. + */ + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + return manager.createOntology(); + } catch (OWLOntologyCreationException e) { + log.error("Cannot create the scope with empity ontology.", e); + } catch (Exception e) { + log.error("Cannot create the scope with empity ontology.", e); + } + /** If some errors occur **/ + return null; + } + + @Override + public IRI getPhysicalIRI() { + return null; + } + + @Override + public Set<OWLOntology> getClosure() { + // TODO Auto-generated method stub + return null; + } + }; + + IRI dulcifierScopeIRI = IRI.create((String) context.getProperties().get(SCOPE)); + + /* + * The scope is created by the ScopeFactory or loaded from the scope + * registry of KReS + */ + try { + scope = scopeFactory.createOntologyScope(dulcifierScopeIRI, oisbase); + } catch (DuplicateIDException e) { + ScopeRegistry scopeRegistry = onManager.getScopeRegistry(); + scope = scopeRegistry.getScope(dulcifierScopeIRI); + } /* - * The scope is created by the ScopeFactory or loaded from the scope registry of KReS + * Step 3 + */ + OntologySpace ontologySpace = scope.getCoreSpace(); + + /* + * Step 4 */ - try { - scope = scopeFactory.createOntologyScope(dulcifierScopeIRI, oisbase); - } catch (DuplicateIDException e) { - ScopeRegistry scopeRegistry = onManager.getScopeRegistry(); - scope = scopeRegistry.getScope(dulcifierScopeIRI); - } - - // Step 3 - OntologySpace ontologySpace = scope.getCoreSpace(); - - // Step 4 ontologySpace.tearDown(); - for (int o = 0; o < coreScopeOntologySet.length; o++) { + for(int o = 0; o<coreScopeOntologySet.length; o++){ OntologyInputSource ois = oisForScope(coreScopeOntologySet[o]); try { ontologySpace.addOntology(ois); } catch (UnmodifiableOntologySpaceException ex) { - log.error("Unmodifiable Ontology SpaceException.", ex); + log.error("Unmodifiable Ontology SpaceException.",ex); } } ontologySpace.setUp(); - log.debug("The set of ontologies loaded in the core scope space is: " - + ontologySpace.getOntologies() - + "\nN.B. The root.owl ontology is the first (on the list) ontology added when the scope is created."); - - /* - * The first thing to do is to create a recipe in the rule store that can be used by the engine to - * refactor the enhancement graphs. + log.debug("The set of ontologies loaded in the core scope space is: "+ontologySpace.getOntologies()+ + "\nN.B. The root.owl ontology is the first (on the list) ontology added when the scope is created."); + + /* + * The first thing to do is to create a recipe in the rule store that can be used + * by the engine to refactor the enhancement graphs. + */ + recipeIRI = IRI.create((String) context.getProperties().get(RECIPE_URI)); + + log.debug("Start create the Recipe", this); + + ruleStore.addRecipe(recipeIRI, null); + + log.debug("The recipe has been created", this); + + + /* + * The set of rule to put in the recipe can be provided by the user. + * A default set of rules is provided in /META-INF/default/seo_rules.sem. + * Use the property engine.refactor in the felix console to pass to the engine + * your set of rules. + * */ - recipeIRI = IRI.create((String) context.getProperties().get(RECIPE_URI)); - - log.debug("Start creating the Recipe", this); - - ruleStore.addRecipe(recipeIRI, null); - - log.debug("The recipe has been created", this); - - /* - * The set of rule to put in the recipe can be provided by the user. A default set of rules is - * provided in /META-INF/default/seo_rules.sem. Use the property engine.refactor in the felix console - * to pass to the engine your set of rules. - */ - - String recipeURI = (String) context.getProperties().get(RECIPE_URI); - - InputStream recipeStream = null; - String recipeString = null; - - if (recipeURI != null && !recipeURI.isEmpty()) { - IDereferencer dereferencer = new Dereferencer(); - try { - recipeStream = dereferencer.resolve(recipeURI); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } else { - recipeStream = RefactorEnhancementEngine.class - .getResourceAsStream("/META-INF/default/seo_rules.sem"); - } - - System.out.println("Refactorer engine recipe stream " + recipeStream); - - if (recipeStream != null) { - - recipeString = ""; - - BufferedReader reader = new BufferedReader(new InputStreamReader(recipeStream)); - - String line = null; - try { - while ((line = reader.readLine()) != null) { - recipeString += line; - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } + + String recipeURI = (String) context.getProperties().get(RECIPE_URI); + + InputStream recipeStream = null; + String recipeString = null; + + if(recipeURI != null && !recipeURI.isEmpty()){ + IDereferencer dereferencer = new Dereferencer(); + try { + recipeStream = dereferencer.resolve(recipeURI); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + else{ + recipeStream = RefactorEnhancementEngine.class.getResourceAsStream("/META-INF/default/seo_rules.sem"); + } + + System.out.println("Refactorer engine recipe stream "+recipeStream); + + if(recipeStream != null){ + + recipeString = ""; + + BufferedReader reader = new BufferedReader(new InputStreamReader(recipeStream)); + + String line = null; + try { + while((line=reader.readLine()) != null){ + recipeString += line; + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + /* * step 3 */ try { - // ruleStore.addRuleToRecipe(recipeIRI.toString(), kReSRuleSyntax); - ruleStore.addRuleToRecipe(recipeIRI.toString(), recipeString); - log.debug("Added rules to recipe " + recipeIRI.toString()); - } catch (NoSuchRecipeException e) { - log.error("The recipe does not exists: ", e); - } - log.info("Activated Dulcifier engine"); - - } - - protected void deactivate(ComponentContext context) { - - /* - * Deactivating the dulcifier. The procedure require: 1) get all the rules from the recipe 2) remove - * the recipe. 3) remove the single rule. 4) tear down the scope ontologySpace and the scope itself. - */ - - try { - /* - * step 1: get all the rule - */ - RuleList recipeRuleList = ruleStore.getRecipe(recipeIRI).getkReSRuleList(); - - /* - * step 2: remove the recipe - */ - if (ruleStore.removeRecipe(recipeIRI)) { - log.info("The recipe " + recipeIRI + " has been removed correctly"); - } else { - log.error("The recipe " + recipeIRI + " can not be removed"); - } - - /* - * step 3: remove the rules - */ - for (Rule rule : recipeRuleList) { - if (ruleStore.removeRule(rule)) { - log.info("The rule " + rule.getRuleName() + " has been removed correctly"); - } else { - log.error("The rule " + rule.getRuleName() + " can not be removed"); + //ruleStore.addRuleToRecipe(recipeIRI.toString(), kReSRuleSyntax); + ruleStore.addRuleToRecipe(recipeIRI.toString(), recipeString); + log.debug("Added rules to recipe " + recipeIRI.toString()); + } catch (NoSuchRecipeException e) { + log.error("The recipe does not exists: ", e); + } + log.info("Activated Dulcifier engine"); + + } + + protected void deactivate(ComponentContext context) { + + /* Deactivating the dulcifier. The procedure require: + * 1) get all the rules from the recipe + * 2) remove the recipe. + * 3) remove the single rule. + * 4) tear down the scope ontologySpace and the scope itself. + */ + + try { + /* + * step 1: get all the rule + */ + RuleList recipeRuleList = ruleStore.getRecipe(recipeIRI).getkReSRuleList(); + + /* + * step 2: remove the recipe + */ + if(ruleStore.removeRecipe(recipeIRI)){ + log.info("The recipe "+recipeIRI+" has been removed correctly"); + } + else{ + log.error("The recipe "+recipeIRI+" can not be removed"); + } + + /* + * step 3: remove the rules + */ + for(Rule rule : recipeRuleList){ + if(ruleStore.removeRule(rule)){ + log.info("The rule "+rule.getRuleName()+" has been removed correctly"); + } + else{ + log.error("The rule "+rule.getRuleName()+" can not be removed"); } - } - - /* - * step 4: - */ - scope.getCoreSpace().tearDown(); - scope.tearDown(); - - } catch (NoSuchRecipeException ex) { - log.error("The recipe " + recipeIRI + " doesn't exist", ex); - } - - log.info("Deactivated Dulcifier engine"); - - } - - @Override - public Map<String,Object> getServiceProperties() { - return Collections.unmodifiableMap(Collections.singletonMap( - ServiceProperties.ENHANCEMENT_ENGINE_ORDERING, - (Object) ServiceProperties.ORDERING_POST_PROCESSING)); - } - - /** - * Fetch the OWLOntology containing the graph associated to an entity from Linked Data. It uses the Entity - * Hub for accessing LOD and fetching entities. - * - * @param entityURI - * {@link String} - * @return the {@link OWLOntology} of the entity - */ - private OWLOntology getEntityOntology(String entityURI) { - - OWLOntology fetchedOntology = null; - - log.debug("Asking entity: " + entityURI); - /* - * Ask to the entityhub the fetch the entity. - */ - Sign entitySign = referencedSiteManager.getSign(entityURI); - - /* - * Wrap the entity graph into an owl ontology. - */ - MGraph entityMGraph = null; + } - if (entitySign != null) { - Representation entityRepresentation = entitySign.getRepresentation(); - RdfRepresentation entityRdfRepresentation = RdfValueFactory.getInstance().toRdfRepresentation( - entityRepresentation); - TripleCollection tripleCollection = entityRdfRepresentation.getRdfGraph(); - entityMGraph = new SimpleMGraph(); - entityMGraph.addAll(tripleCollection); - } - - if (entityMGraph != null) { - /* - * OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); final OWLOntology fetched = - * manager.loadOntologyFromOntologyDocument(dereferencer.resolve(entityReferenceString)); - */ + /* + * step 4: + */ + scope.getCoreSpace().tearDown(); + scope.tearDown(); + + + } catch (NoSuchRecipeException ex) { + log.error("The recipe "+recipeIRI+" doesn't exist",ex); + } - fetchedOntology = OWLAPIToClerezzaConverter.clerezzaMGraphToOWLOntology(entityMGraph); - } + log.info("Deactivated Dulcifier engine"); - return fetchedOntology; + } - } + @Override + public Map<String, Object> getServiceProperties() { + return Collections.unmodifiableMap(Collections.singletonMap( + ServiceProperties.ENHANCEMENT_ENGINE_ORDERING, + (Object) ServiceProperties.ORDERING_POST_PROCESSING)); + } + + /** + * Fetch the OWLOntology containing the graph associated to an entity from Linked Data. + * It uses the Entity Hub for accessing LOD and fetching entities. + * + * @param entityURI {@link String} + * @return the {@link OWLOntology} of the entity + */ + private OWLOntology getEntityOntology(String entityURI){ + + OWLOntology fetchedOntology = null; + + + + log.debug("Asking entity: "+entityURI); + /* + * Ask to the entityhub the fetch the entity. + */ + Sign entitySign = referencedSiteManager.getSign(entityURI); + + /* + * Wrap the entity graph into an owl ontology. + * + */ + MGraph entityMGraph = null; + + if(entitySign != null){ + Representation entityRepresentation = entitySign.getRepresentation(); + RdfRepresentation entityRdfRepresentation = RdfValueFactory.getInstance().toRdfRepresentation(entityRepresentation); + TripleCollection tripleCollection = entityRdfRepresentation.getRdfGraph(); + entityMGraph = new SimpleMGraph(); + entityMGraph.addAll(tripleCollection); + } + + if(entityMGraph != null){ + /* + * OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + * final OWLOntology fetched = manager.loadOntologyFromOntologyDocument(dereferencer.resolve(entityReferenceString)); + */ + + fetchedOntology = OWLAPIToClerezzaConverter.clerezzaMGraphToOWLOntology(entityMGraph); + } + + return fetchedOntology; + + } }