Zum Inhalt springen

„Cypher (Abfragesprache)“ – Versionsunterschied

aus AufEinWort, der freien Forschung
[gesichtete Version][gesichtete Version]
AZ: Die Seite wurde neu angelegt: {{SeitenordnungWP.de | PageID = {{subst:PAGEID}} }}{{WikibaseQ}}
 
KKeine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
{{SeitenordnungWP.de
{{SeitenordnungTest
| PageID = 0
| PageID = 93899
}}{{WikibaseQ}}
}}{{WikibaseQ}}
'''Cypher''' ist eine [[Deklarative Programmierung|deklarative]] [[Abfragesprache]] für [[Graph (Graphentheorie)|Graphen]], die expressive und effiziente Abfragen und Aktualisierungen auf sogenannten Property-Graphen<ref>{{Internetquelle |url=http://wikis.gm.fh-koeln.de/pmwiki.php/Datenbanken/PropertyGraphModell |titel=Das Property-Graph-Modell |werk=Datenbanken Online Lexikon |hrsg=TH Köln, Campus Gummersbach |abruf=2019-02-06}}</ref> ermöglicht. Cypher ist eine relativ einfache und dennoch mächtige Sprache. Selbst sehr komplizierte Datenbankabfragen können mit Hilfe von Cypher einfach formuliert werden. Dies erlaubt Nutzern, sich auf ihr eigentliches Ziel zu konzentrieren, anstatt sich in der Datenbank zu verlieren.<ref name="cypher-introduction">{{cite web |url=http://neo4j.com/docs/developer-manual/current/cypher/#cypher-intro |title=Cypher Introduction |publisher=Neo Technology |accessdate=2017-01-31 |language=en}}</ref>
Cypher war hauptsächlich eine Erfindung von Andrés Taylor, die er 2011 während seiner Arbeit für die Neo4j, Inc. (früher „Neo Technology“) machte.<ref name="cypher-paper">{{cite web |url=https://hal.archives-ouvertes.fr/hal-01803524/file/paper.pdf |title=Cypher: An Evolving Query Language for Property Graphs |publisher=Proceedings of the 2018 International Conference on Management of Data. ACM |accessdate=2018-06-27 |language=en}}</ref> Cypher war ursprünglich dafür gedacht, mit der Graph-Datenbank [[Neo4j]] benutzt zu werden, wurde jedoch durch das openCypher-Projekt im Oktober 2015 in die [[Open Source|Open-Source-Welt]] überführt.<ref>{{Cite news |url=https://neo4j.com/blog/open-cypher-sql-for-graphs/ |title=Meet openCypher: The SQL for Graphs - Neo4j Graph Database |date=2015-10-21 | newspaper=Neo4j Graph Database |accessdate=2017-01-31 |language=en}}</ref>
== Graph-Modell ==
Cypher beruht auf dem Property-Graph-Modell, welches zusätzlich zu den Standard-Graph-Elementen ''Knoten'' (englisch „nodes“) und ''Kanten'' (englisch „edges“; welche in Cypher ''Beziehungen'' – englisch „relationships“ – heißen) ''Etiketten'' (englisch „labels“) und ''Eigenschaften'' (englisch „properties“) als Konzepte einführt. Knoten können keine oder viele Etiketten haben, während Beziehungen genau einen Beziehungstyp haben.<ref>{{Cite web |url=https://github.com/opencypher/openCypher/blob/master/docs/property-graph-model.adoc |title=Property Graph Model |publisher=GitHub |access-date=2017-01-31 |language=en}}</ref> Knoten und Beziehungen haben auch keine oder viele Eigenschaften, bei denen Eigenschaften aus Schlüssel (englisch „key“) und Wert (englisch „value“) bestehen und den aus einer [[Zeichenkette]] (englisch „string“) bestehenden Schlüssel an einen Wert aus dem Typsystem von Cypher binden.
=== Typsystem ===
Das Typsystem von Cypher enthält Knoten, Beziehungen (Kanten), Pfade (englisch „paths“), Karten (englisch „maps“), Listen (englisch „lists“), Ganzzahlen (englisch „integers“), Gleitkommazahlen (englisch „floating point numbers“), logische Werte (englisch „booleans“) und Zeichenketten.<ref>{{Cite web |url=https://github.com/opencypher/openCypher/blob/master/cip/1.accepted/CIP2015-09-16-public-type-system-type-annotation.adoc |title=Cypher Type System |publisher=GitHub |access-date=2017-01-03 |language=en}}</ref>
== Syntax ==
Cypher enthält eine Vielzahl von Klauseln. Die gebräuchlichsten sind „MATCH“ und „WHERE“. Diese haben eine leicht abweichende Funktionalität von der aus der Datenbankabfragesprache [[SQL]] bekannten. MATCH wird für die Beschreibung der Struktur des gesuchten Musters (englisch „pattern“) verwendet, das primär auf Beziehungen beruht. WHERE wird verwendet, um zusätzliche Bedingungen (englisch „constraints“) für die Muster zu definieren.<ref name="cypher-queries">{{cite web |url=http://neo4j.com/docs/developer-manual/current/cypher/clauses/match/ |title=Neo4j 3.1.1 manual - MATCH clause |publisher=Neo Technology |accessdate=2017-01-31 |language=en}}</ref> Die folgende Abfrage wird zum Beispiel alle Filme als Antwort zurückgeben, in denen eine Schauspielerin 'Nicole Kidman' mitspielte, und die vor einem bestimmten (durch einen Parameter übergebenen) Jahr produziert wurden:
<syntaxhighlight lang="cypher">
MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie
</syntaxhighlight>
Zusätzlich enthält Cypher Klauseln für das Schreiben, Aktualisieren und Löschen von Daten. „CREATE“ und „DELETE“ werden verwendet, um Knoten und Beziehungen zu erstellen bzw. zu löschen. „SET“ und „REMOVE“ werden verwendet, um Werte von Eigenschaften und Etiketten von Knoten zu setzen bzw. zu entfernen. Knoten können nur gelöscht werden, wenn sie keine Beziehungen (zu anderen Knoten) haben. Ein Beispiel:<ref name="cypher-queries" />
<syntaxhighlight lang="cypher">
MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
WHERE content.source = 'user'
OPTIONAL MATCH (content)-[r]-()
DELETE r, content
</syntaxhighlight>
== Standardisierung ==
Mit dem openCypher-Projekt wurde der Versuch gestartet, Cypher als Standard-Abfragesprache bei der Graph-Verarbeitung zu etablieren. Ein Teil des Prozesses war das First openCypher Implementers Meeting (oCIM), welches erstmals im Dezember 2016 angekündigt wurde.<ref>{{Cite web |url=http://www.opencypher.org/2017/01/17/ocim-announcement/ |title=openCypher Implementers Meeting · openCypher.org |publisher=opencypher.org |accessdate=2017-01-31 |language=en |archiveurl=https://web.archive.org/web/20170128052615/http://www.opencypher.org/2017/01/17/ocim-announcement |archivedate=2017-01-28}}</ref><ref>{{Cite web |url=https://groups.google.com/forum/#!topic/opencypher/vCNM4UOXcTY |title=oCIM announcement on openCypher Google Groups |publisher=groups.google.com |access-date=2017-01-31 |language=en}}</ref>
== Siehe auch ==
* [[SPARQL]], eine weitere deklarative Abfragesprache für Graph-Daten
* [[Graphdatenbank]]
== Weblinks ==
* [https://www.opencypher.org/ OpenCypher], eine Initiative von Neo4j, Inc. und anderen, um die Benutzung von Cypher auf andere Graphdatenbanken auszuweiten (englisch)
* [https://neo4j.com/blog/open-cypher-sql-for-graphs/ Meet openCypher: The SQL for Graphs] (englisch)
== Einzelnachweise ==
<references />
[[Kategorie:Datenbanksprache]]
[[Kategorie:Freie Software]]
[[Kategorie:NoSQL]]

Aktuelle Version vom 29. Oktober 2026, 10:40 Uhr

WPGraph Query Language

Wikibase

Cypher ist eine deklarative Abfragesprache für Graphen, die expressive und effiziente Abfragen und Aktualisierungen auf sogenannten Property-Graphen[1] ermöglicht. Cypher ist eine relativ einfache und dennoch mächtige Sprache. Selbst sehr komplizierte Datenbankabfragen können mit Hilfe von Cypher einfach formuliert werden. Dies erlaubt Nutzern, sich auf ihr eigentliches Ziel zu konzentrieren, anstatt sich in der Datenbank zu verlieren.[2]

Cypher war hauptsächlich eine Erfindung von Andrés Taylor, die er 2011 während seiner Arbeit für die Neo4j, Inc. (früher „Neo Technology“) machte.[3] Cypher war ursprünglich dafür gedacht, mit der Graph-Datenbank Neo4j benutzt zu werden, wurde jedoch durch das openCypher-Projekt im Oktober 2015 in die Open-Source-Welt überführt.[4]

Graph-Modell

Cypher beruht auf dem Property-Graph-Modell, welches zusätzlich zu den Standard-Graph-Elementen Knoten (englisch „nodes“) und Kanten (englisch „edges“; welche in Cypher Beziehungen – englisch „relationships“ – heißen) Etiketten (englisch „labels“) und Eigenschaften (englisch „properties“) als Konzepte einführt. Knoten können keine oder viele Etiketten haben, während Beziehungen genau einen Beziehungstyp haben.[5] Knoten und Beziehungen haben auch keine oder viele Eigenschaften, bei denen Eigenschaften aus Schlüssel (englisch „key“) und Wert (englisch „value“) bestehen und den aus einer Zeichenkette (englisch „string“) bestehenden Schlüssel an einen Wert aus dem Typsystem von Cypher binden.

Typsystem

Das Typsystem von Cypher enthält Knoten, Beziehungen (Kanten), Pfade (englisch „paths“), Karten (englisch „maps“), Listen (englisch „lists“), Ganzzahlen (englisch „integers“), Gleitkommazahlen (englisch „floating point numbers“), logische Werte (englisch „booleans“) und Zeichenketten.[6]

Syntax

Cypher enthält eine Vielzahl von Klauseln. Die gebräuchlichsten sind „MATCH“ und „WHERE“. Diese haben eine leicht abweichende Funktionalität von der aus der Datenbankabfragesprache SQL bekannten. MATCH wird für die Beschreibung der Struktur des gesuchten Musters (englisch „pattern“) verwendet, das primär auf Beziehungen beruht. WHERE wird verwendet, um zusätzliche Bedingungen (englisch „constraints“) für die Muster zu definieren.[7] Die folgende Abfrage wird zum Beispiel alle Filme als Antwort zurückgeben, in denen eine Schauspielerin 'Nicole Kidman' mitspielte, und die vor einem bestimmten (durch einen Parameter übergebenen) Jahr produziert wurden:

MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie

Zusätzlich enthält Cypher Klauseln für das Schreiben, Aktualisieren und Löschen von Daten. „CREATE“ und „DELETE“ werden verwendet, um Knoten und Beziehungen zu erstellen bzw. zu löschen. „SET“ und „REMOVE“ werden verwendet, um Werte von Eigenschaften und Etiketten von Knoten zu setzen bzw. zu entfernen. Knoten können nur gelöscht werden, wenn sie keine Beziehungen (zu anderen Knoten) haben. Ein Beispiel:[7]

MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
WHERE content.source = 'user'
OPTIONAL MATCH (content)-[r]-()
DELETE r, content

Standardisierung

Mit dem openCypher-Projekt wurde der Versuch gestartet, Cypher als Standard-Abfragesprache bei der Graph-Verarbeitung zu etablieren. Ein Teil des Prozesses war das First openCypher Implementers Meeting (oCIM), welches erstmals im Dezember 2016 angekündigt wurde.[8][9]

Siehe auch

Einzelnachweise

  1. ↑ Das Property-Graph-Modell. In: Datenbanken Online Lexikon. TH Köln, Campus Gummersbach, abgerufen am 6. Februar 2019.
  2. ↑ Cypher Introduction. Neo Technology, abgerufen am 31. Januar 2017 (englisch).
  3. ↑ Cypher: An Evolving Query Language for Property Graphs. Proceedings of the 2018 International Conference on Management of Data. ACM, abgerufen am 27. Juni 2018 (englisch).
  4. ↑ Meet openCypher: The SQL for Graphs - Neo4j Graph Database In: Neo4j Graph Database, 21. Oktober 2015. Abgerufen am 31. Januar 2017 (englisch). 
  5. ↑ Property Graph Model. GitHub, abgerufen am 31. Januar 2017 (englisch).
  6. ↑ Cypher Type System. GitHub, abgerufen am 3. Januar 2017 (englisch).
  7. ↑ a b Neo4j 3.1.1 manual - MATCH clause. Neo Technology, abgerufen am 31. Januar 2017 (englisch).
  8. ↑ openCypher Implementers Meeting · openCypher.org. opencypher.org, archiviert vom Original am 28. Januar 2017; abgerufen am 31. Januar 2017 (englisch).
  9. ↑ oCIM announcement on openCypher Google Groups. groups.google.com, abgerufen am 31. Januar 2017 (englisch).