SPARQL - AND & OR 字面上的过滤器

SPARQL - AND & OR Filters on Literal

我想了解如何在 SPARQL 中结合 AND 和 OR 条件进行过滤。

我试图通过维基数据查询服务 (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 不会 "or" 他们在一起——|| 会那样。

UNION 的每个分支都是一个单独的图形模式。