Shape Expressions (ShEx) | ||
---|---|---|
![]() | ||
Desarrollador(es) | ||
ShEx W3C Community Group https://www.w3.org/community/shex/ y http://shex.io/ | ||
Información general | ||
Extensiones comunes | shex, sx | |
Paradigma | Validación de datos | |
Apareció en | 2013 | |
Diseñado por |
Jose Emilio Labra Gayo Iovka Boneva Eric Prud'hommeaux Gregg Kellogg ShEx W3C Community Group | |
Última versión estable | 2.1 (21 de noviembre de 2018 (5 años, 3 meses y 23 días)) | |
Implementaciones | Javascript, Scala | |
Influido por | Turtle, SPARQL, RelaxNG | |
Ha influido a | SHACL | |
Shape Expressions (ShEx) es un lenguaje para validar y describir conjuntos de datos RDF. Fue desarrollado con el objetivo de proporcionar una sintaxis legible por humanos para OSCL Resource Shapes.[1]
El lenguaje fue descrito en la ponencia Shape expressions: an RDF validation and transformation language, publicada en Proceedings of the 10th International Conference on Semantic Systems, SEMANTICS 2014. En junio de 2014 el lenguaje fue presentado como parte del W3C. El W3C Data Shapes Working Group comenzó en septiembre de 2015. No tardó mucho en que el grupo se subdividiese otros dos: el dedicado a ShEx y el de SHACL. En 2016, el ala ShEx formó el ShEx Community Group. En abril de 2017 liberó ShEx 2 con un manual básico ―primer―, la especificación semántica y suite de pruebas con implementación de reportes.[1]
En ShEx coexisten diferentes formatos de serialización: ShExC, una sintaxis compacta y amigable; ShExJ, una sintaxis abstracta basada en JSON-LD; y ShExR, una representación RDF derivada de la sintaxis de JSON-LD.[1][2]
Las expresiones ShEx pueden ser utilizadas tanto para describir datos RDF como para comprobar automáticamente la conformidad de los datos. La sintaxis de ShEx es similar a Turtle y SPARQL, mientras que la semántica está inspirada por lenguajes de expresiones regulares como RelaxNG.[1]
PREFIX : <http://example.org/>
PREFIX schema: <http://schema.org/>
:Persona {
schema:name xsd:string ;
schema:knows @:Persona * ;
}
En el ejemplo anterior se declara que los nodos que conformen una Persona
deben tener la propiedad schema:name
con una valor del tipo cadena y una o más propiedades schema:knows
con un valor que corresponda con una Persona
.