在CONSTRUCT / WHERE SPARQL功能在CONSTRUCT / WHERE SPAR

2019-05-12 10:09发布

我主要使用SPARQL SELECT的查询工作调试目的,但最终当我想用最后的结果是在一个结构方式; 因为我想用一个图表,而不是键/值查询结果的工作。

我不明白,但(似乎并不能与搜索引擎/文档找到)是,如果我可以使用的功能以及这种方式。 举个例子,我使用了一个属性路径来连接标题我进入了“超弦”,这是我后来用于构建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处理器所接受。 仅供参考我使用定式。

你可以在我试一下SPARQL端点

Answer 1:

是的,这是可能的

您不能直接使用表达式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 .
    }
  }
}

上述工作在端点罚款



Answer 2:

我的同事的帮助下,我们得到它的工作, UNIONGROUP 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
}


文章来源: SPARQL functions in CONSTRUCT/WHERE