【问题标题】:Duplicate output results with SPARQL [duplicate]使用 SPARQL 复制输出结果 [重复]
【发布时间】:2013-08-23 15:56:32
【问题描述】:

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

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

基本上,有些属性对于给定的个人只出现一次,但属性“所需技术”可以在一个记录中多次使用(对于一个人)。因此,当我运行 SPARQL 查询并选择所有数据(我使用 Jena)时,我会得到以下输出:

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

存在多个“requiredTechnologies”属性的记录不止出现一次。我的问题是如何在一行中获取属于给定个人的所有技术(类似这样):

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

SPARQL 中有没有办法在列表中获取多个属性?还是有其他解决方法?

【问题讨论】:

标签: sparql semantic-web owl


【解决方案1】:

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

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

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

【讨论】:

  • 感谢这么多@RobV,它就像魔术一样,这就是我所需要的!!!我很感激,它很有帮助......干杯!!!
猜你喜欢
  • 2012-10-22
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
相关资源
最近更新 更多