Pular para o conteúdo principal

Questão de Programação — XML (Extensible Markup Language) — FGV 2024

ProgramaçãoXML (Extensible Markup Language)
Código
fg097494
Banca
FGV
Órgão
TCE-PA
Ano
2024
Nível
Superior
Cargo
Auditor de Controle Externo - Área de Informática - Analista de Sistemas
Considere o seguinte trecho de código XML:Imagem associada para resolução da questãoA expressão XPath que seleciona corretamente o título de todos os filmes no acervo é:
  1. A/acervo/filme//title
  2. B//filme/title
  3. C/acervo/serie/title
  4. D//title
  5. E//acervo/filme/title
Revelar gabarito e comentário

GabaritoB — //filme/title

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

XPath: selecionando elementos em documentos XML

Gabarito: letra B. A expressão //filme/title seleciona corretamente o título de todos os filmes no acervo, pois o eixo // (descendente) encontra todos os elementos filme em qualquer nível do documento, e o passo /title seleciona os elementos title que são filhos diretos desses filme. As demais alternativas ou restringem demais o caminho (exigindo que filme seja filho direto de acervo), ou selecionam elementos além dos títulos dos filmes.

XPath (XML Path Language) é uma linguagem de consulta usada para navegar e selecionar elementos e atributos em documentos XML. Ela funciona como um "endereço" que descreve o caminho até os dados desejados, usando uma sintaxe de barras (/) semelhante à de sistemas de arquivos. O eixo / (barra simples) seleciona filhos diretos do nó atual, enquanto o eixo // (barra dupla) seleciona descendentes em qualquer profundidade. Essa distinção é fundamental para entender a questão.

No documento XML da questão, a estrutura é hierárquica: o elemento raiz acervo contém elementos filme, e cada filme contém um elemento title. A expressão //filme/title funciona assim: o //filme encontra todos os elementos filme em qualquer lugar do documento (não apenas os filhos diretos de acervo), e o /title seleciona os elementos title que são filhos diretos de cada filme. O resultado é exatamente o conjunto de títulos de todos os filmes.

A pegadinha da questão está na diferença entre / e //. A alternativa A (/acervo/filme//title) usa // antes de title, o que selecionaria todos os descendentes title de cada filme — se houvesse títulos aninhados em outros elementos dentro de filme, eles também seriam selecionados, o que não é o desejado. A alternativa C (/acervo/serie/title) erra ao trocar filme por serie, que não é o elemento que contém os títulos. A alternativa D (//title) seleciona todos os elementos title do documento, incluindo os que não pertencem a filmes. A alternativa E (//acervo/filme/title) é redundante, pois //acervo já encontra acervo em qualquer nível, mas o resultado seria o mesmo que o da alternativa B — porém, a banca considera que a expressão mais direta e correta é a B, que não repete o caminho desnecessariamente.

Guarde a distinção entre / (filho direto) e // (descendente): é exatamente nela que as alternativas se dividem.

Alternativa A — ❌ Incorreta

A expressão /acervo/filme//title usa // antes de title, o que seleciona todos os descendentes title de cada filme, não apenas os filhos diretos. Se houvesse títulos aninhados em outros elementos dentro de filme (por exemplo, um title dentro de um subtitulo), eles também seriam selecionados, o que não é o desejado. O correto seria usar /title para selecionar apenas os filhos diretos.

Alternativa B — ✅ Correta ⟵ GABARITO

A expressão //filme/title é a correta. O eixo // encontra todos os elementos filme em qualquer nível do documento, e o passo /title seleciona os elementos title que são filhos diretos de cada filme. Isso retorna exatamente o título de todos os filmes no acervo, sem incluir títulos de outros elementos.

Alternativa C — ❌ Incorreta

A expressão /acervo/serie/title erra ao usar serie em vez de filme. O elemento que contém os títulos é filme, não serie. Além disso, o caminho começa com /acervo, o que exige que acervo seja o elemento raiz — o que é verdade, mas a troca de filme por serie torna a expressão incorreta.

Alternativa D — ❌ Incorreta

A expressão //title seleciona todos os elementos title do documento, independentemente de onde estejam. Isso incluiria títulos que não pertencem a filmes, como títulos de séries ou outros elementos. A questão pede especificamente o título de todos os filmes, então essa expressão é ampla demais.

Alternativa E — ❌ Incorreta

A expressão //acervo/filme/title é redundante. O eixo //acervo já encontra o elemento acervo em qualquer nível, e o restante do caminho (/filme/title) seleciona os títulos dos filmes. Embora o resultado seja o mesmo que o da alternativa B, a expressão é desnecessariamente longa e não é a forma mais direta e correta de selecionar os títulos. A banca considera que a alternativa B é a resposta correta por ser mais concisa e precisa.

Gabarito: letra B

Link permanente: /questoes/fg097494