[英]I want to return a result in SPARQL only if a property exists and has a specified value
我有一個貓頭鷹本體,我認為如果Zone
元素具有相關聯的Mission
並且該Mission
被tasked
任務,那么它就會被tasked
。
我本體中的Zone
類: http://myontology/Zone
http://myontology/hasMission
其中目標是http://myontology/Mission
http://myontology/label
Mission
類: http://myontology/Mission
http://myontology/tasked
我想知道某個特定Zone
是否有任務。 這意味着它具有hasMission
對象屬性,並且目標Mission
具有值為true
的tasked
數據屬性。
我試過類似的東西:
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
變量保持真實,即使沒有與Zone
關聯的Mission
,例如:
----------------------
| 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
無關,則查詢將不會返回任何結果。
看來這個查詢解決了我的問題,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
}
}
我想是因為我原來的try里面兩個OPTIONAL是分開的,所以引擎分開看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.