2017-11-24 10 views
0

私はJenaとOWL推論をしようとしています。JenaとのOWL推論(タートル形式)

package test; 

import org.apache.jena.util.FileManager; 
import org.apache.jena.util.PrintUtil; 
import org.apache.jena.rdf.model.*; 
import org.apache.jena.reasoner.Reasoner; 
import org.apache.jena.reasoner.ReasonerRegistry; 

public class Test { 
    public static void main(String[] args){ 
     Model schema = FileManager.get().loadModel("file:/home/mica/Downloads/sparql/ontology.ttl"); 
     Model data = FileManager.get().loadModel("file:/home/mica/Downloads/sparql/result.ttl"); 
     Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); 
     reasoner = reasoner.bindSchema(schema); 
     InfModel infmodel = ModelFactory.createInfModel(reasoner, data); 

     Resource nForce = infmodel.getResource("<0762762P>"); 
     System.out.println(nForce); 
     System.out.println("nForce *:"); 
     printStatements(infmodel, nForce, null, null); 
} 
    public static void printStatements(Model m, Resource s, Property p, Resource o) { 
     for (StmtIterator i = m.listStatements(s,p,o); i.hasNext();) { 
      Statement stmt = i.nextStatement(); 
      System.out.println(" - " + PrintUtil.print(stmt)); 
     } 
    } 

} 

例:スタートとして、私の目標は、教育機関がタイプdbo:EducationalInstitutionのであれば、それは(イエナドキュメントから適応)Javaコードがここにもdbo:institution

であるということを推測することだけです

@prefix dbo: <http://dbpedia.org/ontology/> . 
@prefix ex: <http://ex.org/a#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix dbf: <http://fr.dbpedia.org/resource/> . 
@prefix foaf: <http://xmlns.com/foaf/0.1/> . 

<0762762P> rdf:type dbo:Event ; 
     dbo:status "En cours" ; 
     dbo:Place _:b0 . 

_:b0 dbf:Ville     "Rouen" ; 
    rdf:type dbo:EducationalInstitution ; 
     foaf:name     "Université du Havre" . 

そして、次のオントロジー:

@prefix dbo: <http://dbpedia.org/ontology/> . 
@prefix ex: <http://ex.org/a#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#'> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix dbf: <http://fr.dbpedia.org/resource/> . 
@prefix foaf: <http://xmlns.com/foaf/0.1/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

dbo:Event rdf:type owl:Class . 
dbo:Place rdf:type owl:ObjectProperty ; 
      rdfs:domain dbo:Event ; 
      rdfs:range dbo:Event . 
dbo:institution rdf:type owl:Class . 
dbo:EducationalInstitution rdf:type owl:Class ; 
          rdfs:subClassOf dbo:institution . 
dbo:Place rdf:type dbo:EducationalInstitution . 
私のデータの

私が期待した結果が届かない: nForce *:

+0

あなたのスキーマは奇妙です。 1. DBPediaオントロジーのクラスとして 'dbo:Place '。 2。あなたのオントロジーでは、オブジェクトプロパティとして宣言しました。しかし、あなたはこのトリプル 'dbo:Place rdf:type dbo:EducationalInstitution 'を追加しました。これは' dbo:Place'をOWL個人にも同様にします。どうして? – AKSW

+0

次に、相対URIを使用しています。これは、絶対URIに解決されるような悪い習慣であるため、通常はドキュメントURIを名前空間として使用します。絶対URIで始まり、すでにあなたの問題を解決しているかどうかを確認する必要があります。 – AKSW

+0

最後に、あなたの例では何が推測されると思いますか? – AKSW

答えて

2

あなたの全体のオントロジーは奇妙です:

  1. あなたはdbo:Placeがすでにクラスとして定義されているDBpediaのオントロジーを再利用しているが、あなたはしていますこれをオブジェクトプロパティとして使用します。
  2. 次に、このオブジェクトプロパティの範囲をdbo:Eventと宣言しました。意味的には、これも奇妙に聞こえる。
  3. dbo:Placeをクラス dbo:EducationalInstitutionのインスタンスに割り当てるトリプルがあります。つまり、最後にはdbo:Placeはクラス、プロパティ、および個人です。これは本当に悪いモデリングです。

その他の規則:

  • はオントロジーを再利用する良いですが、名前空間を再利用しますが、独自の名前空間
  • 命名規則を使用しないでください:クラスのキャメルケースのスタイルのための
    • プロパティの場合lowerCamelCase style

はなぜこのように、より適切なモデリングを使用していない:

@prefix dbo: <http://dbpedia.org/ontology/> . 
@prefix ex: <http://ex.org/a#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#'> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

dbo:Event rdf:type owl:Class . 
ex:takesPlaceAt rdf:type owl:ObjectProperty ; 
      rdfs:domain dbo:Event ; 
      rdfs:range dbo:Place . 
ex:Institution rdf:type owl:Class . 
ex:EducationalInstitution rdf:type owl:Class ; 
          rdfs:subClassOf ex:Institution . 
dbo:EducationalInstitution rdfs:subClassOf dbo:Place . 

データについて:

_:b0 dbf:Ville     "Rouen" ; 
    rdf:type ex:EducationalInstitution ; 
     foaf:name     "Université du Havre" . 

DBpediaのオントロジーは確かに間違っているためpropertiesThat年代を持っています。

  • dbf:Villeプロパティが、個々のではありません。なぜそれを財産として使うのですか? Dbpediaオントロジには、プロパティdbo:cityがあります。ルーアンのリソースは既に存在しています。

たぶん、あなたはこのようにそれを行うことができます:

@prefix dbo: <http://dbpedia.org/ontology/> . 
@prefix ex: <http://ex.org/a#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix dbr: <http://dbpedia.org/resource/> . 
@prefix foaf: <http://xmlns.com/foaf/0.1/> . 

<0762762P> rdf:type dbo:Event ; 
     dbo:status "En cours" ; 
     dbo:Place _:b0 . 

_:b0 dbo:city     http://dbpedia.org/resource/Rouen ; 
    rdf:type ex:EducationalInstitution ; 
     foaf:name     "Université du Havre" . 
関連する問題