Arquivos

Web Semântica, por onde começar?

Algumas das perguntas mais comuns que me fazem são:

Li sobre o conceito achei bem legal, como faço pra usar? Por onde começar? Renan, semântica é complicado mesmo? Sou de produto, como aprendo algo não muito técnico sobre o tema?

Sempre respondo com alguns livros e algumas apresentações sobre o tema, como sempre passava algo bem parecido para as pessoas decidi compilar o que eu mais recomendo em um post. Vale um lembrete a maioria dos livros, artigos e slides recomendados estão em inglês.

Esse post não visa mostrar o mais avançado sobre o tema.

Para começar

Ouvi falar sobre o tema mas, o que é isso?

Recomendo que assista ao TED Talk com o Tim Berners-Lee, ele explica bem os conceitos e o por que do uso da web semântica.

Vídeo em inglês, versão legendada:

Tenho uma apresentação introdutória sobre o tema, que foi apresentado na UFRJ, aproveitando uma ótima apresentação feita pelo @fcarolo. Essa apresentação mostra uma visão geral do uso, dos problemas que a falta de uso gera e mostra um pouco do case que da globo.com.

Link: Introdução a web semântica e o case da globo.com

Recomendo, o A Semantic Web Primer como livro introdutório ao tema, ele mostra bem os conceitos inicias com uma linguagens mais fácil, mas evolui sobre o tema não sendo uma leitura cansativa. Não encontrei ele a venda no Brasil, link para a Amazon.

A semantic web primer


Para quem já conhece mais sobre o tema

Nesse ponto começa a se separar as coisas, acredito que nesse ponto temos uma divisão clara que são desenvolvedores e área de produto, vou buscar atender aos dois pontos, mesmo conhecendo muito mais sobre o primeiro grupo.

Desenvolvedores:

Na minha visão o melhor livro que aborda o tema para desenvolvedores é o Semantic Web Programming, nele temos uma boa introdução, bons conceitos e exemplos de uso de Ontologias e Banco de Dados de Triplas (graph db), esse livro começa de forma introdutória e termina em um nível avançado mostrando Rules em Sparql e alguns conceitos avançados de Ontologia, link para a Amazon.

Caso queria aprender SPARQL, eu recomendo que primeiro leia a apresentação da Cambridge Semantics, foi com ela que eu aprendi o que sei, ela é muito boa mostra com exemplos práticos e tem exercícios:

SPARQL by Example: www.cambridgesemantics.com/pt/semantic-university/sparql-by-example

Para quem deseja ir além e aprender mais sobre os conceitos por trás dos banco de dados de triplas, e como funciona o sparql por dentro e como otimizar queries, recomendo o Learning SPARQL, link para Amazon.

Sobre ontologia há uma gama de livros, o livro que acho mais de didático e coerente com o que pode ser feito no momento com Web Semântica é o Web Semantic for the Working Ontologist, esse livro em alguns pontos para o final se torna uma leitura densa e cansativa, mas recomendo fortemente pois ele é muito esclarecedor e tira vários mitos sobre o tema, link para Amazon.

Produto:

Li poucos livros sobre o tema, na verdade recomendo apenas um, espero comentários com boas dicas de livros voltado para o público:

Recomendo o Pull: The Power of the Semantic Web to Transform Your Business, link para Amazon.

O autor David Siegel, fez uma ótima apresentação sobre os temas abordados no livro:

Espero que com essas dicas vocês tirem as suas dúvidas e melhorem os seus produtos.

Caso tenham alguma dúvida ou alguma outras recomendações, podem comentar ou me enviar emails.

Obrigado.

SPARQL – Parte III – Inserindo e apagando triplas (Insert e delete de triplas)

Amigos,

Fechando as queries básicas sobre SPARQL, faltou mencionar o INSERT e DELETE de triplas.
Os exemplos abaixo não poderão ser feito em um endpoint externo como a DBPedia (pelo menos não deveria ser possível), pois para tal é necessário a permissão de UPDATE no usuário.

INSERT, como inserir triplas no Virtuoso ?

O insert no virtuoso é simples, basta informar o grafo e a tripla a ser inserida.
Pode ser adicionada mais de uma tripla por query de insert.

INSERT data INTO <grafo> {
<sujeitoDaTripla> <predicadoDaTripl> <objetoDaTripla> .
}

DELETE, como apagar triplas no Virtuoso ?

O delete no virtuoso, lembra muito o conceito das consultas,
ele deleta o resultado das consultas, isso possibilita um delete mais avançado.
Você não precisa explicitar toda a tripla a ser deletada, você pode passar uma variável.

Apagando uma única tripla:

### Apagando tripla, informando: sujeito, predicado e objeto.
delete from <grafo> {
<sujeitoDaTripla> <predicadoDaTripl> <objetoDaTripla> .
}
where {
<sujeitoDaTripla> <predicadoDaTripl> <objetoDaTripla> .
}

Apagando múltiplas triplas dado um indivíduo:

### Apagando todas as triplas dado o sujeito.
delete from <grafo> {
<sujeitoDaTripla> ?p ?o .
}
where {
<sujeitoDaTripla2> ?p ?o .
}

Como definir ao usuário permissão de insert e delete (UPDATE) no ambiente local

Para os dois modos o virtuoso deverá esta inicializado.

Passo-a-passo utilizando o Conductor, interface administrativa do Virtuoso:

Endereço do Conductor (por default): http://localhost:8890/conductor/
Usuário administrador e senha (por default): DBA/DBA

Acesse o Conductor >
Acesse o System Admin >
Selecione a opção User Accounts >
(Selecione qual usuário deseja alterar a permissão, lembrando que o usuário do endpoint e do request HTTP, por default é SPARQL) > Edit >
Em Account Roles selecione SPARQL_UPDATE e clique no “>>” >
Save.

Passo-a-passo utilizando o iSQL do Virtuoso

Ps.: Paths padrões da instalação no Mac OS X Snow Leonard
Path do iSQL: /usr/local/virtuoso-opensource/bin
Inicialize o iSQL: ./isql

Execute o comando:

GRANT SPARQL_UPDATE TO "XXXXX";

### Substitua o XXXXX pelo nome do usuário por exemplo SPARQL.

Encerro nesse post as consultas básicas utilizando SPARQL. Nos próximos post irei falar um pouco mais sobre Ontologias (RDF/OWL).

Abraços.

Boa noite.

Renan Oliveira

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

Seguir

Get every new post delivered to your Inbox.

%d bloggers like this: