SPARQL - 当对象是 URI 时返回标签,当对象是文字时返回字符串
SPARQL - Returning label when object is URI or string when object is Literal
当对象是 URI 时,我想获取对象的标签 (rdfs:label)。但我也想在对象是文字字符串时获取字符串值。问题是,我事先不知道对象存储的是文字还是 URI,在某些情况下,我看到文字和 URI 的混合,如附图所示。
关于如何 return 字符串的任何建议,如果有对象,return 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 上是否正常工作。在 Virtuoso 版本 07.20.3235 的默认 DBpedia 端点 https://dbpedia.org/sparql
上,它似乎无法正常工作。此外,您需要取消选中“严格检查 void 变量”和
“严格检查多个子句中使用的变量名,但彼此之间没有逻辑连接”。
当对象是 URI 时,我想获取对象的标签 (rdfs:label)。但我也想在对象是文字字符串时获取字符串值。问题是,我事先不知道对象存储的是文字还是 URI,在某些情况下,我看到文字和 URI 的混合,如附图所示。
关于如何 return 字符串的任何建议,如果有对象,return 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 上是否正常工作。在 Virtuoso 版本 07.20.3235 的默认 DBpedia 端点 https://dbpedia.org/sparql
上,它似乎无法正常工作。此外,您需要取消选中“严格检查 void 变量”和
“严格检查多个子句中使用的变量名,但彼此之间没有逻辑连接”。