正在分析SPARQL查询中AltLabel的返回



在以下这样的Wikidata SPARQL查询中,我希望能够为?placeOfBirthAltLabel的返回使用自定义分隔符。

问题是?placeOfBirthAltLabel下的一些值包含逗号

例如。"纽约"的同义词包括"美国纽约"作为一个条目。

但是,由于返回是以逗号分隔的,因此这个条目将被解析为两个单独的字符串。

所以换句话说,我需要的回报是[美国纽约;纽约;美国纽约],而不是[美国纽约,纽约,纽约]

SELECT ?item ?itemLabel ?placeOfBirthLabel ?placeOfBirthAltLabel 
WHERE
{
?item wdt:P106 wd:Q10833314.
OPTIONAL { ?item wdt:P19 ?placeOfBirth }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
LIMIT 100

谢谢!

您不需要解析替代标签。它们的值由标签服务连接。只是不要使用标签服务的替代标签:

SELECT ?item ?itemLabel ?placeLabel ?place_alt_label WHERE { 
?item wdt:P106 wd:Q10833314. 
OPTIONAL { 
?item wdt:P19 ?place .
OPTIONAL {
?place skos:altLabel ?place_alt_label .
FILTER (lang(?place_alt_label)='en')
}
}  
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

试试看!

如果你还想解析。。。逗号是硬编码的,使用分组和带有自定义分隔符的GROUP_CONCAT

SELECT ?item ?itemLabel ?placeLabel
(GROUP_CONCAT(?place_alt_label; separator='; ') AS ?4) WHERE { 
?item wdt:P106 wd:Q10833314. 
OPTIONAL { 
?item wdt:P19 ?place .
OPTIONAL {
?place skos:altLabel ?place_alt_label .
FILTER (lang(?place_alt_label)='en')
}
}  
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
GROUP BY ?item ?itemLabel ?placeLabel

试试看!


小心标签服务所投影的变量。例如,

SELECT ?item ?itemLabel ?placeLabel   {...}
GROUP BY ?item ?itemLabel ?placeLabel

应该起作用,而

SELECT ?item ?itemLabel (SAMPLE(?placeLabel) AS ?3)   {...}
GROUP BY ?item ?itemLabel

不应该。

最新更新