我有两个问题:
问题 1
第一个问题在 Stack 上有不错的文档,除了似乎没有其他人得到与我相同的结果,所以我认为让我在这里问它对每个人都有好处。当我运行以下查询时:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?person ?commonName ?nationality WHERE {
?person a dbpedia-owl:Person ;
dbpedia-owl:commonName ?commonName . FILTER(lang(?commonName) = 'en')
?person a dbpedia-owl:Person;
dbpedia-owl:birthDate ?birthDate
}
LIMIT 30
我得到这个人名单:
伟大的。现在我尝试删除重复项(例如 Abbas Suan,他以三种不同的语言出现了三次——我想保留英语)我这样做:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?person (SAMPLE(?commonName) as ?commonName) ?birthDate WHERE {
?person a dbpedia-owl:Person ;
dbpedia-owl:commonName ?commonName . FILTER(lang(?commonName) = 'en')
?person a dbpedia-owl:Person;
dbpedia-owl:birthDate ?birthDate
}
LIMIT 30
有了这些结果: 新的 SPARQL 结果
所以,在我看来,我有两个完全不同的人名单。我怎么知道我不会以这种方式失去人?我正在尝试下载具有某些属性的维基百科上的每个人,这是发布 2 的一个很好的赛格威。
问题 2
当我编写上面的代码时,它适用于这两个属性。但是,当我尝试添加国籍和 knownFor 属性(这样我们知道它们做了什么以及它们来自哪里)时,代码就会出错。尽管对于 DBPedia 结构中的 Person,所有这些属性都位于同一页面上。
此代码没有显示国籍和 knownFor 字段:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?person (SAMPLE(?commonName) as ?commonName) ?birthDate ?nationality ? knownFor WHERE {
?person a dbpedia-owl:Person ;
dbpedia-owl:commonName ?commonName . FILTER(lang(?commonName) = 'en')
?person a dbpedia-owl:Person;
dbpedia-owl:birthDate ?birthDate .
OPTIONAL {?person a dbpedia-owl:Person;
dbpedia-owl:nationality ?nationality .}
OPTIONAL {?person a dbpedia-owl:Person;
dbpedia-owl:knownFor ?knownFor .}
}
LIMIT 30
这些结果:
对任何问题的任何帮助都会非常有帮助!谢谢