2013-04-28 3 views
1

Я хочу выразить это соотношение: если статья X имеет автора Y, а автор имеет влияние на среду или высокий уровень (3 класса: низкий, средний, высокий), то эта статья считается очень рекомендуемой.rdf правила рассуждения через Jena

(?x computer-science#hasAuthor ?y)(?y computer-science#hasInfluenceFactor computer-science#High) -> (?x computer-science#isImportant computer-science#importantfactor) 

это мои мысли правильно?

вот некоторые фрагменты онтологии

<owl:ObjectProperty rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasAuthor"> 
    <rdf:type rdf:resource="&owl;TransitiveProperty"/> 
    <owl:propertyDisjointWith rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#isAuthorOf"/> 
    <rdfs:range> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasAuthor"/> 
      <owl:someValuesFrom rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#author"/> 
     </owl:Restriction> 
    </rdfs:range> 
    <rdfs:domain> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasAuthor"/> 
      <owl:someValuesFrom rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#article"/> 
     </owl:Restriction> 
    </rdfs:domain> 
</owl:ObjectProperty> 
    <owl:ObjectProperty rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasInfluenceFactor"> 
    <rdf:type rdf:resource="&owl;TransitiveProperty"/> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#author"/> 
    <rdfs:range rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#influenceFator"/> 
</owl:ObjectProperty> 
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#High"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#influenceFator"/> 
</owl:NamedIndividual> 
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#isImportant"> 
    <rdf:type rdf:resource="&owl;TransitiveProperty"/> 
    <rdfs:range rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#importantFactor"/> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#influenceFator"/> 
</owl:ObjectProperty> 
    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#importantFactor"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#importantFactor"/> 
</owl:NamedIndividual> 

искренней благодарности любого зритель моего вопрос :)

ответ

0

Вам не нужно, чтобы создать правило, чтобы выразить свою онтологию, вы можете это сделать полностью в OWL. Сначала мы определяем онтологию, основанную на вашем примере, но с некоторыми новыми аксиомами. В частности, мы определяем два новых выражения класса: InfluentialArticle и ImportantArticle. Влиятельное изделие имеет высокое или среднее влияние, важный автор написал по крайней мере одна влиятельной статью:

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. 
@prefix owl: <http://www.w3.org/2002/07/owl#>. 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. 
@prefix cs: <http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#>. 

# properties 
cs:hasAuthor 
    a  owl:ObjectProperty ; 
    rdfs:domain cs:Article ; 
    rdfs:range cs:Author . 

cs:wrote 
    a owl:ObjectPropert ; 
    owl:inverseOf cs:hasAuthor . 

# classes 
cs:hasInfluenceFactor 
    a  owl:ObjectProperty ; 
    rdfs:domain cs:Article ; 
    rdfs:range cs:InfluenceFactor . 

cs:InfluenceFactor 
    owl:equivalentClass 
    [a owl:Class ; 
    owl:oneOf (cs:high cs:medium cs:low) 
    ]. 

cs:Author a owl:Class. 
cs:Article a owl:Class. 

# axioms 

# an influential article has a high or medium impact 
cs:InfluentialArticle 
    rdfs:subClassOf cs:Article ; 
    owl:equivalentClass [ 
    owl:unionOf (
     [a owl:Restriction ; 
     owl:onProperty cs:hasInfluenceFactor ; 
     owl:hasValue cs:high] 
     [a owl:Restriction ; 
     owl:onProperty cs:hasInfluenceFactor ; 
     owl:hasValue cs:medium 
     ] 
    ) 
    ]. 

# an important author wrote an influential article 
cs:ImportantAuthor 
    rdfs:subClassOf cs:Author ; 
    owl:equivalentClass [ 
    a owl:Restriction ; 
    owl:onProperty cs:wrote ; 
    owl:someValuesFrom cs:InfluentialArticle 
    ]. 

# individuals 

# fred wrote a lousy paper 
cs:fred 
    a cs:Author. 
cs:article1 
    a cs:Article ; 
    cs:hasInfluenceFactor cs:low ; 
    cs:hasAuthor cs:fred. 

# jane wrote a good paper 
cs:jane 
    a cs:Author. 
cs:article2 
    a cs:Article ; 
    cs:hasInfluenceFactor cs:high ; 
    cs:hasAuthor cs:jane. 

Теперь мы можем написать некоторый Jena код для загрузки этой онтологии и обработать его с встроенным мыслителем:

package examples; 

import java.util.Iterator; 

import com.hp.hpl.jena.ontology.*; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.util.FileManager; 

public class ReasonerExample 
{ 
    String NS = "http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#"; 

