Schematron es un lenguaje de validación basado en reglas para realizar afirmaciones sobre la presencia o ausencia de patrones en árboles XML . Es un lenguaje de esquema estructural expresado en XML utilizando una pequeña cantidad de elementos y lenguajes XPath . En muchas implementaciones, el XML de Schematron se procesa en código XSLT para su implementación en cualquier lugar donde se pueda utilizar XSLT.
Schematron es capaz de expresar restricciones de maneras que otros lenguajes de esquema XML como XML Schema y DTD no pueden. Por ejemplo, puede requerir que el contenido de un elemento sea controlado por uno de sus hermanos. O puede solicitar o requerir que el elemento raíz, independientemente de qué elemento sea, tenga atributos específicos. Schematron también puede especificar las relaciones requeridas entre múltiples archivos XML. Las restricciones y las reglas de contenido pueden estar asociadas con mensajes de error de validación en "inglés simple" (o en cualquier idioma), lo que permite la traducción de códigos de error numéricos de Schematron en mensajes de error de usuario significativos. Los usuarios de Schematron definen todos los mensajes de error por sí mismos. [1]
La recomendación ISO actual es Tecnología de la información, Lenguajes de definición de esquemas de documentos (DSDL) , Parte 3: Validación basada en reglas, Schematron (ISO/IEC 19757-3:2020).
Las restricciones se especifican en Schematron utilizando un lenguaje basado en XPath que se puede implementar como código XSLT, lo que lo hace práctico para aplicaciones como las siguientes:
Schematron fue inventado por Rick Jelliffe mientras trabajaba en el Centro de Computación Academia Sinica de Taiwán. Describió a Schematron como "un plumero para alcanzar las partes que otros lenguajes de esquema no pueden alcanzar".
Las versiones más comunes de Schematron son:
Schematron ha sido estandarizado por la ISO como Tecnología de la información, Lenguajes de definición de esquemas de documentos (DSDL) , Parte 3: Validación basada en reglas, Schematron (ISO/IEC 19757-3:2020).
Esta norma no figura actualmente en la lista de especificaciones públicas disponibles de ISO. Las versiones impresas se pueden adquirir en ISO o en organismos de normalización nacionales.
Los esquemas que utilizan ISO/IEC FDIS 19757-3 deben utilizar el siguiente espacio de nombres:
http://purl.oclc.org/dsdl/schematron
Las reglas de Schematron se pueden crear utilizando un editor XML estándar o una aplicación XForms . El siguiente es un esquema de ejemplo:
<schema xmlns= "http://purl.oclc.org/dsdl/schematron" > <pattern> <title> Reglas de fecha </title> <rule context= "Contract" > <assert test= "ContractDate > current-date()" > ContractDate debe estar en el pasado porque no se permiten contratos futuros . </assert> </rule> </pattern> </schema>
Esta regla verifica que el elemento XML ContractDate tenga una fecha anterior a la fecha actual. Si esta regla falla, la validación fallará y se devolverá al usuario un mensaje de error que es el cuerpo del elemento assert.
Los esquemas de Schematron son adecuados para su uso en XML Pipelines , lo que permite a los diseñadores de procesos de flujo de trabajo crear y mantener reglas mediante herramientas de manipulación de XML. El lenguaje de pipeline XProc del W3C , por ejemplo, tiene soporte nativo para el procesamiento de esquemas de Schematron a través de su paso "validar con Schematron". [4]
Dado que los esquemas de Schematron se pueden transformar en hojas de estilo XSLT , estas se pueden utilizar en XML Pipelines que admitan la transformación XSLT. Se puede utilizar una tarea Apache Ant para convertir reglas de Schematron en archivos XSLT.
También existe una implementación nativa de Schematron, como la implementación Java de Innovimax/ INRIA , QuiXSchematron, que también realiza streaming .