【问题标题】:Good SPARQL query to find all triples with a resource as subject or object良好的 SPARQL 查询以查找所有以资源为主题或对象的三元组
【发布时间】:2023-04-01 20:15:01
【问题描述】:

我需要在 DBpedia 上找到 http://dbpedia.org/resource/Benin 是主语或宾语的所有三元组。此查询以最适合我的格式提供我想要的输出(只有三个变量,没有空格):

PREFIX : <http://dbpedia.org/resource/>
SELECT * WHERE {
?s ?p ?o
FILTER (?s=:Benin OR ?o=:Benin)
}

如果我有这个查询,我会得到类似的结果:

PREFIX : <http://dbpedia.org/resource/>
SELECT * WHERE {
{:Benin ?p ?o}
UNION
{?s ?p :Benin}
}

但是,后者的格式是关闭的。它首先给我po 输出留下s 空白,然后sp 留下o 空白。此外,第一个查询需要更多时间来执行。如果您能解释这两个查询的工作原理以及输出为何存在差异,我将不胜感激。

【问题讨论】:

  • OR 在 SPARQL 中拼写为 ||
  • @AndyS 是的,但是 dbpedia 的后端大师似乎并不在意,尽管我无法在源代码级别找到确认。

标签: sparql semantic-web linked-data


【解决方案1】:

但是后者的格式是关闭的

这是因为这两个查询与SELECT * 一起具有不同的结果集。联合加入元组,但由于某些元组缺少部分,因此您会得到倾斜的输出。

您可以通过明确列出和选择变量来解决问题:

PREFIX : <http://dbpedia.org/resource/>
SELECT ?s ?p ?o WHERE {
   {
       ?s ?p ?o
       FILTER (?s=:Benin)
   }
   UNION 
   {
       ?s ?p ?o .
       FILTER (?o=:Benin)
   }
}

请注意,这在 dbpedia 上仍然比 OR 过滤器快得多。

当元组匹配两个过滤器表达式(即:Benin ?p :Benin)时,联合将返回重复项。 SELECT DISTINCT 会以额外的成本解决这个问题,而且由于看起来该问题不存在,因此我省略了它以提高性能。

另外,第一个查询需要更多时间来执行。

没有EXPLAIN() 的结果很难说,但我的第一个猜测是相等过滤器使用索引,而OR 过滤器使用全表扫描。 Virtuoso 不会 seem to generate good query plans 用于嵌套过滤器。

【讨论】:

    【解决方案2】:

    Try this --

    PREFIX : <http://dbpedia.org/resource/>
    DESCRIBE  :Benin
    

    -- 或者只是--

    DESCRIBE  <http://dbpedia.org/resource/Benin>
    

    您可以在各种其他序列化中获取输出,包括N-triples

    【讨论】:

    • 这很漂亮:-)
    • 你能演示一下如何选择序列化格式吗?
    • 另外,这是关于 SPARQL 1.1 官方文档中的 DESCRIBE 的:“DESCRIBE 表单返回单个结果 RDF 图,其中包含有关资源的 RDF 数据......描述由查询服务确定。”鉴于此,我们是否可以假设 DBpedia 通过 DESCRIBE 提供有关资源的所有信息(尤其是当结果具有超过 2k 个三元组时)。
    • 公共 DBpdia 端点具有跨所有功能的结果集大小限制。如果你想要无限的结果,你需要追求authenticated access,或get your own instance。由于各种原因,DESCRIBE 输出可能与您开始使用的SELECT 不完全匹配;对此的跟进可能最好带到Virtuoso Users mailing list
    • 序列化格式可以通过 SPARQL 提交表单上的菜单(目前是最完整的列表)选择,或者在 SPARQL 查询中使用&amp;format= URL 参数或the define output:format pragma
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2017-04-12
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多