这是有关Sparql和Wikidata的问题。
我想制定一个返回实例类型关系的查询,但是如果该查询不可用,则返回其子类。我试过了:

SELECT DISTINCT  ?ent_type  WHERE {

 { wd:Q7696957 wdt:P31 ?instanceof . } UNION
 { wd:Q7696957 wdt:P31/wdt:P279? ?subclass .  } UNION
 { wd:Q7696957 wdt:P279* ?subclass  . }

 BIND ( IF (BOUND (?instanceof), ?instanceof, ?subclass ) as ?ent_type  )


但是不幸的是,这返回了所有解决方案,而我只想要一个解决方案

ent_type
----------
wd:Q811979
wd:Q386724
wd:Q811430
wd:Q7696957

最佳答案

您可以使用coalesce实现此目的:

select distinct ?ent_type where {
  optional { wd:Q7696957 wdt:P31 ?direct }
  optional { wd:Q7696957 wdt:P31/wdt:P279? ?indirect }
  optional { wd:Q7696957 wdt:P279* ?ancestor }
  bind(coalesce(?direct, ?indirect, ?ancestor) as ?ent_type)
}

关于sparql - Sparql查询中的优先级属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36851647/

10-10 19:33