| Anotação Estrutural de Documentos e sua Semântica | ||
|---|---|---|
| Prev | Capítulo 5. O Ciclo de Desenvolvimento dos Documentos SGML | Next |
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:
Início do elemento com identificador elem-id. Se o elemento tiver atributos, eles já deveriam ter aparecido em linhas com prefixo A.
Fim do elemento cujo identificador é elem-id.
Conteúdo do último elemento iniciado.
O próximo elemento a ser iniciado terá um atributo de nome nome com o valor valor.
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):
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.
O antecessor do SP [Cla96c].
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.
Um dos primeiros a ser desenvolvido também. Resultou de uma experiência académica na Universidade de Amsterdão [ASP].
Desenvolvido em 1997 e programado em C++ [YASP]. Não é tão utilizado como os outros.
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.