# SPARQL

SPARQL (acrónimo recursivo do inglês SPARQL Protocol and Resource Description Framework Query Language), é uma linguagem padrão da web semântica para a consulta de grafos RDF (Resource Description Framework, descrição conceitual em recursos Web), padronizada pelo grupo "RDF Data Access Working Group" (DAWG) da organização "World Wide Web Consortium" (W3C). É uma tecnologia básica no desenvolvimento da web semântica (interatividade entre pessoas e computadores) que se constituiu como recomendação oficial (padrão) do W3C à 15 de janeiro de 2008, sendo actualizada à versão 1.1 em 2013.
Ao igual que sucede com SQL, é necessário distinguir entre o linguagem de consulta e o motor para o armazenamento e recuperação dos dados. Por este motivo, existem múltiplas implementações de SPARQL, geralmente unidos a meios de desenvolvimento e plataforma tecnológicas.
Num princípio SPARQL unicamente incorpora funções para a recuperação de parágrafos RDF. No entanto, algumas propostas também incluem operações para a manutenção (criação, modificação e apagar) de dados.

## Exemplos
### Exemplo 1

Por exemplo, para obter uma listagem de nomes de livros podemos executar a seguinte consulta:
Experimente!

### Exemplo 2

SPARQL permite o acesso a informação disponível no site através de diversas plataformas como é o caso de DBpedia que tem o acesso a toda a informação da Wikipédia em espanhol.
Um exemplo de como criar uma listagem de músicos espanhois contendo nome e as datas de nascimento e de falecimento.

### Exemplo 3

No exemplo2 é usado o FILTER, que permite eliminar resultados da nossa busca. FILTER admite tipos de dados de tipo Bool, Int, Float, dataTime, etc. e frequentemente usa operadores do tipo >, <, >=, <=, =, !=, ||, &&:

## Tipos de dados

Como fazer a criação de dado e converter seu tipo

### str(arg)

    conversão a uma cadeia de caracteres. Por exemplo as url que utilizemos devem ser convertidas a uma cadeia de caracteres para poder ser tratadas como tais.

### lang(arg)

    devolve-nos o idioma do argumento que se lhe passa ("en", "es", "fr", etc.).

### datatype(arg)

    tipo de dados (integer, float, etc.).

### bnode(arg)

    nó anónimo

### strdt (literal, tipo)

    gera literal com um tipo de dados.

### strlang(literal, tipo)

    gera literal com um idioma dado.

#### Verificar dado

* isNumeric(arg) = true se é um número.
* isBlank(arg)= true se é um nó anónimo.
* isLiteral(arg) = true se é um literal.
* isIRI(arg) = true se é uma IRI.

### Funções condicionais

* bound(arg) = true se tem um valor.
* exists(padrão) = true se cumpre um padrão.
* not exists(padrão) = true se não se cumpre o padrão.
* if(cond, expr1, expr2) = se cumpre-se a condição devolve expr1, se não, devolve expr2.
* coalesce (expresion1, expresion2, ...) = devolve a primeira expressão que se avalia sem erro.

## Modificadores das consultas
### ORDER BY

    Ordena-os sobre a base de algum critério.

### DISTINCT

    Soluções únicas.

### REDUCED

    Elimina alguns, todos ou nenhum duplicado.

### LIMIT

    Restrição do número de resultados.

### OFFSET

    Controle do ponto de início das soluções na sequência global de soluções.

## Interfaces públicas SPARQL
### DBpedia

Usando DBpedia podemos criar metadatos RDF e URIs. DBpedia transforma em RDF tripletas (Sujeito, Predicado, Objeto) que têm sido introduzidas na Wikipédia. A criação de uma página na Wikipédia provoca, por tanto, a criação de informação RDF em DBpedia. Isto é, quando se cria um conteúdo na Wikipédia do tipo starcraft cria-se a sua vez uma entrada. Através da interface pública Virtuoso SPARQL Query Editor podemos levar a cabo consultas no banco de dados da DBpedia. As consultas SPARQL serão traduzidas a SQL de forma transparente ao usuário. [http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSODSSparqlSamples Exemplos de consultas.

### Wikidata

A base de dados em grafo Wikidata disponibiliza seu conteúdo para buscas usando a linguagem SPARQL através do Wikidata Query Service.