Почему мой запрос SPARQL дублирует результаты?

Я занимаюсь поиском и узнаю больше о SPARQL, но это не так просто, как SQL. Я просто хочу знать, почему мой запрос дублирует результат и как это исправить. Это мой запрос SPARQL:

PREFIX OQ:<http://www.owl-ontologies.com/Ontology1364995044.owl#>

SELECT ?x ?ys ?z ?Souhaite
WHERE {
  ?y OQ:hasnameactivite ?x.
  ?y OQ:AttenduActivite ?Souhaite.
  ?y OQ:SavoirDeActivite ?z.
  ?y OQ:hasnamephase ?ys.
  ?y OQ:Activitepour ?v.
  ?ro OQ:hasnamerole ?nr.
  ?y OQ:avoirrole ?ro.
  FILTER regex (?nr ,"Concepteur").
  FILTER regex (?v,"Voiture").
}

Это дает мне следующие результаты:

введите здесь описание изображения

Ожидаемый результат:

введите здесь описание изображения


person user2420469    schedule 25.05.2013    source источник
comment
Было бы неплохо, если бы вы могли включить свою таблицу результатов в виде текста, а не изображения.   -  person Joshua Taylor    schedule 25.05.2013


Ответы (1)


При первом прочтении вашего вопроса я собирался ответить, что вы можете изменить SELECT в своем запросе на SELECT DISTINCT (используя DISTINCT модификатор), чтобы удалить повторяющиеся результаты. Однако, глядя на ваш набор результатов, я не вижу дублирующихся ответов. Каждая строка кажется уникальной. Значения для ?xs и ?ys оказались одинаковыми, но комбинации ?z и ?Souhaite делают строки разными. Ваши результаты по сути являются продуктом { xs1 } × { ys1 } × { z1, z2, z3 } × { S1, S2, S3 } и не содержат дубликатов.

Я только что внимательно изучил запрос и результаты, которые вы показываете, и обнаружил некоторые несоответствия. Например, в ваших результатах есть переменная с именем ?xs, но в вашем запросе такая переменная не используется. Я предполагаю, что ?x должно быть ?xs. Кроме того, имена переменных ?xs, ?ys, ?z и ?Souhaite совсем не информативны. Трудно говорить о них, когда мы не знаем, какую роль они играют в результате.

Что касается результатов, которые вы ожидаете, ?xs и ?ys действительно должны быть связаны для каждой строки. Например, во второй строке желаемых результатов есть ?z и ?Souhaite, но нет ?xs и ?ys, но они, вероятно, не имеют никакого смысла без соответствующих ?xs и ?ys, верно? Таким образом, я не буду пытаться решить проблему с пустыми столбцами во второй и третьей строках; они не должны быть пустыми.

В ожидаемых результатах вы удалили строки, содержащие много комбинаций ?z/?Souhaite, например "Besoins …" "Schemas …" и "Volume …" "Fourchette …". Они появились в результатах, потому что они есть в ваших данных. Если вам нужна помощь в очистке ваших данных, чтобы их не было, нам нужно будет увидеть ваши данные и узнать кое-что о том, откуда они взялись.

person Joshua Taylor    schedule 25.05.2013
comment
ожидаемый результат состоит в том, что xs & ys отображаются только один раз, а остальные отображаются без повторения xs & ys! - person user2420469; 25.05.2013
comment
В запросе, начинающемся с SELECT ?x ?ys ?z ?Souhaite, каждое решение (т. е. каждая строка результата) включает значение для каждой из переменных SELECTed. В вашем результате нет повторяющихся решений; каждая строка отличается от любой другой строки. Если вы добавите к своему вопросу пример ожидаемых результатов (например, в том же формате, что и результаты, которые вы фактически получили), мы сможем выяснить, какой тип запроса вы можете выполнить вместо этого. - person Joshua Taylor; 25.05.2013
comment
Хорошо, я добавил пример результатов - person user2420469; 25.05.2013
comment
@user2420469 user2420469 что касается вашего комментария, это не так просто, как SQL: SPARQL касается строк результатов, как и SQL. SQL также не позволит вам делать то, что вы хотите. :) - person Ben Companjen; 28.05.2013
comment
@Джошуа Тейлор, спасибо после того, как я узнал больше и поискал, я понимаю, что вы сказали большое спасибо - person user2420469; 26.06.2013