1º semestre
Mini‐Projecto 2 – Entrega a 6/11/2009
Utilize o software apresentado nas aulas de laboratório para resolver cada um dos exercícios propostos. Tenha em conta que a biblioteca de funções da linguagem XPath
2.0 oferece mecanismos para a manipulação de elementos textuais através de
expressões regulares. Nas aulas de laboratório foi ainda introduzida a extensão XQuery
Full‐Text, através da qual é possível efectuar pesquisas por elementos contendo
determinados conteúdos textuais, com base em frases ou palavras chave.
Exercício 1
Escreva um programa XQuery que aceda à lista de restaurantes do site Web list.co.uk (i.e., converta o HTML para um documento bem formado para posteriormente ser processado com expressões XPath e XQuery) e construa um novo documento XML com uma listagem dos restaurantes localizados em Glasgow.
O URL para a página com a lista de restaurantes do site list.co.uk é o seguinte: http://www.list.co.uk/places/restaurants/.
Tenha em atenção que a listagem completa é apresentada através de uma sequencia de páginas HTML, em que cada uma contem apenas 25 itens. Na parte inferior de cada uma das páginas encontra‐se um índice que permite aceder às restantes, por exemplo através dos links Previous e Next. Tenha ainda em atenção que cada restaurante da lista possui uma página Web própria, contendo informação mais detalhada. O programa desenvolvido neste exercício deverá recolher até 4 páginas da listagem de restaurantes (um máximo de 100 restaurantes). Uma estratégia de concretização consiste em, por exemplo, seguir um máximo de 4 links com a âncora textual Next.
O programa desenvolvido neste exercício deverá ainda produzir como resultado um documento XML bem formado, seguindo a estrutura que se exemplifica na Figura 1.
<restaurantes> <restaurante>
<nome>Alla Turca</nome>
<desc>Proud to be the only Turkish restaurant in Glasgow...</desc> <morada>
<rua>192 Pitt Street</rua> <cidade>Glasgow</cidade> <zip>G2 4DY</zip> </morada> <url>http://www.list.co.uk/place/103016-alla-turca/</url> <phone>0141 332 5300</phone> </restaurante> <!-- restantes restaurantes... --> </restaurantes> Figura 1 – Documento XML com informação sobre restaurantes.
O Fodors é um site Web que publica resenhas sobre restaurantes de todo o mundo. Neste site, existe uma página Web para cada restaurante analisado. A lista de URLs da Figura 2 foi obtida através de uma expressão XQuery que faz uma pesquisa no site Web do Fodors através do URL indicado abaixo: http://www.fodors.com/world/europe/netherlands/amsterdam/restaurants-nam_best:26361.html A expressão XQuery extrai as cinco primeiras hiperligações para páginas do site com descrições de restaurantes na cidade de Amesterdão. http://www.fodors.com/world/europe/netherlands/amsterdam/review-150701.html http://www.fodors.com/world/europe/netherlands/amsterdam/review-134210.html http://www.fodors.com/world/europe/netherlands/amsterdam/review-150683.html Figura 2 – Lista de URLs com resenhas de restaurantes em Amesterdão.
2.1 – Apresente uma expressao XQuery que permita aceder ao Fodors, mais concretamente ao documento HTML com os restaurantes de Amesterdão (i.e., o URL indicado acima) e obter uma lista de hiperligações semelhante á que é apresentada na Figura 2. Em lugar das 3 primeiras hiperligações, o programa XQuery deverá obter todos os documentos com informação sobre restaurantes listados no site.
2.2 ‐ Utilize a ferramenta RoadRunner por forma a extrair a informação sobre os restaurantes descritos nas páginas Web listadas como resultado da alínea anterior.
O documento XML produzido como resultado pelo RoadRunner deve ser utilizado como input para uma expressão XQuery que permita converter os resultados para o formato exemplificado na Figura 2.
<restaurantes> <restaurante>
<nome>Bagels and Beans</nome> <cuisine>Eclectic</cuisine> <review>This low-key...</review> <url> www.fodors.com/world/europe/netherlands/amsterdam/review-150701.html </url> </restaurante> <!-- restantes restaurantes... --> </restaurantes> Figura 2 – Documento XML com informação sobre restaurantes.
Na resposta a esta alínea deve apenas apresentar a configuração do RoadRunner (caso tenha efectuado alterações na configuração por omissão) e a expressão XQuery
que permite formatar os resultados. Não é necessário apresentar o documento XML
gerado pelo RoadRunner, nem as instruções para criar/carregar o resultado do
RoadRunner para uma base de dados XML, no caso de ter optado por usar esta
2.3 – No URL https://dspace.ist.utl.pt/bitstream/2295/370906/1/words‐sentiment.xml encontra‐se um documento XML que contem uma lista de palavras classificadas de acordo com a sua polaridade, i.e. palavras que tipicamente têm uma conotação positiva, neutra ou negativa. Esta lista pode ser usada para analisar as opiniões/sentimentos expressos nas resenhas para os restaurantes.
Escreva uma expressão XQuery que, para cada restaurante da lista produzida como resultado da alínea 2.2, conte o número de ocorrências de palavras positivas e negativas. Com base nestas contagens, a expressão XQuery deve produzir um novo documento XML com o formato que se exemplifica de seguida, em que o elemento
rating toma o valor recomended ou not recomended consoante o número de palavras
positivas ser maior ou menor que o número de palavras negativas. Em caso de igualdade na contagem, não deve ser adicionado o elemento rating.
<restaurantes> <restaurante>
<nome>Alla Turca</nome><cuisine>Turkish</cuisine>
<review>Proud to be the only Turkish restaurant in...</review> <url> www.fodors.com/world/europe/netherlands/amsterdam/review-150301.html </url> <rating>recomended</rating> </restaurante> <!-- restantes restaurantes... --> </restaurantes> Figura 3 – Documento XML com informação sobre restaurantes. Exercício 3
Em https://dspace.ist.utl.pt/bitstream/2295/366642/1/restaurants.csv encontra‐se um ficheiro de texto com valores separados por vírgulas, contendo informação sobre restaurantes em Portugal e as coordenadas de latitude e longitude correspondentes. Abaixo apresenta‐se o conteúdo do documento textual que se encontra online.
Tavares Rico, Chiado, Lisboa, 38.68,-9.15 Salpoeiro, Aveiro, Aveiro, 38.71,-9.15 Porto Rico, G. Nazaré, Aveiro, 40.63,-8.64 Quebra Bilhas, Campo Grande, Lisboa, 38.65,-9.15 Cantinho da Paz, Estrela, Lisboa, 38.68,-9.11 Pateo do Garret, Vila Velha, Sintra, 38.56,-9.15
Figura 4 – Documento CSV com informação sobre restaurantes.
3.1 – Escreva uma expressão XQuery que faça a transposição dos dados representados no documento online, produzindo um novo ficheiro de texto com valores separados por vírgulas em que as colunas do ficheiro original correspondem às linhas do novo ficheiro. Abaixo, na Figura 5, apresenta‐se o resultado da transformação do conteúdo apresentado na Figura 4.
Tavares Rico, Salpoeiro, Porto Rico, Quebra Bilhas, Cantinho da Paz, Pateo do Garret Bairro Alto, Aveiro, G. Nazaré, Campo Grande, Estrela, Vila Velha
Lisboa, Aveiro, Aveiro, Lisboa, Lisboa, Sintra 90.68, 38.71, 40.63, 38.65, 38.68, 38.56 -9.15, -9.15, -8.64, -9.15, -9.11, -9.15
resultados para o formato KML usado pelo Google Earth. O formato de saída encontra‐ se exemplificado na Figura 6. Apenas os restaurantes pertencentes à cidade de Lisboa devem ser apresentados no documento KML produzido como resultado. <kml xmlns="http://www.opengis.net/kml/2.2"> <Response> <name>Restaurants in Portugal</name> <Status><code>200</code><request>geocode</request></Status> <Placemark id="p1"> <name>Tavares Rico</name> <address>Chiado, Lisboa</address> <AddressDetails Accuracy="4"> <Country> <CountryNameCode>PT</CountryNameCode> <CountryName>Portugal</CountryName> </Country> </AddressDetails> <Point><coordinates>38.68,-9.15,0</coordinates></Point> </Placemark>
<!—Restantes restaurantes representados como Placemarks --> </Response> </kml> Figura 6 – Documento KML de exemplo. Exercício 4
Para cada um dos problemas que se seguem, escreva uma função XQuery que, utilizando as funções da biblioteca XPath 2.0 relacionadas com a avaliação de
expressões regulares, aceite como parâmetro uma cadeia de caracteres e retorne um
valor Booleano indicando se a cadeia de caracteres é válida no domínio do problema.
4.1 ‐ Verificar se uma dada cadeia de caracteres corresponde a um par de coordenadas de latitude e longitude, segundo os formatos que se exemplificam abaixo. Note que ambos os formatos são válidos, devendo a solução utilizar uma única expressão ou duas expressões regulares (i.e., uma em cada padrão frequente) para fazer a validação. -9.500 Lon ; 25.50 Lat -9º30’00’’ LON ; 25º30’00’’ LAT -9º30’00’’ lon ; 25º30’00’’ lat Tenha em atenção que a expressão regular deve verificar se os valores estão dentro dos intervalos válidos. Na representação decimal, a latitude varia entre ‐90 e 90 e a longitude varia entre ‐180 e 180. Os valores de latitude e longitude podem ainda ter um número indeterminado de 0s à esquerda da sua parte inteira e a parte decimal, caso esteja representada, ocupa um máximo de 6 algarismos. Na representação em graus, minutos e segundos, os valores associados aos minutos e segundos variam entre 0 e 60, enquanto que os valores para os graus de latitude e longitude variam entre ‐90 e 90 e ‐180 e 180, respectivamente.
4.2 – Verificar através de uma expressão regular se uma dada cadeia de caracteres alfanuméricos corresponde a uma capicua (i.e., uma cadeia que lida da direita para a esquerda ou da esquerda para a direita é idêntica) e se representa, simultaneamente, um valor hexadecimal com 8 dígitos.
Exercício 5 Em https://dspace.ist.utl.pt/bitstream/2295/374324/1/featured‐restaurants.xml encontra‐se um feed XML, no formato RSS, com descrições de restaurantes. Para cada um dos seguintes problemas, escreva expressões XQuery que, utilizado as funções XPath para processamento de expressões regulares ou os mecanismos de extensão da XQuery with Full Text, permitam obter a informação pretendida. 5.1 – Encontrar os títulos de todas as entradas que obedeçam aos seguintes critérios. Deve considerar cada uma das seguintes alíneas como um problema separado. 1. Contêm a palavra chave “wines” na descrição da entrada. 2. Contêm a palavra “bistro” no título e não contêm “refined” na descrição. 3. Têm a expressão “restaurant and bar” no título da entrada. 4. Foram efectuadas num dia do mês que corresponde a um número ímpar. 5.2 – Extrair os URLs de imagens que se encontram mencionados no texto descritivo das entradas que contêm as palavras “restaurant” ou “bar” no título ou na descrição. Deverá ter o cuidado de eliminar potenciais URLs em duplicado.
5.3 – Encontrar as duas entradas mais relevantes para uma pesquisa pelas palavras chave “grill” e “meat”. Entrega do segundo mini‐projecto A resolução do mini‐projecto deve ser entregue via Fénix sob a forma de um ficheiro com a extensão .zip, até às 24:00 do dia estipulado para a entrega. O ficheiro .zip deve conter os seguintes elementos: • Ficheiros de texto com as soluções (e.g., documentos XML ou ficheiros de texto com as interrogações XPath/XQuery) para cada uma das perguntas/alíneas individuais.
• Um relatório com a resolução das várias perguntas, em formato PDF. O relatório
deve ter uma folha de rosto ou um cabeçalho identificando claramente qual o número do grupo e quais os números mecanográficos dos 3 elementos do grupo. Para cada pergunta, e alem de listar a solução, o relatório deve ainda indicar claramente qual o nome do ficheiro que contem a sua resolução.
Não serão aceites trabalhos entregues via e‐mail, nem trabalhos onde o relatório não obedece às regras estipuladas. Na aula, posteriormente ao dia da entrega electrónica, deve ainda ser entregue ao corpo docente uma versão impressa do relatório.