【发布时间】:2020-12-13 07:56:33
【问题描述】:
我在 Property Function docs 之后使用 Jena ARQ 实现了一些自定义函数 SPARQL。这些函数使用模型处理本地数据集:
Model model = ModelFactory.createDefaultModel();
model.read(new FileInputStream("data/data.ttl"), null, "TTL");
Query query = QueryFactory.create(queryString) ; // the queryString contains a custom property function defined with Jena
try (QueryExecution qexec = QueryExecutionFactory.create(query, model)) {
...
}
但是,我需要将这些属性函数应用于对我的 Graphdb 存储库上的数据集的查询,因此我尝试使用 Jena 将程序连接到 GraphDB。
我已尝试关注Using GraphDB with Jena,但它似乎已过时且无法实施,因为 SailRepository.initialize();已弃用,并且 SesameDataset 不再存在来初始化我的模型。
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import com.ontotext.jena.SesameDataset;
...
RepositoryConnection connection = repository.getConnection();
// finally, create the DatasetGraph instance
SesameDataset dataset = new SesameDataset(connection);
我也尝试过 Jena 的 RDFConnection,但它不适用于我的自定义函数,因为没有模型后端来应用查询。
谁能告诉我在哪里可以找到要导入的 SesameDataset,或者是否有其他方法可以使用自定义函数查询 GraphDB 的存储库?
【问题讨论】:
-
您在 Jena 中实现的自定义 SPARQL 函数确实无法在 GraphDB 上运行,因为 GraphDB 必须知道这些函数,因为查询字符串只是简单地发送到 GraphDB,它评估查询并返回结果集标准 SPARQL 响应格式。两个选项:a) 使用 RDF4J,这也意味着你必须重新实现你的东西并将 JAr 放在 GraphDB 类路径中或 b) 使用 Javascript 函数:graphdb.ontotext.com/documentation/free/…
-
非常感谢您的帮助!我绝望地寻找耶拿的解决方案,不必重新实现我所有的自定义功能,但无论如何我似乎必须这样做。我会按照你的建议试试看。祝你有美好的一天!
-
这与通信无关——这是标准的 SPARQL 协议。该问题提到了“属性函数”,它们保留在 SPARQL 语法中,但属于三重模式匹配的一部分,并提供设置变量和提供多个匹配项的能力。
-
@AndyS 我不确定你的评论是否理解,你能澄清一下吗?我正在寻找一种方法来使用我用 Jena 编写的属性函数在 GraphDB 上进行查询。
-
过滤器的自定义函数和自定义属性函数是不同的东西。 Jeen 正在谈论过滤器功能。在这两种情况下,自定义代码都在查询引擎内执行,并且代码将是特定于引擎的。
标签: java dataset sparql jena graphdb