我想编写一个 SPARQL 查询,该查询将根据姓名在 Wikidata 上的排名返回一个人的名字。
例如,假设我想要 Mozart (Chrysostom) 的第二个名字。
这是我到目前为止所拥有的(莫扎特维基数据 ID 是 Q254,名字的属性是 P735,P1545 给出了名字的序数位置):
SELECT DISTINCT ?full_name ?full_nameLabel ?first_nameLabel ?rank
WHERE
{
VALUES ?full_name {wd:Q254} .
?full_name p:P735 [pq:P1545 ?rank] ;
p:P735 [ps:P735 ?first_name] ;
FILTER regex(?rank, "2")
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
但是,这里的过滤器仅适用于rank
变量,而不适用于first_name
变量:
查询结果:
我认为问题出在rank
属性是属性的子元素这一事实first_name
。您知道按变量过滤first_name
变量的方法rank
吗?