6

我在处理查询时主要使用 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 端点上试用它

4

2 回答 2

9

是的,这是可能的

您不能直接在CONSTRUCT模板中使用表达式,但可以WHERE通过SELECT子查询中的表达式或使用BIND.

在您的情况下,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 .
    }
  }
}

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

于 2015-02-10T09:11:15.167 回答
3

在我同事的帮助下,我们让它发挥作用,UNION而且GROUP BY是必不可少的。此查询将字符串中的所有字符串放在一起locah:ArchivalResource

CONSTRUCT
{
  ?archresource skos:hiddenLabel ?supertitle
}
WHERE
{
  SELECT ?archresource  (group_concat(?title ; separator = ", ") AS ?supertitle) WHERE {
    GRAPH ?graph {
      {
        SELECT ?title ?archresource WHERE {
          GRAPH ?graph {
            {
              ?archresource a locah:ArchivalResource ;
              dc:title ?title .
            } UNION
            {
              ?archresource dc:relation+ ?relation .
              ?relation dc:title ?title .
            }
          }
        }
      }
    }
  } GROUP BY ?archresource
}
于 2015-02-10T22:35:01.920 回答