SPARQL-当对象为URI时返回标签,当对象为文字时返回字符串

SPARQL-当对象为URI时返回标签,当对象为文字时返回字符串,sparql,Sparql,当对象是URI时,我想获取对象的标签(rdfs:label)。但是,当对象是文本字符串时,我还希望获取字符串值。问题是,我事先不知道对象存储的是文本还是URI,在某些情况下,我会看到文本和URI的混合,就像所附的图像一样 关于如何返回字符串,以及如果有对象,如何返回rdfs:label,有什么建议吗 谢谢你的帮助 首先,这个问题不应该出现在理想情况下,因为属性应该是对象属性或数据类型属性 但是,在处理低质量数据时,我建议采取以下解决方法: SELECT ?x ?desc { ?x dbp:k

当对象是URI时,我想获取对象的标签(rdfs:label)。但是,当对象是文本字符串时,我还希望获取字符串值。问题是,我事先不知道对象存储的是文本还是URI,在某些情况下,我会看到文本和URI的混合,就像所附的图像一样

关于如何返回字符串,以及如果有对象,如何返回rdfs:label,有什么建议吗


谢谢你的帮助

首先,这个问题不应该出现在理想情况下,因为属性应该是对象属性或数据类型属性

但是,在处理低质量数据时,我建议采取以下解决方法:

SELECT ?x ?desc
{
 ?x dbp:keyPeople ?y.
 {?y rdfs:label ?desc. FILTER(isIRI(?y))} UNION
 {BIND(STR(?y) AS ?desc). FILTER(!isIRI(?y))}
}
警告 这没有经过彻底的测试。我只能在使用Virtuoso 08.03.3319的DBpedia Live上验证它是否正常工作。在默认的DBpedia端点上
https://dbpedia.org/sparql
在Virtuoso版本07.20.3235上,它似乎无法正常工作。此外,您需要取消选中“严格检查无效变量”和
“严格检查多个子句中使用的变量名,但变量名之间没有逻辑连接”。

我想知道,尽管OP中有sparql标记,但为什么没有语法突出显示,StackOverflow不支持sparql语法吗?因为它使用的是不包含sparql的Google prettify,所以没有sparql语法。最接近的是SQL语言。我还将使用另一个查询,mae是否使用了SPARQL 1.1的更多功能:
SELECT?x desc{x dbp:keypeomen?y。可选的{y rdfs:label?l}BIND(COALESCE(?l,?y)as?desc)}
如果只需要英语且词汇形式足够,甚至更好:
SELECT?x desc{x dbp:keyPeople?y.可选{y rdfs:label?l filter(langmatches(lang(?l),“en”)}BIND(str(COALESCE(?l,?y))as?desc)}
@UninformedUser:您的解决方案听起来比我的方法更优雅,谢谢!我不知道COALESCE。谢谢你们!使用@UninformedUser的第二个解决方案。