问题描述
我有一个猫头鹰本体,我认为如果Zone
元素具有关联的Mission
且这个Mission
是tasked
,则该元素将被分配任务。
本体中的Zone
类:http://myontology/Zone
- 具有以下对象属性:
http://myontology/hasMission
,其中目标是http://myontology/Mission
- 以及以下字符串数据属性:
http://myontology/label
Mission
类:http://myontology/Mission
- 具有以下布尔数据属性:
http://myontology/tasked
我想知道是否要对特定的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 }
}
不幸的是,如果在本体中只有一个任务任务,即使没有?tasked
与Mission
相关联,我总是对Zone
变量是正确的,例如: / p>
----------------------
| label | tasked |
======================
| "ZoneName" | "true" |
----------------------
如果Zone
与Mission
没有关联,我希望得到这样的结果:
----------------------
| 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
没有关联,查询将不会返回任何结果。
解决方法
此查询似乎解决了我的问题,uninededuser是正确的! :
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是分开的,所以引擎分开看它们。