[英]SPARQL functions in CONSTRUCT/WHERE
我主要在處理查詢時使用 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
模板中使用表達式,但可以通過子查詢中的SELECT
表達式或使用BIND
在WHERE
子句中分配變量。
在您的情況下, 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 .
}
}
}
以上在您的端點上運行良好
在我同事的幫助下,我們開始工作, 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.