私は TopBraid を IDE として、Jena を Java で使用しています。同じ SPARQL クエリと同じファイルに対して、2 つの異なる結果セットが得られます。オントロジーはhttps://dl.dropboxusercontent.com/u/108022472/ontology.owlにあります。
SPARQL は次のとおりです。
select ?individual ?type ?label where {
?individual rdf:type ?type .
?individual rdfs:label ?label
filter (?type in (wo:Kingdom))
}
私のJavaコード:
public class ExeSparql {
static String prefix = "PREFIX owl: <http://www.w3.org/2002/07/owl#> " +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
"PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> " +
"PREFIX : <http://dbpedia.org/resource/> " +
"PREFIX dbpedia2: <http://dbpedia.org/property/> " +
"PREFIX wo:<http://purl.org/ontology/wo/>" +
"PREFIX dbpedia: <http://dbpedia.org/> ";
public static ResultSet execute(String queryString){
queryString = prefix + queryString;
Model model = null;
try {
InputStream in = new FileInputStream(new File("/home/noor/TBCMEWorkspace/recreate/index.rdf"));
// Create an empty in-memory model and populate it from the graph
model = ModelFactory.createOntologyModel();
model.read(in,null); // null base URI, since model URIs are absolute
in.close();
} catch (IOException e) {
e.printStackTrace();
}
Query query = QueryFactory.create(queryString);
// Execute the query and obtain results
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
//qe = QueryExecutionFactory.create(query, model);
//results = qe.execSelect();
return results;
}
}
Jena コードに問題はありますか? topbraid を使用した場合、結果は問題ありませんが、Jena を使用した場合、結果は正しくありません。
結果は次のようになります。
| | を:キングダム | "動物" | | | | | を:キングダム | 「動物」
しかし、Jena を使用すると、間違った型の結果セットが返されます