**Cypher** — deklarativ grafik soʻrovlar tili boʻlib, u xususiyat grafigida ekspressiv va samarali maʼlumotlarni soʻrash imkonini beradi.

Cypher asosan 2011-yilda Neo4j, Inc. (sobiq Neo Technology) kompaniyasida ishlayotgan Andreas Taylorning ixtirosi edi Cypher dastlab Neo4j grafik maʼlumotlar bazasi bilan foydalanish uchun moʻljallangan edi, lekin 2015-yil oktyabr oyida openCypher loyihasi orqali ochildi.

Til SQL quvvati va imkoniyatlarini hisobga olgan holda ishlab chiqilgan (ilovaviy maʼlumotlar bazasi modeli uchun standart soʻrovlar tili), lekin Cypher grafik nazariyasi tushunchalari asosida qurilgan maʼlumotlar bazasi komponentlari va ehtiyojlariga asoslangan edi. Grafik modelida maʼlumotlar tugunlar (matematika va tarmoq fanidagi choʻqqilar) va munosabatlar (matematika va tarmoq fanlaridagi qirralar) sifatida tuzilgan boʻlib, maʼlumotlardagi ob’ektlar bir-biri bilan qanday bogʻlangan va bogʻlangan.

Grafik modeli
-------------

Cypher Property Graph Model ga asoslangan boʻlib, u maʼlumotlarni tugunlar va qirralarga (Cypherda „munosabatlar" deb ataladi) tashkil qiladi. Tugunlar va munosabatlarning standart grafik elementlariga qoʻshimcha ravishda, xususiyat grafik modeli maʼlumotlarning nozik toifalari va atributlarini tavsiflash uchun teglar va xususiyatlarni qoʻshadi.

Tugunlar grafikdagi ob’ektlardir. Ular xossalar deb ataladigan istalgan sonli atributlarni (kalit-qiymat juftlari) saqlashi mumkin. Tugunlar domendagi turli rollarini ifodalovchi nol yoki undan ortiq yorliqlar (teglar yoki toifalar kabi) bilan belgilanishi mumkin. Aloqalar ikkita tugun ob’ekti oʻrtasidagi yoʻnaltirilgan, nomli, semantik jihatdan tegishli aloqalarni taʼminlaydi. Oʻzaro munosabatlar har doim yoʻnalishga, boshlangʻich tugunga, yakuniy tugunga va aynan bitta aloqa turiga ega. Tugunlar kabi munosabatlar ham xususiyatlarga ega boʻlishi mumkin.

Yorliqlar nol yoki undan ortiq tugun belgilarini belgilash orqali oʻxshash tugunlarni guruhlashi mumkin. Yorliqlar teglarga oʻxshaydi va izlash yoki yaratish uchun muayyan turdagi ob’ektlarni belgilash imkonini beradi. Xususiyatlar qatorli kalit va Cypher tipidagi tizimning baʼzi qiymatini bogʻlaydigan kalit-qiymat juftliklari. Cypher soʻrovlari belgilangan naqshda topilgan maʼlumotlarni yaratish, oʻqish, yangilash, oʻchirish uchun teglar va xususiyatlar boʻyicha har qanday belgilangan filtrlash bilan tugunlar va munosabatlar naqshlari bilan yigʻiladi.

### Kalit soʻzlar

Boshqa soʻrovlar tillariga oʻxshab, Cypher naqshlarni belgilash, naqshlarni filtrlash va natijalarni qaytarish uchun turli xil kalit soʻzlarni oʻz ichiga oladi. Eng keng tarqalganlar orasida: MATCH, WHERE va RETURN. Bular SQLda SELECT va WHERE dan biroz farq qiladi; ammo, ular oʻxshash maqsadlarga ega.

MATCH tugunlar, aloqalar yoki tugunlar va munosabatlar kombinatsiyalarini topish uchun qidiruv sxemasini tavsiflashdan oldin ishlatiladi**. Cypher**'da WHERE naqshlarga qoʻshimcha cheklovlar qoʻshish va kiruvchi naqshlarni filtrlash uchun ishlatiladi. Cypher’s RETURN formatlari va natijalarni qanday chiqarish kerakligini tartibga soladi. Boshqa soʻrovlar tillarida boʻlgani kabi, natijalarni maʼlum xususiyatlar, roʻyxatlar, buyurtma va boshqalar bilan qaytarishingiz mumkin.

Cypher ilovalari
----------------

Cypher Neo4j maʼlumotlar bazasida, SAP’ning HANA Graph, Redis Graph. Cambridge Semantics' Anzograph. Bitnineʼs AgensGraph Memgraph va ochiq kodli Cypher for Gremlin loyihalarida amalga oshiriladi. Rigadagi Neueda Labs va Cypher for Apache Spark (hozirda Morpheus deb oʻzgartirilgan) tomonidan hamda Cypher kabi tadqiqot loyihalarida saqlanmoqda.

Manbalar
--------

1. ↑  „Cypher Introduction".  Neo4j. Qaraldi: 8-noyabr 2019-yil.
2. ↑  „Cypher: An Evolving Query Language for Property Graphs".  Proceedings of the 2018 International Conference on Management of Data. ACM. Qaraldi: 27-iyun 2018-yil.
3. ↑  „Meet openCypher: The SQL for Graphs - Neo4j Graph Database" (en-US). *Neo4j Graph Database* (21-oktabr 2015-yil). Qaraldi: 8-noyabr 2019-yil.
4. ↑  „Property Graph Model" (en). *GitHub*. Qaraldi: 8-noyabr 2019-yil.
5. ↑  „Cypher manual - MATCH clause".  Neo4j. Qaraldi: 8-noyabr 2019-yil.
6. ↑  „Cypher manual - WHERE clause".  Neo4j. Qaraldi: 8-noyabr 2019-yil.
7. ↑  „Cypher manual - RETURN clause".  Neo4j. Qaraldi: 8-noyabr 2019-yil.
8. ↑  „*RedisGraph - a graph database module for Redis*".  Redis Labs. Qaraldi: 9-noyabr 2019-yil.
9. ↑  „*Cambridge Semantics Adds OpenCypher to AnzoGraph*" (mart 2019). Qaraldi: 9-noyabr 2019-yil.
10. ↑  „*AgensGraph - AgensGraph supports Ansi-SQL and OpenCypher*" (21-sentabr 2018-yil).
11. ↑  „Memgraph - Frequently asked questions". *memgraph.com*.
12. ↑  *Novikov.* „*Cypher for Gremlin adds Cypher support to any Gremlin graph database.*".  openCypher (yanvar 2018). Qaraldi: 3-noyabr 2019-yil.
13. ↑  *Rydberg.* „*Morpheus brings the leading graph query language, Cypher, onto the leading distributed processing platform, Spark.*".  openCypher (iyul 2016). Qaraldi: 3-noyabr 2019-yil.
14. ↑  *Green.* „*Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apache Spark*".  Databricks Inc. (aprel 2019). Qaraldi: 3-noyabr 2019-yil.
15. ↑  „*Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apache Spark (continues)*".