DTD’s, XML válidos e XML bem formados


Written on November 23, 2008 – 3:37 pm | by André Gomes

Hoje venho aqui falar um pouco sobre uns temas que já aprendi na disciplina de Processamento Estruturado de Documentos do mestrado de Engenharia de Linguagens. O que irei abordar são alguns conceitos básicos e iniciais apenas, porém tentarei aprofundar nos próximos tempos.

XML bem formados VS XML válidos

Há uma grande diferença entre um XML bem formado e um XML válido.

Um XML é bem formado se obedecer a um conjunto de regras mínimas, enquanto que um documento XML é válido se obedecer à estrutura imposta por um DTD, como irei falar mais à frente. (Futuramente também irei abordar os XML Schemas mas para já apenas estou a referir-me aos DTD’s, que poderão ser uma forma de validação de um XML, antes de sabermos mais sobre XML Schemas).

Para um XML ser bem formado deve antes de mais nada ter uma declaração XML no início. Em língua portuguesa será:

<?xml version="1.0" encoding="iso-8859-1"?>

Em seguida, o documento XML deverá conter, no mínimo, um elemento. Este será o elemento raiz e todos os outros elementos deverão estar incluídos dentro dele.

Para além destes dois pontos já referidos, os elementos deverão estar correctamente aninhados, isto é, quando um elemento <a> é aberto e em seguida um elemento <b>, então o primeiro elemento a fechar deverá ser o </b> e só depois o </a>.

DTD - Document Type Definition

Como já foi dito anteriormente, um DTD é um documento que serve para verificar a estrutura de um ficheiro XML.

O exemplo que estudámos nas aulas para iniciar a aprendizagem de DTD’s foi a construção de um DTD que representasse uma agenda de contactos.

Exemplo - Agenda

Um elemento agenda é constituído por um elemento entrada ou um elemento grupo, no mínimo com uma ocorrência de um deles.

<!--ELEMENT agenda (grupo | entrada)+ -->

Por sua vez, um elemento grupo poderá ser uma entrada, referência ou um outro grupo. Aqui, tal como no caso anterior, poderá existir uma ou mais ocorrências de um destes elementos.

<!--ELEMENT grupo (entrada | referencia | grupo)+ -->

Um elemento do tipo grupo terá que ter obrigatoriamente um atributo gid que será um identificador único de cada grupo.

<!--ATTLIST grupo
gid ID #REQUIRED
>

O elemento entrada tem um elemento nome e um telefone obrigatórios, e um elemento e-mail que é opcional.

<!--ELEMENT entrada (nome, email?, telefone) -->

Em cada entrada, há dois atributos que têm de existir: um que representa o id da entrada, que é do tipo ID e é obrigatório, e um atributo tipo que poderá ter ser do tipo pessoa ou do tipo empresa, sendo pessoa o valor default.

<!--ATTLIST entrada
id ID #REQUIRED
tipo (pessoa | empresa) "pessoa"
>

Uma referência não tem informação como conteúdo, apenas possui um atributo refent que é do tipo IDREF e é obrigatório.

<!--ELEMENT referencia EMPTY -->
<!--ATTLIST referencia
refent IDREF #REQUIRED
>

Os elementos nome, email e telefone são basicamente strings, para indicarmos isso diz-se que são do tipo #PCDATA.

<!--ELEMENT nome (#PCDATA) -->
<!--ELEMENT email (#PCDATA) -->
<!--ELEMENT telefone (#PCDATA) -->

Tendo o DTD construído, há que validar a nossa instância do XML segundo este DTD e caso passe nessa validação então quer dizer que possuímos um XML válido para esta estrutura.

Tentarei brevemente introduzir mais conceitos novos e que se seguem a esta temática.



Veja também:

Tags: , ,

  1. One Response to “DTD’s, XML válidos e XML bem formados”

  2. By Bruno Gomes on Nov 25, 2008 | Reply

    Muito bom.

Post a Comment