如何构建从提供的主题实体开始的 returns 所有路径(1-N 跳)的 N-hop SPARQL(virtuoso)查询?
How to build an N-hop SPARQL (virtuoso) query which returns all paths (1-N hops) starting from a provided topic entity?
我正在尝试基于给定的主题实体构建 freebase 的子图,因为查询完整的 freebase 所花费的时间太耗时了。
我第一次尝试构建 3 跳子图如下:
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.
}
这不起作用,因为它忽略了距主题实体最大 1 和 2 跳的所有路径。
我的下一次尝试如下:
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0, ?e1, ?r1, ?e2, ?r2, ?e3 WHERE
{
ns:m.034rd ?r0 ?e1.
OPTIONAL{
?e1 ?r1 ?e2.
}
OPTIONAL{
?e2 ?r2 ?e3.
}
}
这也没有用,虽然我不知道为什么,或者我什至不知道我是否正确使用了 OPTIONAL 标签。
在构建单个 SPARQL 查询失败后,我尝试迭代查询 freebase,并以此构建图形。我尝试了两件事:
(1):
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, ?e1, ?r1, ?e2 WHERE
{
ns:m.034rd ?r0 ?e1.
?e1 ?r1 ?e2.
}
和
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.
}
我原以为这样做会为我提供源自主题实体的所有路径(1、2 和 3 跳)。
(2) :
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0, ?e1 WHERE
{
e0 ?r0 ?e1.
}
其中 e0 最初设置为主题实体。接下来,对于初始查询返回的每个 e1,上述查询为 运行。这个过程重复了 3 次(3 步)。
我离找到构建子图的正确方法还差得很远,如果有任何帮助,我们将不胜感激。
根据大家的意见,我在这里给大家一些指点。所问的问题不适合特定的答案。 OpenLink Community Forum 通常比 Whosebug 更适合深入了解 Virtuoso 等特定产品。
首先,通常也是最重要的,请确保您运行正在使用最新版本的 Virtuoso,无论是 Open Source Edition (a/k/a VOS), now 7.2.6.1 or 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 应该是您寻求帮助的下一个停靠点。
我正在尝试基于给定的主题实体构建 freebase 的子图,因为查询完整的 freebase 所花费的时间太耗时了。
我第一次尝试构建 3 跳子图如下:
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.
}
这不起作用,因为它忽略了距主题实体最大 1 和 2 跳的所有路径。
我的下一次尝试如下:
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0, ?e1, ?r1, ?e2, ?r2, ?e3 WHERE
{
ns:m.034rd ?r0 ?e1.
OPTIONAL{
?e1 ?r1 ?e2.
}
OPTIONAL{
?e2 ?r2 ?e3.
}
}
这也没有用,虽然我不知道为什么,或者我什至不知道我是否正确使用了 OPTIONAL 标签。
在构建单个 SPARQL 查询失败后,我尝试迭代查询 freebase,并以此构建图形。我尝试了两件事:
(1):
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, ?e1, ?r1, ?e2 WHERE
{
ns:m.034rd ?r0 ?e1.
?e1 ?r1 ?e2.
}
和
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.
}
我原以为这样做会为我提供源自主题实体的所有路径(1、2 和 3 跳)。
(2) :
PREFIX ns:<http://rdf.freebase.com/ns/>
SELECT ?r0, ?e1 WHERE
{
e0 ?r0 ?e1.
}
其中 e0 最初设置为主题实体。接下来,对于初始查询返回的每个 e1,上述查询为 运行。这个过程重复了 3 次(3 步)。
我离找到构建子图的正确方法还差得很远,如果有任何帮助,我们将不胜感激。
根据大家的意见,我在这里给大家一些指点。所问的问题不适合特定的答案。 OpenLink Community Forum 通常比 Whosebug 更适合深入了解 Virtuoso 等特定产品。
首先,通常也是最重要的,请确保您运行正在使用最新版本的 Virtuoso,无论是 Open Source Edition (a/k/a VOS), now 7.2.6.1 or 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 应该是您寻求帮助的下一个停靠点。