Articulo de referencia

Cypher (lenguaje de consulta)

Cypher es un lenguaje de consulta de grafos declarativo que permite realizar consultas de datos expresivas y eficientes en un grafo de propiedades . [ 1 ] Cypher fue en gran par...

Cypher es un lenguaje de consulta de grafos declarativo que permite realizar consultas de datos expresivas y eficientes en un grafo de propiedades . [ 1 ]

Cypher fue en gran parte una invención de Andrés Taylor mientras trabajaba para Neo4j, Inc. (anteriormente Neo Technology) en 2011. [ 2 ] Cypher fue originalmente diseñado para usarse con la base de datos de grafos Neo4j , pero se abrió a través del proyecto openCypher en octubre de 2015. [ 3 ]

El lenguaje se diseñó teniendo en cuenta la potencia y las capacidades de SQL (lenguaje de consulta estándar para el modelo de base de datos relacional ), pero Cypher se basó en los componentes y las necesidades de una base de datos construida sobre los conceptos de la teoría de grafos . En un modelo de grafos, los datos se estructuran como nodos ( vértices en matemáticas y ciencias de redes) y relaciones (aristas en matemáticas y ciencias de redes) para centrarse en cómo las entidades de los datos están conectadas y relacionadas entre sí.

Modelo gráfico

Cypher se basa en el modelo de grafo de propiedades , que organiza los datos en nodos y aristas (denominadas "relaciones" en Cypher). Además de estos elementos gráficos estándar (nodos y relaciones), el modelo de grafo de propiedades añade etiquetas y propiedades para describir categorías y atributos más específicos de los datos.

Los nodos son las entidades del grafo. Pueden contener cualquier número de atributos ( pares clave-valor ) llamados propiedades. Los nodos pueden estar etiquetados con cero o más etiquetas (como etiquetas o categorías), que representan sus diferentes roles en un dominio. Las relaciones proporcionan conexiones dirigidas, con nombre y semánticamente relevantes entre dos entidades de nodo. Una relación siempre tiene una dirección, un nodo de inicio, un nodo final y exactamente un tipo de relación. Al igual que los nodos, las relaciones también pueden tener propiedades. [ 4 ]

Las etiquetas permiten agrupar nodos similares asignándoles una o más etiquetas. Funcionan como rótulos y permiten especificar tipos de entidades para buscar o crear. Las propiedades son pares clave-valor, donde una clave de cadena se asocia con un valor del sistema de tipos Cypher. Las consultas Cypher se construyen con patrones de nodos y relaciones, aplicando cualquier filtro a las etiquetas y propiedades para crear, leer, actualizar o eliminar datos que se ajusten al patrón especificado.

Sistema de tipos de datos

El sistema de tipos de datos de Cypher incluye muchos de los tipos de datos comunes utilizados en otros lenguajes de programación y consulta. Los tipos de datos admitidos incluyen tipos de valores escalares como booleano , cadena , número , entero y números de punto flotante . También admite tipos temporales como fecha datetime, localdatetimehora, hora local y duración. Están disponibles tipos de datos de contenedor para mapas y listas, junto con tipos de grafo para nodo, relación, ruta y un tipo vacío . [ 5 ]

Sintaxis

El lenguaje de consulta Cypher representa patrones de nodos y relaciones, y los filtra según etiquetas y propiedades. Su sintaxis se basa en el arte ASCII , un lenguaje visual basado en texto para ordenadores. Esto lo hace muy visual y fácil de leer, ya que representa visual y estructuralmente los datos especificados en la consulta. Por ejemplo, los nodos se representan con paréntesis alrededor de los atributos y la información relativa a la entidad. Las relaciones se representan con una flecha (dirigida o no dirigida) con el tipo de relación entre corchetes.

//nodo ( variable : Label { propertyKey : 'propertyValue' })//relación -[ variable : TIPO_RELACIÓN ]->//Patrón Cypher ( nodo1 : EtiquetaA ) -[ rel1 : TIPO_RELACIÓN ]-> ( nodo2 : EtiquetaB )

Palabras clave

