# 📘 XML – Material Completo para Concursos (Estilo IDECAN)
> **Banca:** IDECAN | **Disciplina:** Tecnologia da Informação | **Nível:** Técnico e Analista
---
## 📋 Índice
1. [Conceitos Fundamentais](#1-conceitos-fundamentais)
2. [Estrutura e Sintaxe XML](#2-estrutura-e-sintaxe-xml)
3. [Documento Bem-Formado vs. Válido](#3-documento-bem-formado-vs-válido)
4. [DTD – Document Type Definition](#4-dtd--document-type-definition)
5. [XML Schema (XSD)](#5-xml-schema-xsd)
6. [DTD vs. XSD – Comparativo](#6-dtd-vs-xsd--comparativo)
7. [XPath – XML Path Language](#7-xpath--xml-path-language)
8. [XSLT – Transformações XML](#8-xslt--transformações-xml)
9. [XQuery](#9-xquery)
10. [Namespaces XML](#10-namespaces-xml)
11. [DOM e SAX – Parsers XML](#11-dom-e-sax--parsers-xml)
12. [XML vs. HTML](#12-xml-vs-html)
13. [XML vs. JSON](#13-xml-vs-json)
14. [XML e Web Services (SOAP/WSDL)](#14-xml-e-web-services-soapwsdl)
15. [Pegadinhas e Pontos-Chave da IDECAN](#15-pegadinhas-e-pontos-chave-da-idecan)
16. [Questões Comentadas no Estilo IDECAN](#16-questões-comentadas-no-estilo-idecan)
---
## 1. Conceitos Fundamentais
### O que é XML?
**XML (eXtensible Markup Language)** é uma linguagem de marcação desenvolvida pelo **W3C (World Wide Web Consortium)** com o objetivo de **armazenar, organizar e transportar dados** de forma estruturada, legível tanto por humanos quanto por máquinas.
### Características Principais
| Característica | Descrição |
|---|---|
| **Extensível** | O programador define suas próprias tags (não há tags predefinidas) |
| **Separação de dados e apresentação** | XML descreve os dados; a apresentação é feita por outras tecnologias (XSLT, CSS) |
| **Independente de plataforma** | Funciona em qualquer sistema operacional ou linguagem |
| **Hierárquico (árvore)** | Estrutura em forma de árvore com elementos pai e filho |
| **Padrão W3C** | Especificação aberta e padronizada |
| **Case-sensitive** | `<Nome>` e `<nome>` são tags diferentes |
| **Interoperabilidade** | Facilita troca de dados entre sistemas distintos |
### O que XML NÃO é
- XML **não é uma linguagem de programação**
- XML **não possui tags predefinidas** (diferente do HTML)
- XML **não descreve a aparência dos dados** (não tem semântica de apresentação)
- XML **não é um banco de dados** (mas pode ser usado para transportar dados)
> ⚠️ **IDECAN cobra:** A banca frequentemente afirma erroneamente que "XML possui tags predefinidas". Isso é **FALSO** — quem possui tags predefinidas é o **HTML**.
---
## 2. Estrutura e Sintaxe XML
### Declaração XML (Prólogo)
```xml
<?xml version="1.0" encoding="UTF-8"?>
```
- **version:** versão do XML (geralmente "1.0")
- **encoding:** codificação de caracteres (UTF-8 é padrão)
- O prólogo é **opcional**, mas quando presente deve ser a **primeira linha** do documento
### Elementos
```xml
<livro>
<titulo>Sistemas de Informação</titulo>
<autor>João Silva</autor>
<ano>2023</ano>
</livro>
```
- Todo elemento tem uma **tag de abertura** e uma **tag de fechamento**
- Elemento vazio: `<imagem/>` ou `<imagem></imagem>`
- **Apenas um elemento raiz** é permitido por documento
### Atributos
```xml
<livro isbn="978-3-16-148410-0" idioma="pt-BR">
<titulo>XML para Concursos</titulo>
</livro>
```
- Atributos ficam dentro da **tag de abertura**
- Valores de atributos devem estar entre **aspas** (duplas ou simples)
- Atributos armazenam metadados sobre o elemento
### Comentários
```xml
<!-- Isto é um comentário em XML -->
```
### Seções CDATA
```xml
<![CDATA[ conteúdo que não será processado pelo parser ]]>
```
- Usada para incluir texto que contém caracteres especiais (`<`, `>`, `&`)
- O conteúdo dentro de CDATA **não é interpretado** pelo parser
### Entidades Predefinidas
| Entidade | Caractere |
|---|---|
| `<` | `<` |
| `>` | `>` |
| `&` | `&` |
| `"` | `"` |
| `'` | `'` |
### Regras de Sintaxe (Bem-Formação)
1. Deve haver **exatamente um elemento raiz**
2. Todo elemento aberto deve ser **fechado** (`<tag></tag>` ou `<tag/>`)
3. Tags devem ser **corretamente aninhadas** (sem sobreposição)
4. Nomes de tags são **case-sensitive**
5. Valores de atributos devem estar entre **aspas**
6. Não pode haver mais de um atributo com o **mesmo nome** no mesmo elemento
```xml
<!-- ERRADO - tags sobrepostas -->
<b><i>texto</b></i>
<!-- CORRETO - aninhamento correto -->
<b><i>texto</i></b>
```
---
## 3. Documento Bem-Formado vs. Válido
### Documento Bem-Formado (Well-Formed)
Um documento XML é **bem-formado** quando segue todas as regras **sintáticas** do XML:
- Um único elemento raiz
- Tags abertas e fechadas corretamente
- Aninhamento correto
- Atributos com valores entre aspas
- Uso de entidades predefinidas para caracteres especiais
```xml
<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
<produto id="1">
<nome>Teclado</nome>
<preco>150.00</preco>
</produto>
</catalogo>
```
### Documento Válido (Valid)
Um documento XML é **válido** quando é **bem-formado E** está em conformidade com uma **DTD ou XML Schema (XSD)** associado.
```
Bem-Formado → apenas sintaxe correta
Válido → sintaxe correta + obedece às regras da DTD/XSD
```
> ⚠️ **Todo documento válido é bem-formado, mas nem todo documento bem-formado é válido.**
---
## 4. DTD – Document Type Definition
### O que é DTD?
A **DTD (Document Type Definition)** define as **regras estruturais** de um documento XML: quais elementos existem, em que ordem aparecem, quais atributos possuem e se são obrigatórios ou opcionais.
### DTD Interna vs. Externa
**DTD Interna** (dentro do próprio arquivo XML):
```xml
<?xml version="1.0"?>
<!DOCTYPE catalogo [
<!ELEMENT catalogo (produto+)>
<!ELEMENT produto (nome, preco)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT preco (#PCDATA)>
<!ATTLIST produto id ID #REQUIRED>
]>
<catalogo>
<produto id="p1">
<nome>Mouse</nome>
<preco>50.00</preco>
</produto>
</catalogo>
```
**DTD Externa com SYSTEM** (arquivo local — DTD privada):
```xml
<!DOCTYPE catalogo SYSTEM "catalogo.dtd">
```
**DTD Externa com PUBLIC** (DTD pública/compartilhada):
```xml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/...">
```
> ⚠️ **IDECAN cobra (pegadinha clássica):** A palavra-chave `SYSTEM` indica que a DTD é **externa e privada** (local). A palavra-chave `PUBLIC` indica que a DTD é **pública**. Questões afirmam erroneamente que `SYSTEM` = interna. **ERRADO!**
### Declaração de Elementos na DTD
| Símbolo | Significado |
|---|---|
| `(filho)` | Exatamente um filho |
| `(filho+)` | Um ou mais filhos |
| `(filho*)` | Zero ou mais filhos |
| `(filho?)` | Zero ou um filho (opcional) |
| `(a, b)` | a seguido de b (sequência) |
| `(a \| b)` | a ou b (escolha) |
| `#PCDATA` | Texto (Parsed Character Data) |
| `ANY` | Qualquer conteúdo |
| `EMPTY` | Elemento vazio |
```dtd
<!ELEMENT livro (titulo, autor+, editora?, isbn)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
```
### Declaração de Atributos na DTD
```dtd
<!ATTLIST elemento atributo tipo valor_padrão>
```
**Tipos de atributos:**
| Tipo | Descrição |
|---|---|
| `CDATA` | Texto simples |
| `ID` | Identificador único no documento |
| `IDREF` | Referência a um ID |
| `NMTOKEN` | Token de nome XML |
| `ENUMERATION` | Lista de valores permitidos |
**Valores padrão:**
| Valor | Descrição |
|---|---|
| `#REQUIRED` | Atributo obrigatório |
| `#IMPLIED` | Atributo opcional (sem valor padrão) |
| `#FIXED "valor"` | Valor fixo e obrigatório |
| `"valor"` | Valor padrão opcional |
```dtd
<!ATTLIST produto
id ID #REQUIRED
tipo CDATA #IMPLIED
status (ativo|inativo) "ativo"
>
```
### Limitações da DTD
- Não suporta **tipos de dados** (tudo é texto)
- Não é escrita em XML
- Não suporta **namespaces** nativamente
- Menos expressiva que o XSD
---
## 5. XML Schema (XSD)
### O que é XSD?
O **XML Schema Definition (XSD)** é uma alternativa mais poderosa à DTD para definir a estrutura e validar documentos XML. O XSD é **escrito em XML** e suporta **tipos de dados**.
### Vantagens sobre DTD
- Escrito em **sintaxe XML**
- Suporta **tipos de dados** (string, integer, date, boolean, etc.)
- Suporta **namespaces**
- Mais expressivo e detalhado
- Permite restrições complexas (min/max, padrões regex, etc.)
### Exemplo de XSD
```xml
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="catalogo">
<xs:complexType>
<xs:sequence>
<xs:element name="produto" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="preco" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
```
### Tipos de Dados Comuns no XSD
| Tipo | Descrição |
|---|---|
| `xs:string` | Texto |
| `xs:integer` | Número inteiro |
| `xs:decimal` | Número decimal |
| `xs:boolean` | Verdadeiro/Falso |
| `xs:date` | Data (AAAA-MM-DD) |
| `xs:dateTime` | Data e hora |
| `xs:anyURI` | URI/URL |
### Indicadores de Ocorrência no XSD
| Indicador | Significado |
|---|---|
| `minOccurs="0"` | Elemento opcional |
| `minOccurs="1"` | Elemento obrigatório (padrão) |
| `maxOccurs="unbounded"` | Sem limite de repetições |
| `minOccurs="0" maxOccurs="unbounded"` | Equivale ao `*` da DTD |
---
## 6. DTD vs. XSD – Comparativo
| Característica | DTD | XSD |
|---|---|---|
| **Sintaxe** | Própria (não é XML) | XML |
| **Tipos de dados** | Não suporta | Suporta (string, int, date...) |
| **Namespaces** | Suporte limitado | Suporte completo |
| **Extensibilidade** | Limitada | Alta |
| **Restrições de valor** | Não | Sim (regex, min/max) |
| **Adoção** | Mais antiga, legada | Mais moderna e recomendada |
| **Padrão W3C** | Sim | Sim |
> ⚠️ **IDECAN cobra:** DTD **não suporta tipos de dados**. XSD **suporta tipos de dados e namespaces**. XSLT **não é usado para validação** — é para **transformação**.
---
## 7. XPath – XML Path Language
### O que é XPath?
**XPath (XML Path Language)** é uma linguagem de **navegação e seleção de nós** em documentos XML. É uma recomendação W3C e é amplamente utilizada pelo XSLT e XQuery.
### Estrutura em Árvore XML
Um documento XML é modelado como uma árvore de **nós**:
- **Nó raiz (root node):** representa o documento inteiro
- **Nó elemento:** representa uma tag XML
- **Nó atributo:** representa um atributo de elemento
- **Nó texto:** representa o conteúdo textual de um elemento
- **Nó comentário**
- **Nó instrução de processamento**
### Sintaxe XPath
| Expressão | Descrição |
|---|---|
| `/` | Seleciona a partir do nó raiz (caminho absoluto) |
| `//` | Seleciona nós em qualquer lugar do documento |
| `.` | Seleciona o nó atual |
| `..` | Seleciona o nó pai |
| `@` | Seleciona atributos |
| `*` | Seleciona qualquer elemento |
| `@*` | Seleciona qualquer atributo |
| `[]` | Predicado (filtro) |
### Exemplos de XPath
```xml
<!-- Documento de exemplo -->
<biblioteca>
<livro categoria="TI">
<titulo>Algoritmos</titulo>
<autor>Thomas Cormen</autor>
<preco>120.00</preco>
</livro>
<livro categoria="Direito">
<titulo>Direito Constitucional</titulo>
<autor>José Afonso</autor>
<preco>95.00</preco>
</livro>
</biblioteca>
```
| Expressão XPath | Resultado |
|---|---|
| `/biblioteca/livro` | Todos os elementos `<livro>` filhos de `<biblioteca>` |
| `//titulo` | Todos os elementos `<titulo>` em qualquer lugar |
| `/biblioteca/livro[1]` | Primeiro livro (**índice começa em 1**) |
| `/biblioteca/livro[@categoria='TI']` | Livros com atributo categoria = "TI" |
| `//livro/titulo/text()` | Texto dos títulos |
| `//@categoria` | Todos os atributos `categoria` |
| `//livro[preco > 100]` | Livros com preço maior que 100 |
| `count(//livro)` | Conta o número de livros |
> ⚠️ **IDECAN cobra:** No XPath, a barra simples `/` seleciona **a partir da raiz** (caminho absoluto). A barra dupla `//` seleciona **em qualquer nível** do documento. O índice começa em **1**, não em 0.
### Eixos XPath (Axes)
| Eixo | Descrição |
|---|---|
| `child::` | Filhos do nó atual |
| `parent::` | Pai do nó atual |
| `ancestor::` | Ancestrais (todos os pais acima) |
| `descendant::` | Descendentes (todos os filhos abaixo) |
| `following-sibling::` | Irmãos após o nó atual |
| `preceding-sibling::` | Irmãos antes do nó atual |
| `self::` | O próprio nó |
| `attribute::` | Atributos do nó atual |
---
## 8. XSLT – Transformações XML
### O que é XSLT?
**XSLT (eXtensible Stylesheet Language Transformations)** é uma linguagem para **transformar documentos XML** em outros formatos, como HTML, texto, PDF, outro XML, etc.
### Como funciona o XSLT
```
Documento XML + Folha de Estilo XSLT → Documento de Saída (HTML, TXT, XML...)
```
O processador XSLT aplica as **regras de template** da folha de estilo ao documento XML e gera o resultado.
### Estrutura de uma Folha XSLT
```xml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Template para o elemento raiz -->
<xsl:template match="/">
<html>
<body>
<h1>Catálogo de Livros</h1>
<table>
<!-- Iteração sobre todos os livros -->
<xsl:for-each select="biblioteca/livro">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="preco"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
```
### Principais Elementos XSLT
| Elemento | Função |
|---|---|
| `<xsl:template match="...">` | Define uma regra de transformação |
| `<xsl:value-of select="...">` | Extrai o valor de um nó |
| `<xsl:for-each select="...">` | Iteração sobre um conjunto de nós |
| `<xsl:if test="...">` | Condicional simples |
| `<xsl:choose>/<xsl:when>/<xsl:otherwise>` | Condicional múltipla (switch) |
| `<xsl:sort select="...">` | Ordena elementos |
| `<xsl:apply-templates>` | Aplica templates aos nós filhos |
| `<xsl:output method="html">` | Define o formato de saída |
> ⚠️ **IDECAN cobra:** XSLT é usado para **transformação**, **NÃO** para validação. Quem valida é a **DTD** ou o **XSD**.
---
## 9. XQuery
### O que é XQuery?
**XQuery** é uma linguagem de **consulta** para dados XML, equivalente ao SQL para bancos de dados relacionais. É uma recomendação W3C e é **case-sensitive**.
### Expressões FLWOR
A base do XQuery é a expressão **FLWOR** (For, Let, Where, Order by, Return):
```xquery
for $livro in doc("biblioteca.xml")//livro
let $preco := $livro/preco
where $preco > 100
order by $livro/titulo
return $livro/titulo
```
| Cláusula | Função |
|---|---|
| `for` | Itera sobre uma sequência de nós |
| `let` | Atribui um valor a uma variável |
| `where` | Filtra os resultados |
| `order by` | Ordena os resultados |
| `return` | Define o que retornar |
> ⚠️ **IDECAN cobra:** XQuery é **case-sensitive**. As expressões FLWOR permitem **filtragem, ordenação e projeção** dos dados. XQuery é **baseado em XPath**.
---
## 10. Namespaces XML
### O que são Namespaces?
**Namespaces** evitam **conflitos de nomes** quando documentos XML de fontes diferentes são combinados. Permitem que elementos com o mesmo nome, mas de contextos diferentes, coexistam.
### Declaração de Namespace
```xml
<!-- Namespace padrão (sem prefixo) -->
<catalogo xmlns="http://www.minhaempresa.com/catalogo">
<!-- Namespace com prefixo -->
<livro xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="livro.xsd">
<!-- Múltiplos namespaces -->
<documento
xmlns:cat="http://empresa.com/catalogo"
xmlns:cli="http://empresa.com/clientes">
<cat:produto>Teclado</cat:produto>
<cli:nome>João</cli:nome>
</documento>
```
- O valor do namespace é uma **URI** (usada apenas como identificador único, não necessariamente acessível)
- O prefixo `xml:` é **reservado** pelo W3C
- Atributos com prefixo `xml:` são reservados: `xml:lang`, `xml:space`
---
## 11. DOM e SAX – Parsers XML
### DOM (Document Object Model)
- Carrega o **documento inteiro na memória**
- Permite **navegação bidirecional** (para frente e para trás)
- Permite **modificação** do documento
- Consome **mais memória**
- Ideal para documentos **menores**
### SAX (Simple API for XML)
- Processa o documento **sequencialmente** (evento por evento)
- **Não carrega** o documento inteiro na memória
- Só leitura (não permite modificação)
- Mais **eficiente em memória**
- Ideal para documentos **grandes**
### Comparativo DOM vs. SAX
| Característica | DOM | SAX |
|---|---|---|
| **Modelo** | Árvore em memória | Orientado a eventos |
| **Navegação** | Bidirecional | Sequencial (uma passagem) |
| **Modificação** | Sim | Não |
| **Consumo de memória** | Alto | Baixo |
| **Velocidade** | Menor (carregamento) | Maior |
| **Tipo de parser** | Validante e não-validante | Não-validante (geralmente) |
---
## 12. XML vs. HTML
| Característica | XML | HTML |
|---|---|---|
| **Finalidade** | Transportar/armazenar dados | Exibir dados na web |
| **Tags** | Definidas pelo usuário | Predefinidas |
| **Case-sensitive** | Sim | Não (HTML5) |
| **Tags de fechamento** | Obrigatórias | Opcionais em HTML |
| **Semântica de apresentação** | Não possui | Possui |
| **Atributos sem valor** | Não permitido | Permitido |
| **Criado por** | W3C | W3C / WHATWG |
> ⚠️ **IDECAN cobra muito:** XML **não tem semântica de apresentação predefinida**. HTML descreve a **aparência**; XML descreve o **conteúdo/estrutura**.
---
## 13. XML vs. JSON
| Característica | XML | JSON |
|---|---|---|
| **Sintaxe** | Tags de abertura/fechamento | Pares chave-valor, colchetes |
| **Legibilidade** | Mais verboso | Mais conciso |
| **Suporte a atributos** | Sim | Não diretamente |
| **Comentários** | Sim | Não |
| **Validação** | DTD / XSD | JSON Schema |
| **Namespaces** | Sim | Não |
| **Uso com AJAX** | Sim | Sim (mais comum) |
| **Parsing em JS** | Mais complexo | Nativo (`JSON.parse`) |
---
## 14. XML e Web Services (SOAP/WSDL)
### SOAP (Simple Object Access Protocol)
- Protocolo de comunicação entre sistemas baseado em **XML**
- Utiliza **envelope, cabeçalho e corpo** estruturados em XML
- Independente de transporte (pode usar HTTP, SMTP, etc.)
```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<ConsultarCEP>
<cep>01310-100</cep>
</ConsultarCEP>
</soap:Body>
</soap:Envelope>
```
### WSDL (Web Services Description Language)
- Linguagem baseada em **XML** para descrever web services
- Define operações, mensagens, portas e bindings
- Permite que clientes descubram automaticamente como usar um serviço
### UDDI (Universal Description, Discovery and Integration)
- Registro de web services (diretório)
- Permite publicar e descobrir serviços
- Baseado em XML e SOAP
---
## 15. Pegadinhas e Pontos-Chave da IDECAN
### ❌ Afirmações FALSAS (que a IDECAN usa como alternativas erradas)
1. ~~"XML possui tags predefinidas"~~ → **FALSO**. Quem tem tags predefinidas é o HTML.
2. ~~"XML descreve a aparência dos dados"~~ → **FALSO**. XML descreve o **conteúdo**; HTML descreve a aparência.
3. ~~"XSLT é usado para validar documentos XML"~~ → **FALSO**. XSLT é para **transformação**; DTD e XSD são para validação.
4. ~~"DTD suporta tipos de dados"~~ → **FALSO**. DTD trata tudo como texto. É o **XSD** que suporta tipos de dados.
5. ~~"Todo documento bem-formado é válido"~~ → **FALSO**. Válido é mais restritivo; exige conformidade com DTD/XSD.
6. ~~"A palavra-chave SYSTEM em DTD indica DTD interna"~~ → **FALSO**. SYSTEM indica DTD externa privada.
7. ~~"XQuery não é case-sensitive"~~ → **FALSO**. XQuery **é case-sensitive**.
8. ~~"No XPath, // indica caminho a partir da raiz"~~ → **FALSO**. `/` (simples) indica raiz; `//` indica **qualquer nível**.
9. ~~"XML e JSON são iguais e servem apenas para armazenar texto"~~ → **FALSO**. Possuem diferenças estruturais significativas.
10. ~~"XSD é mais antigo e simples que a DTD"~~ → **FALSO**. XSD é **mais moderno e complexo** que a DTD.
### ✅ Afirmações VERDADEIRAS (fixe!)
1. XML é uma linguagem de **marcação extensível** criada pelo **W3C**.
2. XML é **case-sensitive** (distingue maiúsculas e minúsculas).
3. Um documento XML bem-formado possui exatamente **um elemento raiz**.
4. XSD é escrito em **sintaxe XML**, diferentemente da DTD.
5. XPath é usado como base pelo **XSLT e XQuery**.
6. XSLT transforma XML em **HTML, texto ou outro XML**.
7. DOM carrega o documento **inteiro na memória**; SAX processa por eventos.
8. Namespaces são identificados por **URIs** (não precisam ser endereços acessíveis).
9. O atributo `xml:lang` é um atributo **reservado** pelo W3C.
10. XQuery usa expressões **FLWOR** para consultar dados XML.
11. Seções CDATA são usadas para incluir conteúdo que **não deve ser parseado**.
12. Comentários em XML seguem a mesma sintaxe do HTML: `<!-- comentário -->`.
---
## 16. Questões Comentadas no Estilo IDECAN
---
### Questão 1
**Sobre XML, marque a alternativa INCORRETA:**
- A) O XML é uma linguagem de marcação criada pelo W3C para armazenar e transportar dados.
- B) O XML é extensível, permitindo que o desenvolvedor crie suas próprias tags.
- C) O XML possui tags predefinidas que facilitam o trabalho do programador.
- D) A estrutura do XML é baseada em árvore, com elementos pai e filho.
- E) O XML é case-sensitive, ou seja, `<Nome>` e `<nome>` são tags distintas.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: C**
**Comentário:** XML **não possui tags predefinidas**. Ao contrário do HTML, onde as tags são fixas (como `<p>`, `<h1>`, `<table>`), no XML o programador define livremente suas próprias tags. Essa extensibilidade é, inclusive, uma das características que dá origem ao nome "eXtensible".
</details>
---
### Questão 2
**Assinale a alternativa que apresenta a diferença CORRETA entre documento XML bem-formado e documento XML válido:**
- A) Bem-formado e válido são sinônimos, pois todo XML que segue a sintaxe é necessariamente válido.
- B) Um documento bem-formado segue apenas as regras sintáticas do XML; um documento válido é bem-formado E está em conformidade com uma DTD ou XML Schema.
- C) Um documento válido é apenas aquele processado por um parser SAX.
- D) Bem-formado significa que o documento possui DTD; válido significa que possui XSD.
- E) Documento válido é aquele cujo conteúdo faz sentido semântico para o negócio.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: B**
**Comentário:** A distinção é fundamental: **bem-formado** = sintaxe correta (elemento raiz único, tags fechadas, aninhamento correto). **Válido** = bem-formado + obedece a uma DTD ou XSD associada. Todo documento válido é bem-formado, mas o contrário não é verdadeiro.
</details>
---
### Questão 3
**Sobre DTD (Document Type Definition) e XML Schema (XSD), é CORRETO afirmar:**
- A) A DTD é mais moderna e robusta que o XML Schema para validação de documentos XML.
- B) O XSD é utilizado apenas para validar o conteúdo sem especificar tipos de dados.
- C) A DTD permite definir regras para a estrutura de documentos XML, mas não suporta a definição de tipos de dados.
- D) O XSLT é um padrão utilizado para validação de documentos XML.
- E) O XSD não suporta namespaces XML.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: C**
**Comentário:** A **DTD não suporta tipos de dados** — trata todo conteúdo como texto. O **XSD suporta tipos de dados** (string, integer, date, etc.) e **namespaces**, além de ser escrito em sintaxe XML. O XSLT é para **transformação**, não validação. O XSD é mais moderno que a DTD.
</details>
---
### Questão 4
**Sobre a linguagem XPath, considere as afirmativas:**
I. No XPath, a barra dupla (//) indica que a navegação deve ocorrer a partir da raiz do documento.
II. O XPath é uma linguagem de endereçamento utilizada para localizar partes específicas de um documento XML.
III. No XPath, o índice de posição dos elementos começa em 1 (um).
IV. XPath é a base tanto do XSLT quanto do XQuery.
**Estão CORRETAS apenas:**
- A) I e II
- B) II, III e IV
- C) I, III e IV
- D) Apenas II
- E) Todas estão corretas
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: B**
**Comentário:**
- **I – FALSA:** A barra simples `/` indica navegação a partir da raiz. A barra dupla `//` seleciona nós **em qualquer nível** do documento.
- **II – VERDADEIRA:** XPath localiza partes de um documento XML.
- **III – VERDADEIRA:** O índice em XPath começa em **1**, não em 0.
- **IV – VERDADEIRA:** XPath é elemento central tanto no XSLT quanto no XQuery.
</details>
---
### Questão 5
**Sobre XSLT (Extensible Stylesheet Language Transformations), assinale a alternativa CORRETA:**
- A) O XSLT é utilizado exclusivamente para a validação de documentos XML.
- B) O XSLT permite transformar documentos XML em outros formatos, como HTML ou texto simples.
- C) O XSLT é um protocolo de comunicação entre sistemas, sem relação com transformação de documentos.
- D) O XSLT 2.0 usa os modelos de dados XPath 2.0 e CSS 2.0.
- E) O XSLT só pode transformar XML em outro XML, não sendo possível gerar HTML.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: B**
**Comentário:** O XSLT transforma documentos XML em **HTML, texto, PDF, outro XML** ou qualquer outro formato baseado em texto. O XSLT **não valida** documentos — para isso existem DTD e XSD. O XSLT 2.0 usa os modelos de dados **XPath 2.0 e XQuery 1.0** (não CSS).
</details>
---
### Questão 6
**Com relação ao XQuery, analise as afirmativas:**
I. XQuery não é case-sensitive.
II. XQuery é uma recomendação do W3C, baseada em expressões XPath.
III. As expressões FLWOR permitem iteração, filtragem, ordenação e projeção dos dados.
**Marque a alternativa CORRETA:**
- A) Apenas I é verdadeira.
- B) Apenas II e III são verdadeiras.
- C) Apenas I e III são verdadeiras.
- D) Todas são verdadeiras.
- E) Nenhuma é verdadeira.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: B**
**Comentário:**
- **I – FALSA:** XQuery **é case-sensitive**.
- **II – VERDADEIRA:** XQuery é recomendação W3C e se baseia em XPath.
- **III – VERDADEIRA:** As expressões FLWOR (For, Let, Where, Order by, Return) permitem iteração, filtragem, ordenação e projeção.
</details>
---
### Questão 7
**Analise o fragmento XML abaixo:**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE empresa SYSTEM "empresa.dtd">
<empresa>
<funcionario id="F01">
<nome>Ana Lima</nome>
<cargo>Analista</cargo>
</funcionario>
</empresa>
```
**Sobre o fragmento, é CORRETO afirmar:**
- A) A palavra-chave SYSTEM indica que a DTD está definida internamente no documento.
- B) A DTD está sendo referenciada de um arquivo externo e privado (local).
- C) O atributo `id` não é válido em XML, pois atributos não podem ter valores alfanuméricos.
- D) O documento não é bem-formado pois possui apenas um elemento raiz.
- E) O encoding UTF-8 é obrigatório na declaração XML.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: B**
**Comentário:** A palavra `SYSTEM` indica que a DTD é **externa e privada** (referência a um arquivo local). `PUBLIC` seria usado para DTDs públicas. O documento é bem-formado pois ter **um único elemento raiz é exatamente o requisito**. O encoding não é obrigatório (possui valor padrão).
</details>
---
### Questão 8
**Sobre os parsers DOM e SAX para processamento de XML, marque a alternativa INCORRETA:**
- A) O DOM carrega o documento XML inteiro na memória para processamento.
- B) O SAX processa o XML de forma sequencial, baseado em eventos.
- C) O DOM permite leitura e modificação do documento, enquanto o SAX é geralmente somente leitura.
- D) O SAX consome mais memória que o DOM por precisar registrar todos os eventos.
- E) O DOM é mais indicado para documentos pequenos; o SAX, para documentos grandes.
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: D**
**Comentário:** É o contrário: o **SAX consome menos memória** que o DOM, pois não carrega o documento inteiro — processa elemento por elemento, disparando eventos. O DOM sim consome mais memória por manter toda a árvore do documento em memória.
</details>
---
### Questão 9 (Certo/Errado — estilo IDECAN/CESPE)
**Julgue o item a seguir sobre XML.**
*"Em XML, o trecho `<br/>` representa um elemento vazio válido, enquanto `<br>` sem fechamento torna o documento mal-formado."*
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: CERTO**
**Comentário:** Em XML, diferentemente do HTML, todo elemento **deve ser fechado**. Um elemento vazio pode ser escrito como `<br/>` (forma abreviada) ou `<br></br>`. A forma `<br>` sem fechamento viola as regras de bem-formação.
</details>
---
### Questão 10 (Certo/Errado)
*"A principal diferença entre HTML e XML é que o HTML é usado para exibir dados com foco no layout e design, enquanto o XML é destinado a descrever e transportar dados, sem semântica de apresentação predefinida."*
<details>
<summary>🔎 Ver resposta e comentário</summary>
**✅ Resposta: CERTO**
**Comentário:** Esta é uma afirmação **correta e recorrente** em provas. XML não tem semântica de apresentação — ele descreve o **que** os dados são, não **como** devem aparecer. Para apresentação de XML, utiliza-se XSLT ou CSS.
</details>
---
## 📌 Resumo Visual – Tecnologias da Família XML
```
┌─────────────────────────────┐
│ XML │
│ (Linguagem de Marcação) │
└──────────────┬──────────────┘
│
┌─────────────┬───────────────┼───────────────┬─────────────┐
│ │ │ │ │
┌────▼────┐ ┌────▼────┐ ┌──────▼─────┐ ┌────▼────┐ ┌────▼────┐
│ DTD │ │ XSD │ │ XPath │ │ XSLT │ │ XQuery │
│Valida- │ │Valida- │ │ Navega/ │ │Transfor-│ │Consulta │
│ ção │ │ ção │ │ Seleciona │ │ ma │ │ dados │
│(legado) │ │(atual) │ │ nós │ │ XML │ │ XML │
└─────────┘ └─────────┘ └────────────┘ └─────────┘ └─────────┘
```
---
## 📚 Tabela de Tecnologias – Resumo Final
| Tecnologia | Função Principal | Observação |
|---|---|---|
| **XML** | Armazenar e transportar dados | Criado pelo W3C; extensível |
| **DTD** | Validar estrutura do XML | Não suporta tipos de dados |
| **XSD** | Validar estrutura + tipos de dados | Escrito em XML; mais poderoso |
| **XPath** | Navegar e selecionar nós | Base do XSLT e XQuery |
| **XSLT** | Transformar XML em outro formato | Não valida; transforma |
| **XQuery** | Consultar dados XML | Equivale ao SQL para XML |
| **DOM** | Parser que carrega tudo em memória | Permite modificação |
| **SAX** | Parser orientado a eventos | Eficiente em memória |
| **SOAP** | Protocolo de web services | Baseado em XML |
| **WSDL** | Descrever web services | Escrito em XML |
| **Namespace** | Evitar conflitos de nomes | Identificado por URI |
---
*Material elaborado para estudo voltado ao perfil da banca IDECAN.*
*Última atualização: 2026*