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