仅当 属性 存在且具有指定值时,我才想 return SPARQL 中的结果

I want to return a result in SPARQL only if a property exists and has a specified value

我有一个 owl ontology,我认为如果 Zone 元素具有关联的 Mission 并且此 Missiontasked.

我的ontology中的Zoneclass:http://myontology/Zone

Mission class: http://myontology/Mission

我想知道某个 Zone 是否有任务。这意味着它有 hasMission 对象 属性,并且目标 Mission 有一个 tasked 数据 属性,值为 true

我试过类似的方法:

SELECT ?label ?tasked
WHERE {
  ?zone rdf:type myontology:Zone .
  ?zone myontology:label "ZoneName" .
  ?zone myontology:label ?label .
  ?mission rdf:type myontology:Mission .
  OPTIONAL { ?mission myontology:tasked ?tasked }
  OPTIONAL { ?zone myontology:hasMission ?mission }
}

不幸的是,如果 ontology 中有一个任务任务,我总是对 ?tasked 变量为真,即使没有 Mission 与 [=16= 关联],例如:

----------------------
| label | tasked |
======================
| "ZoneName" | "true"  |
----------------------

如果 ZoneMission 没有关联,我希望得到这种结果:

----------------------
| label | tasked |
======================
| "ZoneName" |   |
----------------------

我做错了什么?

注意我做不到:

SELECT ?label ?tasked
WHERE {
  ?zone rdf:type myontology:Zone .
  ?zone myontology:label "ZoneName" .
  ?zone myontology:label ?label .
  ?mission rdf:type myontology:Mission .
  OPTIONAL { ?mission myontology:tasked ?tasked }
  ?zone myontology:hasMission ?mission
}

因为在这种情况下,如果 Zone 没有与 Mission 关联,我的查询将不会 return 任何结果。

看来这个查询解决了我的问题,uninformeduser 是对的! :

SELECT ?label ?tasked
WHERE {
  ?zone rdf:type myontology:Zone .
  ?zone myontology:label "ZoneName" .
  ?zone myontology:label ?label .
  ?mission rdf:type myontology:Mission .
  OPTIONAL { 
   ?mission myontology:tasked ?tasked .
   ?zone myontology:hasMission ?mission 
  }
}

我觉得是因为在我原来的尝试中两个OPTIONAL是分开的,所以引擎是分开看的。