问题标签 [rdf4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
820 浏览

sesame - 将大 RDF 文件加载到 Sesame

我正在尝试基于 Sesame 创建一个 SPARQL 端点。我安装了 Tomcat、PostgreSQL,并部署了 Sesame 的 Web 应用程序。我创建了一个基于 PostgreSQL RDF 存储的存储库。现在我需要将一个大的 ttl 文件(540M 三元组,文件大小为几 GB)加载到存储库中。通过 Workbench 加载大文件不是一个好的解决方案 - 这需要几天时间。加载数据的最佳非编程解决方案是什么?是否有像“控制台”这样的工具来加载数据?例如,Virtuoso 有用于批量加载的 isql 工具...

0 投票
1 回答
308 浏览

lucene - RDF4J rdf lucene 配置

一段时间以来,我一直在尝试配置我的 sesame RDF 存储库(目前称为 RDF4j),以便使用全文查询。

我没有找到关于此配置的太多文档,我认为我需要创建一个模板文件,以便可以在控制台中使用它。这是有关该主题的小信息https://groups.google.com/forum/#!topic/rdf4j-users/xw2UJCziKl8

有人知道有关使用 Lucene 配置 RDF4j 的任何信息吗?任何线索将不胜感激。否则,我会考虑将整个存储库更改为另一个,例如 virtuoso。

提前致谢,

0 投票
0 回答
338 浏览

sparql - RDF4J Workbench:为什么一个 SPIN 构造函数非常慢?

我为这篇文章的长度道歉。我试图使这个缓慢的规则问题可重现。

我正在使用 TopBraid Composer FE 创建一个带有本体和 SPIN 构造函数的 RDF 文件。SPIN 构造函数的目的是检查本体中定义的类的个体实例化的合规性。我发现 SPIN 构造函数的执行速度很慢,我想知道为什么。

包括 SPIN 构造函数的本体 SXXIComplianceCheck18.rdf

我修改/清除我的存储库(一个支持 RDFS+SPIN 的内存存储)并将这个本体加载到 RDF4J 工作台中:RDF4J 工作台系统信息

在此处输入图像描述

在此处输入图像描述

接下来,我依次使用两个 SPARQL 更新查询来创建本体(上面的 RDF 文件)中定义的类的个体,从而刺激运行 SPIN 构造函数。

第一个 SPARQL 更新查询(实例化单个数据项并根据需要调用解析构造函数......运行速度很快):

第二个 SPARQL 更新查询(实例化将第一个查询实例化的数据项联系在一起并运行合规性检查构造函数的提案......在我的计算机上运行非常缓慢,大约 20 秒):

第二个查询需要很长时间才能执行,大约 20 秒。这与其他合规性检查(未包含在此 RDF 中)不一致。我已将这条规则从其他 13 条类似规则(主要是字符串解析和比较)中分离出来,因为它支配了时间消耗。

(正确但延迟的)结果:

在此处输入图像描述

有问题的 SPIN 构造函数(用于sxxicc:Pub7Proposal类):

为什么此构造函数在现代 PC 上运行如此缓慢(AMD 四核 2.3 GHz,运行 Windows 8,具有 16 GB 物理内存并且没有显着的额外应用程序加载)?其他构造函数在同一台机器上快速运行,并使用相同的事实做明显相似的事情。

这是执行此示例的 Jave VisualVM 采样器输出:

在此处输入图像描述

RDF4J org.eclipse.rdf4j.common.concurrent.locks.LockManager$1.release() 和 org.eclipse.rdf4j.common.concurrent.locks.LockManager.createLock() 支配着 Self Time。为什么??我可以做些什么来重写我的规则以避免这种时间消耗?

笔记:

  1. WHERE 子句的第一个三元组在 SPIN 构造函数中不是必需的,因为 ?this 是自动设置的。但是,我包含它是为了通过将此构造函数复制到工作台中的 SPARQL 查询 (Explore/Query) 中来简化调试。我还发现将 CONSTRUCT 子句替换为“SELECT DISTINCT *”很方便,同时保留 WHERE 子句以进行构造函数调试。
  2. 此构造函数中 WHERE 子句的唯一目的是提供图形模式匹配,以显示 CONSTRUCT 子句中存在的固定错误消息的错误条件。没有绑定从 WHERE 子句转移到 CONSTRUCT 子句中,但 WHERE 子句仍然控制 CONSTRUCT 子句中三元组的断言。

更新

我通过从构造函数中删除一个 FILTER 和关联的三元组来修改构造函数:

这导致在 TBC FE 中显示如下构造函数:

在此处输入图像描述

使用相同的 2 个 SPARQL 更新查询运行相同的测试,第二个查询的执行时间非常非线性地减少,从超过 20 秒减少到不到 2 秒。同样,这似乎不正确。

0 投票
0 回答
273 浏览

java - 如何分析 RDF4J 服务器的执行?

正如我在另一篇文章中指出的那样,我遇到了一些 SPIN 构造函数花费过多时间来执行非常有限的数据的问题。我想我会采取不同的方法,看看我是否可以分析构造函数的执行情况,以深入了解他们在哪里花费了过多的时间。

如何分析 RDF4J 服务器下构造函数的执行情况?我正在通过 SPARQL update ( INSERT DATA) 查询进行实例化。这是 RDF4J 工作台上的系统信息:

RDF4J 工作台总结

我尝试使用 来分析运行 RDF4J 服务器的 Tomcat 服务器jvisualvm.exe,但我并没有获得太多见解。理想情况下,我想深入到 RDF4J 中的类/方法级别,以便我可以针对我的执行缓慢问题发布更详细的帮助请求,或者可能修复我的查询以提高自身效率。

下面是 Java Visual VM 的版本:

Java Visual VM 版本信息

RDF4J 在 Apache Tomcat 8.5.5 下运行:

在此处输入图像描述

我可以看到有关 Tomcat 的概述信息:

在此处输入图像描述

我还可以看到监视器选项卡和线程:

在此处输入图像描述

在此处输入图像描述

但是,我真正想看到的是分析器,这样我就可以看到我的慢查询在哪里花费了这么多时间。因为我没有为 Java 1.8 校准探查器,所以这挂在 Calibration 上。

在此处输入图像描述

这种尝试连接的盒子将无限期地持续下去。取消它会导致执行校准消息,该消息实际上没有做任何事情,并且是一个死胡同,需要杀死 Java VisualVM。

在此处输入图像描述

在杀死 Java Visual VM 并重新启动并查看 Options-->Profiling-->Calibration Data 后,我看到只有 Java 7 有校准数据。

在此处输入图像描述

我曾尝试将 Tomcat 切换到在 Java 7 上运行,并且确实有效:

在此处输入图像描述

探查器确实提出了 Tomcat:

在此处输入图像描述

但是,当我在 Tomcat 在 Java 7 上运行时尝试访问 RDF4J 工作台时,我无法让工作台运行:

在此处输入图像描述

所以,我还是卡住了。看起来 RDF4J 要求 Tomcat 在 Java 1.8 下运行,而不是 1.7。我无法在 Java 1.8 下进行分析。

我已经看到其他关于 Java VisualVM 问题的帖子,但一个适用的解决方案似乎是在开发环境(例如 Eclipse)中启动所有内容,并在目标代码在 Java 1.8 下运行时在调试器断点处动态调用分析器. 我没有准备好使用 Tomcat 和 RDF4J 来做到这一点,并且需要指针。我的目的不是成为 Tomcat 或 RDF4J 贡献者(因为我的任务不允许这样做......我不会因为时间得到报酬),而是要具体处理我的 SPIN 构造函数花费了这么长时间( s) 在 RDF4J 服务器类方面,然后向 gitub 上的 RDF4J 开发者社区寻求帮助。

可以绕过 Java VisualVM 校准吗?我可以在某处加载校准文件或目录供 Java VisualVM 使用,而不是尝试测量失败的校准数据吗?我只对类的相对 CPU 负载感兴趣,而不是绝对指标,我不需要与其他机器上的测量值进行比较。

谢谢。

0 投票
2 回答
1433 浏览

graphdb - GraphDB sparql 端点通过 sesame / rdf4j SPARQLRepository 接口不可用

我们正在使用 RDF4J(以前称为 sesame)框架对远程 GraphDB 三元存储运行 sparql 查询。

这通过 rdf4j HTTPRepository 接口成功工作,该接口采用 Graphdb 服务器的 URL 和存储库 ID,但在使用 rdf4j SPARQLRepository 接口时失败,该接口将 sparlq 端点 url 作为参数。

在运行查询时,我们在查询验证中遇到异常

“获取服务器协议失败;此服务器上没有此类资源:http:///sparql?sparql?queryLn=SPARQL&query=",

http://<host:port>/sparql我们认为sparql 端点的 url 在哪里。这发生在 sesame 2.7.8 和 rdf4j M3 库中,同样发生在两个“开箱即用”上,即从启动脚本开始,安装 graphdb free 6.6.2 和 7.0.3。尝试通过 rdf4j SPARQLRepository 接口连接到 sparlq 端点http://factforge.net/sparql时也会发生这种情况,我们知道它在 graphdb 上运行。

我们认为实际的 sparql 端点的 url 可能不是 http:///sparql 而是我们在 graphdb 文档中找不到的其他东西。欣赏任何人可能照亮的任何灯。

编辑:针对 Factforge 的 sparql 端点执行的代码:

生成以下异常:

谢谢您的帮助

0 投票
1 回答
211 浏览

java - 如何检查 SPARQL 查询是 Java 中的查询还是更新?

我需要在 Java 应用程序中解析 SPARQL 和 SPARQL 更新查询。我试图通过使用 rdf4j 库来做到这一点。这个库提供了解析查询的可能性(例如 QueryParserUtil.parseQuery(...) 或 SyntaxTreeBuilder.parseQuery(...))和解析更新的可能性(例如 QueryParserUtil.parseUpdate(...) 或 SyntaxTreeBuilder.parseUpdateSequence(... ))。但是没有一种方法可以同时解析它们。因此我需要弄清楚查询字符串是代表查询还是更新。

当更新字符串应用于 parseQuery() 方法时,会引发 ParseException。反过来也是如此。当然,如果抛出异常,总是可以尝试其他方法。但这将是一种糟糕的编程风格。

rdf4j库中有没有可以用来检查queryString代表更新还是简单查询的方法?

如果没有,是否有其他解决方案来解析更新和查询?

0 投票
1 回答
99 浏览

lucene - RDF / lucenesail 错误:org.openrdf.query.QueryEvaluationException:java.util.ConcurrentModificationException

我们在 90% 的 rdf 查询中使用http://www.openrdf.org/contrib/lucenesail#搜索。我想看看是否有人知道如何修复文件/sesame-data/openrdf-sesame/logs/main.log 中的错误“org.openrdf.query.QueryEvaluationException: java.util.ConcurrentModificationException”。当错误发生时,紧随其后的是 rdf 服务器 CPU 使用率迅速升高,rdf 服务器无响应并且需要重新启动服务器。它似乎是随机发生的,与特定查询无关。我想知道该错误是否可能与使用 lucenesail 与 rdf 数据交互有关,因为直到将查询转换为 lucenesail 查询之后我们才看到这些错误。将感谢您的意见。感谢您的时间。这是一个完整的错误跟踪:

0 投票
1 回答
553 浏览

sparql - RDF4J 是否支持 GeoSPARQL?

我正在使用 RDF4J 工作台:

虽然我可以在 github 上的 RDF4J 存储库中看到对 GeoSPARQL 的引用,但目前似乎还没有实现。我在已清除的“支持 RDFS+SPIN 的内存存储”存储库上运行了此 SPARQL 更新查询,以在 RDF4J 工作台上设置测试:

这会产生一个包含一个事实的存储库。

现在我尝试使用以下查询查找与文字多边形的重叠,该查询应该找到我在上面设置的一个事实:

这个查询给出了一个错误结果作为我已经呈现的 HTML:

在此处输入图像描述

这似乎表明

  1. 我在设置这个测试时做错了什么(如果是,那是什么?)或者

  2. RDF4J 不支持 GeoSPARQL(至少不支持 geof:sfIntersects 函数)

1 和/或 2 还是别的什么?

谢谢。

0 投票
2 回答
112 浏览

sesame - 应用程序可以直接针对 GraphDB 的底层 RDF4J 数据库进行编程吗?

根据GraphDB 文档,可以直接针对其底层 RDF4J 数据库进行编程。两个独立的应用程序可以同时访问相同的数据库文件,这违背了我的直觉。这是否正确处理,包括并发写入?

我相信 GraphDB 使用的是较旧的 Sesame 2.9 版本。文件格式是否随着最新的 RDF4J 2.1 版本而改变?还是我需要改用这个较旧的 Sesame 版本?

我假设,如果以上所有内容都是正确的,那么与 HTTP 连接相比,会有很大的性能提升。是否有任何测试结果可以支持这一点?

0 投票
1 回答
82 浏览

sesame - Sesame 和 RDF4J 自定义服务器数据位置

我有一个运行 openrdf-sesame 环境的 Tomcat 实例。默认情况下,我的 openrdf-sesame 数据库配置和数据的位置在 %APPDATA%\aduna。我正在尝试将这些数据的保存位置更改为 C:\aduna 之类的自定义内容。我已经查看了在线文档,但它没有指定这是在某个配置文件中定义的还是硬编码的位置。我还看到 RDF4J 是 openrdf-sesame 的新替代品?如果我能达到指定数据保存位置的结果,我不介意升级。有任何想法吗?