如何统计DBpedia中非空rdfs:label属性数量?空值查询返回0
解决DBpedia非空rdfs:label统计问题
问题根源
你使用isBlank(?o)查询空值却返回0,核心原因是isBlank()仅匹配空白节点(Blank Node),而DBpedia中rdfs:label的属性值均为字面量(Literal),不存在空白节点类型的label值。若存在空值,也只会是空字符串字面量,而非空白节点。
正确统计方案
方案1:直接过滤空字符串统计非空值
直接筛选出非空的label并计数:
SELECT (COUNT(*) AS ?nonNullLabelNum) WHERE { ?s rdfs:label ?o . FILTER(?o != "") }
方案2:总数减去空字符串数量
先获取label总数,再统计空字符串label的数量,两者差值即为非空数量:
SELECT (?total - ?empty AS ?nonNullLabelNum) WHERE { { SELECT (COUNT(*) AS ?total) WHERE { ?s rdfs:label ?o } } { SELECT (COUNT(*) AS ?empty) WHERE { ?s rdfs:label ?o . FILTER(?o = "") } } }
额外说明
DBpedia的rdfs:label属性设计中,绝大多数资源都会附带至少一个非空的多语言label,因此空字符串label的数量可能极少甚至为0,此时两种方案的统计结果会与总数基本一致。
内容的提问来源于stack exchange,提问作者amine4392
相关产品推荐
相关产品推荐

