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

Como melhorar meu resultado de busca usando RDFa ?

Anotação semântica

“Esquema específico para geração e uso de metadados, possibilitando novos métodos de acesso a informação”

Kyriakov, 2003

Nós vivemos procurando formas de melhorar nosso SEO (Search Engine Optimization) para que isso reverta em visitas aos nossos sites,  já algum tempo conheço o RDFa (RDF annotations) que é  uma proposta da W3c para organizar e melhorar o que está escrito em XHTML (Combinando as tags de marcação HTML com regras da XML), deste tempo para cá Google, Yahoo! (leia Search Monkey) aproveitam dessa melhor organização e de novos dados inseridos no XHTML para melhorar a apresentação dos resultados de Busca e melhorando assim o seu ranking já que tal informação está mais clara e objetiva e bem organizada.

Como o google usa o RDFa nos resultados de busca ?

O Google utiliza como padrão para Rich Snippets: RDFa e Microformats.

O Rich Snippets são aqueles resultados diferenciados com Reviews (stars), Events e etc.

Tanto o RDFa quanto o Microformats para o google não faz diferença, ainda. Eu particularmente prefiro o RDFa pois é mantido pelo pessoal da W3 Semantic Web Group.

Exemplos de uso em filmes (IMDb):

O próprio Google da dicas de como usa, segue os links:

Como marcar conteúdo usando RDFa:
http://www.google.com/support/webmasters/bin/answer.py?hl=br&answer=146898

Introducing Rich Snippets: http://googlewebmastercentral.blogspot.com/2009/05/introducing-rich-snippets.html

E agora, o Yahoo! usa o RDFa nos resultados de busca ?

Originalmente, a mesma anotação em RDFa será apresentada de forma parecida tanto no Google, quanto no Yahoo! sendo que no Yahoo a aplicação é um pouco mais vasta como pode ser vista nos links abaixo.

O Yahoo! (Search Monkey) participa de um excelente projeto para organizar os dados com Web Semântica (RDFa), o Projeto Commom Tag.

Exemplos de uso em Eventos:

Excelente explicação de como o Yahoo! captura e utiliza os dados em RDFa, além um ótimo tutorial:

http://developer.search.yahoo.com/start

E como usar essa anotações no Meu Blog? Use o  Zemanta

tumblr_likassvLLQ1qz5svjo1_500

 

O Projeto Zemanta começou como um Plugin para o Firefox e com o passar do tempo se tornou um Plugin para Blogs e hoje já é recomendado inclusive pelo WordPress, veja o post.

O Zemanta, funciona com um plugin que sugere notícias relacionadas, links , fotos e tags para organizar o seu conteúdo.  Nessas tags que moram a grande sacada do Zemanta, ele escreve essas informação em RDFa.

Nesse post e nos futuros pretendo continuar usando o Zemanta para anotar os meus conteúdos, falo isso pois a Semantic Web continua crescendo de forma exponencial e poderá surgir um melhor “anotador” , por agora estou muito satisfeito com o uso do mesmo. Você pode ver aqui quais informações o Zemanta nos sugere, Exemplos de Uso.

Existem projetos, bem interessantes, que utilizam o RDFa como padrão:
Facebook – http://rdfa.info/2010/04/22/facebook-adopts-rdfa/
Best Buy – http://www.readwriteweb.com/archives/how_best_buy_is_using_the_semantic_web.php
Newsweek… Drupal….O’relly..

Caso queira saber mais informações, recomendo esses links:

http://www.slideshare.net/lzomatos/anotao-semntica-de-contedo-web-utilizando-microformatos-e-rdfa (PT-Br)

http://www.w3.org/TR/xhtml-rdfa-primer/ (Inglês)

http://www.alistapart.com/articles/introduction-to-rdfa/ (Inglês)

http://ilrt.org/discovery/2001/04/annotations/ (Inglês)

RDFa Basics

Afinal, o que é Web Semântica ?

Pessoal,

Esse é o meu primeiro post,  acho justo me apresentar sou Renan Oliveira, Analista de Sistemas/Developer no time de Busca & Semântica da globo.com, mais informações sobre mim vocês podem ver no sobre. Vou focar o blog na área de tecnologia e principalmente no que mais estudo, ferramentas de Busca e Web Semântica na sua amplitude (ontologia, sparql…).

Vamos ao que interessa. Para responder a pergunta do Post, vou seguir um caminho das pedras.

Qual a proposta da Web Semântica?

É estender os princípios da web dos documentos para os dados. Os dados podem ser acessados usando a arquitetura Web (URI, por ex.), e estar relacionados uns com os outros da mesma forma que os documentos já são. Isso também significa criar uma plataforma comum que permita o compartilhamento e a reutilização dos dados por meio das fronteiras das aplicações, empresas e comunidades, podendo ser processados automaticamente tanto por ferramentas quanto manualmente, também revelando novos relacionamentos possíveis entre porções de dados. Fonte: http://www.w3.org/2001/sw/SW-FAQ#swgoals

Segundo Berners-Lee et alii (2001), a web semântica será uma extensão porém apresentará estrutura que possibilitará a compreensão e o gerenciamento dos conteúdos armazenados na web independente da forma em que estes se apresentem, seja texto, som, imagem e gráficos à partir da valoração semântica desses conteúdos, e através de agentes que serão programas coletores de conteúdo advindos de fontes diversas capazes de processar as informações e permutar resultados com outros programas da web atual.

Isso é, o dados começa a um significado real e não apenas uma abstração compreendida pelo computador.

Se eu quiser fazer uma busca

“Roberto Carlos no maracanã acerta a trave”

na web ela irá ler os dados da frase de forma separada, sem ter um significado associado a ele,  ele não conseguirá saber se foi o cantor Roberto Carlos, se foi em jogo de futebol ou em show no estádio do maracanã, como podemos resolver isso.

Anotando na hora da criação de um conteúdo que ele se Referencia ao jogador Roberto Carlos, ao Estádio do Maracanã e que acertar a trave foi durante um jogo de futebol.

Quem utiliza?

Isso parece ser muito bom, mas que verdadeiramente usa isso, é tão novo que ninguém usa?

Para citar dois, gigantes, veículos de comunicação que utilizam:

BBC – Talvez seja quem use com maior capacidade na área de conteúdo, no link da bbc você encontra todos os posts sobre o desenvolvimento da WS na bbc, para resumir eles utilizam a Linked Open Data, que  será um tópico no futuro do blog, para construir páginas de entretenimento (musica e programas) aproveitando os dados como descrição, discografia, etc.  imagine o quanto de trabalho foi economizado e quanto esse dado ganhou relevância após o uso já que essa informação foi pega de uma fonte segura.

New York Times – Eles publicaram mais de 10.000 publicações na Linked Open Data, disponibilizando um histórico de matérias anotadas semanticamente para futuras consultas, ainda disponibilizaram uma API e agregaram conhecimento a DBPEDIA, que também será um tópico no futuro.

O tópico é extenso propus apenas começar a conversa, com o passar do tempo irei mostrado novidades da área, tecnologias que utilizamos, ontologias, consultas SPARQL, Virtuoso OpenLink e há muito à descobrir.

Links interessantes:

http://semanticweb.org/wiki/Main_Page

http://www.w3.org/2001/sw/SW-FAQ

http://www.semanticweb.com/

Abraços, Renan Oliveira.