2016-11-01 7 views
0

Можно ли получить в одном запросе счетчик числа множественных отношений? напримерSPARQL подсчитывает количество отношений сразу

SELECT (COUNT(?friendid) as ?friends) (COUNT(?cousinid) as ?cousins) (COUNT(?sonid) as ?sons) 
WHERE 
{ 
    ex:person1 ex:friendOf ?friendid . 
    ex:person1 ex:cousinOf ?cousinid . 
    ex:person1 ex:fatherOf ?sonid . 
} 

Если сложный запрос с несколькими запросами требуется, это -в теории, курс- должен быть быстрее, чем выполнение различных ВЫБИРАЕТ?

+0

Я не думаю, что ваш запрос работает. Он вернет тот же номер для каждого отношения, которое я предполагаю. – AKSW

+0

Да, это то, что происходит ... и причина моего вопроса:) – user1156544

ответ

2

После запроса извлекает все предикаты и их номера:

`SELECT ?p (COUNT(?p) as ?pCount) WHERE { ex:person1 ?p ?o} GROUP BY ?p` 

Это один ограничивает предикаты (предложение AKSW в):

SELECT ?p (COUNT(?p) as ?pCount) WHERE { ex:person1 ?p ?o. VALUES (?p) {(:p1)}} GROUP BY ?p 

Вот пример:

SELECT ?p (COUNT(?p) as ?pCount) WHERE 
{ 
    <http://dbpedia.org/resource/Category:Museums_in_Italy> ?p ?o . 
    VALUES (?p) {(skos:altLabel) (owl:sameAs)} 
} 
GROUP BY ?p 

И вот результаты:

Results

+2

Кроме того, если он хочет ограничить свойства, то «VALUES? P (: p1: p2 ...)» может быть – AKSW

+0

Это хорошо работает с предложением VALUES! Благодаря! – user1156544

+0

Одна вещь - если я использую «VALUES? P (: p1: p2 ...)» и нет: например, p1, я всегда получаю счет «1» вместо «0», как и следовало ожидать. Я делаю что-то неправильно? – user1156544

Смежные вопросы