Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo...

25
Terceiro Trabalho Prático de GTI Resolução

Transcript of Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo...

Page 1: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Terceiro Trabalho Prático de GTI

Resolução

Page 2: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 1

Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto abaixo e que se encontram disponíveis no material de suporte para estes exercícios. Escreva um XML schema que capture uma visão integrada das duas fontes de dados.

Page 3: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 1

<?xml version="1.0">

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="BookType">

<xsd:sequence>

<xsd:element name="title" type="xsd:string" />

<xsd:element name="author" type="xsd:string" />

<xsd:element name="isbn" type="xsd:string" />

<xsd:element name="category" type="xsd:string" minOccurs="0" />

<xsd:element name="publisher" type="xsd:string" minOccurs="0" />

<xsd:element name="pages" type="xsd:integer" minOccurs="0" />

<xsd:element name="price" type="xsd:decimal" minOccurs="0" />

<xsd:element name="date" type="xsd:string" minOccurs="0" />

<xsd:element name="description" type="xsd:string" minOccurs="0" />

</xsd:sequence>

Page 4: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 1

</xsd:complexType>

<xsd:complexType name="CatalogueType">

<xsd:sequence><xsd:element name="book" type="BookType"

maxOccurs="unbounded" /></xsd:sequence>

</xsd:complexType>

<xsd:element name="catalogue"> type="CatalogueType">

</xsd:schema>

Page 5: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 2

Escreva em XQuery dois mapeamentos entre esquemas (views), um para cada um dos ficheiros XML referidos no Exercício 1, que produzam XML em conformidade com o schema dado como resposta. Defina ainda uma view adicional, de nome mediated-schema, que faça a união dos dois mapeamentos sobre um elemento de raiz comum e que produza XML em conformidade com o schema dado como resposta ao exercício 1.

Page 6: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 2declare namespace gti="uri:gti.pt";

