2012-05-08 2 views
8

Это, как представляется, можно считать единым целым с использованиемКак запросить количество различных кортежей с помощью SPARQL 1.1?

(COUNT(DISTINCT ?x) as ?count) 

и для числа различных кортежей для всех переменных в запросе с помощью

(COUNT(DISTINCT *) as ?count) 

Однако, я не могу понять, как считать специфические (разные) кортежи. Что-то вроде

(COUNT(DISTINCT ?a ?b ?c) as ?count) 

, похоже, не работает. Я делаю это неправильно или это действительно не разрешено в SPARQL 1.1? Или он должен работать и просто не поддерживается в Sesame 2.6.0, который я использую для тестирования этого?

ответ

9

Добро пожаловать в StackOverflow!

Убедитесь, что промежуточный результат содержит только три переменные ?a ?b ?c, что вы заинтересованы в.

Один из способов сделать это является использование подзапроса. Подзапрос проектирует только три желаемые переменные. Что-то вроде этого:

SELECT (COUNT(*) AS ?count) { 
    SELECT DISTINCT ?a ?b ?c { 
     … 
    } 
} 

(я не уверен, поддерживает ли Сезам подзапросов.)

Другой способ просто чтобы убедиться, что запрос содержит только три переменные. Если вам нужно больше переменных внутри запроса, вы можете заменить их пустыми узлами. Пустые узлы в шаблонах диаграмм SPARQL работают как «анонимные переменные». Есть некоторые смешные проблемы с этим, хотя, поэтому подход подзапроса, вероятно, лучше.

+1

Просто чтобы подтвердить, что Sesame 2.6 поддерживает подзапросы. Возможно, обновление 2.6.5 может быть хорошей идеей - в оценке подзапроса с 2.6.0 появилось несколько исправлений. –

+0

Спасибо, это похоже на хороший трюк для этого. Как вы сказали, Сезам разрешает подзапросы, так что это будет выполнимо. Ваш ответ также, по-видимому, подразумевает, что, действительно, определение языка SPARQL не позволяет явно формулировать это внутри выражения count? – Johsm

+0

Вы не можете иметь более одной переменной внутри 'COUNT'. Это 'COUNT (*)' или 'COUNT (? Var)', с опциональным 'DISTINCT'. – cygri

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