3

チャレンジ

私のトリプルストアには、リソースタイプがEメールです。その電子メールタイプのリソースには、送信者と1人以上の受信者が割り当てられています。

「A->B」という表記を「Aは電子メールの送信者であり、Bは受信者の1人である」と定義します。

ここで、次のことを知りたいと思います。AさんがBさんにメールを送信した回数は?AとBの役割が重要であることに注意してください。つまり、A->BはB->Aとは異なります。

不正な形式のSPARQLクエリ

利用可能なすべてのペアリングについてこの質問に答えるために、私はこのSPARQL(1.1)クエリを作成しました。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX email: <http://example.com/schema/for/email/>

SELECT ?sender ?recipient (COUNT(?sender ?recipient) AS ?count)
WHERE {
  ?sender rdf:type foaf:Person.
  ?recipient rdf:type foaf:Person.

  ?e rdf:type email:Email.
  ?e email:sender ?sender.
  ?e email:recipient ?recipient.
}
GROUP BY ?sender ?recipient

これは機能しません。AllegroGraphはエラーを表示しますMALFORMED QUERY: Line 5, Found ?recipient (of type varname)-5行目がSELECT句です。SELECTやGROUPBY句を変更して、他のいくつかのバリアントを試しましたが、成功しませんでした。

複数のリソースでの集計が許可されているかどうかわかりません。SPARQL 1.1のドキュメントと関連するSOの質問(SPARQLでのカウント)では、1つのリソースに基づく集計のみが見つかりました。

最後に、私の質問です。送信者と受信者を集約することは可能ですか?

4

1 に答える 1

4

に置き換え(COUNT(?sender ?recipient) AS ?count)てみてください(COUNT(?e) AS ?count)

?e条件に一致する電子メール()の数をカウントしたいので、これは機能するはずです。

于 2012-09-08T09:13:18.603 に答える