---
# System prepended metadata

title: "\U0001F4D8 XML – Material Completo para Concursos (Estilo IDECAN)"

---

# 📘 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 |
|---|---|
| `&lt;` | `<` |
| `&gt;` | `>` |
| `&amp;` | `&` |
| `&quot;` | `"` |
| `&apos;` | `'` |

### 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*
