Estou tentando consultar empresas que possuem identificadores do Linkedin, ISINS, LEIs ou sites em inglês. Quero apenas uma linha de dados por empresa, se possível.
Estou lutando com a última parte, acho que identifiquei com sucesso que só quero que sites em inglês sejam preenchidos, mas os URLs reais não estão sendo preenchidos no resultado.
SELECT DISTINCT ?item ?itemLabel ?linkedin ?isin ?lei ?website WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
{
SELECT DISTINCT ?item ?linkedin ?isin ?lei ?website WHERE {
?item wdt:P31 wd:Q4830453.
{
?item wdt:P4264 ?linkedin.}
UNION
{
?item wdt:P946 ?isin.}
UNION
{
?item wdt:P1278 ?lei.}
UNION
{
?item wdt:P856 ?statement0.
?statement0 p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] }
}
LIMIT 100
}
}
Os outros dados estão sendo preenchidos, mas não os sites. Também estou recebendo vários registros por empresa.
No que diz respeito a sites, observe que
está errado. Apenas use
?item p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] .
. Verifique Wikidata: tutorial SPARQL § Qualificadores para saber como consultar qualificadores.Sua consulta pode ser corrigida selecionando primeiro apenas
?item
ter pelo menos uma dessas instruções (usandoUNION
) e, em seguida, usandoOPTIONAL
para obter todas e somente as instruções que são realmente especificadas para cada uma?item
.A consulta resultante seria algo como:
Observe que:
GROUP_CONCAT
.LIMIT 100
na sua subconsulta você pode acabar com resultados incompletos (por exemplo, a mesma empresa pode ter tanto P4264 quanto P946, mas talvez apenas o primeiro ocorra nos 100 primeiros resultados). Para corrigir esse problema, você deve remover oLIMIT
comando.