2013-04-28 96 views
1

我想表達這種關係:如果文章X有作者Y,作者有影響因子中或高(3類:低,中,高),那麼這篇文章被認爲是強烈推薦。rdf推理規則通過耶拿

(?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中。首先我們根據你的例子定義一個本體論,但是用一些新的公理。特別是,我們定義了兩個新的類別表達式:InfluentialArticleImportantArticle。一個有影響的文章有高或中等的影響,一個重要的作家寫了至少一個有影響力的文章:

@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. 

現在我們可以寫一些耶拿代碼來加載這個本體和處理它與一個內置的推理:

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其他人。我也簡化了領域和範圍約束,這有點奇怪。

更新

繼從原來的海報評論,我用耶拿的rdfcat工具如下翻譯本體到RDF/XML:

<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迪金森謝謝你,這麼複雜的介紹。我想我掌握了你所說的,但是......我知道它真的很愚蠢,我可以在哪裏將這些公理以RDF/XML格式整合到我的本體文件中?我用protege 4.2來創建領域本體。你的想法會給我一些進一步的信息來完成這個嗎?謝謝 – Sarotti 2013-04-30 14:07:23

+0

好吧,Protégé應該能夠讀取Turtle格式以及RDF/XML。不過,我已經使用Jena的rdfcat將本體論翻譯成了RDF/XML。查看RDF/XML答案的更新版本。 – 2013-04-30 16:22:07

+0

明確。非常感謝你伊恩,你爲我做了一件大事:) – Sarotti 2013-05-01 07:13:30