gpt4 book ai didi

rdf - 无法让此 SPARQL 查询工作

转载 作者:行者123 更新时间:2023-12-02 08:47:11 25 4
gpt4 key购买 nike

好吧,我刚刚学习使用 SPARQL 从 dbpedia.org 查询数据,我正在使用 dbpedia 的 http://dbpedia.org/snorql/运行我的查询。我试图通过在三个字段中搜索相同的字符串来获取 MusicalArtists 列表,如下所示:

SELECT ?subject 
?artistRdfsLabel
?artistFoafName
?artistDbpedia2Name
WHERE {
?subject rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
OPTIONAL { ?subject rdfs:label ?artistRdfsLabel . }
OPTIONAL { ?subject foaf:name ?artistFoafName . }
OPTIONAL { ?subject dbpedia2:name ?artistDbpedia2Name . }
FILTER ( str(?artistRdfsLabel) = "Stevie Nicks" ||
str(?artistFoafName) = "Stevie Nicks" ||
str(?artistDbpedia2Name) = "Stevie Nicks" )
}
LIMIT 10

这是有效的,因为“Stevie Nicks”具有所有三个字段(rdfs:label、foaf:name、dbpedia2:name)。但是,当我尝试由另一位没有全部三个的音乐艺术家(例如“Depeche Mode”)查询时,我没有得到任何结果。

我尝试过各种方法,例如 BIND(COALESCE(?field,...,...) AS ?artistName) 来按 ?artistName 进行过滤,我也尝试过 UNION 但似乎没有任何效果。有人可以指出我的 SPARQL 方法的错误吗? :)

谢谢!杰森

最佳答案

好吧,我错过了无法使用 http://dbpedia.org/ontology/MusicalArtist 的 rdf:type 来选择“Depeche Mode”。 。这似乎有效:

SELECT ?subject 
?artistName
WHERE {
{
?subject rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
?subject rdfs:label ?artistName .
FILTER ( str(?artistName) = "Depeche Mode" )
}
UNION
{
?subject rdf:type <http://dbpedia.org/ontology/Band> .
?subject rdfs:label ?artistName .
FILTER ( str(?artistName) = "Depeche Mode" )
}
}

关于rdf - 无法让此 SPARQL 查询工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869089/

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