Questão de Programação — Linguagens de marcação — FGV 2024
- Código
- fg098216
- Banca
- FGV
- Órgão
- TJ-AP
- Ano
- 2024
- Nível
- Superior
- Cargo
- Apoio Especializado - Tecnologia da Informação - Desenvolvimento de Sistemas

- AXSLT;
- BParser;
- CTag;
- DComments;
- ENamespace.

GabaritoE — Namespace.
Gabarito: letra E. Para evitar conflito entre nomes de elementos que possuem o mesmo identificador (como <table>) em um mesmo documento XML, utiliza-se o Namespace, que qualifica os nomes por meio de um prefixo associado a um URI (Identificador Uniforme de Recursos), garantindo a unicidade e a distinção semântica dos elementos. Essa é a função específica do mecanismo de namespaces na especificação XML do W3C.
O XML (Extensible Markup Language) é uma linguagem de marcação derivada da SGML, projetada para armazenar e transportar dados de forma estruturada e independente de plataforma. Diferentemente do HTML, que possui um conjunto fixo de tags, o XML permite que o usuário defina suas próprias tags, o que confere grande flexibilidade, mas também cria um problema: se dois vocabulários diferentes usam o mesmo nome para elementos distintos, como interpretar o documento? É exatamente para resolver essa ambiguidade que existem os namespaces.
Um namespace é um mecanismo que associa um prefixo a um URI, criando um "escopo" para os nomes dos elementos e atributos. Na prática, o elemento <table> de um vocabulário pode ser distinguido do <table> de outro vocabulário simplesmente usando prefixos diferentes, como <html:table> e <svg:table>. A declaração do namespace é feita no elemento raiz (ou em qualquer elemento) com o atributo xmlns (XML Namespace), por exemplo: xmlns:html="http://www.w3.org/1999/xhtml". A partir daí, o prefixo html qualifica todos os elementos que o utilizam, tornando-os únicos no documento.
A necessidade de namespaces surge justamente quando há conflito de nomes entre elementos de diferentes vocabulários no mesmo documento. Sem eles, o processador XML não teria como saber a qual definição cada elemento se refere. É importante notar que o namespace não é uma tag, nem um comentário, nem uma transformação — é um mecanismo de qualificação de nomes. A banca explora exatamente essa confusão: o candidato pode pensar em XSLT (que transforma documentos) ou em parser (que analisa a estrutura), mas nenhum deles resolve o problema de identificação única de elementos.
Para fixar: o namespace é a "etiqueta" que diz de qual vocabulário cada elemento faz parte. É o que permite que dois elementos com o mesmo nome coexistam pacificamente no mesmo documento XML, cada um com seu significado próprio. Essa é a distinção central que separa a alternativa correta das demais.
O XSLT (eXtensible Stylesheet Language Transformations) é uma linguagem usada para transformar documentos XML em outros formatos (como HTML, texto ou outro XML). Ele não tem a função de evitar conflitos de nomes; pelo contrário, ele opera sobre documentos que já devem estar bem formados e, se necessário, com namespaces já declarados. A confusão aqui é associar qualquer tecnologia XML à solução do problema, mas a função de transformação é completamente distinta da de qualificação de nomes.
Um parser é um componente de software que analisa a estrutura de um documento XML, verificando se ele é bem formado e, opcionalmente, se é válido contra um esquema. Ele é o "leitor" do XML, não um mecanismo de resolução de conflitos de nomes. O parser processa o documento, mas quem define a unicidade dos elementos é o namespace. A pegadinha aqui é pensar que o parser "resolve" o problema, quando na verdade ele apenas interpreta o que já está declarado.
Tag é o nome genérico dado aos marcadores <elemento> e </elemento> no XML. A tag é a unidade básica de marcação, mas ela não tem nenhum mecanismo próprio para evitar conflitos de nomes. Usar tags diferentes (como <tabela> em vez de <table>) seria uma solução manual e frágil, não um mecanismo padronizado. O namespace é que qualifica as tags, não o contrário.
Comments (comentários) são anotações no documento XML, delimitadas por <!-- e -->, que servem para documentar o código e são ignoradas pelo parser. Eles não têm nenhuma função estrutural e, obviamente, não resolvem conflitos de nomes. A alternativa é um distrator óbvio, mas que testa se o candidato sabe o que é um comentário em XML.
O Namespace é o mecanismo correto. Ele permite declarar prefixos associados a URIs, qualificando os nomes dos elementos e atributos e garantindo que elementos com o mesmo nome, mas de vocabulários diferentes, sejam distinguidos. No exemplo da questão, os dois fragmentos com <table> poderiam ser diferenciados com prefixos como <html:table> e <svg:table>, cada um com seu namespace declarado. Essa é a função específica e padronizada do namespace na especificação XML do W3C.
Na prova, quando a questão falar em "conflito de nomes", "mesmo nome para elementos diferentes" ou "qualificar elementos", a resposta quase sempre será Namespace. Associe mentalmente: namespace = "etiqueta de vocabulário". XSLT é transformação, parser é leitura, tag é marcação, comentário é anotação — nenhum deles resolve o problema de unicidade de nomes.
Gabarito: letra E
Link permanente: /questoes/fg098216