Semantic-Django

  • 296 views
Uploaded on

Presentation given at Python Brasil [8] about Semantic-Django, in Rio de Janeiro.

Presentation given at Python Brasil [8] about Semantic-Django, in Rio de Janeiro.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
296
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
16
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Semantic-Django globo .com Tornando a web mais semântica com Django e bancos de triplas Rafael Floriano da SilvaMonday, November 26, 2012
  • 2. Antes de me apresentar... Bancos de triplas são sempre representados por: Sujeito, predicado e objeto. predicado Sujeito ObjetoMonday, November 26, 2012
  • 3. Quem sou eu? Rafael Rafael Floriano da Silva bas l :labe e:n om e rdfs _co m ple to base: base:data_de_nascimento Pessoa_Rafael 27/01/1990 pe ba :ty se: rdf ge n ero base:Pessoa MMonday, November 26, 2012
  • 4. O que é web-semântica? Por conceito: “Uma rede de dados que podem ser processados diretamente e indiretamente por máquinas.” Tim Berners-LeeMonday, November 26, 2012
  • 5. Na prática Caso Romário...Monday, November 26, 2012
  • 6. Quem é o Romário na globo ? .com Pessoa globo .com Jogador Político Famoso com crise no casamento globo esporte .comMonday, November 26, 2012
  • 7. Abstraindo o cenário... Classes Ontologia :Pessoa rdf:type owl:Class; ... Pessoa ... :Jogador rdf:type owl:Class; rdfs:subClassOf :Pessoa; ... :Político rdf:type owl:Class; rdfs:subClassOf :Pessoa; ... Jogador Político Famoso :Famoso rdf:type owl:Class; ... ... ... rdfs:subClassOf :Pessoa; ...Monday, November 26, 2012
  • 8. Query SPARQL PREFIX base: <http://semantica.globo.com/base/> SELECT ?uri ?nome_completo WHERE { ?uri base:nome_completo ?nome_completo } ?uri ?nome_completo http://semantica.globo.com/base/ Romário de Souza Faria Pessoa_RomarioMonday, November 26, 2012
  • 9. Semantic-DjangoMonday, November 26, 2012
  • 10. Semantic-Django https://github.com/rfloriano/semantic-djangoMonday, November 26, 2012
  • 11. Qual é a ideia do projeto? ‣ Construir um backend para o Django e utilizá-lo para banco de dados de triplas que trabalham com SPARQL ‣ Reutilizar o máximo de features prontas do Django em bancos de triplas (managers, admin, forms, etc) ‣ Possibilitar uso de inferência do banco semântico através de uma interface Django ‣ Utilizar o banco de dados certo para o dado certoMonday, November 26, 2012
  • 12. Como utilizo?Monday, November 26, 2012
  • 13. 1 Instale o semantic-djangoMonday, November 26, 2012
  • 14. settings.py ... SEMANTIC_DATABASES = {     default: {         ENGINE: semantic.rdf.backends.virtuoso,         NAME: sparql,         USER: dba,         PASSWORD: dba,         HOST: localhost,         PORT: 8890,         PREFIX: {             base: <http://semantica.globo.com/base/>,             g1: <http://semantica.globo.com/G1/>,         }     } } ... INSTALLED_APPS = ( ...     semantic, ... )Monday, November 26, 2012
  • 15. 2 Crie seu (s)models.pyMonday, November 26, 2012
  • 16. smodels.py # -*- coding:utf-8 -*- from semantic.rdf import models class BasePrograma(models.SemanticModel):     label = models.CharField(graph=rdfs, max_length=200)     foto_perfil = models.CharField(graph=base, max_length=200, blank=True)     id_do_programa_na_webmedia = models.IntegerField(graph=base)     faz_parte_do_canal = models.URIField(graph=base)     tem_edicao_do_programa = models.CharField(graph=base, max_length=200, blank=True)     class Meta:         managed = False         graph = http://semantica.globo.com/         namespace = http://semantica.globo.com/base/Programa     def __unicode__(self):         return self.uriMonday, November 26, 2012
  • 17. 3 UtilizeMonday, November 26, 2012
  • 18. smodels.py In [1]: from example_app.smodels import BasePrograma In [2]: programas = BasePrograma.objects.all() In [3]: programas Out[6]: [<BasePrograma: http://semantica.globo.com/base/Programa_Bom_Dia_Brasil>,<BasePrograma: http:// semantica.globo.com/base/Programa_Bom_Dia_Rio>, <BasePrograma: http://semantica.globo.com/base/ Programa_Bom_Dia_Sao_Paulo>, <BasePrograma: http://semantica.globo.com/base/ Programa_Esporte_Espetacular>, <BasePrograma: http://semantica.globo.com/base/ Programa_Fantastico>, <BasePrograma: http://semantica.globo.com/base/Programa_Globo_Esporte>, <BasePrograma: http://semantica.globo.com/base/Programa_Globo_Reporter>, <BasePrograma: http:// semantica.globo.com/base/Programa_Jornal_da_Globo>, <BasePrograma: http://semantica.globo.com/ base/Programa_Jornal_Hoje>, <BasePrograma: http://semantica.globo.com/base/ Programa_Jornal_Nacional>, <BasePrograma: http://semantica.globo.com/base/ Programa_RJTV_1a_Edicao>, <BasePrograma: http://semantica.globo.com/base/ Programa_SPTV__1a_Edicao>, <BasePrograma: http://semantica.globo.com/base/ Programa_Em_Cima_da_Hora>, <BasePrograma: http://semantica.globo.com/base/Programa_Via_Brasil>, <BasePrograma: http://semantica.globo.com/base/Programa_Pelo_Mundo>, <BasePrograma: http:// semantica.globo.com/base/Programa_Video_Show>, <BasePrograma: http://semantica.globo.com/base/ Programa_Conta_Corrente>, <BasePrograma: http://semantica.globo.com/base/Programa_Arquivo_N>, <BasePrograma: http://semantica.globo.com/base/Programa_Jornal_das_Dez>, <BasePrograma: http:// semantica.globo.com/base/Programa_Globo_Rural>, ...(remaining elements truncated)...] In [4]: print programas.query SELECT ?uri ?label ?foto_perfil ?id_do_programa_na_webmedia ?faz_parte_do_canal ? tem_edicao_do_programa WHERE { ?uri rdf:type <http://semantica.globo.com/base/Programa> ; rdfs:label ?label ; base:id_do_programa_na_webmedia ?id_do_programa_na_webmedia ; base:faz_parte_do_canal ?faz_parte_do_canal OPTIONAL { ?uri base:foto_perfil ?foto_perfil } OPTIONAL { ?uri base:tem_edicao_do_programa ?tem_edicao_do_programa } }Monday, November 26, 2012
  • 19. É compátivel com operações do manager ‣ Qualquer operação do manager pode ser utilizada: ‣ objects.get ‣ objects.create ‣ objects.filter ‣ save ‣ update ‣ ...Monday, November 26, 2012
  • 20. VantagensMonday, November 26, 2012
  • 21. Vantagens ‣ Django-like - Não muda “nada” para quem já utiliza Django ‣ Melhora a curva de aprendizado ‣ Reutiliza o Django Admin ‣ Compatível com endpoints SPARQLMonday, November 26, 2012
  • 22. FuturoMonday, November 26, 2012
  • 23. Futuro ‣ Compatibilizar RelatedFields com SPARQL # django/db/models/fields/related.py ... #HACK class RelatedField(object):     def contribute_to_class(self, cls, name):         sup = super(RelatedField, self) ... ‣ Limpar o código ‣ objects.inference ‣ Possibilitar classes mistas entre Banco Relacional e deMonday, November 26, 2012
  • 24. Colaborações são bem-vindas https://github.com/rfloriano/semantic-djangoMonday, November 26, 2012
  • 25. Referências http://www.w3.org/TR/rdf-sparql-query/ http://answers.semanticweb.com/questions/1908/how-can- sparql-be-used-for-inferencing http://semanticweb.com/ http://virtuoso.openlinksw.com/Monday, November 26, 2012
  • 26. Obrigado @rfloriano rflorianobr rflorianobr@gmail.comMonday, November 26, 2012