1

我正在做一些搜索,并了解更多关于 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").
}

这给了我这些结果:

在此处输入图像描述

预期结果是:

在此处输入图像描述

4

1 回答 1

5

在第一次阅读您的问题时,我将回答您可以SELECT将查询更改为SELECT DISTINCT(使用DISTINCT修饰符)以删除重复的结果。但是,查看您的结果集,我实际上没有看到任何重复的答案。每一行似乎都是唯一的。?xs和all的值?ys恰好相同,但是 和 的组合?z使?Souhaite行不同。您的结果本质上是 product { xs1 } × { ys1 } × { z1, z2, z3 } × { S1, S2, S3 },并且不包含任何重复项。

我只是更仔细地查看了查询和您显示的结果,并且存在一些差异。例如,您的结果有一个名为的变量,?xs但您的查询不使用这样的变量。我会假设?x应该是?xs. 此外,变量名?xs?ys?z?Souhaite根本不是很具描述性。当我们不知道它们在结果中扮演什么角色时,很难谈论这些。

关于您期望的结果,?xs并且?ys确实应该为每一行绑定。例如,您想要的结果的第二行有 a?z和 a ?Souhaite,但没有?xsand ,但如果没有相应的and ,?ys它们可能没有任何意义,对吗?因此,我不会尝试解决这些列在您的第二行和第三行中为空白的问题;它们不应为空。?xs?ys

在您的预期结果中,您已删除包含许多?z/?Souhaite组合的行,例如"Besoins …" "Schemas …""Volume …" "Fourchette …"。这些出现在结果中是因为它们在您的数据中。如果您需要帮助清理您的数据以使这些数据不存在,我们将需要查看您的数据,并了解它的来源。

于 2013-05-25T15:29:37.957 回答