SPARQL

Origem: Wikipédia, a enciclopédia livre.

SPARQL é um acrónimo recursivo do inglês SPARQL Protocol and RDF Query Language. Trata-se de uma linguagem padronizada para a consulta de grafos RDF, padrão pelo RDF Data Access Working Group (DAWG) do World Wide Web Consortium (W3C). É uma tecnologia básica no desenvolvimento da web semântica que se constituiu como recomendação oficial do W3C a 15 de janeiro de 2008, sendo actualizada à versão 1.1 em 2013.[1]

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.

Exemplo 1[editar | editar código-fonte]

Por exemplo, se queremos obter uma listagem de nomes de livros podemos executar a seguinte consulta:

PREFIX  dc: <http://purl.org/dc/elements/1.1/>
SELECT  ?title
WHERE   { <http://exemplo.org/livros> dc:title ?title
}

Experimente!


PREFIX  dc: <http://purl.org/dc/elements/1.1/>
SELECT  ?title
WHERE   { <http://exemplo.org/livros> dc:title ?title }

Exemplo 2[editar | editar código-fonte]

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 Wikipedia em espanhol.

No exemplo de abaixo podemos ver como levar a cabo uma consulta que nos mostre uma listagem de músicos espanhois junto com seu nome, sua data de nascimento e de falecimento.

 PREFIX dcterms: <http://purl.org/dc/terms/>
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 PREFIX dbp: <http://dbpedia.org/ontology/>
 SELECT ?musico ?nombreMusico ?fechaNacimiento ?fechaFallecimiento
 WHERE {
     ?musico dcterms:subject
     <http://dbpedia.org/resource/Category:Spanish_musicians>;
     rdfs:label ?nombreMusico ;
     dbp:birthDate ?fechaNacimiento ;
     dbp:deathDate ?fechaFallecimiento .
 FILTER (LANG(?nombreMusico) = "es")
 }

Exemplo 3[editar | editar código-fonte]

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

 PREFIX ex: <http://example.org#>
 
 SELECT ?nom ?ed
 WHERE{
       ?x ex:nome ?nom .
       ?x ex:idade ?ed
 FILTER (?ed<40 || ?ed >18)
 }

Conversão e criação de tipos de dados[editar | editar código-fonte]

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.).
uri(arg), iri(arg) conversão do argumento num dado tipo URI/IRI
bnode(arg)
nó anónimo
strdt (literal, tipo)
gera literal com um tipo de dados.
strdt("1234", "xsd:integer")="1234"^^<xsd:integer>
strlang(literal, tipo)
gera literal com um idioma dado.
strlang("Universidade", "es")="Universidade"@"es"

Funções de verificação de tipos de dado[editar | editar código-fonte]

  • 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[editar | editar código-fonte]

  • 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[editar | editar código-fonte]

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.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT?name
WHERE f ?x foaf:name ?name.g
ORDER BY ?name
LIMIT 3
OFFSET 1

Interfaces públicas SPARQL[editar | editar código-fonte]

DBpedia[editar | editar código-fonte]

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[editar | editar código-fonte]

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

Ver também[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. «SPARQL Query Language for RDF». www.w3.org. Consultado em 14 de julho de 2019 
  2. «Wikidata:SPARQL query service - Wikidata». www.wikidata.org. Consultado em 16 de novembro de 2021 

Ligações externas[editar | editar código-fonte]