2

私は研究プロジェクトでしばらくの間 Jena を使用してきましたが、最近、プログラムがいくつかのタスクをより効率的に実行できるように、SPARQL クエリを使用しようとしています。

Twinkle ( http://www.ldodds.com/projects/twinkle/ )を使用して一連のクエリをテストし、目的の結果を得ましたが、それらを Jena に実装すると、追加の結果が返されました。

たとえばトゥインクルでは

SELECT ?x WHERE { ?x rdfs:domain ns:Area .  ?x rdfs:range ns:Structure }

きらめき ( ns:Contains ) で 1 つの結果を返しますが、Jena を使用して私のプログラムで実行すると、別のプロパティ ( ns:testProperty ) が返されますが、範囲とドメインが一致しないため、返されるべきではありません。なぜこの不一致があるのか​​ わかりません。ポインタをいただければ幸いです。

私のJavaコードは次のとおりです。

Query q = sparqlQueryGetProperties(s, o);

QueryExecution qexec = QueryExecutionFactory.create(q, m);

try {
    Iterator<QuerySolution> rs = qexec.execSelect();

    for (; rs.hasNext();) {
        QuerySolution soln = rs.next();
        if(soln.contains("x")){
            RDFNode r = soln.get("x");

            Resource rss = r.asResource();

            props.add(rss.getLocalName());
        }
    }
} finally {
    qexec.close();
}

その他の情報: Sparql v1.0 Jena Core 2.7.4 Jena ARQ 2.9.4

テストに使用した完全なクエリ:

PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>  
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX ns:<http://www.semanticweb.org/ontologies/2012/1/Ontology1328444427428.owl#>   
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

SELECT ?x WHERE { ?x rdfs:domain ns:Area .  ?x rdfs:range ns:Structure }

アップデート

残念ながら、TWINKLE のテスト ケースからまだ追加のリソースが返されています。

以下は、Twinkle と Jena の両方で実行されている正確な SPARQL クエリです。

PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  ns:   <http://www.semanticweb.org/ontologies/2012/1/Ontology1328444427428.owl#>
PREFIX  owl:  <http://www.w3.org/2002/07/owl#>
PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT  ?prp ?x
WHERE
  { ns:cathedral  ?prp  ?x .
?x        rdf:type  owl:NamedIndividual .
FILTER ( ?prp != ns:hasShape )
}

TWINKLE での結果:

?prp = ns:within ?x = ns:Campus

JENAでの結果:

(?prp -> ?x)
sameAs -> cathedral
disjoin -> cathedral
differentFrom -> Cath_point_4  //This particular relationship seems completely random.
topObjectProperty -> cathedral
within -> Campus

これが私が使用しているデータです(これは私がテスト用に開発したオントロジーです):

http://cgi.csc.liv.ac.uk/~roscminni/ontResources/spatialOntCopy.owl

Twinkle が古くなっているように見えることを考慮して、Twinkle のクエリをテストするためのより良いツールはありますか?

4

1 に答える 1

2

違いは、Jena コードでは を使用しOntModel、Twinkle は法線のみを使用することです。Model

Jena の内部では、 に対する SPARQL クエリは、に対する多数の呼び出しにModel変換されます。これらの呼び出しを使用すると、推定されたトリプルが含まれるため、追加の結果が得られます。find()ModelOntModelfind()

で得られる追加の結果はOntModel、モデルを作成したときに選択したルールセットによって異なります。

于 2012-11-06T18:36:30.780 に答える