gpt4 book ai didi

rdf - SPARQL 否定 : All foaf:Agents which aren't foaf:Persons

转载 作者:行者123 更新时间:2023-12-02 02:30:23 26 4
gpt4 key购买 nike

我正在尝试编写一个 SPARQL 查询,它应该为我提供所有不是 foaf:Personsfoaf:Agents

我找不到申请的方法 this OPTIONAL/BOUND construct对于这个问题,因为像 rdfs:subClassOf 和 rdf:type 之类的所有属性都是传递和自反的。

我尝试过这个:

SELECT * WHERE { 
?x rdf:type foaf:Agent
OPTIONAL { ?y rdf:type foaf:Person }
FILTER ( !BOUND(?y) ) }

但是 rdf:type 似乎是可传递的,至少对于 JENA/ARQ/SDB 是这样。

最佳答案

这不起作用的原因是您有两个独立的变量绑定(bind)(?x?y),它们在查询中不相关。因此 ?x 必须绑定(bind)出现在结果集中(这正是您想要的),但如果 ?y 未绑定(bind),则您还没有学到任何关于 的新内容>?x.

更新:在理想的查询中,根本不需要 ?y;您可以直接测试 ?x 的传入/传出边缘。当您想要检查给定变量绑定(bind)上是否不存在边时,这在 SPARQL 1.0 中很难(不可能?)。然而,SPARQL 1.1将为否定提供支持:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?agent
WHERE
{
?agent rdf:type foaf:Agent .
FILTER NOT EXISTS { ?agent rdf:type foaf:Person . }
}

@Kingsley Idehen 的方法(使用第三方 SPARQL 扩展)应该可以帮助您在短期内解决问题。

关于rdf - SPARQL 否定 : All foaf:Agents which aren't foaf:Persons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1615472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com