使用SPARQL重复输出结果

时间:2013-08-23 15:56:33

标签: sparql semantic-web owl

我是语义网概念的新手,我有一个基于语义网的文凭工作。在我的OWL本体论中,我以下列方式定义了这些人:

<Announce rdf:ID="Ann1" ...>
  <...>
  <...>
  <requiredTechnologies>
    <Technology rdfs:resource="tech1"/>
  </requiredTechnologies>
  <requiredTechnologies>
    <Technology rdfs:resource="tech2"/>
  </requiredTechnologies>
</Announce>
...

基本上,有些属性只对特定个人出现一次,但属性&#34;所需技术&#34;可以在一个记录中多次使用(对于一个人)。所以,当我运行SPARQL查询,选择所有数据(我使用Jena)时,我得到了这个输出:

=====================================
| "Ann1"      | ... | ... | "tech1" |
| "Ann1"      | ... | ... | "tech2" |
| "Ann2"      | ... | ... | "tech3" |
| "Ann3"      | ... | ... | "tech4" |
| "Ann3"      | ... | ... | "tech5" |
| "Ann3"      | ... | ... | "tech6" |
| ...         | ... | ... | ...     |
=====================================

多个&#34; requiredTechnologies&#34;属性存在多出一次。我的问题是如何在一行中获得属于给定个体的所有技术(如下所示):

===================================================
| "Ann1"      | ... | ... | "tech1, tech2"        |
| "Ann2"      | ... | ... | "tech2"               |
| "Ann3"      | ... | ... | "tech4, tech5, tech6" |
| ...         | ... | ... | ...                   |
===================================================

SPARQL中是否有办法获取列表中的multiple属性?或任何其他解决方法?

1 个答案:

答案 0 :(得分:3)

是的,将GROUP BY子句与GROUP_CONCAT聚合一起使用。

以下是一个通用示例,您应该能够轻松地适应您的数据模型:

SELECT ?s (GROUP_CONCAT(?value ; SEPARATOR = ",") AS ?values)
WHERE
{
  ?s <http://somePredicate> ?value .
}
GROUP BY ?s