Banco Semântico e SPARQLRicardo Paiva (Senior Developer @ Globo.com)
Ontologia
Banco de triplas● Dados são representados na forma de um grafo.● Nós representam os dados e arestas as conexões.
Dados são organizados em triplas
SPARQL● Linguagem padrão para consultas em banco de dados
de triplas● Simplifica consulta em grafos
SELECT ...FROM ...WHERE ...ORDER BY ...
Consultas básicas (1)
SELECT *WHERE { <http://example.com/tech/Hardware/42707> ?p ?o.}
● Todos atributos associados a uma URI:
SELECT *WHERE {?s ?p owl:Class}
● Todos tipos de uma determinada classe:
Consultas básicas (2)
SELECT * WHERE { ?uri rdfs:label ?o. }
● Label de todas as entidades
SELECT ?uri, ?labelWHERE { ?uri a tech:Hardware. ?uri rdfs:label ?label.}
● URI e Label de todas as entidades do tipo Hardware
Conectores (1)
SELECT * WHERE { ?uri base:status_de_publicacao ‘P’. }
● Ao terminar uma tripla use “.”
SELECT * WHERE { ?uri a tech:Noticia; base:permalink ?permalink; base:status_de_publicacao ‘P’. }
● Para repetir o sujeito, use “;”
Conectores (2)
SELECT distinct ?uri WHERE { ?uri tech:cita <http://example.com/tech/Fabricante/44218>, <http://example.com/tech/Software/89535>.}
● Para repetir o sujeito e o predicado, use “,”
From
SELECT distinct ?uri FROM tech:WHERE { ?uri tech:cita <http://example.com/tech/Fabricante/44218>, <http://example.com/tech/Software/89535>.}
● SEMPRE informe o grafo para minimizar o espaço de busca:
Múltiplos saltos no grafo
SELECT distinct ?uri, ?entFROM tech:WHERE { ?uri tech:cita ?ent. ?ent tech:pertence_a_categoria_hardware ?cat.}
● Selecione uri e entidades que pertençam a uma categoria:
Filter (1)
SELECT distinct ?uri, ?statusFROM tech:WHERE { ?uri a tech:Noticia; base:status_de_publicacao ?status. FILTER (?status=’P’ or ?status=’A’)}
● Selecione matérias publicadas ou agendadas:
Filter (2)
SELECT distinct ?uri, ?statusFROM tech:WHERE { ?uri a tech:Noticia; base:data_da_primeira_publicacao ?pub. FILTER (?pub >= ‘2015-01-01’ˆˆxsd:date)}
● Selecione matérias publicadas depois de uma data:
Ordenação e Limit
SELECT distinct ?uri, ?pubFROM tech:WHERE { ?uri a tech:Noticia; base:data_da_primeira_publicacao ?pub.}ORDER BY DESC(?pub)LIMIT 20
● Ordenação por data de publicação:
Funções de agregação(1)
SELECT count(distinct ?uri)FROM tech:WHERE { ?uri a ?tipo; base:status_de_publicacao ‘P’. ?tipo rdfs:subClassOf base:Materia.}
● count
Funções de agregação(2)
SELECT count(?genero) ?generoFROM <http://example.com>WHERE { ?s rdf:type base:Pessoa; base:genero ?genero.}GROUP BY ?genero
● group by