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
Related Articles
- Getting Started with RDF and SPARQL Using 4store and RDF.rb | Jeni’s Musings (jenitennison.com)
- SPARQL Engines Benchmark Results (cweiske.de)
- SparqlImplementations – W3C Wiki (w3.org)
- OpenLink AJAX Toolkit (OAT) Wiki : OAT Interactive SPARQL (iSPARQL) Query Builder (wikis.openlinksw.com)
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).

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 . }
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 }
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 .
}

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) .
}
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)
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 }
}
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
Related Articles
- Wikitravel:Turtle RDF – Wikitravel (wikitravel.org)
- Top 100 most popular RDF namespace prefixes (richard.cyganiak.de)
- The Social Semantic Web and Linked Data (slideshare.net)
- From Facebook to FOAF and Back Again (22) (ibiblio.org)
- The Cognitive Characteristics Ontology Specification (purl.org)
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”
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

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
Related Articles
- RDFa in Drupal – examples and use cases | groups.drupal.org (groups.drupal.org)
- RDFa ” About (rdfa.info)
- Examining the Importance of RDFa Rich Snippets, Microdata, & Other Semantic Web Applications (seo-strategies-group.blog.co.uk)
- Is GoodRelations a Game Changer? ” The Taxonomy Blog (thetaxonomyblog.wordpress.com)
- I’m Voting for Structured Data (searchenginejournal.com)
