Departamento de Eletrónica,
Telecomunicações e Informática
Web Semântica
Trabalho Prático 1
Mestrado em Sistemas de Informação
Docente: Prof. Hélder Zagalo Discentes: Emanuel Pires – 77994
Mário Monteiro – 77910
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 2
Índice
INTRODUÇÃO ........................................................................................................................... 3
REQUISITOS ............................................................................................................................. 3
DADOS ORIGINAIS .................................................................................................................... 4
QUERIES .................................................................................................................................. 7
INFERÊNCIAS ........................................................................................................................... 8
APLICAÇÃO WEB ..................................................................................................................... 9
VISUALIZAÇÃO DOS GRAFOS .................................................................................................. 15
CONCLUSÃO .......................................................................................................................... 16
ANEXO..................................................................................................................................... 17
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 3
INTRODUÇÃO Este relatório realiza-se no âmbito da unidade Curricular de Web Semântica do Mestrado
em Sistemas de Informação com o intuito de criar uma aplicação Web que permitisse a
pesquisa e inferência de triplos com recurso as ferramentas Django/Python.
Tem como objectivo criar uma aplicação com recurso a triplos de dados obtidos através de
uma fonte externa, ofereça um conjunto de funcionalidades de pesquisa, inserção e de
inferência de novos triplos através de relações indirectas entre os dados.
REQUISITOS
Foi determinado como requisitos:
● Desenvolver um módulo grafo.py.
● Desenvolver uma aplicação em Django/Python/HTML5, que ofereça um conjunto
de funcionalidades no âmbito da temática escolhida, utilizando os dados
estruturados em grafos.
● Implementar no módulo grafo.py os restantes métodos que permitirão a pesquisa e
a inferência.
● Encontrar relações indirectas entre os nós para criar regras de inferência e
implementá-las.
● Oferecer a possibilidade de visualização dos grafos.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 4
DADOS ORIGINAIS Para este trabalho foi escolhido um conjunto de dados sobre o campeonato português, no
que toca aos jogos realizados na 1ª liga, sobre isso é realizado uma serie de operações
como:
Classificação de todas equipas;
Apresentação dos resultados por jornadas;
Apresentação dos plantéis das respectivas equipas;
Informações dos jogos;
Informações estatísticas (numero de jogos sem perder, numero de jogos sem sofrer
golos e jogos sem marcar golos).
Dados estes foram organizados manualmente em forma de tuplos (subject, predicate,
object), tendo em conta as informações que fomos adquirindo em sites desportivos como
por exemplo: www.abola.pt e www.ligaportugal.pt. A lista de dados contidos no ficheiro
encontra-se descrito na tabela que se segue.
Chave Descrição
equ-n ID único para cada equipa, sendo n o número para cada equipa (Ex:
equ-1, equ-2, … ,equ-n).
nome Nome da respectiva equipa.
cidade Cidade em que está sediada a respectiva equipa.
estadio Estádio onde a equipa realiza os seus jogos.
presidente Presidente da equipa.
criado Ano em que surgiu a equipa.
imagem Logótipo associado a equipa.
plantel Foto do plantel da equipa principal.
jogN ID único para cada jogo, sendo N o numero para cada jogo (Ex: jog1,
jog2, …, jogN).
epoca Época desportiva em que se realiza um determinado jogo.
jornada Jornada que o jogo se realizou.
equipa1 Equipa da casa.
equipa2 Equipa que participou no jogo na qualidade de visitante.
goloE1 Todos os golos marcados pela equipa da casa.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 5
goloE2 Todos os golos marcados pela equipa visitante.
data A data que se realizou o jogo.
jogadorN ID único para cada jogador, sendo N o numero para cada jogo (Ex:
jog1, jog2, …, jogN).
nome Armazena o nome do respectivo jogador.
clube Armazena o ID da equipa pelo qual joga o respectivo jogador.
golos Número de golos marcado durante todos os jogos realizados na presente
época desportiva.
posicao A posição em campo do respectivo jogador.
cartaoAmarelo Quantidade de cartões amarela acumulado pelo jogador.
cartaoVermelho Quantidade de cartões vermelho acumulado pelo jogador.
passeGolo Quantidade de passes de golo do respectivo jogador.
numero Número de camisola do respectivo jogador.
idade Data de nascimento do jogador.
tempoJogo Tempo de jogos realizado pelo jogador.
alturaPeso Altura e o peso do jogador.
pais Nacionalidade do jogador.
imagem Contém um link para a foto do jogador
Com aplicação de inferência, vai aparecer novos tuplos, no qual passa-se a destacar na
próxima tabela.
Inferência Descrição
Tipo Classifica o tipo de jogo (Clássico, Derby e Normal).
goleada
Classifica o resultado do jogo como sendo: Goleada caso o
número de golos do vencedor for superior ou igual a 4 e
normal, caso suceder o contrário.
De realçar ainda que os dados apresentados acima, estão armazenados no ficheiro
futebol.csv
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 6
IMPLEMENTAÇÃO DO MÓDULO GRAFO.PY
Seguindo as directrizes traçado como objectivo do desenvolvimento do presente trabalho,
foi criado o Graph, com uma solução sem a utilização de dicionários. Deste modo optou-se
em criar uma estrutura de listas, reduzindo também o número de listas para uma (spo), ao
invés de três (spo, pos, osp).
O módulo é composto pelos seguintes métodos:
__init__(self) – método construtor da classe Graph. Inicializa a lista spo onde
vão ser armazenados os triplos.
add(self, sub, pred, obj) – chama a função addtoindex para adicionar um triplo à
lista spo.
addtoindex(index, a, b, c) – adiciona um determinado triplo à lista spo, caso
este ainda não exista.
remove(self, sub, pred, obj) – chama a função removefromindex para remover
um triplo da lista spo.
removefromindex(index, a, b, c) – remove um triplo da lista spo, caso este
exista.
triples(self, sub, pred, obj) – pesquisa triplos na lista spo e faz yield dos
resultados.
load(self, filename) – carrega um ficheiro .csv com triplos para a lista spo.
save(self, filename) – guarda um ficheiro .csv com a lista de triplos.
query(self, clauses) – faz pesquisas específicas à lista de triplos e retorna os
resultados.
applyinference(self, rule) – gera novos triplos a partir de informação contida em
outros, através de regras pré definidas.
triplestodot(self, filename) – guarda os triplos num ficheiro .dot de modo a
tornar o grafo visualizável.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 7
querytodot(self, query, b1, b2, filename) – converte os resultados de uma query
para o formato .dot.
QUERIES
Praticamente todas as informações apresentadas e tratadas provém da execução de queries
baseados em triplos (subject, predicate, object), para melhor compreensão passa-se a
apresentar e descrever as queries aplicadas para cada método utilizado. Além da descrição
dos mesmo pode ver em anexo as referidas queries.
Método Descrição
Dasboard
Possui a querie que permite validar as credências do utilizador.
Recebe como entrada o username e a password e proporciona
como a saída o nome, o e-mail e o logo do mesmo utilizador
caso encontrar seu registo no ficheiro futebol.csv. Caso os
dados do utilizador estiverem autênticos será executado uma
nova querie que proporciona as informações relativamente aos
jogos realizados.
searchJogo
Possui a querie que possibilita filtrar os jogos de acordo com a
preferência do utilizador, ou seja apresenta os jogos que
sofreram as inferências.
classF, classificar
Tem como principal propósito realizar duas queries para
encontrar todos os jogos, tanto como visitado e visitante de
todas as equipas e realizar a operação de soma dos pontos
obtidos por cada vitória ou empate, assim como os golos
Marcados ou sofridos, número de vitórias ou derrotas.
listautilizadores O método utiliza a querie para listar todos os utilizadores.
VerPlantel
O método utiliza a querie para seleccionar todos os jogadores
de uma determinada equipa. Recebe como entrada uma ID da
equipa proporciona as informações do Jogador (nome, imagem,
numero e posição).
shearchJogador
Esta querie tem como base, pesquisar mais informações
necessárias sobre um determinado jogador, de acordo com o ID
do jogador fornecido.
RegistarJogo
Possui uma pequena querie para seleccionar u jogo e fornecer
informação para ser utilizado na opção de escolha de uma
equipa no processo de registo de um novo jogo.
JogosSemPerder Método que visa seleccionar o numero de jogos quecada equipa
não perdeu desde a ultima derrota,<Para a realização da referida
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 8
estatística.
ClassJogos Método que permite executar a querie para apresentar dados
sobre os jogos de todas as equipas.
JogosSemSofrerG
Método que permite executar a querie no método classJogos e
utiliza os resultados para somar as quantidades de jogos que
uma equipa não sofreu golos em jogos já realizados. Para a
referida estatística.
jogosSemMarcarGolos
Método que permite executar a querie no método classJogos e
utiliza os resultados para somar as quantidades de jogos que
uma equipa não marcou golos em jogos já realizados. Para a
referida estatística.
estatisiticaMelhorAtaque
Método que permite executar a querie no método classJogos e
utiliza os resultados para somar as quantidades de golos
marcados e fazer a média de golos marcados por cada equipa,
para determinar o melhor ataque. Para a referida estatística.
estatisticaMelhorDefesa
Método que permite executar a querie no método classJogos e
utiliza os resultados para somar as quantidades de golos
sofridos e fazer a média de golos sofridos por cada equipa, para
determinar a melhor defesa. Para a referida estatística.
estatisticaCartoesAmarrelos
Método que permite executar a querie e somar as quantidades
de cartões amarelos por cada equipa, para determinar a equipa
com maior número de cartões. Para a referida estatística.
INFERÊNCIAS
Para realização desta tarefa, foi criado um ficheiro cujo nome é InferenceRule.py, que
contém classes como:
DefinirClassico – classe cujo objectivo é procurar de entre todos jogos e classifica-
los, como sendo: Derby, Clássico e Normal. Dentro da classe, foi criado também uma regra
cujo nome é: maketriples, pelo que recebendo o resultado da pesquisa, retornada pela
classe vai ser criada as regras para cada tipo de situações. Um clássico é definido quando
existem um confronto directo entre duas equipas que já foram vencedores da 1ª liga, Derby
é quando há um confronto entre equipas da mesma cidade e os restantes são considerados
normais. Esta inferência é dada através da relação existente entre equipa e jogo, cada
equipa pode realizar dois jogos, sendo assim um dentro da casa e outra fora, assim podemos
encontrar o nome de cada equipa e aplicar as regras.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 9
DefinirGoleada – Assim como a classe acima referenciada, esta classe, vai fazer
inferência e aplica uma regra para definir se um determinado jogo foi finalizado com uma
goleada ou não. Foi definido como goleada, quando a equipa vencedora marcar no mínimo
4 golos, não interessando o resultado da outra equipa. Cada jogo é feito por duas equipas,
como cada jogo pode ter 0 ou mais golos, podemos fazer inferência para determinar se o
número de golos pode ser tratado como goleada ou não.
APLICAÇÃO WEB
Um dos requisitos do trabalho é o desenvolvimento de uma interface gráfica voltado para
Web, que obedeça as métricas de usabilidade, a fim de apresentar os dados. Deste modo, foi
utilizado tecnologias como:
framework Django;
python language;
Bootstrap;
Jquery.
Com estas tecnologias, foi possível desenvolver todos requisitos pré-definido no trabalho.
Figura 1 - Login
Para utilizar a aplicação e necessário realizar a autenticação no mesmo, utilizando as
credências previamente adicionado na aplicação (futebol.csv). Ex. utilizadores: gine,
senha: 123 ou mtutucv, 123.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 10
Tarefas como, pesquisar, inserir e validar o utilizador é realizado por intermédio de queries
em tuplos.
A página principal, apresenta uma lista de todos jogos realizados durante a época em
questão. Deste modo criamos um campo onde o utilizador tem possibilidade de fazer
pesquisas com aplicação de inferências para obter mais informações sobre o jogo, como
mostra a figura que se segue.
Figura 2- Página Principal
Na legenda número 1 obtemos um menu, que possibilita realizar tarefas como: Registar
Utilizador, Registar Jogo, Listar. A legenda número 2 apresenta lista total dos jogos
realizados.
Ao utilizar a dropdown, apresentado na legenda número 3, é possível ter mais informações
acerca do jogo realizado, baseando na inferência criada. Ao utilizar a legenda número 6 o
utilizador pode ver a sua informação como terminar a sua sessão.
Ao aceder ao menu Registar e escolher o submenu Registar Utilizador, o sistema
proporciona um formulário que possibilita adicionar novo utilizador. Os dados inseridos é
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 11
sempre guardada sob forma de tuplo, no ficheiro futebol.csv. A figura que se segue
apresenta tal formulário.
Figura 3 - Inserir Utilizador
Ainda na legenda número 1 disponível na Figura 1, é possível também adicionar um novo
jogo, O processo de inserir um novo jogo é igual de um novo utilizador. Para adicionar um
novo jogo a que se preencher o formulário apresentado na figura.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 12
Figura 4 - Adicionar um novo Jogo
Depois de preencher o formulário e escolher a opção de guardar, o sistema se encarrega de
ir buscar o ultimo ID do jogo inserido de forma a atribuir um novo ID para o novo registo,
assim de seguida, segue o armazenamento automático dos dados referentes ao jogo, no
tuplo.
Na legenda número 1, o utilizador tem possibilidade de fazer a listagem das classificações,
assim como apresentado na figura que se segue.
Figura 5 - Equipas e Classificações
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 13
Nesta página, pode-se ainda realizar a filtragem de equipas por cidade, assim como é
indicado na legenda número 1 e ainda ver lista de jogadores para cada equipa, como é
indicado na legenda 2 desta figura, ver figura que se segue para ver as listagens das
equipas.
Figura 6 - Plantel principal de uma equipa.
Também pode-se obter uma lista de utilizadores, seguindo assim a legenda número 1
apresentado na figura número 2.
Figura 7 - Lista dos utilizadores registado no sistema.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 14
A legenda número 4, da figura 2, representa o menu de estatística e dos Grafos, ao aceder o
menu estatística, é possível obter três tipos de estatística, estes que são sempre apresentados
sob forma de gráfico dinâmico, vide as figuras que se seguem.
Figura 8 - Estatística jogos sem perder em curso
Figura 9 - estatística jogos sem sofrer golos
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 15
Figura 10 - estatística jogos sem marcar golos
VISUALIZAÇÃO DOS GRAFOS
Para ser possível a visualização dos grafos foi implementado um método que guarda os
triplos e as suas relações num ficheiro. dot que é invocado quando se carrega no botão
gravar na aplicação web. Este grafo é passível de ser visualizado recorrendo ao programa
Graphviz, e está disponível em formato pdf, o resultado é o demonstrado abaixo:
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 16
Figura 11 - Visualização dos grafos
Importante realçar inda de que, pelo fatos de os dados contidos no ficheiro serem
demasiado grande não é possível apresentar um grafo completo, pelo que só foi apresentado
uma parte do grafo.
CONCLUSÃO
Com base na informação registada neste relatório e analisando os requisitos pedidos, o
grupo considera ter cumprido com a lista de objectivos, tendo em conta que os conteúdos
aprendidos foram apresentados com sucesso e sem qualquer tipo de problema.
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 17
ANEXO
Figura 12 - Metodos classificar e classf 1ª parte
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 18
Figura 13 - 2ª parte do Metod classificar e classf
Figura 14 - Metodo ClassJogos
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 19
Figura 15 - Metodo dasbord
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 20
Figura 16 - Metodo estatisticaCartoesAmarrelos
Figura 17 - metodo listaUtilizadores
Web Semântica – MSI – 2014/2015
Mário Monteiro - 77910 || Emanuel Pires - 77994 21
Figura 18 - Metodo registarJogo
Figura 19 - Método shearchJogador
Figura 20 - Método searchJogo