1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
| import com.clarkparsia.owlapi.explanation.DefaultExplanationGenerator;
import com.clarkparsia.owlapi.explanation.util.SilentExplanationProgressMonitor;
import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;
import com.clarkparsia.pellet.owlapiv3.PelletReasoner;
import java.io.File;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.io.OWLObjectRenderer;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.reasoner.SimpleConfiguration;
import org.semanticweb.owlapi.vocab.OWLRDFVocabulary;
import org.semanticweb.owlapi.vocab.PrefixOWLOntologyFormat;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationOrderer;
import uk.ac.manchester.cs.bhig.util.Tree;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationOrdererImpl;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree;
import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer;
import java.util.*;
// Exemple : comment utilisier une ontology OWL avec un raisonneur
/**
*
* @author DELL
*/
public class Ontologie {
private static final File file = new File("C:\\Users\\DELL\\ontologies\\Ontology1436875909396\\Ontology1436875909396.owl");
//private static final String ontologie_URL = "TunisieOntologie.owl";
private static OWLObjectRenderer renderer = new DLSyntaxObjectRenderer();
public static void main (String args[])throws OWLOntologyCreationException {
// Préparer l'ontologie et le raisonneur
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
//OWLOntology ontology = manager.loadOntologyFromOntologyDocument(IRI.create(ontologie_URL));
OWLOntology ontology = manager.loadOntologyFromOntologyDocument(IRI.create(file));
OWLReasonerFactory reasonerFactory = PelletReasonerFactory.getInstance();
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, new SimpleConfiguration());
OWLDataFactory factory = manager.getOWLDataFactory();
PrefixOWLOntologyFormat pm = (PrefixOWLOntologyFormat)manager.getOntologyFormat(ontology);
pm.setDefaultPrefix(file + "#");
//pm.setDefaultPrefix(ontologie_URL + "#");
// Récupération des classes et leurs instances
OWLClass classeProduit = factory.getOWLClass(":Produit", pm);
for(OWLNamedIndividual produit : reasoner.getInstances(classeProduit, false).getFlattened()) {
System.out.println("Produit : " + renderer.render(produit));
}
// Get a given individual
OWLNamedIndividual oignon = factory.getOWLNamedIndividual(":Oignon", pm);
// Get values of selected properties on the individual
OWLDataProperty proprieteQuantite = factory.getOWLDataProperty(":aUneQuantiteDe", pm);
OWLObjectProperty proprieteProvenance = factory.getOWLObjectProperty(":provientDe", pm);
for(OWLLiteral quantite : reasoner.getDataPropertyValues(oignon, proprieteQuantite)) {
System.out.println("La quantité produite d'oignons est : " + quantite.getLiteral());
}
for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, proprieteProvenance).getFlattened()) {
System.out.println("Les oignons proviennent des villes de : " + renderer.render(indiv));
}
// Get labels
LocalizedAnnotationSelector as = new LocalizedAnnotationSelector(ontology, factory, "en", "as");
for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, proprieteProvenance).getFlattened()) {
System.out.println("Les oignons proviennent des villes de : '" + as.getLabel(indiv) + "'");
}
// Get inverse of a property, i.e. which individuals are in relationn with a given individual
// Je passe cette partie pour le moment
// Find to which classes the individuals belongs
Set<OWLClassExpression> assertedClasses = oignon.getTypes(ontology);
for(OWLClass c : reasoner.getTypes(oignon, false).getFlattened()) {
boolean asserted = assertedClasses.contains(c);
System.out.println((asserted ? "asserted" : "inferred") + " Oignon appartient à la classe : " + renderer.render(c));
}
// Lister toutes les propriétés objet pour un individu
Map<OWLObjectPropertyExpression, Set<OWLIndividual>> assertedValues = oignon.getObjectPropertyValues(ontology);
for(OWLObjectProperty objProp : ontology.getObjectPropertiesInSignature(true)) {
for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, objProp).getFlattened()) {
boolean asserted = assertedValues.get(objProp).contains(indiv);
System.out.println((asserted ? "asserted" : "inferred") + " object property de oignon : " + renderer.render(objProp) + "--> " + renderer.render(indiv));
}
}
// Lister toutes les instances pareilles (same as)
// Vérifier si la règle SWRL est utilisée
OWLNamedIndividual nabeul = factory.getOWLNamedIndividual(":Nabeul", pm);
OWLClass classeVilleImp = factory.getOWLClass(":Ville Importante", pm);
OWLClassAssertionAxiom axiomeAExpliquer = factory.getOWLClassAssertionAxiom(classeVilleImp, nabeul);
System.out.println( "Nabeul est-elle une ville importante ? " + reasoner.isEntailed(axiomeAExpliquer));
// Expliquer pourquoi Nabeul est une ville importante
DefaultExplanationGenerator explanationGenerator = new DefaultExplanationGenerator
(manager, reasonerFactory, ontology, reasoner, new SilentExplanationProgressMonitor());
Set<OWLAxiom> explanation = explanationGenerator.getExplanation(axiomeAExpliquer);
ExplanationOrderer deo = new ExplanationOrdererImpl(manager);
ExplanationTree explanationTree = deo.getOrderedExplanation(axiomeAExpliquer, explanation);
System.out.println();
System.out.println("-- explication de pourquoi Nabeul est dans la classe Ville Importante --");
printIndented(explanationTree, "");
}
private static void printIndented(Tree<OWLAxiom> node, String indent) {
OWLAxiom axiome = node.getUserObject();
System.out.println(indent + renderer.render(axiome));
if(!node.isLeaf()) {
for(Tree<OWLAxiom> child : node.getChildren()) {
printIndented(child, indent + " ");
}
}
}
// Classe utile pour extraire les labels, les commentaires et d'autres annotations dans les langues voulues
//
public static class LocalizedAnnotationSelector {
private final List<String> langs;
private final OWLOntology ontology;
private final OWLDataFactory factory;
// Constructeur
public LocalizedAnnotationSelector(OWLOntology ontology, OWLDataFactory factory, String... langs) {
this.langs = (langs == null) ? Arrays.asList(Locale.getDefault().toString()) : Arrays.asList(langs);
this.ontology = ontology;
this.factory = factory;
}
// Fournir le premier label dans le premier matching language
public String getLabel(OWLNamedIndividual indiv) {
return getAnnotationString(indiv, OWLRDFVocabulary.RDFS_LABEL.getIRI());
}
public String getComment(OWLNamedIndividual indiv) {
return getAnnotationString(indiv, OWLRDFVocabulary.RDFS_COMMENT.getIRI());
}
public String getAnnotationString(OWLNamedIndividual indiv, IRI annotationIRI) {
return getLocalizedString(indiv.getAnnotations(ontology, factory.getOWLAnnotationProperty(annotationIRI)));
}
private String getLocalizedString(Set<OWLAnnotation> annotations) {
List<OWLLiteral> literalLabels = new ArrayList<OWLLiteral> (annotations.size());
for(OWLAnnotation label : annotations) {
if(label.getValue() instanceof OWLLiteral) {
literalLabels.add((OWLLiteral) label.getValue());
}
}
for(String lang : langs) {
for(OWLLiteral literal : literalLabels) {
if(literal.hasLang(lang)) return literal.getLiteral();
}
}
for(OWLLiteral literal : literalLabels) {
if(!literal.hasLang()) return literal.getLiteral();
}
return null;
}
}
} |
Partager