Como descrito antes, o Zeitgeist é um registrador de atividades ou eventos, estes eventos são registrados como Ontologia.
Isto quer dizer, que não é simplesmente registrado o que, como e com quem aconteceu o evento, previamente o tipo de como, o quê e com quem
aconteceu deve ser definido em forma de uma URI, e só então esta URI é registrada com o evento; desta forma, outras aplicações podem reutilizar
esta definição para sua compreensão.
Grande parte desta definição, já foi previamente criada em outro projeto, o
Nepomuk. O Zeitgeist usa esta definição por padrão, entretanto, novas podem ser criadas.
Vamos a um exemplo.
Quando um usuário recebe uma mensagem de texto via algum 'Instant Messenger', pode-se registrar um evento informando:
- O que aconteceu?
Recebi algo
Porém, é armazenado com a URI que define o 'recebido' no caso:
- Como aconteceu?
Alguém enviou
Novamente, deve conter a URI do evento 'alguém enviou':
- Quando aconteceu?
Neste momento.
Registrado com timestamp.
- Por onde?
Por uma aplicação.
Geralmente a URI do Application, no meu caso:
application://pidgin.desktop
- Quais os itens envolvidos?
A Mensagem/O Texto/O Arquivo/Um e-mail...
Pode haver mais de um 'o que' no mesmo evento, posso apagar vários arquivos de uma só vez, receber várias mensagens de uma só vez, etc.
No exemplo a seguir, o usuário recebeu uma mensagem com um link, as duas informações são registradas.
No Zeitgeist, isto é chamado de 'subject'.
Passando isto para o Zeitgeist, em código
PythonM:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from zeitgeist.client import ZeitgeistClient
from zeitgeist.datamodel import Event, Interpretation, Manifestation, Subject
import time
event = Event.new_from_values(
#oque aconteceu: recebi algo
#uri http://www.zeitgeist-project.com/ontologies/2010/01/27/zg#ReceiveEvent
interpretation=unicode(Interpretation.EVENT_INTERPRETATION.RECEIVE_EVENT),
#como aconteceu: alguém enviou
#uri http://www.zeitgeist-project.com/ontologies/2010/01/27/zg#WorldActivity
manifestation=unicode(Manifestation.EVENT_MANIFESTATION.WORLD_ACTIVITY),
#quando: agora
timestamp= int(time.time() * 1000),
#por onde: (no meu caso pidigin)
#é comum indicar o .desktop da aplicação
actor= 'application://pidgin.desktop',
#com o que: com uma mensagem e um link
#assim como o Evento, o com o que também recebe uma definição especial similar,
#ser um arquivo ou uma música uma imagem
subjects=[
Subject.new_for_values(
#o que é isto: uma mensagem de texto
#http://www.semanticdesktop.org/ontologies/2007/03/22/nmo#IMMessage
interpretation=unicode(Interpretation.IMMESSAGE),
#como isto existe: como parte de um software
#http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#SoftwareService
manifestation=unicode(Manifestation.SOFTWARE_SERVICE),
#endereço único da mensagem:
#se fosse um arquivo seria o endereço dele no sistema
#no caso do pidgin não existe um uri para a mensagem
#mas se você colocar por usuário pode posterioremente agrupar
uri= 'pidgin://gtalk/fulano@gtalk.com',
#local de origem: geralmente mesmo que uri/../
#se fosse um arquivo seria o diretório a cima
#se fosse um site seria o domínio, ou também um diretório a cima
#se fosse um subdomínio poderia ser o domínio
origin='pidgin://gtalk/fulano@gtalk.com',
minetype='text/plain',
#onde fica: no hd, na caixa de e-mail, na internet
#se for no hd pode ser o uuid do hd
storage='local',
#representação em texto: a própria mensagem
text='a própria mensagem http://www.vivaolinux.com.br'
),
Subject.new_for_values(
#o que é isto: um link
interpretation=unicode(Interpretation.WEBSITE),
#como isto existe: como parte de WEB
manifestation=unicode(Manifestation.WEB_DATA_OBJECT),
#endereço único do link:
uri= 'http://www.vivaolinux.com.br',
#local de origem: geralmente mesmo que uri/../
origin='http://vivaolinux.com.br',
minetype='text/html',
#onde fica: no hd, na caixa de e-mail, na internet
storage='web',
#representação em texto
#poderia ser novamente a uri já que geralmente não saberia o nome do site
text='viva o linux'
),
]
)
#instancia um client para enviar o evento
zgcleint = ZeitgeistClient()
zgcleint.insert_event(event)
Veja mais sobre Ontologia do Zeitgeist, na documentação de desenvolvimento.
Documentação Oficial:
http://zeitgeist-project.com - Ontology
Um dos melhores posts sobre o assunto:
http://www.grillbar.org/wordpress