Ficha f5

RDF e SPARQL

Processamento e Representação de Conhecimento - PRC (MEI - 1ºano)

Este ficha prática contem exercícios para serem resolvidos nas aulas teórico-práticas com vista a sedimentar os conhecimentos relativos a:

  • Utilização do RDF para especificar conhecimento.
  • Utilização do SPARQL para fazer queries a informação especificada em RDF.


Na última ficha, especificaste o conhecimento presente na história que te foi apresentada e que se transcreve a seguir (o ficheiro RDF está disponível a partir dos recursos da ficha).

O Eduardo tem 21 anos e é um estudante da Universidade do Minho oriundo do Porto. Ele fala fluentemente português, espanhol e inglês. Neste semestre decidiu aprender alemão. Juntamente com os seus amigos, o Carlos e a Ana, inscreveu-se no curso de Alemão lecionado pelo professor Helmut Ratz, que será lecionado todas as sextas feiras no centro de línguas da universidade. O Eduardo tem muita facilidade na aprendizagem de línguas estranjeiras e faz rápidos progressos. No entanto, o prof. Helmut repara que ele precisa de praticar mais a oralidade e apresenta-o a Hanna, uma estudante alemã que está na universidade a frequentar o curso de biotecnologia. Hanna é alemã e está ansiosa por falar português. O Eduardo e a Hanna conhecem-se e tornam-se parceiros nesta aventura de aprender uma nova língua. A experiência revela-se frutuosa e ambos aprendem a falar fluentemente alemão e português.

Tenta agora responder às seguintes questões especificando queries em SPARQL:

  1. Que tipos de coisas extraístes da história que te foi apresentada?
  2. Que propriedades consideraste na tua especificação?
  3. Quais os nomes das personagens referidas na tua história?
  4. Quais os nomes dos que são estudantes?
  5. Quais os nomes dos estudantes que frequentam o curso de Alemão?
  6. Quais as designações dos cursos referidos na história?
  7. Qual o nome das personagens de nacionalidade alemã?
  1. Usou-se a propriedade ex:titulo para apanhar todos os triplos que contivessem títulos, no fim indicou-se que se pretendiam os resultados ordenados por ordem alfabética ascendente.
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ex: <http://www.di.uminho.pt/jcr/XML/rdf/ex2#>
    
    SELECT ?titulo
    WHERE {
      ?s ex:titulo ?titulo.
    }
    ORDER BY ASC( ?titulo ) 
  2. Quando criamos o RDF das publicações (última aula), colocamos os autores dentro dum contentor do tipo Bag, que em termos de triplos dá origem a um nodo branco, para conseguirmos a informação desse contentor tivemos de usar uma variável a fazer match com esse nodo branco, _:x.
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ex: <http://www.di.uminho.pt/jcr/XML/rdf/ex2#>
    PREFIX mypubs: <http://www3.di.uminho.pt/~jcr/AULAS/prc2015/fichas/mypubs.rdf#>
    
    SELECT ?titulo
    WHERE {
      ?pub ex:temAutor _:x.
      _:x ?p ?o.
      ?o ex:nome "Miguel Ferreira".
      ?pub ex:titulo ?titulo
    }
    
  3. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ex: <http://www.di.uminho.pt/jcr/XML/rdf/ex2#>
    PREFIX mypubs: <http://www3.di.uminho.pt/~jcr/AULAS/prc2015/fichas/mypubs.rdf#>
    
    SELECT ?titulo
    WHERE {
      ?pub ex:titulo ?titulo.
      ?pub ex:data "2008"
    }
  4. Aqui usamos a clausula GROUP BY e o operador COUNT para cálculo de um valor agregado.
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ex: <http://www.di.uminho.pt/jcr/XML/rdf/ex2#>
    PREFIX mypubs: <http://www3.di.uminho.pt/~jcr/AULAS/prc2015/fichas/mypubs.rdf#>
    
    SELECT ?ano (COUNT(?pub) AS ?num)
    WHERE {
      ?pub ex:data ?ano
    }
    GROUP BY ?ano
  5. Esta questão resolve-se combinando as duas últimas soluções:
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX ex: <http://www.di.uminho.pt/jcr/XML/rdf/ex2#>
    PREFIX mypubs: <http://www3.di.uminho.pt/~jcr/AULAS/prc2015/fichas/mypubs.rdf#>
    
    SELECT ?nome, (COUNT(?pub) AS ?num)
    WHERE {
      ?pub ex:temAutor _:x.
      _:x ?p ?o.
      ?o ex:nome ?nome.
    }
    GROUP BY ?nome
    ORDER BY ASC(?nome)