ISEL
2009 / 2010
DEETC - Mestrado em Engenharia Informática
Guia Aula Prática (há 1 questão para responder em relatório)
Representação e Processamento de Conhecimento (RPC)
1. Instalar a biblioteca “RDFLib” (http://rdflib.net)
Para instalar a biblioteca RDFLib (versão 2.4.2) e o Python (versão 2.6.5) siga as indicações em:
•
_instalar_e_compilar_RDFLib_e_Python.txt.
Sobre documentação adicional Python:
•
aByteOfPython.pdf.
•
OReilly_Learning_Python_3rd_Edition_Oct_2007.pdf.
Sobre documentação adicional RDFLib:
•
Punções help e dir do Python. Exemplo (directamente na “Python Shell”):
o
import rdflib #importar a biblioteca
o
dir( rdflib.Graph ) #conteúdo da classe Graph
o
help( rdflib.Graph ) #comentários escritos no código de Graph
o
help( rdflib.Graph.parse ) #comentários em Graph.parse()
o
help( rdflib.Graph.query ) #comentários em Graph.query()
•
Mais informação sobre estas funções na documentação Python e também nas páginas
52-55 de oEssencialDaLinguagemPthon.pdf.
•
Recorra ao código fonte disponível na pasta: rdflib-2.4.2\rdflib\
•
Informação adicional em: http://code.google.com/p/rdflib/wiki/Learning
O ambiente de desenvolvimento IDLE que está incluído na distribuição do Python é suficiente para
a utilização nas aulas práticas. O ambiente é simples e permite que a atenção se foque nos
exercícios (e não em compreender o próprio ambiente de desenvolvimento). Posteriormente poderá
usar um ambiente mais completo, e.g. o “plug-in” Ecplise PyDev (http://pydev.org/).
2. Iniciar uma descrição RDF (o mesmo grafo da aula anterior)
Considere o vocabulário FOAF (“Friend Of A Friend”) especificado em “z_FOAF_spec.pdf”.
a) Desenhe, no papel, um grafo com três pessoas: eu, amigoA e amigoB. Cada pessoa é do tipo
(rdf:type) FOAF Person.e tem um nome (ver que propriedade FOAF utilizar).
b) Estenda o grafo anterior indicando que a pessoa eu conhece e é conhecida pelas outras duas e
que existe uma pessoa que é conhecida pelas outras mas que não conhece uma delas; a
propriedade FOAF knows é usada para descrever asserções sobre “quem conhece quem”.
c) Estenda o grafo anterior indicando para a pessoa eu: o endereço de e-mail e o cognome
(“nickname”); para um amigo o seu endereço de e-mail (ver que propriedades FOAF utilizar).
Paulo Trigo
1/3
ISEL
2009 / 2010
DEETC - Mestrado em Engenharia Informática
Guia Aula Prática (há 1 questão para responder em relatório)
Representação e Processamento de Conhecimento (RPC)
3. Interrogações usando objectos SPARQL da “RDFLib”
Vamos começar com a informação no directório “_mySPARQL”.
Analise “a01_interrogarRDF_SPARQL.py”; em especial “ObterConhecimentoMutuo”.
a) Armazene uma representação (“serialization”) “xml” da descrição RDF que definiu na questão
anterior e armazene essa descrição em “foaf_my.xml”.
b) Estenda o código em “a01_interrogarRDF_SPARQL.py” de modo a construir um novo grafo
(recorde a aula prática anterior) que contenha apenas as pessoas que se conhecem mutuamente.
c) Armazene uma representação (“serialization”) “xml” e outra “nt” do novo grafo; as representações
devem ser armazenadas, respectivamente, nos ficheiros “foaf_conhecidosMutuos.xml” e
“foaf_conhecidosMutuos.nt”.
d) Construa uma função “obter_nome( grafo )” que devolva, para “grafo”, o cognome
(“nickname”) de uma determinada pessoa.
4. Interrogações usando o analisador (“parser”) SPARQL
Analise “a02_interrogarRDF_SPARQLcomParser.py” e note que a mesma interrogação da
questão anterior (também neste ficheiro em “ObterConhecimentoMutuo”) será respondida por
análise directa de uma “string” contendo a directiva SPARQL.
a) Adicione ao seu “foaf_my.xml” o triplo <foaf:Person, rdf:type, rdfs:Class>.
b) Construa uma função “obter_Instancia( grafo )” que devolva, para “grafo”, todos os
elementos (nós) que sejam do tipo classe (i.e., todos x tal que <x, rdf:type, rdfs:Class>
pertence ao “grafo”). Atenção aos qualificadores “rdf” e “rdfs” pois têm que ser correctamente
associados aos seus “namespace” para poderem constar na “string” SPARQL.
5. Ler e avaliar expressões SPARQL
Analise “b_interrogador.py; em especial “main” e “obterResultadoInterrogacao”.
a) Analise os ficheiros “foaf.rdf” e “foaf_01.sparql” e configure o interrogador para executar o
teste “foaf; execute o teste também usando a linha de comando (em modo consola).
b) Para cada um dos ficheiros “*.rdf” desenhe o grafo que a descrição representa.
c) Para cada um dos ficheiros “*.sparql” escreva, em Português, a interrogação representada.
d) Construa uma descrição rdfs com 6 classes: a, b, c, d, e, f; indique que b é subclasse de a, que c
é subclasse de b, que d é subclasse de b e que f é subclasse de d. Armazene esta descrição em
“z01_hierarquia.rdf”.
e) Construa, em “z_hierarquia_transitividade.sparql”, uma interrogação SPARQL que
devolva todas as asserções <C1 rdfs:subClassOf C2> possíveis de deduzir pelo facto da
relação de “subclasse” ser transitiva (ou seja, excluindo as relações directas de subclasse).
Paulo Trigo
2/3
ISEL
2009 / 2010
DEETC - Mestrado em Engenharia Informática
Guia Aula Prática (há 1 questão para responder em relatório)
Representação e Processamento de Conhecimento (RPC)
6. Estender grafo a partir do resultado de interrogação SPARQL
Considere a sua interrogação em “z_hierarquia_transitividade.sparql”.
a) Construa, em “c_grafoTransitividade.py” um programa que execute a sua interrogação.
b) Construa, em “z02_hierarquia.rdf”, outra descrição rdf com outra hierarquia entre conceitos;
execute em “c_grafoTransitividade.py” com esta sua nova descrição.
c) Estenda “c_grafoTransitividade.py” de modo a que o grafo que é interrogado seja
aumentado com todas as asserções <C1 rdfs:subClassOf C2> transitivas.
7. Usar SPARQL para inferir asserções a partir das definições RDFS
Vamos passar para a informação no directório “_mySPARQL_RDFS”.
Considere que NS é o qualificador do “namespace”: “http://#”.
a) Construa, em “exemplo.rdf” as seguintes asserções (onde todos os recurso estão em NS): “o
recurso ws é do tipo disciplina, PT é do tipo docente, docente é subclasse de funcionário.
b) Construa, no papel, todas as asserções que se deduzem, no grafo da alínea anterior, a partir do
conceito de rdfs:Class.
c) Execute “a_construirRDFS.py” de modo a obter apenas o resultado da alínea anterior.
d) Execute “a_construirRDFS.py” e complete o seu grafo com a informação resultante da
aplicação das regras que permitem inferir novas asserções RDFS.
e) Altere “exemplo.rdf” para que “obter_subClassOf_Transitiva” gere novas asserções.
Ilustre as novas asserções no grafo que está a desenhar; se o grafo começar a ficar “todo
riscado” desenhe grafos separados para cada um das regras de inferência.
8. Deduzir novas asserções a partir de Property e subPropertyOf
Questão a responder em relatório a entregar até ao fim da semana seguinte à da aula prática.
Sugestão: consulte as regras semânticas do RDFS (e.g., em slides “b02_linguagemRDFS.pdf”.
a) Analise “obter_Class”; complete “obter_Property”.
b) Analise “obter_C1_subClassOf_C2”; complete “obter_P1_subPropertyOf_P2”.
c) Escolha o que deve analisar e complete “obter_subPropertyOf_Reflexiva”.
d) Escolha o que deve analisar e complete “obter_subPropertyOf_Transitiva”.
e) Construa a função “obter_domain”.
f)
Construa a função “obter_range”.
g) Garanta que cada uma das alíneas anteriores gera um ficheiro com as novas asserções.
Paulo Trigo
3/3
Download

Mestrado em Engenharia Informática Guia Aula