SPARQL – Parte II – Consultas básicas (select)

Amigos,

Nesse post vou explicar algumas consultas básicas, usando SPARQL.

Vou fazer essas consultas baseado no meu tutorial preferido “SPARQL By Example da Cambridge Semantics”, esse post basicamente será um apanhado de query de lá,  já que eles usam endpoints públicos.

?s ?p ?o

Essas consultas estão usando RDF, que é um modelo de ontologia baseado em triplas (?s ?p ?o).

Sujeito, Predicado e Objeto

Estrutura básica (esqueleto) de uma consulta SPARQL:

# declaracao do prefix (abreviacao das URIs)
PREFIX foo:
...
# declaracao dos acessos ao grafos
FROM ...
# parametros a serem encontrados
SELECT ...
# query pattern
WHERE {
    ...
}
# organizador do resultado (ordenacao)
ORDER BY ...

Vamos aos fatos (selects)

Select simples:

#De forma mais completa essa query,
# procura todos os objetos de indivíduos
# que tenham a propriedade foaf:name declarada.

PREFIX foaf:
SELECT ?name
WHERE {
    ?person foaf:name ?name .
}

Resultado na DBPedia .

Select simples com resultado composto:

#Seleciona o sujeito e a homepage,
# de um sujeito onde o nome seja "Apollo 7".

PREFIX foaf:
SELECT ?craft ?homepage
{
  ?craft foaf:name "Apollo 7" .
  ?craft foaf:homepage ?homepage
}

Resultado na Talis .

Select utilizando o resultado a partir do resultado do objeto da tripla anterior:

#Nessa query também entramos no conceito de grafo,
# essa query busca em um grafo especifico.
# Essa consulta busca homepages de pessoas que conhece o Berners-Lee.

PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX card: <http://www.w3.org/People/Berners-Lee/card#>
SELECT ?homepage
FROM <http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf>
WHERE {
    card:i foaf:knows ?known .
    ?known foaf:homepage ?homepage .
}

Resultado na DEMO.Virtuoso

Organizando o resultado

Limit

Para modificar a apresentação do resultado, existem: Limit, Order By e Offset.

# Query que lista 50 indivíduos distintos.

SELECT DISTINCT ?concept
WHERE {
    ?s a ?concept .
} LIMIT 50

Filtro

Filter simples

#Seleciona paises que não tenham fronteira com o mar e
# com o filtro que apresenta apenas os que tenham
# população maior que 15 milhões de habitantes.
# Vemos também que não precisamos repetir
# o sujeito em todas as clausulas.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?country_name ?population
WHERE {
    ?country a type:LandlockedCountries ;
             rdfs:label ?country_name ;
             prop:populationEstimate ?population .
    FILTER (?population > 15000000) .
}

Resultado na DBPedia .

Filtro composto

#Aplicamos na query o filtro de que é
# preciso que o nome tenha sido definido em inglês.PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?country_name ?population
WHERE {
    ?country a type:LandlockedCountries ;
             rdfs:label ?country_name ;
             prop:populationEstimate ?population .
    FILTER (?population > 15000000 && langMatches(lang(?country_name), "EN")) .
} ORDER BY DESC(?population)

Resultado na DBPedia .

Opcional

O option possibilita que a caso um param não exista, não impeça a apresentação da tripla.

# Apresenta o nome de todos artistas musicais,
# e caso exista a imagem, homepage e loc .
PREFIX mo: <http://purl.org/ontology/mo/>
PREFIX foaf:  <http://xmlns.com/foaf/0.1/>
SELECT ?name ?img ?hp ?loc
WHERE {
  ?a a mo:MusicArtist ;
     foaf:name ?name .
  OPTIONAL { ?a foaf:img ?img }
  OPTIONAL { ?a foaf:homepage ?hp }
  OPTIONAL { ?a foaf:based_near ?loc }
}

Resultado no Jamendo .

Por hoje é só.

No próximo post falarei um pouco sobre como montar uma ontologia baseado em RDF, RDFs e OWL.

Abraços.

Boa noite.

Renan Oliveira

SPARQL – Parte I – Como Instalar o Virtuoso (Banco de Dados de Triplas)

Sempre que procuro alguma documentação sobre o Virtuoso, banco de triplas para Web Semântica 99,9% dos artigos que encontro são em inglês, então vou começar uma série de artigos sobre SPARQL e Bando de Dados de Triplas, espero que consiga ajudar alguém.

Vamos a um breve resumo por Daniel Kirstenpfad, sobre banco de triplas:

Ao contrário de outros bancos de dados que armazenam seus dados em linhas, colunas ou pares de chave-valor, um banco de dados de grafos armazena toda informação em uma rede de nós e arestas. As arestas representam o relacionamento entre os nós que representa os objetos. Devido aos nós e arestas serem representados como objetos (os quais os desenvolvedores estão acostumados) é possível definir atributos (também chamado de propriedades) a eles. Adicionando uma direção para uma aresta cria o conhecido grafo de propriedades que representa a explícita estrutura de dados dentro de um banco de dados de grafo. -Daniel Kirstenpfad

Banco de Triplas e a Web Semântica

Um dos grandes pilares da Web Semântica é a organização de dados baseada em ontologias, principalmente RDF, RDFS e OWL. Onde armazenar essas definições, que claramente são baseadas em 3 pilares (sujeito, predicado e objeto)?! E a Linked Open Data é baseada na construção de grafos e sua ligação.

Por que usar o Virtuoso?

É performático. Teste de Performace na DBPedia

Trabalha muito bem com inferências e transitividade, esse acredito que é a grande vantagem do uso de grafos, poder navegar entre eles se aprofundar nas relações e inferir resultados;

OpenSource, com uma grande comunidade de usuários. Mail Lists;

QuadStore, ai vem a pergunta ele é Triple ou Quad Store?  O virtuoso é Quad além de armazenar a tripla básica (sujeito, predicado e objeto) ele ainda grava o grafo relacionado,  com isso o virtuoso consegue trabalhar com múltiplos grafos ao mesmo tempo.

Como instalar o Virtuoso no Ubuntu Linux (Original) :

Faça o download pelo SourceForge: http://sourceforge.net/projects/virtuoso/

Verifique se há os pacotes, caso não haja instalei:

Package Version From
autoconf 2.57 http://www.gnu.org/software/autoconf/
automake 1.7 http://www.gnu.org/software/automake/
libtool 1.5.16 http://www.gnu.org/software/libtool/
flex 2.5.33 (was 2.5.4) http://www.gnu.org/software/non-gnu/flex/
bison 2.3 (was 1.35) http://www.gnu.org/software/bison/
gperf 2.7.2 http://www.gnu.org/software/gperf/
gawk 3.1.1 http://www.gnu.org/software/gawk/
m4 1.4.1 http://www.gnu.org/software/m4/
make 3.79.1 http://www.gnu.org/software/make/
OpenSSL 0.9.7i http://www.openssl.org/

Descompacte o Virtuoso.

Rode os comandos no terminal, na pasta onde descompactou:

./configure
make
make install

Como iniciar o serviço do Virtuoso pelo terminal (start virtuoso):

Entre no diretório: cd var/lib/virtuoso/db
Rode o comando: virtuoso-t -f &

Caso seja concluído com sucesso:
http://localhost:8890/

Qualquer dúvida entrem em contato.

Interligar dados em vez de documentos.Tim Berners-Lee

No próximo artigo, irei falar sobre configurações básicas e consultas.
Obrigado e Feliz Ano Novo.

Abraços, Renan Oliveira