簡體   English   中英

SPARQL-文字上的AND和OR過濾器

[英]SPARQL - AND & OR Filters on Literal

我試圖了解如何在結合AND和OR條件的情況下在SPARQL中進行過濾。

我試圖通過Wikidata查詢服務(query.wikidata.org)找到所有生活在牛頓一生中的物理學家。 這是我的查詢:

SELECT ?p1 ?p1Label ?p1t1 ?p1t2 ?p2 ?p2Label ?p2t1 ?p2t2
WHERE {
  FILTER (?p1=wd:Q935) .    # Newton
  ?p1 wdt:P569 ?p1t1 .      # date of birth
  ?p1 wdt:P570 ?p1t2 .      # date of death
  ?p2 wdt:P106 wd:Q169470 . # physicist
  ?p2 wdt:P569 ?p2t1 .      # date of birth
  ?p2 wdt:P570 ?p2t2 .      # date of death
  { FILTER (xsd:dateTime(?p2t1) > xsd:dateTime(?p1t1))
  . FILTER  (xsd:dateTime(?p2t1) < xsd:dateTime(?p1t2)) }
  UNION
  { FILTER (xsd:dateTime(?p2t2) > xsd:dateTime(?p1t1))
  . FILTER (xsd:dateTime(?p2t2) < xsd:dateTime(?p1t2)) }
  UNION
  { FILTER (xsd:dateTime(?p2t1) < xsd:dateTime(?p1t1))
  . FILTER (xsd:dateTime(?p2t2) > xsd:dateTime(?p1t2)) } .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
ORDER BY xsd:dateTime(?p2t1)

可以處理查詢,但不會產生任何結果。

三個{FILTER。 FILTER}塊在不使用其他塊的情況下可以正常工作。

我究竟做錯了什么?

{ FILTER (xsd:dateTime(?p2t1) > xsd:dateTime(?p1t1))
  . FILTER  (xsd:dateTime(?p2t1) < xsd:dateTime(?p1t2)) }

計算為空。

UNION不會將它們“或”在一起-- || 做到這一點。

UNION每個分支都是單獨的圖形模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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