如何解决如何构建 N-hop SPARQL (virtuoso) 查询,该查询返回从提供的主题实体开始的所有路径1-N 跳?
我正在尝试基于给定的主题实体构建自由库的子图,因为查询完整的自由库所花费的时间太耗时。
我第一次尝试构建 3 跳子图如下:
wiremockServer.Given(Request.Create()
.WithPath("/some/thing")
.UsingGet())
.InScenario("MyScenario")
.WhenStateIs("Something")
.WillSetStateto("Started")
.RespondWith(
Response.Create()
.WithStatusCode(500)
.WithBody("Error"));
这不起作用,因为它忽略了距离主题实体最多 1 跳和 2 跳的所有路径。
我的下一次尝试如下:
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0,?e1,?r1,?e2,?r2,?e3 WHERE
{
ns:m.034rd ?r0 ?e1.
?e1 ?r1 ?e2.
?e2 ?r2 ?e3.
}
这也不起作用,尽管我承认不知道为什么或者我是否正确使用了 OPTIONAL 标签。
在构建单个 SPARQL 查询失败后,我尝试迭代查询 freebase,并以此构建图形。我尝试了两件事:
(1):
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0,?e3 WHERE
{
ns:m.034rd ?r0 ?e1.
OPTIONAL{
?e1 ?r1 ?e2.
}
OPTIONAL{
?e2 ?r2 ?e3.
}
}
和
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0,?e1 WHERE
{
ns:m.034rd ?r0 ?e1.
}
和
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0,?e2 WHERE
{
ns:m.034rd ?r0 ?e1.
?e1 ?r1 ?e2.
}
我曾假设这样做会为我提供源自主题实体的所有路径(1-、2- 和 3-跳跃)。
(2) :
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0,?e3 WHERE
{
ns:m.034rd ?r0 ?e1.
?e1 ?r1 ?e2.
?e2 ?r2 ?e3.
}
其中 e0 最初设置为主题实体。随后对初始查询返回的每个 e1 运行上述查询。此过程重复 3 次(3-Hops)。
我仍然无法找到构建子图的正确方法,任何帮助将不胜感激。
解决方法
根据评论,我会在这里给出一些建议。提出的问题不适合特定答案。 OpenLink Community Forum 通常比 StackOverflow 更适合深入了解 Virtuoso 等特定产品。
首先,也是最重要的一点,请确保您运行的是最新版本的 Virtuoso,无论是 Open Source Edition (a/k/a VOS),now 7.2.6.1 还是 Enterprise/Commercial Edition (a/k/a VEE or VCE),now 8.3+,两者均于 2021 年 7 月发货。
接下来,查看 basic Performance Tuning settings,并确保将 Virtuoso 设置为按预期使用尽可能多的 RAM 和其他系统资源——因为默认设置旨在最小化 Virtuoso 对系统的负载,不最大化查询或其他性能。
然后,服务器端超时 MaxQueryExecutionTime
在 Virtuoso INI 文件的 [SPARQL]
部分设置为 discussed in the product documentation。 注意:此超时对通过 iSQL 会话运行的 SPARQL 查询没有影响(它只需要您在前面加上 sparql
关键字,并在您将通过 sparql
表单运行 SPARQL 查询;例如,sparql SELECT ?s ... ORDER BY ?s ;
)。
还有一些额外的 Anytime Query settings 可能与针对您的部署调整此功能相关。
如果这些提示不够充分,OpenLink Community Forum 应该是您寻求帮助的下一个停靠点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。