You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SPARQL查询schema.org ListItem属性返回0结果问题排查

问题分析与解决

你的查询返回0结果的核心问题是FILTER条件的类型不匹配:

  • schema:domainIncludes的对象是RDF资源(URI,比如schema:ListItem),而你在FILTER里把它和字符串字面量"http://schema.org/ListItem"做了比较,两者类型完全不同,自然匹配不到任何结果。

修正后的SPARQL查询

把FILTER里的字符串改成URI即可,有两种规范写法:

写法1:使用前缀引用

PREFIX schema: <http://schema.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?label
WHERE {
    ?s a rdf:Property ;
        schema:domainIncludes ?domain ;
        rdfs:label ?label .
    FILTER(?domain = schema:ListItem)
}

写法2:直接使用完整URI

PREFIX schema: <http://schema.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?label
WHERE {
    ?s a rdf:Property ;
        schema:domainIncludes ?domain ;
        rdfs:label ?label .
    FILTER(?domain = <http://schema.org/ListItem>)
}

补充说明

如果是动态生成URI字符串的场景,确实需要基于字符串对比,可以用str()函数把URI资源转换为字符串再比较,写法如下:

FILTER(str(?domain) = "http://schema.org/ListItem")

但这种写法不如直接引用URI规范,优先推荐前两种写法。

另外,你提到的TTL列表语法(逗号分隔多个对象)确实等价于多个独立的三元组,RDFlib会正确解析这种语法,所以这部分不是问题。

内容的提问来源于stack exchange,提问作者Neca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:12:41