El lenguaje de restricciones de formas [1] ( SHACL ) es un lenguaje estándar del World Wide Web Consortium (W3C) para describir gráficos del marco de descripción de recursos (RDF). SHACL ha sido diseñado para mejorar las capas de interoperabilidad técnica y semántica de ontologías expresadas como gráficos RDF. [3]
Los modelos SHACL se definen en términos de restricciones sobre el contenido, la estructura y el significado de un gráfico. SHACL es un lenguaje altamente expresivo. Entre otras, incluye características para expresar condiciones que restringen la cantidad de valores que puede tener una propiedad, el tipo de dichos valores, rangos numéricos, patrones de coincidencia de cadenas y combinaciones lógicas de dichas restricciones. SHACL también incluye un mecanismo de extensión para expresar condiciones más complejas en lenguajes como SPARQL y JavaScript . Las reglas SHACL agregan capacidades de inferencia a SHACL, lo que permite a los usuarios definir qué nuevas declaraciones se pueden inferir a partir de declaraciones existentes (afirmadas).
SHACL permite a sus usuarios describir formas de datos, centrándose en dónde se aplica una forma específica.
Una forma de propiedad describe las características de los nodos del gráfico a los que se puede llegar a través de una ruta específica. Una ruta puede ser un único predicado (propiedad) o una cadena de predicados. Una forma de propiedad siempre debe especificar una ruta. Esto se hace mediante el uso sh:path
de predicado. Se puede pensar que las formas de propiedad que utilizan rutas simples describen valores de ciertas propiedades, por ejemplo, valores de una propiedad antigua o valores de una obra para una propiedad. Las rutas complejas pueden especificar una combinación de diferentes predicados en una cadena, incluida la dirección inversa, predicados alternativos y cadenas transitivas.
Las formas de propiedad se pueden definir como parte de una forma de nodo. En este caso, una forma de nodo apunta a formas de propiedad mediante sh:property
un predicado. Las formas de propiedad también pueden ser "autónomas", es decir, completamente independientes de cualquier forma de nodo.
La forma de un nodo describe las características de nodos de gráficos específicos, independientemente de cómo se llegue a ellos. Se puede, por ejemplo, decir que ciertos nodos del gráfico deben ser literales o URI, etc. Es común incluir formas de propiedades en una forma de nodo, definiendo efectivamente valores de muchas propiedades diferentes de un nodo.
Por ejemplo, una forma de nodo para un empleado puede incorporar formas de propiedad para la edad y trabajos para las propiedades.
Una restricción es una forma de describir diferentes características de los valores. Una forma contendrá una o más declaraciones de restricciones. SHACL proporciona muchos tipos de restricciones prediseñadas. Por ejemplo, sh:datatype
se utiliza para describir el tipo de valores literales, por ejemplo, si son cadenas, números enteros o fechas. sh:minCount
se utiliza para describir el número mínimo requerido de valores. sh:length
se utiliza para describir el número de caracteres de un valor.
Un objetivo conecta una forma con los datos que describe. La forma más sencilla de especificar un objetivo es decir que una forma de nodo también es una clase. Esto significa que su definición es aplicable a todos los miembros (instancias) de una clase. Otras formas de definir el objetivo de una forma son:
Las declaraciones de objetivos se pueden incluir en una forma de nodo o en una forma de propiedad. Sin embargo, cuando una forma de propiedad forma parte de una forma de nodo, sus propios objetivos se ignoran.
SHACL utiliza rdfs:subClassOf
declaraciones para identificar objetivos. Una forma dirigida a miembros de una clase también apunta a miembros de todas sus subclases. En otras palabras, todas las definiciones SHACL de una clase las heredan las subclases.
SHACL permite la validación de gráficos. Un motor de validación SHACL toma como entrada un gráfico a validar (llamado gráfico de datos) y un gráfico que contiene declaraciones de formas SHACL (llamado gráfico de formas) y produce un informe de validación, también expresado como un gráfico. Todos estos gráficos se pueden representar en cualquier formato de serialización del Marco de descripción de recursos (RDF), incluido JSON-LD o Turtle .
SHACL es bastante único en su enfoque, ya que incorpora no solo la capacidad de especificar un nivel de gravedad de los resultados de la validación, sino también la capacidad de devolver sugerencias sobre cómo se pueden corregir los datos si se genera el resultado de la validación. Los niveles integrados son Infracción, Advertencia e Información, y el valor predeterminado es Infracción si no sh:severity
se ha especificado ninguno para una forma. Los usuarios de SHACL pueden agregar otros niveles de gravedad personalizados. Los resultados de la validación también pueden tener valores para otras propiedades, como se describe en la especificación. Por ejemplo, la propiedad sh:resultMessage
está diseñada para comunicar detalles textuales adicionales a los usuarios, incluidas recomendaciones sobre cómo se pueden corregir los datos para abordar el resultado de la validación. En los casos en los que una restricción no tiene ningún valor para sh:message
en el gráfico de formas, el procesador SHACL puede generar automáticamente otros valores para sh:resultMessage
. Algunos procesadores SHACL (por ejemplo, el implementado por TopQuadrant) hicieron que estas sugerencias fueran procesables en el software, automatizando su aplicación a petición del usuario.
World Wide Web Consortium publicó las siguientes especificaciones SHACL:
El informe de implementación y conjunto de pruebas de SHACL [7] vinculado desde la especificación SHACL W3C enumera algunas herramientas de código abierto que podrían usarse para la validación de SHACL a partir de junio de 2019. A fines de 2019, muchos proveedores comerciales de marcos y bases de datos RDF anunciaron soporte para al menos menos núcleo SHACL.
Algunas de las herramientas de código abierto enumeradas en el informe son:
SHACL Playground es un servicio de validación SHACL gratuito implementado en JavaScript. [13]
Eclipse RDF4J es un marco Java de código abierto de la Fundación Eclipse para procesar datos RDF, que admite la validación SHACL. [14]
SHACL cuenta con el respaldo de la mayoría de los proveedores de tecnología RDF Graph, incluidos Cambridge Semantics (Anzo, disponible en el primer trimestre de 2022), Franz (AllegroGraph), Metaphacts, Ontotext (GraphDB), Stardog y TopQuadrant. Incluso hay soporte para productos comerciales que utilizan el modelo de datos de gráficos de propiedades, como Neo4J. [15]
Los niveles de implementación pueden variar. Como mínimo, los proveedores admiten SHACL Core. Algunos también admiten SHACL SPARQL para una mayor expresividad, mientras que otros pueden admitir funciones avanzadas de SHACL que incluyen reglas y funciones.