2015-07-15 1 views
2

Je ne semble pas être capable de comprendre comment OR (ObjectUnionOf?) Un ensemble de règles AND (ObjectIntersectionOf). Ce que mon code produit quand le fichier OWL est ouvert en protégé est rules (has_difi_min un double [< = "184.84" ^^ double]) et (has_mean_ndvi un double [< = "0.3428" ^^ double]), etc. séparer les "jeux de règles" comme indiqué ci-dessous dans la capture d'écran.OU certaines règles AND dans l'API OWL?

Mon code OWLAPI:

/* write rules */ 
// OWLObjectIntersectionOf intersection = null; 
OWLClassExpression firstRuleSet = null; 
OWLClass owlCls = null; 
OWLObjectUnionOf union = null; 
Iterator it = rules.map.entrySet().iterator(); 
Set<OWLClassExpression> unionSet = new HashSet<OWLClassExpression>(); 
while (it.hasNext()) { 
    Map.Entry pair = (Map.Entry) it.next(); 
    String currCls = (String) pair.getKey(); 
    owlCls = factory.getOWLClass(IRI.create("#" + currCls)); 
    ArrayList<owlRuleSet> currRuleset = (ArrayList<owlRuleSet>) pair.getValue(); 
    for (int i = 0; i < currRuleset.size(); i++) { 
     firstRuleSet = factory.getOWLObjectIntersectionOf(currRuleset.get(i).getRuleList(currCls)) 
     union = factory.getOWLObjectUnionOf(firstRuleSet); 
     manager.addAxiom(ontology, factory.getOWLEquivalentClassesAxiom(owlCls, union)); 
    } 
} 
manager.saveOntology(ontology); 

C'est ce qui est ressemble à: Je veux que les lignes soient ORs. What it looks like in protege

éditer: Merci Ignazio! Mon code OWLAPI ressemble maintenant à ceci:

/* write rules */ 
OWLClass owlCls = null; 
OWLObjectUnionOf totalUnion = null; 
Iterator it = rules.map.entrySet().iterator(); 
Set<OWLClassExpression> unionSet = new HashSet<OWLClassExpression>(); 
while (it.hasNext()) { 
    Map.Entry pair = (Map.Entry) it.next(); 
    String currCls = (String) pair.getKey(); 
    owlCls = factory.getOWLClass(IRI.create("#" + currCls)); 
    ArrayList<owlRuleSet> currRuleset = (ArrayList<owlRuleSet>) pair.getValue(); 
    for (int i = 0; i < currRuleset.size(); i++) { 
     firstRuleSet = factory.getOWLObjectIntersectionOf(currRuleset.get(i).getRuleList(currCls)) 
     unionSet.add(firstRuleSet); 
    } 
    totalUnion = factory.getOWLObjectUnionOf(unionSet); 
    unionSet.clear() 
    manager.addAxiom(ontology, factory.getOWLEquivalentClassesAxiom(owlCls, totalunion)); 
} 
manager.saveOntology(ontology); 

Répondre

0

Vous créez unionSet mais pas l'utiliser. Au lieu d'ajouter un axiome à l'ontologie, ajoutez firstRuleSet à unionSet, puis créez un axiome de classe équivalent en dehors de la boucle principale, juste avant de sauvegarder l'ontologie.