rdf - SPARQL在CONSTRUCT/WHERE中的功能

标签 rdf sparql fuseki

我主要在为调试目的而处理查询时使用SPARQL SELECT,但最后我想以CONSTRUCT方式使用最终结果;因为我想使用图形而不是键/值查询结果。

我还没有得到(而且似乎无法在搜索引擎/文档中找到)的是我是否也可以那样使用函数。举例来说,我使用属性路径将标题合并成一个“超字符串”,以后将其用于构建Lucene索引以提高纯文本搜索质量:

PREFIX dc: <http://purl.org/dc/elements/1.1/>    

SELECT (group_concat(?title ; separator = " ") AS ?fancytitle) WHERE { 
  GRAPH ?graph {
    <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163>  dc:relation+ ?relation .
    ?relation dc:title ?title .
  }
}

现在我想拥有和新的三元组一样的?fancytitle
<http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> <fancytitle> ?fancytitle .

因此,我可以将其直接存储在新图中。这可能吗?我玩了一些查询,但无法设法使它被SPARQL处理器接受。仅供引用,我正在使用Fuseki。

你可以在我的SPARQL Endpoint上尝试一下

最佳答案

是的,这是可能的

您不能直接在CONSTRUCT模板中使用表达式,但是可以通过子查询中的WHERE表达式或使用SELECTBIND子句中分配变量。

在您的情况下,由于GROUP_CONCAT是一个聚合,它只能是SELECT表达式,因此您只需要将整个SELECT放在一个子查询中,例如

PREFIX dc: <http://purl.org/dc/elements/1.1/>    

CONSTRUCT
{
  <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> <http://fancyTitle> ?fancytitle
}
WHERE
{
  SELECT (group_concat(?title ; separator = " ") AS ?fancytitle) WHERE { 
    GRAPH ?graph {
      <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163>  dc:relation+ ?relation .
      ?relation dc:title ?title .
    }
  }
}

以上在您的端点上工作正常

关于rdf - SPARQL在CONSTRUCT/WHERE中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427219/

相关文章:

jena - 用 Fuseki、TDB 和命名图进行推理?

sparql - Mac 终端上的 Jena Fuseki 服务器

rdf - Protégé 中枚举的数据范围表达式

sparql - 扫描电镜 :sparql binding property path

php - 如何从使用 sparqllib 完成的查询中获取 SPARQL 的 ASK 答案?

java - 匹配至少有一个共同词的字符串

Jena 上的 OPTION(TRANSITIVE) 的 SPARQL 查询错误

sparql - 如何将模型检查逻辑查询转换为SPARQL查询?

java - Jena:如何获取多值属性的值?

rdf - 正确使用rdfs :subPropertyOf