Consulta SPARQL básica

Filmes na saga Star Wars

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.

Adicionando rótulos

Serviço de rótulos

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.

Especificando o idioma de um rótulo

Escolhendo um ou mais idiomas para os rótulos

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". }
}


Preenchimento automático

Ferramenta de busca do WDQS

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.

Adicionando descrições

Como recuperar a descrição de um item

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: uma consulta simples

| 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.

Aperte o botão “Play” para rodar a consulta.

Recuperando os valores de declarações

Consultas recuperando o valor de uma declaração

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:

Dois ou mais padrões

Adicionando padrões

Até então, nossas consultas só tinham um padrão que precisava ser correspondido. Por exemplo, elas selecionam itens com uma propriedade P179 (série) com o valor Q22092344 (filme da saga Star Wars). Na consulta a seguir, há dois padrões que precisam ser identificados:

Esta consulta recupera quatro itens. Esses itens satisfazem ambas as condições, ou seja, há uma relação E entre os padrões:
?item wdt:P179 wd:Q22092344.
E
?item wdt:P57 Q38222.

# Um pouco de sintaxe

Aqui temos outra maneira de formular a consulta acima, usando um ponto e vírgula para unir as declarações:

#Filmes Star Wars

SELECT ?item  ?itemLabel 
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344; # item faz parte da saga de filmes Star Wars
        wdt:P57 wd:Q38222.     # item tem a propriedade diretor com o valor George Lucas
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

O ponto e vírgula (;) ao final da linha 6 une os dois padrões a serem reconhecidos. Logo, a variável ?item é omitida na linha 7.

Operador UNION

Reconhecimento de padrões usando a relação OU

Vimos na seção anterior que, se listarmos dois padrões a serem reconhecidos, eles terão uma relação E. Isto é, a consulta só vai retornar os itens que correspondam a ambas as condições. Se quisermos ter uma relação OU entre as condições, precisamos utilizar o operador UNION (“união”, em português). A consulta a seguir recupera itens que são partes das sagas de filmes Star Wars ou Star Trek.

Skip to content