2

Apache Jena Textが rdf ファイルで動作する公式の例を作成しようとしています。公式の例はここに示されています。

正直なところ、ドキュメントが少なすぎて、例が一般的すぎると思います。例として提供される実際のrdfファイルは提供されておらず、構成する必要のあるものがたくさんあります。この RDF ファイルを分析しようとしています。

- アップデート -

この質問へのコメントに記載されているように、公式の例で使用されているファイルを見つけました。

したがって、元の例と foaf.rdf ファイルを組み合わせて、次の ttl ファイルを定義しました。今、私はファイルを持っていますfoaf.ttl:

@prefix :    <http://localhost/jena_example/#> .
@prefix dc:    <http://purl.org/dc/elements/1.1/> .
@prefix con:   <http://www.w3.org/2000/10/swap/pim/contact#> .
@prefix geo:   <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix s:     <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 cc:    <http://creativecommons.org/ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .


:T1 rdfs:label "X0 X1 X2" .
:T2 rdfs:label "X10 X11 X12" .

:B1 rdfs:label "X1" .
:B2 foaf:name "X1" .
:B3 foaf:name "Sean" .

:Sean
        a          foaf:Person ;
        foaf:name  "Sean Palmer" .


:Tim_Bray
        a          foaf:Person ;
        foaf:name  "X1" .

:me
        foaf:name  "Oshani Seneviratne" .

:John_Gage
        a          foaf:Person ;
        foaf:img   <http://upload.wikimedia.org/wikipedia/commons/d/de/John_Gage.jpg> ;
        foaf:name  "John Gage" .

したがって、これまでに述べた元の Java ファイルに関して、メインに次のように設定しました。

public static void main(String [] args){
    TextQuery.init();
    Dataset ds = createCode();
    //Dataset ds = createAssembler() ;
    loadData(ds, "foaf.ttl") ;
    queryData(ds) ;        
}

私が持っているqueryData方法では:

             String pre = StrUtils.strjoinNL
        ( "PREFIX : <http://localhost/jena_example/#>"
        , "PREFIX dc: <http://purl.org/dc/elements/1.1/>"
        , "PREFIX con: <http://www.w3.org/2000/10/swap/pim/contact#>"
        , "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>"
        , "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"
        , "PREFIX s: <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 cc: <http://creativecommons.org/ns#>"
        , "PREFIX text: <http://jena.apache.org/text#>"
        , "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>") ;       


    String qs = StrUtils.strjoinNL
        ( "SELECT * "
        , " { ?res text:query ('X*' 10) ;"
        , "      rdfs:label ?label"
        , " }") ;     

そしてcreateCode()私は持っています:

    // Define the index mapping 
    EntityDefinition entDef = new EntityDefinition("uri", "text", RDFS.label.asNode()) ;

結果は次のとおりです。

-----------------------
| res | label         |
=======================
| :T1 | "X0 X1 X2"    |
| :T2 | "X10 X11 X12" |
| :B1 | "X1"          |
-----------------------

ただし、X1 はトリプルにも含まれていたと報告しています。

:B2 foaf:name "X1" .

しかしB2、結果セットにはありません。「インデックスを定義する必要があります」と言う人もいるかもしれません。さて、非常に奇妙なことは、私が設定した場合createCode()

    // Define the index mapping 
    EntityDefinition entDef = new EntityDefinition("blablabla", "blablabla", RDFS.label.asNode()) ;

結果は変わりません!

では、の役割はEntityDefinition何ですか?私は何を間違っていますか?

4

1 に答える 1

1

あなたの問題は主にエンティティ定義 AFAICT にかかっています。テキスト インデックスを使用したエンティティ定義は空になると確信しています。ディスク ベースの Lucene インデックスを使用したことがある場合は、 Lukeなどのツールを使用してこれを確認できます。

エンティティの定義は次のとおりです。

EntityDefinition entDef = new EntityDefinition("rdf:about", "rdf:resource", RDFS.label.asNode()) ;

これはいくつかの点で問題があります:

  1. (最初のパラメーター) にプレフィックス付きの名前を使用することはできませんentityField。完全な URI を使用する必要があります。
  2. rdf:aboutは実際の URI ではなく、RDF/XML の構文の詳細であるため、これをインデックス化すると、常に何もインデックス化されません

また、表示されているのは不完全なコードであり、既存のテキスト インデックスへのアクセスにのみ関係することに注意することも重要です。RDF 内のテキストを実際に索引付けしたかどうか、またどのように索引付けしたかを示すものは何もありません。

于 2014-02-18T17:12:48.750 に答える