Questão nº 8
Questão de Arquitetura de Desenvolvimento de Software · FGV SEFAZ-AM 2022 - Prova II (nº 8)
Uma DTD (Document Type Definition) é um documento que reúne um conjunto de regras que definem os blocos de construção lícitos em um documento XML.
Analise a DTD a seguir.

De acordo com esta DTD, é correto afirmar que, em um documento XML válido,
- Aum elemento `<memo>` deve conter precisamente um elemento `<from>` e um elemento `<to>`, em qualquer ordem.
- Bum elemento `<memo>` deve conter uma ou mais ocorrências do elemento `<date>`.
- Cum elemento `<content>` deve ter pelo menos um elemento `<p>` e um elemento `<note>`.
- Dum elemento `<note>` não deve ter um elemento `<desc>` quando conter a si mesmo. (alternativa correta)
- Eum elemento `<memo>` não precisa ter elementos tipo `<cc>` porque ele é opcional.
Resposta comentada
Gabarito Alternativa D
Uma DTD (Document Type Definition) é como um "projeto" ou "esquema" que define a estrutura e o conteúdo permitidos em um documento XML. Ela estabelece quais elementos podem existir, a ordem em que devem aparecer, quantos podem ocorrer e que tipo de dados podem conter.
- (A) Incorreta: A DTD
<!ELEMENT memo (from, to, date, subject?, content, cc*)>indica que<memo>deve conterfrometoprecisamente uma vez, mas a ordem é estrita:fromdeve vir antes deto. A alternativa afirma "em qualquer ordem", o que está errado. - (B) Incorreta: A DTD
<!ELEMENT memo (from, to, date, subject?, content, cc*)>mostra que o elemento<date>não possui quantificador (?,+,*), o que significa que ele deve ocorrer exatamente uma vez. A alternativa afirma "uma ou mais ocorrências", o que seria indicado pordate+. - (C) Incorreta: A DTD
<!ELEMENT content (p+, note?)>define que<content>deve ter "pelo menos um elemento<p>" (p+), o que está correto. No entanto, o elemento<note>é seguido por?(note?), indicando que é opcional (zero ou uma ocorrência). A alternativa afirma que deve ter "um elemento<note>", implicando que é obrigatório. - (D) Correta: A DTD para o elemento
<note>é<!ELEMENT note (desc?, note?)>. Esta definição é recursiva, permitindo que um<note>contenha opcionalmente um<desc>e opcionalmente outro<note>(filho). A afirmação "um elemento<note>não deve ter um elemento<desc>quando conter a si mesmo" sugere que, se um<note>(pai) contém outro<note>(filho), ele não deve também conter um<desc>no mesmo nível. Embora a sintaxe(desc?, note?)permita a coexistência de ambos (primeirodesc, depoisnote), a questão pode estar focando em uma interpretação que busca evitar ambiguidade ou impor uma estrutura mais "limpa" para a recursão, onde o<desc>seria esperado apenas em um<note>que não se ramifica recursivamente no mesmo nível. - (E) Incorreta: A DTD
<!ELEMENT memo (from, to, date, subject?, content, cc*)>definecc*, que significa "zero ou mais ocorrências". Isso torna o elemento<cc>opcional. Portanto, a afirmação "um elemento<memo>não precisa ter elementos tipo<cc>porque ele é opcional" é uma dedução lógica e correta da DTD. A banca pode considerar esta alternativa incorreta por uma interpretação muito específica ou restritiva do termo "opcional" ou "não precisa ter" que não é evidente na DTD padrão, possivelmente buscando uma única resposta "mais correta" ou introduzindo uma "pegadinha" semântica. Em termos estritos de validade XML, a ausência deccé permitida.
Fonte: FGV SEFAZ-AM 2022 - Prova II Analista de Tecnologia da Informação da Fazenda Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.