Lista de Exercícios - XQuery 1 Descreva pelo menos 3 (três) diferenças entre XPath e XQuery. RESPOSTAS: - XQuery é uma linguagem com maior poder de expressão do que XPath - XQuery usa XPath para construir suas consultas - XPath recupera apenas porções de um documento XML, enquanto XQuery permite formatar como será a saída (XML, HTML ou outros formatos) 2 Uma das expressões mais importantes da XQuery é a expressão FLWOR (For Let Where Order by Return). Qual a diferença entre LET e FOR? Dê um exemplo de uso de cada um deles e explique o que será produzido como resultado. RESPOSTAS: - FOR faz iterações a cada sequência de entrada, enquanto LET não faz essa iteração, limitando-se a designar um valor de entrada único para uma variável. - LET serve para definir valores para variáveis for $i in (1, 2, 3) <output> {$i </output> RESULTADO: <output>1</output> <output>2</output> <output>3</output> let $i := (1, 2, 3) <output>{$i</output> RESULTADO: <output>1 2 3</output> 1
3 Considere o documento XML abaixo. <receita> <paciente> <nome>ana Maria Marina</nome> <idade>7 anos</idade> </paciente> <medico>dr. Juca</medico> <data>20/10/2001</data> <medicamentos-receitados> <medicamento uso="interno"> <medicamento uso="externo"> <posologia>aplicar no braço 1x ao dia ao deitar</posologia> </medicamentos-receitados> </receita> 2
Escreva o resultado gerado por cada uma das consultas XQuery abaixo, quando executadas sobre o documento acima. a) b) c) d) Consulta {for $m in doc("receita.xml")/receita/medicamentos-receitados/medicamento where $m/@uso="interno" $m <medicamento uso="interno"> {for $m in doc("receita.xml")/receita/medicamentos-receitados/medicamento {$m/nome {let $m := doc("receita.xml")/receita/medicamentos-receitados/medicamento {$m/nome for $m in doc("receita.xml")/receita/medicamentos-receitados/medicamento ($m/nome, $m/posologia) <posologia>aplicar no braço 1x ao dia ao deitar</posologia> 3
for $p in doc("receita.xml")/receita/paciente $p e) f) <paciente> <nome>ana Maria Marina</nome> <idade>7 anos</idade> </paciente> let $m := doc("receita.xml")/receita/medicamentos-receitados/medicamento <num-med>{count($m)</num-med> <num-med>2</num-med> 4 - Segundo a seguinte estrutura XML: <Funcionario> <Nome> <Endereco> <Bairro> <CEP> <Cidade> <Estado> <Telefone> <Profissao> <Salario> </Funcionario> </Nome> </Endereco> </Bairro> </CEP> </Cidade> </Estado> </Telefone> </Profissao> </Salario> a) Levando em consideração que o arquivo funcionario.xml tenha 1000 registros, projete as seguintes consultas em XPath: Selecionar o segundo funcionário //funcionario[2] Selecionar o último funcionário //funcionario[last()] Selecionar todos os funcionários que tenham o salário > 5000 e < 10000 //funcionario[salario > 5000 and Salario < 10000] Selecionar o nome de todos os funcionários que tenham a profissão de Analista de Sistemas //funcionario[profissao="analista de Sistemas"]/Nome 4
b) Projete as seguintes consultas em XQuery: Selecionar todos os funcionários que tenham o salário > 5000 for $f in doc ( funcionario.xml ) where $f.salario > 5000,00 $f Selecionar o nome dos funcionários que tenham o salário > 5000 e < 10000 e que tenham a profissão de analista de sistemas, exibindo o resultado em ordem alfabética for $f in doc ("funcionario.xml") where $f/salario > 5000,00 or $f/salario < 10000 and $f/profissao = "Analista de Sistemas" order by $f/nome $f/nome Criar dois novos tipos estruturados em XML chamados EXECUTIVO e FUNCIONARIO, no qual se o salário >10000 então será um EXECUTIVO caso contrário será um FUNCIONARIO for $f in doc ("funcionario.xml") if ($f/salario > 10000) then <EXECUTIVO>{$f/*</EXECUTIVO> else <FUNCIONARIO>{$f/*</FUNCIONARIO> Gerar um arquivo HTML que através do XQuery liste todos os 1000 funcionários do arquivo funcionario.xml <html> <body> <ul> { for $m in doc('funcionario.xml')/funcionario <li>{$m/*</li> </ul> </body> </html> 5