即使OPTIONAL与

时间:2016-03-04 16:12:39

标签: sparql rdf semantic-web owl ontology

这是我的数据

@prefix : <http://example.org/rs#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

:user1  :hasFirstName    "user1First".
:user1  :hasLastName    "user2Last".
:user1  :hasMobileNumber    "013434334".

:user2  :hasFirstName   "ania".
:user2  :hasLastName    "ania".

这是我的询问(让没有电话号码的所有人)

PREFIX : <http://example.org/rs#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?firstName ?lastName ?mobileNumber
{
  ?user :hasFirstName ?firstName.
  ?user :hasLastName    ?lastName.

  minus {?user :hasMobileNumber ?mobileNumber}
}

它非常好用。但是,我添加了一个这样的可选项:

PREFIX : <http://example.org/rs#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?firstName ?lastName ?mobileNumber
{
  ?user :hasFirstName ?firstName.
  ?user :hasLastName    ?lastName.
  optional {?user :hasMobileNumber ?mobileNumber}
  minus {?user :hasMobileNumber ?mobileNumber}
}

reuslt变为空,虽然它只是可选的,并且可选的不会影响查询的结果,因为两个用户都是结果(有和没有可选)

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

如果您查看文档,可以说明 minus 的作用,甚至是一个示例。

  

8.2 Removing Possible Solutions

     

SPARQL中提供的另一种否定风格是MINUS   评估它的两个参数,然后计算解决方案   左侧与解决方案不兼容   右手边。

在您的情况下,左侧,一旦您添加了可选 总是具有?user 的绑定,有时候绑定?mobileNumber 可选的结果,但没有减号,结果如下:

------------------------------------------------------
| user   | firstName    | lastName    | mobileNumber |
======================================================
| :user1 | "user1First" | "user2Last" | "013434334"  |
| :user2 | "ania"       | "ania"      |              |
------------------------------------------------------

现在,当减号可选都存在时,您将得不到任何结果。我假设您了解为什么 user1 被排除在外。但为什么 user2 被排除?

“左手”部分包括绑定

------------------------------------------------------
| user   | firstName    | lastName    | mobileNumber |
======================================================
| :user2 | "ania"       | "ania"      |              |
------------------------------------------------------

右手部分(减号中的部分)没有任何匹配项。这意味着所有左侧部分中的解决方案与兼容。这意味着,当你得到

  

左侧的解决方案与之不兼容   解决方案在右侧。

你得到 nothing ,因为左侧的所有解决方案都与右侧的解决方案“不兼容”。