我遇到SPARQL问题。我想从类别中选择一些东西。例如科目。我在http://dbpedia.org/snorql中进行了类似的查询。
SELECT ?category ?subject WHERE
{
?category a skos:Concept .
?category skos:Concept: American_punk_rock_guitarists.
?category dct:subject ?subject .
} LIMIT 1000
我有错误Virtuoso 37000.我不明白为什么。
P.S。对于SPARQL中的初学者来说它是否是好书 - 学习SPARQL,第2版 使用SPARQL 1.1查询和更新?
答案 0 :(得分:2)
您至少有一个语法错误:第二个三元组中的第二个冒号(:)。
语义上......我真的不知道dbpedia中的类或谓词......但是skos:概念既可以是类型也可以是谓词?
我写了一个有效查询,返回“American_punk_rock_guitarists”类别的10个成员
我把这个放在一起,转到dbpedia's faceted free text search并熟悉American punk rock guitarists的概念,特别是Joey Ramone
prefix dbpcat: <http://dbpedia.org/resource/Category:>
SELECT ?subject ?category
WHERE
{ values ?category { dbpcat:American_punk_rock_guitarists } .
?subject dct:subject ?category }
LIMIT 10
答案 1 :(得分:0)
就Virtuoso 37000错误而言,您的错误如下:
您在第2行的 skos:Concept 后面有:,并且您错过了&#34; American_punk_rock_guitarists&#34;的前缀。
American_punk_rock_guitarists 应该是 dbpcat:American_punk_rock_guitarists 。虽然这会给你一个空结果,但语法正确的版本或你的查询是:
prefix dbpcat: <http://dbpedia.org/resource/Category:> SELECT ?category ?subject WHERE { ?category a skos:Concept . ?category skos:Concept dbp:catAmerican_punk_rock_guitarists. ?category dct:subject ?subject . } LIMIT 1000
由于以下原因,它返回一个空集:
一个。 skos:概念是一个类,而不是属性。就{?Subject?Predicate?Object}而言,您只能在适当的SPARQL查询中看到skos:Concept作为?Subject和/或?Object [1]。区分类和属性的一种简单方法是,类应该以大写字母开头(例如: skos:Concept ),属性(谓词)应该以小写字母开头(例如:的rdf:类型强>)
湾 dbpcat:American_punk_rock_guitarists 属于&#34; skos:Concept&#34;。如果你查看这个实体的DBPedia页面(?subject),你会在&#34; rdf:type&#34;中看到这个。行。进一步观察,你会发现这个概念是各种其他实体的 dct:subject [2]。
除了@Mark Miller的查询之外,这个还将提供结果:
prefix dbpcat: <http://dbpedia.org/resource/Category:>
SELECT ?subject ?category
WHERE
{ ?subject dct:subject ?category.
?category a skos:Concept.
filter(?category = dbpcat:American_punk_rock_guitarists).
}
LIMIT 10
链接: