Consulta com mais de uma variável

Consultas com mais de uma variável

Até então, nossas consultas basicamente tinham uma única variável, não considerando aquelas declaradas para o rótulo e/ou descrição do item. Agora vamos ver como fazer consultas com mais de uma variável. 
A consulta a seguir recupera itens que fazem parte da saga de filmes Star Wars e seus respectivos diretores.

#Filmes Star Wars

SELECT ?item  ?itemLabel ?diretor
WHERE
{
  ?item wdt:P179 wd:Q22092344. # item faz parte da saga de filmes Star Wars
  ?item wdt:P57 ?diretor.      # o valor da propriedade "diretor" de ?item será armazenado na variável ?diretor
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

Explicação da consulta

Na seção SELECT, temos as variáveis ?item e ?diretor, além de ?itemLabel e ?diretorLabel, usadas para armazenar os rótulos das variáveis correspondentes. 

Na seção WHERE, nas linhas 6 e 7, vemos os padrões que deverão ser correspondidos:
?item wdt:P179 wd:Q22092344.
?item wdt:P57 ?diretor.

O SPARQL procurará itens no Wikidata com declarações que correspondam aos padrões definidos na seção WHERE. Assim como nas outras consultas, a primeira linha da seção WHERE diz “Encontre itens que tenham uma declaração com a propriedade P179 (série) que tenham como valor Q22092344 (saga de filmes Star Wars).
A segunda linha diz “Agora encontre a propriedade P57 (diretor) de cada um desses itens, e a armazene na variável ?diretor”. 
Como vimos anteriormente, existe um E implícito entre cada declaração na seção WHERE. Isto é, apenas padrões que correspondam a todas as declarações serão devolvidos por esta consulta. 

Agora vamos rodar esta consulta:

O que precisa ser adicionado para vermos os nomes dos diretores? Adicione a informação que está faltando e rode a consulta novamente.

Ver a resposta

# Um pouco de sintaxe

Se quisermos que a consulta mostre o nome de cada diretor, mas não seu número Q, podemos omitir o ?diretor da seção SELECT, e declarar apenas ?diretorLabel. Isso implica que existirá uma variável ?diretor (que vemos na seção WHERE), mas que ela não será apresentada nos resultados da consulta.

Exercício: mais de uma variável

| Exercício: escreva uma consulta para mostrar o diretor e roteirista (P58) de cada filme na saga Star Wars.

Ver a resposta

Ou, usando uma sintaxe diferente, conforme vimos anteriormente:

A consulta que fizemos para listar os diretores de cada filme Star Wars retornou 9 resultados. Esta consulta retorna 16. Por quê?

Porque alguns dos filmes têm mais de um roteirista. Portanto, temos uma linha para cada roteirista.

Valores múltiplos

Propriedades com múltiplos valores

Ter vários valores para uma mesma propriedade não é um problema para um banco de dados como o Wikidata. Não há nada de errado em ter diversos valores para a mesma propriedade. Para algumas declarações – como os filhos de alguém, ou o idioma oficial de um país –, faz sentido existir mais de um valor. Basicamente, são pares adicionais de propriedade-valor.

Por exemplo, para o item Star Wars Episódio V: O Império Contra-Ataca (Q181795) a propriedade roteirista (P58) possui os seguintes valores:

Uma representação gráfica dessas informações:


Uma representação gráfica das propriedades diretor e roteirista e seus respectivos valores para o item Q181795 do Wikidata.

Outro exercício

| Exercício: mostre o diretor e o custo (P2130) de cada um dos filmes da saga Star Wars

ver a resposta

Ou, usando uma sintaxe diferente (veja a explicação aqui):

A consulta para recuperar os filmes da saga Star Wars e seus diretores retornou 9 resultados. Esta retorna apenas 8. Por quê? 

Porque um dos itens não tem a propriedade custo (P2130) e, portanto, é ignorado pela consulta.

A cláusula OPTIONAL

Valores ausentes e a cláusula OPTIONAL

Como vimos anteriormente, quando há mais de um padrão a ser reconhecido na cláusula WHERE, há uma relação E implícita entre as declarações, de tal modo que a consulta só devolverá padrões que correspondam a todas as declarações. Por exemplo, no último exercício, nós tivemos três padrões a serem correspondidos:

#Filmes Star Wars

SELECT ?item  ?itemLabel ?diretor ?diretorLabel ?custo
WHERE
{
  ?item wdt:P179 wd:Q22092344. # item faz parte da saga de filmes Star Wars
  ?item wdt:P57 ?diretor.      # o valor da propriedade "diretor" de ?item será armazenado na variável ?diretor
  ?item wdt:P2130 ?custo.      # o valor da propriedade "custo" de ?item será armazenado na variável ?custo
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

As declarações nas linhas 6, 7 e 8 tem uma relação E entre elas. Logo, um item só será considerado um resultado válido se ele tiver todas as três propriedades: P179 (série) com o valor Q22092344 (saga de filmes Star Wars), E P57 (diretor), E P2130 (custo). Se um item não corresponder a um desses requisitos (por exemplo, se o item não tiver uma propriedade sobre seu custo), ele será ignorado pela consulta.

O SPARQL é uma linguagem de consulta de reconhecimento de padrões (“pattern-matching”, em inglês). Consultas SPARQL só retornarão dados quando o padrão definido na seção WHERE for completamente reconhecido nos itens que você está consultando. Muitos conjuntos de dados têm informações faltantes, por isso é importante ter em mente que um item só será um resultado de uma consulta se ele tiver dados válidos em cada trecho da declaração feita no WHERE. Ou seja, o SPARQL não vai retornar um item que não tenha alguma propriedade ou valor declarado na cláusula WHERE.

A palavra-chave OPTIONAL (“opcional”, em português) dentro da seção WHERE determina padrões opcionais que você quer de encontrar nos dados. OPTIONAL permite procurar por dados que talvez não estejam lá.

Rode a consulta novamente, desta vez usando um padrão opcional.

Visualização Image Grid

Visualização Image Grid

O WDQS pode mostrar os resultados de nossas consultas em vários formatos diferentes. Até aqui, sempre usamos a visualização de tabela. Vamos dar mais uma olhada no exercício anterior:

Após rodar a consulta, olhe os resultados. Acima da tabela, clique na seta à esquerda, ao lado do ícone de olho e do sinal de interrogação. Um menu suspenso vai aparecer. Escolha “Image grid” (“tabela de imagens”, em português) no menu, e o WDQS vai mostrar o logo de cada item, com seus respectivos resultados abaixo da imagem.

Outra forma de visualizar o resultado como uma “Image grid” é especificando isso na própria consulta. O código na linha 1, após o símbolo de hashtag (#), diz para a consulta que os resultados não devem ser mostrados como uma tabela, mas sim como uma série de imagens.

Você não precisa se lembrar do código exato para a visualização em “Image Grid”. Graças à ferramenta de preenchimento automático do WDQS, assim que você digitar uma hashtag (#) na janela de consulta, um menu suspenso vai aparecer com sugestões de diferentes formatos de visualização.

Skip to content