Wikidata é um projeto internacional da Fundação Wikimedia que almeja ser o maior banco de dados livres, da mesma forma que a Wikipédia se tornou a fonte mais popular de conhecimento do mundo.
Wikidata é uma base de conhecimento livre e aberta que pode ser editada tanto por humanos quanto por máquinas. O Wikidata atua como um repositório central para os dados estruturados de seus projetos irmãos, como a Wikipédia, o Wikivoyage, o Wikcionário, o Wikisource, entre outros.
O Wikidata também oferece suporte a muitos sites e serviços além dos projetos Wikimedia! O conteúdo do Wikidata está disponível sob uma licença livre, pode ser exportado em formatos padronizados e interconectado a outros bancos de dados abertos na internet.
Wikidata/dados ligados entre si explicados
O Wikidata é um repositório central que consiste principalmente de itens. Um item é uma coisa, uma entidade, um conceito. Pode ser um objeto, uma pessoa, um evento, um lugar, uma obra de arte, mas também pode ser um conceito mais abstrato como amor ou socialismo. Itens são identificados exclusivamente pela letra Q, seguida de um número.
Por exemplo, o item Q17738 representa o filme “Star Wars” de 1977. Cada item também possui um rótulo, que é o nome principal que lhe foi dado em um determinado idioma. Isso permite que a informação básica necessária para identificar o assunto do qual o item trata possa ser traduzida sem favorecer um idioma em particular.
Rótulos não precisam ser únicos. Por exemplo, Star Wars (Q462) representa a série de filmes, livros e outras mídias que formam o universo Star Wars. Já Star Wars (Q54317) representa o videogame lançado em 1983. A descrição de um item no Wikidata é uma frase curta cujo intuito é distinguir itens com rótulos iguais ou semelhantes. Descrições também não precisam ser únicas; múltiplos itens podem ter a mesma descrição. Entretanto, dois itens não podem ter, simultaneamente, o mesmo rótulo e a mesma descrição.
Para aprender como usar o Wikidata Query Service, você primeiro precisará entender a estrutura do Wikidata. Isto é, qual a cara de um banco de dados ligados entre si.
Neste tutorial, muitos exemplos se baseiam nos dados apresentados nesta tabela:
A tabela acima é um pequeno conjunto de dados, ou dataset, que organiza informações sobre os filmes da saga Star Wars. Nela, encontramos alguns dos atributos ou propriedades de cada um dos filmes: título, diretor, duração (em minutos), e a bilheteria acumulada (em dólares). Se você está habituado(a) com Excel ou SQL, esta forma de visualização dos dados deve ser familiar. Entretanto, o Wikidata não é um banco de dados armazenados em tabelas, como esta mostrada acima, mas de dados armazenados no formato de dados ligados entre si, ou linked data. O que isso significa?
Em um modelo de linked data, os dados da primeira linha da tabela acima seriam representados como neste gráfico:
O Wikidata, que usa o formato de dados interligados entre si, armazena as informações na forma de declarações (ou statements). Declarações, previamente conhecidas como triplas de “sujeito, predicado e objeto”, seguem uma estrutura de Item – Propriedade – Valor.
Por exemplo, a declaração “O céu é da cor azul” é composta por:
(1) um sujeito (“O céu”);
(2) um predicado (“é da cor”);
(3) um objeto (“azul”).
De forma semelhante, “Star Wars Episódio IV: Uma Nova Esperança foi dirigido por George Lucas” é composta por (1) um sujeito/Item (“Star Wars Episódio IV: Uma Nova Esperança”), (2) um predicado/Propriedade (“foi dirigido por”) e um objeto/valor (“George Lucas”).
Você pode pensar em cada linha da tabela acima como sendo um Item, os títulos das colunas como Propriedades, e as células da tabela como Valores.
Outra forma de descrever esses dados é através de declarações. Por exemplo, para o primeiro item da tabela, os dados podem ser descritos pelas seguintes declarações:
Item
Propriedade
Valor
Q17738
título
Star Wars Episódio IV: Uma Nova Esperança
Q17738
diretor
George Lucas
Q17738
duração
121 minutes
Q17738
bilheteria
775398007
Declarações descrevem características detalhadas de um item, e consistem em pares de propriedade-valor, como “diretor: George Lucas” ou “duração: 121 minutos”). Propriedades no Wikidata são representadas por um P seguido de um número. Por exemplo, a propriedade “diretor” é P57. O valor desta propriedade para o item Q17738 (Star Wars Episódio IV: Uma Nova Esperança) é George Lucas, que também possui um item próprio – Q38222.
Nem todos os valores são itens. Por exemplo, o valor para a propriedade “duração” (P2047) para o item Q17738 é 121 minutos.
Algumas propriedades podem ter valores que não sejam itens. Por exemplo, o valor da propriedade “duração” (P2047) para o item Q17738 é ‘121 minutos’, uma quantidade. O valor de “data de publicação” (P577) nos Estados Unidos é “25 de maio de 1977”, uma data. Outros tipos de dados comumente usados são strings (uma cadeia de caracteres, como textos ou códigos), coordenadas geográficas e textos monolinguais (uma string que não é traduzida para outros idiomas). O Wikidata possui 17 tipos de dados distintos no total, e você pode encontrar mais informações sobre eles aqui.
Esta é sua primeira consulta SPARQL. Esta simples consulta encontrará os filmes que são parte da saga Star Wars.
#Filmes Star Wars
SELECT ?item
WHERE
{
?item wdt:P179 wd:Q22092344.
}
Legenda de cores do WDQS
O WDQS usa uma legenda de cores para determinadas palavras em SPARQL, o que ajuda a entender e explicar o código SPARQL:
Cinza: A primeira linha da consulta tem uma hashtag (#) seguida por um texto na cor cinza. Isso indica que se trata de um comentário – algo que é escrito, mas que não vai afetar a consulta. Tudo o que estiver escrito após uma “#” é um comentário. Etse texto é sempre ignorado pelo WDQS – com exceção de alguns padrões que veremos nas seções a seguir.
Vermelho: as palavras SELECT e WHERE nas linhas 2 e 3 estão em vermelho e em letras maiúsculas. Elas são palavras “reservadas”, ou seja, palavras que são usadas apenas como sintaxe do SPARQL – são uma espécie de “comando”:
SELECT – com esse comando definimos os nomes das variáveis que serão retornadas e mostradas pela consulta.
WHERE – com esse comando fornecemos o padrão que será usado para selecionar os dados. Ou seja, definimos as condições para encontrar os valores referentes às variáveis indicadas na cláusula SELECT. Isso muitas vezes é feito na forma de “triplas” que refletem a estrutura de Item – Propriedade – Valor do banco de dados.
Verde: nas linhas 2 e 5, “?item” aparece na cor verde. Em SPARQL, os nomes de variáveis são sempre precedidos por um sinal de interrogação, e são exibidos em verde. Praticamente qualquer fragmento de texto, também chamado de “string”, pode ser um nome de variável (com a exceção das palavras reservadas para comando), como ?filme, ?x, ou ?qualquer_nome_de_variável. Variáveis guardam valores para uso futuro.
Azul: na linha 5, vemos alguns termos em azul. Isso indica que eles são prefixos. Prefixos são abreviações que permitem que as consultas SPARQL sejam apresentadas de forma mais compacta e transparente. Sem os prefixos, precisaríamos especificar a URL completa para cada elemento da consulta.
wdt: esse é um prefixo para indicar propriedades do Wikidata + o número da propriedade (P). Sem o prefixo, precisaríamos nos referir a esta propriedade como: <http://www.wikidata.org/prop/direct/>:P179
wd: esse é um prefixo para indicar itens do Wikidata + o QID do valor. Sem o prefixo, precisaríamos inserir antes do QID toda esta URL:<http://www.wikidata.org/entity/>:Q22092344
Explicação da consulta
Agora veremos como a consulta funciona.
Uma consulta SPARQL geralmente é composta por duas ou mais cláusulas, que são partes da consulta com funções distintas. Nossa consulta SPARQL simples é composta por duas cláusulas:
A cláusula SELECT
O termo significa “selecionar”, em português. Esta cláusula lista as variáveis que você quer que sejam retornadas na consulta – neste caso, a variável ?item. Basicamente, esta linha diz: “Nós vamos encontrar alguns valores para guardar em ?item, e depois vamos apresentar esses valores”.
A cláusula WHERE
O termo significa “onde” em português. A cláusula especifica as condições para as variáveis, geralmente na forma de triplas. SPARQL funciona sob a lógica de reconhecimento de padrões. O processador SPARQL faz a correspondência entre os padrões que você define dentro da cláusula WHERE e as declarações de três partes armazenadas no Wikidata. A cláusula WHERE diz ao processador quais valores de propriedade devem ser usados para preencher as variáveis que se está SELEC(T)ionando, e como ele deve obter essas informações.
Esse padrão básico de consulta SPARQL reflete a estrutura de Item-Propriedade-Valor do banco de dados ligados entre si. O padrão a ser reconhecido na nossa consulta é fornecido como uma declaração: ?item – tem a propriedade: série – com valor: Star Wars (série de filmes).
Ou seja, esta consulta seleciona itens do Wikidata: (1) que tem a propriedade “série” (P179), e (2) que o valor para esta propriedade seja “Star Wars (série de filmes)” (Q22092344). Note que, se você colocar seu cursor sobre o prefixo ou seu elemento associado, a interface do WDQS mostra o rótulo e a descrição daquele item ou propriedade.
Aperte o botão “Play” para rodar a consulta e desça a barra de rolagem para ver os resultados.
A consulta recupera o número Q de cada um dos filmes da saga Star Wars listados no Wikidata, mas não seus títulos. A seguir, você vai aprender como recuperar os títulos dos filmes.
Itens no Wikidata são identificados por um número Q exclusivo. Cada item também tem um rótulo que representa o nome principal que lhe foi dado em um determinado idioma. A consulta a seguir recupera os filmes de Star Wars e os seus nomes.
#Filmes Star Wars
SELECT ?item ?itemLabel
WHERE
{
?item wdt:P179 wd:Q22092344.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}
Explicação da consulta
Na cláusula SELECT, estão declaradas duas variáveis: ?item e ?itemLabel. Label representa uma expressão especial: ela se refere ao rótulo do item que é especificado pelo nome da variável. Portanto, se chamarmos nossa variável de ?x, a variável para encontrar seu rótulo seria ?xLabel. Se o nome da variável fosse ?filme, a variável com seu rótulo seria ?filmeLabel, e assim por diante.
Na cláusula WHERE, podemos ver o mesmo padrão de seleção de antes: ?item wdt:P179 wd:Q22092344. Além disso, vemos em vermelho um comando SERVICE (“serviço”, em português), seguido de um texto em azul: wikibase:label { bd:serviceParam wikibase:language “[AUTO_LANGUAGE]”. }
Esse trecho de código é uma espécie de atalho para um serviço que recupera os rótulos de itens. Ou seja, se uma variável em SELECT tiver o nome ?NOMELabel, o WDQS vai recuperar o rótulo disponível para o item na variável ?NOME. Esse serviço especializado é muito útil porque sem ele seria necessário realizar queries SPARQL muito mais complexas para atingir o mesmo objetivo.
O que é o AUTO_LANGUAGE?
O termo significa “linguagem automática” em português. O idioma padrão para o WDQS é o inglês (neste tutorial o alteramos para português). É possível mudar esta configuração no canto superior direito da tela. Esta mudança de configuração afeta tanto a linguagem da interface do WDQS, quanto os rótulos que serão recuperados para os itens.
Rode a consulta. Mude o idioma na parte superior e depois a execute novamente.
Outra forma de escolher o idioma dos rótulos a serem recuperados é especificá-lo dentro do trecho de código SERVICE, ao invés de usar o “AUTO_LANGUAGE”.
Por exemplo: na consulta a seguir, os rótulos serão recuperados e apresentados em holandês (nl):
#Filmes Star Wars
SELECT ?item ?itemLabel
WHERE
{
?item wdt:P179 wd:Q22092344.
SERVICE wikibase:label { bd:serviceParam wikibase:language "nl". }
}
Nem sempre um item possuirá rótulo no idioma selecionado. Para contornar este problema, é possível especificar vários idiomas e a ordem de prioridade na qual os rótulos devem ser retornados. Por exemplo, a consulta a seguir recupera o rótulo em francês (fr), mas se não houver um rótulo em francês, ela apresentará o rótulo em alemão (de). Se também não houver um rótulo em alemão, o rótulo em italiano (it) será recuperado, e assim por diante.
#Filmes Star Wars
SELECT ?item ?itemLabel
WHERE
{
?item wdt:P179 wd:Q22092344.
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,de,it,es,no,pt". }
}
Pode ser difícil se lembrar do trecho de código do Wikidata Label Service. Felizmente, o WDQS oferece uma excelente solução para isso: a ferramenta de preenchimento automático. Na janela do WDQS, toda vez que você pressionar Ctrl + Espaço (ou Alt + Enter), em qualquer ponto da sua consulta, um menu suspenso (também conhecido como “drop-down”) irá aparecer para você com sugestões de trechos de código que podem ser úteis. Use as setas “para cima” ou “para baixo” do seu teclado para encontrar a opção desejada e pressione “enter” para selecioná-la.
Por exemplo: ao invés de escrever todo o comando abaixo,
SERVICE wikibase:label { bd:serviceParam wikibase:language “[AUTO_LANGUAGE]”.}
você pode digitar SERV, apertar Ctrl + Espaço, e vai ver que dentre as primeiras sugestões a aparecer no menu suspenso estará exatamente o trecho de código acima. É só apertar Enter para aceitar a sugestão. Você também pode alterar o código para recuperar rótulos em um idioma específico.
A ferramenta de preenchimento automático também pode procurar por números Q de itens ou números P de propriedades. Se você digitar um ou outro prefixo, como wd: para itens ou wdt: para propriedades e escrever um texto depois, Ctrl + Espaço vai procurar pelo texto digitado no Wikidata e sugerir itens ou propriedades.
Conforme explicado na introdução ao Wikidata, cada item no Wikidata tem um número Q exclusivo. Itens também têm um rótulo em um ou mais idiomas. Além disso, um item também pode ter uma descrição – uma frase curta em um idioma específico. Os rótulos de itens não são necessariamente únicos. A descrição dos itens no Wikidata é usada para distinguir itens que têm rótulos idênticos ou semelhantes. A descrição também não precisa ser única; entretanto, dois itens não podem ter o mesmo rótulo e a mesma descrição.
No WDQS, a expressão “Description” (que significa “descrição”, em português), assim como a expressão “Label”, é uma expressão especial. Ela é reservada para ser usada para recuperar a descrição daquele item que é especificado pelo nome da variável. Ou seja, se uma variável na cláusula SELECT for chamada ?NOMEDescription, então o WDQS vai recuperar o valor da descrição do item na variável ?NOME.
A consulta abaixo recupera os filmes da saga Star Wars, seus rótulos e suas descrições.
| Exercício: liste os itens, incluindo o rótulo e descrição, que são parte da série de filmes Harry Potter (Q216930)
Escreva sua consulta SPARQL na janela abaixo usando SELECT e WHERE.
Aperte o botão “Play” para rodar sua consulta.
Mostrar a resposta
Sua resposta pode não ser idêntica à nossa. Você pode ter usado outros nomes de variáveis, ou ter escolhido um idioma diferente para os rótulos. Não tem problema em ter pequenas diferenças; são os resultados que importam.
Conforme dito na introdução, o Wikidata armazena informações na forma de declarações que têm uma estrutura de Item-Propriedade-Valor.
Em nosso primeiro exemplo, nossa consulta devolveu itens do Wikidata que correspondiam ao nosso padrão de consulta: uma combinação específica de Propriedade e Valor, nomeadamente uma propriedade P179 (série) com o valor Q22092344 (saga de filmes Star Wars). Ou seja, a variável com o nome “item” juntou os itens do Wikidata que tivessem uma declaração que correspondesse ao padrão:
?item – tem a propriedade: série – com o valor: Star Wars (saga de filmes)
Neste caso, o item correspondente é retornado. Mas consultas não precisam necessariamente retornar a primeira parte (o item) de uma declaração.
Na consulta a seguir, a variável ?ator recupera valores da propriedade elenco (P161) do item Star Wars Episódio IV: Uma Nova Esperança (Q17738). Isto é, a variável recupera a terceira parte (o objeto) das declarações: