簡體   English   中英

僅當屬性存在且具有指定值時,我才想在 SPARQL 中返回結果

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

我有一個貓頭鷹本體,我認為如果Zone元素具有相關聯的Mission並且該Missiontasked任務,那么它就會被tasked

我本體中的Zone類: http://myontology/Zone

  • 具有以下對象屬性: http://myontology/hasMission其中目標是http://myontology/Mission
  • 以及以下字符串數據屬性: http://myontology/label

Mission類: http://myontology/Mission

  • 具有以下布爾數據屬性: http://myontology/tasked

我想知道某個特定Zone是否有任務。 這意味着它具有hasMission對象屬性,並且目標Mission具有值為truetasked數據屬性。

我試過類似的東西:

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"  |
----------------------

如果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
}

因為在這種情況下,如果ZoneMission無關,則查詢將不會返回任何結果。

看來這個查詢解決了我的問題,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM