Os DTDs permitem etiquetar um texto e validar a sua estrutura contra
uma gramática.
As linguagens de especificação de restrições (XML Constraint Specification
Languages), nomeadamente o XCSL, o Schematron e os XML-Schemas,
num nível mais elevado, já permitem validar aspectos não estruturais dos
documentos XML, tais como: relações entre elementos, ou atributos, pertencentes
a diferentes contextos; invariantes sobre modelos de dados; e
restrições ao valor dos elementos, ou atributos.
O sistema XCSL (XML Constraint Specification Language) nasceu no seio
do nosso grupo de investigação [7]. No entanto esta linguagem foi testada
em pé de igualdade com Schematron e XML-Schema. Usou-se um conjunto
considerável de casos de estudo para testar e comparar estas três
linguagens em termos: dos tipos de restrições especificáveis; da facilidade
de aprendizagem/utilização; da informação devolvida ao utilizador. Os
resultados mais significativos foram descritos em [3].
Fazendo esta comparação, apercebemo-nos que em cada linguagem e para
cada tipo de restrição há um texto fixo e um conjunto de partes variáveis,
sendo este último comum às várias linguagens. Tendo em conta estas partes
variáveis, criámos templates para cada tipo de restrição, em cada uma
das três linguagens. Com estes templates é possível gerar a especificação
de restrições, em qualquer uma daquelas linguagens, a partir de um conjunto
finito de parâmetros.
Neste artigo mostramos os templates para cada par tipo-de-restrição/ linguagem. A partir das partes comuns desses templates construímos
um conjunto de templates genéricos, designado XTC—XML Templates
for Constraints—, um para cada tipo de restrição independentemente da
linguagem escolhida. Com um documento XTC pode gerar-se todos os ficheiros
de especificação de restrições, ou seja, um ficheiro de especificação
para cada linguagem. Apresentamos, então, vários exemplos escritos em
XTC.
A implementação final usa aquilo a que chamamos sistema de folhas de
estilo XSL de terceira geração, três níveis de folhas de estilos. Com a
primeira folha de estilos (a do XTC) e o documento XTC geramos o documento
de especificação na linguagem pretendida; com este último e a
segunda folha de estilos (específica da linguagem pretendida) geramos a
terceira folha de estilos (documento com o qual já se vai poder validar a
semântica das várias instâncias); por fim, aplicamos esta última folha de
estilos aos vários documentos da família em estudo.
Terminamos o artigo mostrando como construímos esta arquitectura baseada
apenas em XML e XSL