SPARQL

linguagem de programação

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.

Exemplos

editar

Exemplo 1

editar

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 }

Exemplo 2

editar

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.

 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

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

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

DBpedia

editar

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

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
  • RSS (Really Simple Syndication)
  • OWL (Ontology Web Language)
  • Topic maps
  • XML (Extensible Markup Language)

Referências

editar
  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