5.3. Validação

A possibilidade de validação é uma das mais-valias que a documentação estruturada trouxe para o universo do processamento e edição documental. Mais especificamente, referimo-nos à validação estrutural, à possibilidade de verificar se a estrutura de um determinado documento respeita um determinado DTD.

Esta tarefa/fase reveste-se de especial importância quando o que está em causa é um sistema baseado em SGML. Um sistema destes gira em torno da validação estrutural. Esta é realizada na edição para validar a introdução do documento, na formatação, na transformação e até na inserção numa base de dados.

Neste caso, esta tarefa é da responsabilidade de um parser ou de um meta-parser se se entender o SGML como meta-linguagem. Independentemente da designação que lhe for atribuída trata-se de um parser diferente, é configurável por uma especificação de estrutura, um DTD, e é este DTD que vai orientar o reconhecimento e validação do documento.

Normalmente, os parsers de SGML não aparecem como ferramentas isoladas mas sim integrados noutras aplicações como editores estruturados, formatadores/tranformadores, bases de dados documentais e outras. Quando a aplicação invoca a acção de parsing para validar o documento, o parser percorre o documento verificando se este obedece às regras especificadas no DTD e produz dois resultados: um é uma lista de erros que, caso esteja tudo bem, é vazia; o outro é um texto declarativo correspondente à travessia da estrutura de dados interna usada para guardar o documento durante o processo de reconhecimento. Quanto às mensagens de erro, estas variam de acordo com a qualidade do parser. Relativamente à linguagem/formato usado para a saída dos dados da travessia, pode haver algumas variações mas há uma assumida como norma: o ESIS -- Element Structure Information Set.

O ESIS é uma adapatação da notação usada em muitos sistemas funcionais tipo LISP, as expressões-S. A título de exemplo apresenta-se a seguir o ficheiro, em formato ESIS, resultante da aplicação do parser ao memo do Exemplo 5-2.


Exemplo 5-5. Memo em formato ESIS

(MEMO
(PARA
-Camarada Napoleão
)PARA
(DE
-Bola de neve
)DE
(CORPO
(P
-Na obra intitulada "A Quinta dos Animais", George Orwell escrevia:\n
(C
-... os porcos tinham muito trabalho, diariamente, com umas coisas \nchamadas ficheiros, relatórios, minutas e memos. Estes eram grandes folhas\nde papel que tinham de ser cuidadosamente cobertas com escritos, assim que\nestivessem cobertas eram queimadas na fornalha...
)C
- Será que o SGML\nteria ajudado os porcos? Qual a tua opinião?
)P
)CORPO
)MEMO

Cada linha do texto apresentado no exemplo acima tem um significado muito preciso. Descreve-se a seguir os elementos principais da notação utilizada:

(elem-id

Início do elemento com identificador elem-id. Se o elemento tiver atributos, eles já deveriam ter aparecido em linhas com prefixo A.

)elem-id

Fim do elemento cujo identificador é elem-id.

-texto

Conteúdo do último elemento iniciado.

Anome valor

O próximo elemento a ser iniciado terá um atributo de nome nome com o valor valor.

?proc-inst

Instrução de processamento proc-inst.

Muitas vezes, o parser é invocado não porque seja necessária a validação mas porque é necessário o formato ESIS do documento (o que acontece na formatação, como se poderá ver na Secção 5.4). Como se acabou de ver, o ESIS é um formato em que a informação tem um prefixo que a identifica; torna-se, por isso, um formato ideal para processamento de documentos.

A identificação e a estrutura geradas (que compõem o ESIS) são apenas uma visão diferente mas equivalente da estrutura presente no documento através das anotações e validada pelo DTD.

A construção de um parser para SGML é uma tarefa bastante complicada devido a algumas particularidades do SGML. Por exemplo, uma das que levanta mais problemas é o operador & que indica a possibilidade combinatória dos seus operandos. Por isso, não é surpresa que até hoje não tenha havido muitas iniciativas para a implementação de parsers de SGML.

Porque o parser é a peça central de um sistema baseado em SGML, apresentam-se a seguir alguns dos parsers existentes (mais significativos e utilizados):

SP: James Clark's SGML Parser

Um dos últimos parsers a ser desenvolvido e talvez o mais actual e completo [Cla96d]. Não é bem um parser mas sim uma biblioteca de parsing desenvolvida seguindo uma filosofia orientada a objectos. É utilizada na maior parte dos produtos SGML, comerciais ou não.

SGMLS: James Clark's SGMLS parser

O antecessor do SP [Cla96c].

ARC-SGML: Charles Goldfarb's Almaden Research Center SGML Parser

Um dos primeiros parsers a aparecer em público [ARCSGML]. Foi desenvovido enquanto a norma era redigida para validar esta última. Foi o antecessor do SGMLS.

ASP-SGML: Jos Warmer's Amsterdam SGML Parser

Um dos primeiros a ser desenvolvido também. Resultou de uma experiência académica na Universidade de Amsterdão [ASP].

YASP: Pierre Richard's Yorktown Advanced SGML Parser (or: 'Yet Another SGML Parser')

Desenvolvido em 1997 e programado em C++ [YASP]. Não é tão utilizado como os outros.

YAO (Yuan-Ze--Almaden--Oslo project) Parser Materials

YAO é um projecto criado no seio da comunidade SGML [YAO], que visa o desenvolvimento de pacotes de ferramentas para o utilizador, o analista e o programador de SGML com o requisito de que tudo é livre de direitos comerciais. Deste projecto, resultou uma biblioteca de parsing desenvolvida, seguindo uma filosofia orientada a objectos.

Os parsers acima enumerados foram desenvolvidos usando vários paradigmas de programação, embora a maior parte tenha seguido o paradigma da programação orientada a objecto. No entanto, no que diz respeito às técnicas de parsing e compilação propriamente ditas todos seguiram a abordagem tradicional da tradução dirigida pela sintaxe.

No âmbito desta tese, avançou-se com a implementação de um ambiente de programação de documentos SGML (Secção 9.2), onde se seguiu a abordagem da tradução dirigida pela semântica (baseada em gramáticas de atributos), que resolve directamente alguns problemas do parsing de SGML.

Tendo acabado de escrever o DTD, esta é a altura ideal para pensar no estilo de apresentação que se quer associar a cada um dos elementos.

É uma tarefa que envolve alguma complexidade e uma vez que o assunto está relacionado com a formatação é tratado na Secção 5.4.