2

首先,我找到了这个相关的问题和答案:

如果我在 SPARQL 查询中添加前缀,它就可以工作。但是,我不想复制所有 SPARQL 查询中的所有前缀,而是只定义一次。我试图以编程方式为rdfs:

model.setNsPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
query.setPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");

它可以工作,但是如果我尝试用我自己的本体来做它就行不通:

model.setNsPrefix("myOnt", "http://example.com/ontologies/myOnt#");
query.setPrefix("myOnt", "http://example.com/ontologies/myOnt#");
4

1 回答 1

1

您可以设置一个Prologue以包含您的前缀映射,然后使用您的特定 SPARQL 查询将其传递到QueryFactory 。

使用Apache Jena 3.0.0对我有用的东西如下:

Prologue queryPrologue = new Prologue();
queryPrologue.setPrefix("skos", "http://www.w3.org/2004/02/skos/core#");

String sparql = "SELECT (COUNT ?s) WHERE { ?s a skos:Concept . }"
Query query = QueryFactory.parse(new Query(queryPrologue), sparql, null, null);

try(QueryExecution queryExec = QueryExecutionFactory.create(query, dataset)) {
    // ...
}
于 2015-08-20T18:38:07.007 回答