Saltar para o conteúdo

SPARQL

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

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

Por exemplo, para 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 }

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.

Um exemplo de como criar uma listagem de músicos espanhois contendo nome e as datas 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")
 }

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 >, <, >=, <=, =, !=, ||, &&:

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

Tipos de dados

[editar | editar código-fonte]

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

Verificar 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]

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.

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

  • RSS (Really Simple Syndication)
  • OWL (Ontology Web Language)
  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]