Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/ClerezzaSchemaMatcherImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/ClerezzaSchemaMatcherImpl.java?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/ClerezzaSchemaMatcherImpl.java (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/ClerezzaSchemaMatcherImpl.java Fri Feb 3 17:53:57 2012 @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.stanbol.explanation.impl.clerezza; + +import java.io.IOException; +import java.util.Dictionary; +import java.util.Iterator; +import java.util.Set; + +import org.apache.clerezza.rdf.core.Graph; +import org.apache.clerezza.rdf.core.Triple; +import org.apache.clerezza.rdf.core.UriRef; +import org.apache.clerezza.rdf.utils.GraphNode; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.Service; +import org.apache.stanbol.explanation.api.Configuration; +import org.apache.stanbol.explanation.api.Schema; +import org.apache.stanbol.explanation.api.SchemaMatcher; +import org.apache.stanbol.explanation.impl.ClerezzaSchemaMatcher; +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.GraphSource; +import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologySource; +import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope; +import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace; +import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologyCollectorException; +import org.apache.stanbol.ontologymanager.registry.api.RegistryContentException; +import org.apache.stanbol.ontologymanager.registry.api.model.Library; +import org.apache.stanbol.owl.transformation.OWLAPIToClerezzaConverter; +import org.osgi.service.component.ComponentContext; +import org.semanticweb.owlapi.model.OWLOntology; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Component(immediate = true, metatype = true) +@Service(SchemaMatcher.class) +public class ClerezzaSchemaMatcherImpl implements ClerezzaSchemaMatcher { + + private Graph knowledgeBase; + + private Logger log = LoggerFactory.getLogger(getClass()); + + @Reference + private ONManager onm; + + private OntologyScope scopeSchemaMatching = null; + + /** + * This default constructor is <b>only</b> intended to be used by the OSGI environment with Service + * Component Runtime support. + * <p> + * DO NOT USE to manually create instances - the ExplanationGeneratorImpl instances do need to be + * configured! YOU NEED TO USE {@link #ExplanationEnvironmentConfiguration(ONManager, Dictionary)} or its + * overloads, to parse the configuration and then initialise the rule store if running outside an OSGI + * environment. + */ + public ClerezzaSchemaMatcherImpl() { + super(); + } + + /** + * To be invoked by non-OSGi environments. + * + * @param onm + * @param configuration + */ + public ClerezzaSchemaMatcherImpl(ONManager onm, Dictionary<String,Object> configuration) { + this(); + this.onm = onm; + try { + activate(configuration); + } catch (IOException e) { + log.error("Unable to access servlet context.", e); + } + } + + /** + * Used to configure an instance within an OSGi container. + * + * @throws IOException + * if there is no valid component context. + */ + @SuppressWarnings("unchecked") + @Activate + protected void activate(ComponentContext context) throws IOException { + log.info("in " + Configuration.class + " activate with context " + context); + if (context == null) { + throw new IllegalStateException("No valid" + ComponentContext.class + " parsed in activate!"); + } + activate((Dictionary<String,Object>) context.getProperties()); + } + + /** + * Called within both OSGi and non-OSGi environments. + * + * @param configuration + * @throws IOException + */ + protected void activate(Dictionary<String,Object> configuration) throws IOException { + // TODO load at least the explanation metamodel here. + String id = "ExplanationSchemaMatching"; + + try { + scopeSchemaMatching = onm.getOntologyScopeFactory().createOntologyScope(id, + new BlankOntologySource()); + } catch (DuplicateIDException e) { + scopeSchemaMatching = onm.getScopeRegistry().getScope(e.getDuplicateID()); + } + onm.getScopeRegistry().registerScope(scopeSchemaMatching, true); + } + + @Deactivate + protected void deactivate(ComponentContext context) { + log.info("in " + Configuration.class + " deactivate with context " + context); + } + + @Override + public Set<Schema> getSatisfiableSchemas(Set<Library> catalogs, UriRef entity) { + + for (Library l : catalogs) { + log.info("Library {}", l); + try { + for (OWLOntology o : l.getOntologies()) + log.info("\t{}", o); + } catch (RegistryContentException ex) { + log.warn("Invalid content in library " + l, ex); + continue; + } + } + + Graph ctx = new GraphNode(entity, knowledgeBase).getNodeContext(); + + Iterator<Triple> it = ctx.iterator(); + while (it.hasNext()) { + Triple t = it.next(); + log.info("In l=1 context of {} : triple {}", entity, t); + } + + // TODO Auto-generated method stub + return null; + } + + @Override + public void setKnowledgeBase(Graph knowledgeBase) { + this.knowledgeBase = knowledgeBase; + OntologySpace cs = null; + try { + cs = scopeSchemaMatching.getCustomSpace(); + cs.tearDown(); + // FIXME Ugly + scopeSchemaMatching.getCustomSpace().addOntology( + new RootOntologySource(OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(new GraphSource( + knowledgeBase).getRootOntology()))); + } catch (UnmodifiableOntologyCollectorException e) { + log.error("Failed to change knowledge base in unmodifiable ontolgy space {}", + e.getOntologyCollector()); + } finally { + cs.setUp(); + } + } + +}
Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/CompatibilityMappingImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/CompatibilityMappingImpl.java?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/CompatibilityMappingImpl.java (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/CompatibilityMappingImpl.java Fri Feb 3 17:53:57 2012 @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.stanbol.explanation.impl.clerezza; + +import org.apache.stanbol.explanation.api.BinaryRelation; +import org.apache.stanbol.explanation.api.CompatibilityMapping; +import org.apache.stanbol.explanation.api.Path; + +public class CompatibilityMappingImpl implements CompatibilityMapping { + + private double likelihood = 0.0; + + private Path path; + + private BinaryRelation relation; + + @Override + public double getLikelihood() { + return likelihood; + } + + @Override + public Path getPath() { + return path; + } + + @Override + public BinaryRelation getRelation() { + return relation; + } + + @Override + public void setLikelihood(double likelihood) { + this.likelihood = likelihood; + } + +} Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/PathConstructor.java URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/PathConstructor.java?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/PathConstructor.java (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/impl/clerezza/PathConstructor.java Fri Feb 3 17:53:57 2012 @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.stanbol.explanation.impl.clerezza; + +import java.util.Set; + +import org.apache.clerezza.rdf.core.TripleCollection; +import org.apache.clerezza.rdf.core.UriRef; +import org.apache.clerezza.rdf.core.access.TcManager; +import org.apache.clerezza.rdf.core.sparql.ParseException; +import org.apache.clerezza.rdf.core.sparql.QueryParser; +import org.apache.clerezza.rdf.core.sparql.ResultSet; +import org.apache.clerezza.rdf.core.sparql.SolutionMapping; +import org.apache.clerezza.rdf.core.sparql.query.Query; +import org.apache.clerezza.rdf.core.sparql.query.Variable; +import org.apache.stanbol.explanation.api.CompatibilityMapping; + +public class PathConstructor { + + public static Set<CompatibilityMapping> computePathCompatibility(UriRef from, + UriRef to, + Set<TripleCollection> kb, + + int maxLength) { + + if (maxLength < 1) throw new IllegalArgumentException("Maximum length cannot be lower than 1."); + + StringBuffer sparql = new StringBuffer("SELECT "); + + sparql.append(from == null ? "?y " : ""); + sparql.append(" ?r0 "); + + for (int i = 1; i < maxLength; i++) { + sparql.append("?x"); + sparql.append(i - 1); + sparql.append(" "); + + sparql.append(" ?r"); + sparql.append(i); + sparql.append(" "); + } + + sparql.append(to == null ? "?z" : ""); + sparql.append(" "); + + + sparql.append("WHERE { "); + + sparql.append("{ "); + + sparql.append(from == null ? "?y " : from); + sparql.append(" "); + + sparql.append("?r0 "); + + // We already did it once. + for (int i = 1; i < maxLength; i++) { + sparql.append("?x"); + sparql.append(i - 1); + if (i > 1) sparql.append(" } "); + sparql.append(" OPTIONAL { ?x"); + sparql.append(i - 1); + sparql.append(" ?r"); + sparql.append(i); + sparql.append(" "); + } + + sparql.append(to == null ? "?z" : to); + + sparql.append(maxLength > 1 ? " } " : " "); + + sparql.append(" } UNION { "); + + sparql.append(to == null ? "?z" : to); + + // We already did it once. + for (int i = maxLength - 1; i > 0; i--) { + + sparql.append(" ?r"); + sparql.append(i); + sparql.append(" "); + + sparql.append("?x"); + sparql.append(i - 1); + sparql.append(" . ?x"); + sparql.append(i - 1); + } + + sparql.append(" ?r0 "); + sparql.append(from == null ? "?y " : from); + + sparql.append(" }"); + + sparql.append(" }"); + // + // sparql = new StringBuffer(); + // sparql.append("SELECT ?r ?y WHERE { { <http://semanticweb.org/dumps/people/teddypolar> ?r ?y } UNION { ?y ?r <http://semanticweb.org/dumps/people/teddypolar> } }"); + // + System.out.println(sparql); + Query q; + try { + q = QueryParser.getInstance().parse(sparql.toString()); + + for (TripleCollection g : kb) { + Object o = TcManager.getInstance().executeSparqlQuery(q, g); + if (o instanceof ResultSet) { + ResultSet result = (ResultSet) o; + while (result.hasNext()) { + System.out.println(); + SolutionMapping sm = result.next(); + for (Variable key : sm.keySet()) + System.out.println("##### " + key.getName() + " **** " + sm.get(key)); + } + + } + } + + } catch (ParseException e) { + e.printStackTrace(); + } + + return null; + } + +} Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/schema/SchemaExtractor.java URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/schema/SchemaExtractor.java?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/schema/SchemaExtractor.java (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/schema/SchemaExtractor.java Fri Feb 3 17:53:57 2012 @@ -0,0 +1,18 @@ +package org.apache.stanbol.explanation.schema; + +import org.apache.stanbol.explanation.api.Explainable; +import org.apache.stanbol.explanation.api.KnowledgeItem; +import org.apache.stanbol.explanation.api.Schema; + +public class SchemaExtractor { + + public static Schema guessSchema(Explainable<?> object) { + + if (object instanceof KnowledgeItem) { + + } + + return null; + } + +} Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/util/SimpleOWLUtils.java URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/util/SimpleOWLUtils.java?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/util/SimpleOWLUtils.java (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/java/org/apache/stanbol/explanation/util/SimpleOWLUtils.java Fri Feb 3 17:53:57 2012 @@ -0,0 +1,13 @@ +package org.apache.stanbol.explanation.util; + +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLIndividual; + +public class SimpleOWLUtils { + + public static OWLIndividual getIndividual(IRI iri) { + return OWLManager.getOWLDataFactory().getOWLNamedIndividual(iri); + } + +} Added: incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/resources/OSGI-INF/metatype/metatype.properties URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1240263&view=auto ============================================================================== --- incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/resources/OSGI-INF/metatype/metatype.properties (added) +++ incubator/stanbol/branches/ontonet-showcase/explanation/core/src/main/resources/OSGI-INF/metatype/metatype.properties Fri Feb 3 17:53:57 2012 @@ -0,0 +1,17 @@ +#=============================================================================== +#Properties defined by the Explanation Engine +#=============================================================================== +org.apache.stanbol.explanation.impl.ExplanationGeneratorImpl.name = Apache Stanbol Explanation Generator +org.apache.stanbol.explanation.impl.ExplanationGeneratorImpl.description = Creates information objects aimed at justifying the mention or presentation of knowledge objects. + +#=============================================================================== +#Properties defined by the Explanation Engine Configuration +#=============================================================================== +org.apache.stanbol.explanation.impl.ExplanationEnvironmentConfiguration.name = Apache Stanbol Explanation Environment Configuration +org.apache.stanbol.explanation.impl.ExplanationEnvironmentConfiguration.description = Defines the logical environment (ontology scope, etc.) where the explanation generator should work. + +#=============================================================================== +#Properties defined by the Schema Catalog +#=============================================================================== +org.apache.stanbol.explanation.impl.SchemaCatalogImpl.name = Apache Stanbol Explanation Schema Catalog +org.apache.stanbol.explanation.impl.SchemaCatalogImpl.description = The set of Knowledge Patterns, or Schemas, to be checked for satisfiability and selection from explanation generators. \ No newline at end of file