    public static void main(String[] args) { 
     new ReasonerExample().run(); 
    } 

    public void run() { 
     OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF); 
     FileManager.get().readModel(m, "src/main/resources/comp-sci.ttl"); 

     // list all authors 
     System.out.println("All authors:"); 
     OntClass author = m.getOntClass(NS + "Author"); 
     for (Iterator<? extends OntResource> i = author.listInstances(); i.hasNext();) { 
      System.out.println(" " + i.next().getURI()); 
     } 

     // list high impact authors 
     OntClass importantAuthor = m.getOntClass(NS + "ImportantAuthor"); 
     System.out.println("Important authors:"); 
     for (Iterator<? extends OntResource> i = importantAuthor.listInstances(); i.hasNext();) { 
      System.out.println(" " + i.next().getURI()); 
     } 
    } 
} 

Что дает следующий результат:

All authors: 
    http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#jane 
    http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#fred 
Important authors: 
    http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#jane 

Примечание Я также неподвижную свои имена, чтобы использовать OWL конвенции: ведущий заглавную букву для классов, нижний регистр для everythi ng else. Я также упростил ограничения домена и диапазона, которые были немного странными.

Update

После комментария от оригинального плаката, я перевел онтологию RDF/XML с помощью rdfcat инструмент Jena, как показано ниже:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:cs="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Class rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Article"/> 
    <owl:Class rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Author"/> 
    <owl:ObjectProperty rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasAuthor"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Article"/> 
    <rdfs:range rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Author"/> 
    </owl:ObjectProperty> 
    <owl:ObjectProperty rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasInfluenceFactor"> 
    <rdfs:domain rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Article"/> 
    <rdfs:range> 
     <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#InfluenceFactor"> 
     <owl:equivalentClass> 
      <owl:Class> 
      <owl:oneOf rdf:parseType="Collection"> 
       <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#high"/> 
       <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#medium"/> 
       <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#low"/> 
      </owl:oneOf> 
      </owl:Class> 
     </owl:equivalentClass> 
     </rdf:Description> 
    </rdfs:range> 
    </owl:ObjectProperty> 
    <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#ImportantAuthor"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Author"/> 
    <owl:equivalentClass> 
     <owl:Restriction> 
     <owl:onProperty> 
      <owl:ObjectPropert rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#wrote"> 
      <owl:inverseOf rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasAuthor"/> 
      </owl:ObjectPropert> 
     </owl:onProperty> 
     <owl:someValuesFrom> 
      <rdf:Description rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#InfluentialArticle"> 
      <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#Article"/> 
      <owl:equivalentClass rdf:parseType="Resource"> 
       <owl:unionOf rdf:parseType="Collection"> 
       <owl:Restriction> 
        <owl:onProperty rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasInfluenceFactor"/> 
        <owl:hasValue rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#high"/> 
       </owl:Restriction> 
       <owl:Restriction> 
        <owl:onProperty rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#hasInfluenceFactor"/> 
        <owl:hasValue rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#medium"/> 
       </owl:Restriction> 
       </owl:unionOf> 
      </owl:equivalentClass> 
      </rdf:Description> 
     </owl:someValuesFrom> 
     </owl:Restriction> 
    </owl:equivalentClass> 
    </rdf:Description> 
    <cs:Article rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#article2"> 
    <cs:hasInfluenceFactor rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#high"/> 
    <cs:hasAuthor> 
     <cs:Author rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#jane"/> 
    </cs:hasAuthor> 
    </cs:Article> 
    <cs:Article rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#article1"> 
    <cs:hasInfluenceFactor rdf:resource="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#low"/> 
    <cs:hasAuthor> 
     <cs:Author rdf:about="http://www.semanticweb.org/aero/ontologies/2013/1/computer-science#fred"/> 
    </cs:hasAuthor> 
    </cs:Article> 
</rdf:RDF> 
+0

привет Ян @Ian Dickinson спасибо за такие сложные введения. Я думаю, что понял, что вы сказали, но ... Я знаю, что это действительно глупо, где я могу интегрировать эти аксиомы в свой онтологический файл в формате RDF/XML? Я использовал протеже 4.2 для создания онтологии домена. разве ваш ум дал бы мне дополнительную информацию для этого? спасибо – Sarotti

+0

Ну, Protégé должен иметь возможность читать формат Turtle, а также RDF/XML. Тем не менее, я перевел онтологию на RDF/XML для вас, используя rdfcat от Йены. См. Обновленную версию ответа для RDF/XML. –

+0

прозрачный. большое спасибо Яну, ты сделал мне большую услугу :) – Sarotti