Al igual que otros lenguajes de consulta, Cypher incluye diversas palabras clave para especificar patrones, filtrar patrones y devolver resultados. Entre las más comunes se encuentran: MATCH, WHERE y RETURN. Estas funcionan de forma ligeramente diferente a SELECT y WHERE en SQL ; sin embargo, tienen propósitos similares.

MATCH se usa antes de describir el patrón de búsqueda para encontrar nodos, relaciones o combinaciones de nodos y relaciones. [ 6 ] WHERE en Cypher se usa para agregar restricciones adicionales a los patrones y filtrar cualquier patrón no deseado. [ 7 ] RETURN de Cypher formatea y organiza cómo se deben mostrar los resultados. Al igual que con otros lenguajes de consulta, puede devolver los resultados con propiedades específicas, listas, ordenación y más. [ 8 ]

Utilizando las palabras clave con la sintaxis de patrón mostrada anteriormente, la consulta de ejemplo a continuación buscará el patrón del nodo (etiqueta Actor y propiedad llamada nombre con valor 'Nicole Kidman') conectado por una relación (tipo ACTED_IN y dirección de salida desde el primer nodo) a otro nodo (etiqueta Película). La cláusula WHERE luego filtra para conservar solo los patrones donde el nodo Película en la cláusula match tiene una propiedad año que es menor que el valor del parámetro pasado. En el resultado, la consulta especifica que se muestren los nodos de película que coinciden con el patrón y el filtrado de las cláusulas match y where.

COINCIDIR ( nicole : Actor { name : 'Nicole Kidman' }) -[ : ACTED_IN ]-> ( película : Película ) DONDE película . año < $ yearParameter DEVOLVER película

Cypher también contiene palabras clave para especificar cláusulas para escribir, actualizar y eliminar datos. CREATE y DELETE se utilizan para crear y eliminar nodos y relaciones. SET y REMOVE se utilizan para establecer valores en propiedades y agregar/eliminar etiquetas en nodos. MERGE se utiliza para crear nodos únicos sin duplicados. Los nodos solo se pueden eliminar cuando ya no tienen otras relaciones existentes. Por ejemplo: [ 9 ]

COINCIDIR ( startContent : Content ) -[ relationship : IS_RELATED_TO ]-> ( endContent : Content ) DONDE endContent . source = 'user' OPCIONAL COINCIDIR ( endContent ) -[ r ]- () ELIMINAR relationship , endContent

Normalización

Con el proyecto openCypher , se inició un esfuerzo para estandarizar Cypher como lenguaje de consulta para el procesamiento de grafos. Como parte de este proceso, se han celebrado cinco reuniones presenciales de implementadores de openCypher ( oCIM ). La primera reunión tuvo lugar en febrero de 2017 en la sede de SAP en Walldorf, Alemania, coincidiendo con una reunión del Linked Data Benchmark Council. La OCIM más reciente tuvo lugar en Berlín, [ 10 ] coincidiendo con el Taller del W3C sobre estándares web para la gestión de datos de grafos, en marzo de 2019. [ 11 ]

En esa reunión, hubo consenso para trabajar para que Cypher se convirtiera en una contribución significativa a un proyecto más amplio para un lenguaje de consulta de grafos estandarizado internacional llamado GQL. En septiembre de 2019, una propuesta para un proyecto de estándar GQL fue aprobada por votación de los organismos nacionales de normalización que son miembros del Comité Técnico Conjunto 1 de ISO/IEC (responsable de los estándares de tecnología de la información). [ 12 ] La propuesta del proyecto GQL establece lo siguiente:

