这是关于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 )
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这会返回所有解决方案,而我只想要一个解决方案
ent_type
----------
wd:Q811979
wd:Q386724
wd:Q811430
wd:Q7696957
Run Code Online (Sandbox Code Playgroud)
您可以使用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)
}
Run Code Online (Sandbox Code Playgroud)