declare function gti:view1() {

<catalogue xsi:noNamespaceSchemaLocation="schema.xsd">

{

for $book in doc("book-catalogue1.xml")//book

return <book>

<title>{data($book/title)}</title>

<author>{data(reverse(tokenize(data($book/author),",

")))}</author>

<isbn>{data($book/@id)}</isbn>

<category>{data($book/genre)}</category>

<price>{replace(data($book/price),"\$","")}</price>

<date>{data($book/publish_date)}</date>

<description>{data($book/description)}</description>

</book>

} </catalogue>}

Page 7: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 2declare function gti:view2() {

<catalogue xsi:noNamespaceSchemaLocation="schema.xsd">

{ for $book in doc("book-catalogue2.xml")//book

return <book>

<title>{data($book/title)}</title>

<author>{data(reverse(tokenize(data($book/author),",

")))}</author>

<isbn>{data($book/isbn)}</isbn>

<category>{data($book/../categoryname)}</category>

<publisher>{data($book/publisher)}</publisher>

<pages>{data($book/pagecount)}</pages>

<price>{replace(data($book/price),"\$","")}</price>

<date>{data($book/pubdate)}</date>

<description>{data($book/blurb)}</description>

</book>

} </catalogue>}

Page 8: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 2

declare function gti:integrated() {

let $aux = ( gti:view1()//catalogue union gti:view2()//catalogue )

return <catalogue xsi:noNamespaceSchemaLocation="schema.xsd">{$aux}</catalogue>

}

Page 9: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 3

Escreva as seguintes interrogações em XQuery e diga quais os resultados obtidos aquando da sua execução sobre a view mediated-schema:

Page 10: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 3

Quais os autores que escreveram mais do que um livro?

let $doc := gti:integrated()

for $a in distinct-values($doc//author)

where count($doc//book[author= $a]) > 1

return <author>{$a}</author>

Page 11: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 3

Qual o livro mais caro?let $doc := gti:integrated()

return $doc//book[price = max($doc//price)]/title

Page 12: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 3

Quais as categorias existentes e quantos livros existem em cada categoria?

let $doc := gti:integrated()

for $c in distinct-values($doc//category)

return

<category>

<name>{$c}</name>

<books>{count($doc//book[category=$c]}</books>

</category>

Page 13: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 4

Usando o algoritmo de "string matching" baseado em programação dinâmica dado nas aulas teóricas, calcule a similaridade e o alinhamento entre as duas cadeias de caracteres abaixo indicadas. Indique também a matriz calculada pelo algoritmo.

AATTGGTCCC

AACTTGGACC

Page 14: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 4A A T T G G T C C C

0 1 2 3 4 5 6 7 8 9 10A 1 0 1 2 3 4 5 6 7 8 9A 2 1 0 1 2 3 4 5 6 7 8C 3 2 1 1 2 3 4 5 5 6 7T 4 3 2 1 1 2 3 4 5 6 7T 5 4 3 2 1 2 3 3 4 5 6G 6 5 4 3 2 1 2 3 4 5 6G 7 6 5 4 3 2 1 2 3 4 5A 8 7 6 5 4 3 2 2 3 4 5C 9 8 7 6 5 4 3 3 2 3 4C 9 9 8 7 6 5 4 4 3 2 3

edit distance = 3

alinhamento:A A - T T G G T C C CA A C T T G G A C C -

Page 15: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 5

Usando o algoritmo "simple tree matching" dado nas aulas teóricas, calcule a similaridade e o alinhamento das árvores que se seguem. Devem ser mostradas todas as matrizes calculadas pelo algoritmo. A

A / | \ / | \ B C D B C M / | | \ / \ E F G J E F / \ |\ / \ H I K L H N

Page 16: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 5Matriz para os filhos de A e A (nível 2)

B C D0 0 0 0

B 0 1 1 1C 0 1 5 5 retorno: 6M 0 1 5 5

Matriz para os filhos de B e B (nível 3)

0

retorno: 1

Matriz para os filhos de C e C (nível 3)

E F0 0 0

E 0 1 1F 0 1 3

retorno: 4

Matriz para os filhos de E e E (nível 4)

0

retorno: 1

Matriz para os filhos de F e F (nível 4)

H I0 0 0

H 0 1 1N 0 1 1

Matriz para os filhos de H e H (nível 5)

0

retorno: 1

Nas restantes iteracções o retorno é 0 (porque os nós são diferentes)Para alinhar, basta ligar os nós com o mesmo nome

Page 17: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

Usando as ferramentas de extracção de dados introduzidas nas aulas práticas e tendo como base de conhecimento a lista de filmes e nomes de actores fornecida no material de suporte, indique um processo de extracção de informação às críticas de cinema contidas num ficheiro de texto, que também se encontra fornecido no material de suporte.

Page 18: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

import com.aliasi.chunk.*

import com.aliasi.dict.*;

import com.aliasi.util.*;

import com.aliasi.tokenizer.*;

import java.util.*;

import java.io.*;

Page 19: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

public class MovieReviews {

private MapDictionary dictionary;

private ExactDictionaryChunker chunker;

private Map movies;

public MovieReviews() {

this.dictionary = new MapDictionary();

this.movies = new hashMap();

addEntries(new File("actors.txt"),"ACTOR",1.0);

addEntries(new File("movies.txt","MOVIE",1.0);

this.chunker = new

ExactDictionaryChunker(dictionary,IndoEuropeanTokenizerFactory.FACTORY,true,true); }

Page 20: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

public void addReview(String aux) {

Chunking chunking = chunker.chunk(review);

Set reviewActors = new HashSet();

Set reviewMovies = new HashSet();

for (Chunk chunk : chinking.chunkSet() ) {

if(chunk.type().equals("MOVIE"))

reviewMovies.add(review.substring(chunk.start(),chunk.end())); else

reviewActors.add(review.substring(chunk.start(),chunk.end()));

}

Page 21: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

for (String movie : reviewMovies) {

Set aux = movies.get(movie);

if(aux==null) aux = new HashSet();

aux.addAll(reviewActors);

movies.put(movie,aux);

}

}

Page 22: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

public String getNextReview(BufferedReader reader) throws Exception {

StringBuffer aux = new StringBuffer();

while((s=reader.readLine())!=null && s.equals("##") == false) {

aux.append(s); aux.append(" ");

}

return aux.toString();

}

Page 23: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

public void AddEntries ( File file, String cat, double score) throws

Exception {

BufferedReader reader = new BufferedReader(new FileReader(file));

String s;

while((s=reader.readLine())!=null) dictionary.addEntry(new

DictionaryEntry(s.trim(),cat,score));

}

Page 24: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

public static void main ( String[] args ) throws Exception {

MovieReviews m = new MovieReviews();

BufferedReader reader = new BufferedReader(new FileReader("reviews.txt"));

String s;

while((s=getNextReview(reader)).length()>0) addReview(s);

for (Map.Entry entry : m.movies.entrySet() ) {

System.out.println("Actors for movie " + entry.getKey() + "*****");

for (String value : m.getValue()) System.out.println("-----" + value);

}

}

}

Page 25: Terceiro Trabalho Prático de GTI Resolução. Exercício 1 Considere dois ficheiros XML descrevendo catálogos de livrarias, dos quais se apresenta um excerto.

Exercício 6

Possíveis erros Nomes de actores que ocorrem na crítica,

mas não pertencem ao elenco Nomes de filmes que aparecem na crítica de

outros filmes Nomes de actores em diferentes formatos

(e.g., com ou sem iniciais) Nomes de filmes em diferentes formatos,

abreviados, etc.