2012-09-07 2 views
3

챌린지SPARQL에서 두 개 이상의 리소스를 집계 할 수 있습니까?

제 트리플 스토어에는 전자 메일 자원 유형이 있습니다. 해당 전자 메일 유형의 리소스에는 보낸 사람과받는 사람이 하나 이상 있습니다.

"A-> B"는 "A는 B가 수신자 중 하나 인 전자 메일의 발신자입니다"로 정의하십시오.

이제 다음을 알고 싶습니다. A 사람이 몇 번이나 B 사람에게 전자 메일을 보냈습니까? A와 B의 역할은 중요합니다. 즉 A -> B는 B -> A와 다릅니다.

가능한 모든 짝이 질문에 대답하기 위해

, 나는이 SPARQL (1.1) 쿼리 작성 쿼리 잘못된 SPARQL :이 작동하지 않습니다

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 및/또는 GROUP BY 절을 변경했지만 성공하지 못한 다른 변형을 시도했습니다.

둘 이상의 자원에 대한 집계가 허용되는지 확실하지 않습니다. SPARQL 1.1 docs 및 관련 SO 질문 (Counting in SPARQL)에서 하나의 리소스를 기반으로하는 집계 만 발견했습니다.

마지막으로 여기 내 질문입니다. 보낸 사람과받는 사람을 합산하는 것이 가능합니까?

답변

4

(COUNT(?sender ?recipient) AS ?count)(COUNT(?e) AS ?count)으로 바꾸어보십시오.

귀하의 기준에 맞는 이메일 수 (?e)를 계산하기 때문에 효과가 있습니다.