Anúncios

Notas 3º mini-projecto on-line

15 dezembro 2008, 18:24 Helena Galhardas

Estão disponíveis as notas do 3º mini-projecto na secção "Mini-Projectos".

Pede-se aos alunos que verifiquem a sua nota.

Caso pretendam esclarecer alguma dúvida, pede-se aos alunos que se dirijam a uma das aulas de dúvidas desta semana.



Funções de conjuntos em XQuery e eliminação dos elementos duplicados exactos

10 dezembro 2008, 17:34 Bruno Emanuel Da Graça Martins

Segundo a especificação do W3C para a linguagem XQuery, os operadores de conjuntos union, except e intersect apenas fazem a eliminação de elementos duplicados com base na identidade dos nós XML, e não com base nos valores associados aos próprios nós ou aos seus descendentes.

Este mecanismo de eliminação de duplicados exactos não satisfaz portanto os requisitos da pergunta 1.2 do quarto mini-projecto. No entanto, usando os mecanismos padrão da linguagem XQuery, é relativamente fácil construir funções utilizador que correspondam a estes operadores, apresentando a semântica de eliminação de duplicados pretendida.

Abaixo apresenta-se o código para estas funções XQuery, tendo-se que a sua uilização se exemplifica através da expressão XPath local:union($node-set1,$node-set2). O guia da aula de laboratório 8 foi também actualizado, por forma a explicitar claramente esta informação.

declare function local:distinct-nodes ($arg as node()*) as node()* {
for $a at $apos in $arg
let $before_a := fn:subsequence($arg, 1, $apos - 1)
where every $ba in $before_a satisfies not(deep-equal($ba,$a))
return $a
};

declare function local:union ($arg1 as node()*, $arg2 as node()*) as node()* {
let $arg := $arg1 union $arg2
for $a at $apos in $arg
let $before_a := fn:subsequence($arg, 1, $apos - 1)
where every $ba in $before_a satisfies not(deep-equal($ba,$a))
return $a
};

declare function local:except ($arg1 as node()*, $arg2 as node()*) as node()* {
for $a at $apos in $arg1
let $before_a := fn:subsequence($arg1, 1, $apos - 1)
let $test1 := every $ba in $before_a satisfies not(deep-equal($ba,$a))
let $test2 := every $bb in $arg2 satisfies not(deep-equal($bb,$a))
where $test1 and $test2 return $a
};

declare function local:intersect ($arg1 as node()*, $arg2 as node()*) as node()* {
for $a at $apos in $arg1
let $before_a := fn:subsequence($arg1, 1, $apos - 1)
let $test1 := every $ba in $before_a satisfies not(deep-equal($ba,$a))
let $test2 := some $bb in $arg2 satisfies deep-equal($bb,$a)
where $test1 and $test2 return $a
};


Entrega do 4º mini-projecto

10 dezembro 2008, 15:39 Helena Galhardas

A entrega do 4º mini-projecto pode ter lugar amanhã, 5ªf, ou 6ªf, na aula teórica.


Notas e Correcção do 3º mini-projecto

10 dezembro 2008, 10:32 Helena Galhardas

Na aula teórica de 6ª feira, dia 12/12, serão apresentadas as correcções e notas do 3º mini-projecto.


Aula extra no dia 9 de Dezembro

7 dezembro 2008, 13:21 Bruno Emanuel Da Graça Martins

No dia 9 de Dezembro, pelas 16h na sala 1.15, irá decorrer uma aula de laboratório extra de apoio ao quarto mini-projecto.