仅当 属性 存在且具有指定值时,我才想 return SPARQL 中的结果
I want to return a result in SPARQL only if a property exists and has a specified value
我有一个 owl ontology,我认为如果 Zone
元素具有关联的 Mission
并且此 Mission
是 tasked
.
我的ontology中的Zone
class:http://myontology/Zone
- 具有以下对象 属性:
http://myontology/hasMission
其中目标是 http://myontology/Mission
- 和以下字符串数据 属性:
http://myontology/label
Mission
class: 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 }
}
不幸的是,如果 ontology 中有一个任务任务,我总是对 ?tasked
变量为真,即使没有 Mission
与 [=16= 关联],例如:
----------------------
| 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
关联,我的查询将不会 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是分开的,所以引擎是分开看的。
我有一个 owl ontology,我认为如果 Zone
元素具有关联的 Mission
并且此 Mission
是 tasked
.
我的ontology中的Zone
class:http://myontology/Zone
- 具有以下对象 属性:
http://myontology/hasMission
其中目标是http://myontology/Mission
- 和以下字符串数据 属性:
http://myontology/label
Mission
class: 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 }
}
不幸的是,如果 ontology 中有一个任务任务,我总是对 ?tasked
变量为真,即使没有 Mission
与 [=16= 关联],例如:
----------------------
| 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
关联,我的查询将不会 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是分开的,所以引擎是分开看的。