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.[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 | editar código-fonte]Exemplo 1
[editar | editar código-fonte]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
}
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.
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 | editar código-fonte]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]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]- Topic maps
- XML (Extensible Markup Language)
Referências
[editar | editar código-fonte]- ↑ «SPARQL Query Language for RDF». www.w3.org. Consultado em 14 de julho de 2019
- ↑ «Wikidata:SPARQL query service - Wikidata». www.wikidata.org. Consultado em 16 de novembro de 2021