You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by an...@apache.org on 2011/05/10 18:46:22 UTC

svn commit: r1101540 - /incubator/stanbol/trunk/enhancer/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java

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;
+		
+	}
 }