我是语义网概念的新手,我有一个基于语义网的文凭工作。在我的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属性?或任何其他解决方法?
答案 0 :(得分:3)
是的,将GROUP BY
子句与GROUP_CONCAT
聚合一起使用。
以下是一个通用示例,您应该能够轻松地适应您的数据模型:
SELECT ?s (GROUP_CONCAT(?value ; SEPARATOR = ",") AS ?values)
WHERE
{
?s <http://somePredicate> ?value .
}
GROUP BY ?s