2016-05-25 16 views
0

Nehmen wir an, wir die folgende Regel haben:Wie kann ich die Regeln in SWRL-Code umwandeln?

Course, teacherOf (y, x?), WorksFor => coursePresentedInUniversity (x, z?)

(x?) (Y, z?)

Gibt es eine Bibliothek in Pellet oder Java, um die obige Regel in SWRL-Code zu konvertieren? beispielsweise die folgenden:

<swrl:Imp rdf:about="#CoursePresentedInUniversityRule"> 
    <swrl:head rdf:parseType="Collection"> 
     <swrl:IndividualPropertyAtom> 
       <swrl:propertyPredicate rdf:resource="#coursePresentedInUniversity" /> 
       <swrl:argument1 rdf:resource="#x" /> 
       <swrl:argument2 rdf:resource="#z" /> 
     </swrl:IndividualPropertyAtom> 
    </swrl:head> 
    <swrl:body rdf:parseType="Collection"> 
     <swrl:ClassAtom> 
      <swrl:classPredicate rdf:resource="#Course" /> 
      <swrl:argument1 rdf:resource="#x" /> 
     </swrl:ClassAtom> 

     <swrl:IndividualPropertyAtom> 
      <swrl:propertyPredicate rdf:resource="#teacherOf" /> 
      <swrl:argument1 rdf:resource="#y" /> 
      <swrl:argument2 rdf:resource="#x" /> 
     </swrl:IndividualPropertyAtom> 
     <swrl:IndividualPropertyAtom> 
      <swrl:propertyPredicate rdf:resource="#worksFor" /> 
      <swrl:argument1 rdf:resource="#y" /> 
      <swrl:argument2 rdf:resource="#z" /> 
     </swrl:IndividualPropertyAtom> 

    </swrl:body> 
</swrl:Imp> 

Ich weiß, dass Pellet das Gegenteil tun können (mit reasoner.getKB().getRules()), aber ich weiß nicht, ob es etwas ist, um die Darstellung zu den SWRL XML-Code zu transformieren. Danke!

Antwort

1

Um eine Zeichenkette als SWRL-Regel in eine Ontologie zu konvertieren, sollten gemäß this document einige Schritte ausgeführt werden: 1) Die Zeichenkette sollte analysiert und in Token umgewandelt werden. 2) Die SWRL-Regel sollte mit SWRLRule und SWRLObjectProperties erstellt werden. 3) anzuwenden und die Änderungen in der Ontologie speichern, Zum Beispiel für teacherOf(?y,?x) können wir den folgenden Code schreiben:

OWLObjectProperty teacherP= factory.getOWLObjectProperty(IRI 
      .create(ontologyIRI + "#teacherOf")); 

    SWRLVariable var1 = factory.getSWRLVariable(IRI.create(ontologyIRI 
      + "#y")); 
    SWRLVariable var2 = factory.getSWRLVariable(IRI.create(ontologyIRI 
      + "#x")); 
    SWRLObjectPropertyAtom teacherAtom = factory.getSWRLObjectPropertyAtom(
      teacherP, var1, var2); 
    Set<SWRLAtom> SWRLatomList= new HashSet<SWRLAtom>(); 
    SWRLatomList.add(teacherAtom); 

...

SWRLRule teacherRule = factory.getSWRLRule(SWRLatomList, 
      Collections.singleton(headAtom)); 
    ontologyManager.applyChange(new AddAxiom(testOntology, teacherRule)); 
    ontologyManager.saveOntology(testOntology); 
+0

Wenn dies Ihre Antwort gelöst hat, sollten Sie es als akzeptiert markieren. –

1

Sie können SWRL-Regeln in der Präsentationssyntax im Editor Protégé eingeben und dann Ihre Ontologie im RDF/XML-Format speichern. Wenn Sie dasselbe in Ihrem Code durchführen möchten, müssen Sie die Klasse ManchesterOWLSyntaxParserImpl von OWLAPI verwenden, um die Regel zu analysieren. Sie können dann OWLAPI verwenden, um die Regel (en) im RDF/XML-Format zu speichern.

+0

Dank @Evren, wäre es toll, wenn Sie kann mir ein Beispiel geben (oder mich auf den Code hinweisen), um die Regel Axioms mit dieser Bibliothek zu analysieren. - Enayat – Eni