El uso de grafos como representación fundamental para el modelado de datos es un enfoque emergente en la gestión de datos. En este enfoque, el conjunto de datos se modela como un grafo, donde cada entidad de datos se representa como un vértice (también llamado nodo) y cada relación entre dos entidades como una arista entre vértices correspondientes. El modelo de datos de grafos ha captado la atención por sus ventajas únicas. En primer lugar, el modelo de grafos se adapta naturalmente a conjuntos de datos con estructuras jerárquicas, complejas o incluso arbitrarias. Dichas estructuras se pueden codificar fácilmente en el modelo de grafos como aristas. Esto puede ser más conveniente que el modelo relacional, que requiere la normalización del conjunto de datos en un conjunto de tablas con tipos de fila fijos. En segundo lugar, el modelo de grafos permite la ejecución eficiente de consultas costosas o funciones de análisis de datos que necesitan observar relaciones de múltiples saltos entre entidades de datos, como consultas de accesibilidad, consultas de ruta más corta o más económica, o análisis de centralidad. Actualmente se utilizan dos modelos de grafos: el modelo Resource Description Framework (RDF) y el modelo Property Graph. El modelo RDF ha sido estandarizado por el W3C en varias especificaciones. Por otro lado, el modelo de grafo de propiedades cuenta con multitud de implementaciones en bases de datos de grafos, algoritmos de grafos y herramientas de procesamiento de grafos. Sin embargo, falta un lenguaje de consulta común y estandarizado para grafos de propiedades (como SQL para sistemas de bases de datos relacionales). Se propone GQL para llenar este vacío. [ 13 ]

A partir de 2024, el estándar GQL se publicó como el lenguaje de consulta de grafos estándar bajo ISO/IEC 39075:2024. [ 14 ] La primera implementación de código abierto de un subconjunto del lenguaje ya está disponible. [ 15 ] [ 16 ] Además de la implementación, también se puede encontrar una formalización y leer la sintaxis del subconjunto específico de GQL. [ 17 ]

Véase también

Referencias

  1. "Introducción a Cypher" . Neo4j . Consultado el 8 de noviembre de 2019 .
  2. "Cypher: Un lenguaje de consulta en evolución para grafos de propiedades" (PDF) . Actas de la Conferencia Internacional de 2018 sobre Gestión de Datos. ACM . Consultado el 27 de junio de 2018 .
  3. "Conoce openCypher: El SQL para grafos - Base de datos de grafos Neo4j" . Base de datos de grafos Neo4j . 21/10/2015 . Consultado el 08/11/2019 .
  4. "Modelo de grafo de propiedades" . GitHub . Consultado el 8 de noviembre de 2019 .
  5. "Sistema de tipos Cypher" . GitHub . Consultado el 8 de noviembre de 2019 .
  6. "Manual de Cypher - Cláusula MATCH" . Neo4j . Consultado el 8 de noviembre de 2019 .
  7. "Manual de Cypher - Cláusula WHERE" . Neo4j . Consultado el 8 de noviembre de 2019 .
  8. "Manual de Cypher - Cláusula RETURN" . Neo4j . Consultado el 8 de noviembre de 2019 .
  9. "Cláusulas del manual de Cypher" . Neo4j . Consultado el 8 de noviembre de 2019 .
  10. "Eventos · openCypher" .
  11. "Taller del W3C sobre estandarización web para datos de grafos. Creando puentes: RDF, grafos de propiedades y SQL" . W3C . Consultado el 29 de septiembre de 2019 .
  12. "ISO/IEC WD 39075 Tecnología de la información — Lenguajes de bases de datos — GQL" . ISO . Consultado el 29 de septiembre de 2019 .
  13. "ISO/IEC JTC 1/SC 32 N 3007 - ISO/IEC NP 39075 Tecnología de la información - Lenguajes de bases de datos - GQL" . Instituto Británico de Normas . Consultado el 29 de septiembre de 2019 .
  14. "ISO/IEC 39075:2024" .
  15. "GQL Parser" . GitHub . Consultado el 18 de enero de 2021 .
  16. "¡Primera implementación de investigación GQL de Olof Morra en TU Eindhoven!" . Alastair Green . Consultado el 18 de enero de 2021 .
  17. "Una semántica de GQL; un nuevo lenguaje de consulta para grafos de propiedades formalizado" (PDF) . Olof Morra . Consultado el 18 de enero de 2021 .
  18. "AgensGraph" . bitnine.net . Consultado el 18 de febrero de 2025 .
  19. "Proyectos actuales · openCypher" . opencypher.org . Consultado el 18 de febrero de 2025 .