我正在进行一些搜索,并且更多地了解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").
}
Run Code Online (Sandbox Code Playgroud)
这给了我这些结果:

预期结果是:

在第一次阅读您的问题时,我会回答您可以SELECT将查询更改为SELECT DISTINCT(使用DISTINCT修饰符)以删除重复的结果.但是,查看结果集,我实际上看不到任何重复的答案.每一行似乎都是唯一的.for ?xs和?ysall 的值恰好相同,但是行的组合?z和?Souhaite使行不同.您的结果基本上是产品{ xs1 } × { ys1 } × { z1, z2, z3 } × { S1, S2, S3 },不包含任何重复项.
我只是仔细查看了查询和您显示的结果,并且存在一些差异.例如,您的结果有一个名为变量,?xs但您的查询不使用这样的变量.我会假设?x应该是?xs.此外,变量名?xs,?ys,?z,和?Souhaite是不是很描述性的.当我们不知道他们在结果中扮演什么角色时,很难谈论这些.
关于您期望的结果,?xs并且?ys确实应该对每一行进行约束.例如,你想要的结果的第二行有a ?z和a ?Souhaite,但没有?xs和?ys,但是如果没有相应的,它们可能没有任何意义,?xs并且?ys正确吗?因此,我不会尝试解决第二和第三行中这些列为空白的问题; 他们不应该是空白.
在预期的结果中,您已删除包含许多?z/?Souhaite组合的行,例如"Besoins …" "Schemas …"和"Volume …" "Fourchette …".这些出现在结果中,因为它们在您的数据中.如果您需要帮助清理数据以便不存在这些数据,我们需要查看您的数据,并了解它的来源.