我主要在处理查询时使用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
上试用答案 0 :(得分: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 .
}
}
}
以上在您的终端上工作正常
答案 1 :(得分: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
}