gpt4 book ai didi

java - 如何同时加载和查询 RDF

转载 作者:行者123 更新时间:2023-11-30 03:08:24 25 4
gpt4 key购买 nike

你能想到同时加载和查询 RDF 三元组的方法吗?

我只知道在 Sesame 中你必须首先初始化一个存储库(比如加载 rdf 文件),然后你才能通过 SPARQL 进行查询。

假设我们初始化一个 RDF 存储库(输入一个文件)并且不希望加载完成,但在加载 RDF 数据的同时,想要通过 SPARQL 查询数据以进行验证。

对于下面的初始化,应该等到存储库中的RDF文件加载完成(我的假设),然后您就可以查询存储库中的RDF数据:

File rdfFile; // parameter, RDF file.
repo = new SailRepository(new MemoryStore());
repo.initialize();

try {
RepositoryConnection con = repo.getConnection();
try {
con.add(rdfFile, null, rdfFormat);
} finally {
con.close();
}
}

在上面的代码中,RepositoryConnection.add 获取一个 File 作为参数。提供 FileInputStream 作为参数可以解决问题吗? (存储库的初始化不会等待加载文件,加载完成之前就可以查询)。

最佳答案

使用 FileInputStream 而不是 File 不会对 Sesame 处理文件的方式产生影响:add 方法仍然不会返回,直到完全添加数据。

但是,您可以通过在加载文件的单独线程中执行查询,然后使用隔离级别为 READ_UNCOMMITTED 的事务来实现您想要的目的。当然,在这种情况下,查询结果的完整性或一致性几乎无法保证,但技术上是可行的。

类似这样的东西(来 self 的头脑,未经测试):

   File rdfFile; // parameter, RDF file.
repo = new SailRepository(new MemoryStore());
repo.initialize();

Thead loader = new Thread() {
public void run() {
try (RepositoryConnection con = repo.getConnection()) {
con.add(rdfFile, null, rdfFormat);
}
}
};
Thead query = new Thread() {
public void run() {
try (RepositoryConnection con = repo.getConnection()) {
conn.begin(IsolationLevels.READ_UNCOMMITTED);
String query = "SELECT * WHERE ... ";
try(TupleQueryResult result = conn.prepareTupleQuery(query).evaluate()) {
while (result.hasNext()) {
...
}
}
conn.commit();
}
};
loader.start();
query.start();

关于java - 如何同时加载和查询 RDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com