Banco Semântico e
SPARQL
Ricardo 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, ?label
WHERE {
?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, ?ent
FROM 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, ?status
FROM 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, ?status
FROM 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, ?pub
FROM 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) ?genero
FROM <http://example.com>
WHERE {
?s rdf:type base:Pessoa;
base:genero ?genero.
}
GROUP BY ?genero
● group by
Obrigado!
ricardo.paiva@corp.globo.com

Banco semântico e SPARQL

  • 1.
    Banco Semântico e SPARQL RicardoPaiva (Senior Developer @ Globo.com)
  • 2.
  • 3.
    Banco de triplas ●Dados são representados na forma de um grafo. ● Nós representam os dados e arestas as conexões.
  • 4.
  • 5.
    SPARQL ● Linguagem padrãopara consultas em banco de dados de triplas ● Simplifica consulta em grafos SELECT ... FROM ... WHERE ... ORDER BY ...
  • 6.
    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:
  • 7.
    Consultas básicas (2) SELECT* WHERE { ?uri rdfs:label ?o. } ● Label de todas as entidades SELECT ?uri, ?label WHERE { ?uri a tech:Hardware. ?uri rdfs:label ?label. } ● URI e Label de todas as entidades do tipo Hardware
  • 8.
    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 “;”
  • 9.
    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 “,”
  • 10.
    From SELECT distinct ?uri FROMtech: 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:
  • 11.
    Múltiplos saltos nografo SELECT distinct ?uri, ?ent FROM tech: WHERE { ?uri tech:cita ?ent. ?ent tech:pertence_a_categoria_hardware ?cat. } ● Selecione uri e entidades que pertençam a uma categoria:
  • 12.
    Filter (1) SELECT distinct?uri, ?status FROM tech: WHERE { ?uri a tech:Noticia; base:status_de_publicacao ?status. FILTER (?status=’P’ or ?status=’A’) } ● Selecione matérias publicadas ou agendadas:
  • 13.
    Filter (2) SELECT distinct?uri, ?status FROM 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:
  • 14.
    Ordenação e Limit SELECTdistinct ?uri, ?pub FROM 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:
  • 15.
    Funções de agregação(1) SELECTcount(distinct ?uri) FROM tech: WHERE { ?uri a ?tipo; base:status_de_publicacao ‘P’. ?tipo rdfs:subClassOf base:Materia. } ● count
  • 16.
    Funções de agregação(2) SELECTcount(?genero) ?genero FROM <http://example.com> WHERE { ?s rdf:type base:Pessoa; base:genero ?genero. } GROUP BY ?genero ● group by
  • 17.