3

私はセマンティック Web の概念は初めてで、セマンティック Web に基づいた卒業証書を持っています。私の OWL オントロジーでは、次の方法で個体を定義しました。

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

基本的には、ある個人に対して一度しか現れない特性もありますが、「必要な技術」という特性は、1つのレコード(個人に対して)で複数回使用することができます。したがって、SPARQL クエリを実行してすべてのデータを選択すると (Jena を使用)、次の出力が得られます。

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

複数の「requiredTechnologies」属性が存在するレコードが複数回表示されます。私の質問は、特定の個人に属するすべてのテクノロジーを 1 行で取得する方法です (次のようなものです)。

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

SPARQL でリスト内の複数の属性を取得する方法はありますか? または他の回避策はありますか?

4

1 に答える 1

3

はい、句を集計GROUP BYと組み合わせて使用​​します。GROUP_CONCAT

一般的な例を次に示します。データ モデルに簡単に適応できるはずです。

SELECT ?s (GROUP_CONCAT(?value ; SEPARATOR = ",") AS ?values)
WHERE
{
  ?s <http://somePredicate> ?value .
}
GROUP BY ?s
于 2013-08-23T16:30:54.587 に答える