unify header style

This commit is contained in:
Boris Verkhovskiy 2024-04-26 02:13:48 -07:00
parent 1924d58159
commit 5fb4c54268
5 changed files with 194 additions and 239 deletions

View File

@ -1,4 +1,4 @@
name: Node.js CI name: CI
on: on:
push: push:
@ -15,4 +15,4 @@ jobs:
with: with:
ruby-version: '3.2' ruby-version: '3.2'
- run: gem install mdl - run: gem install mdl
- run: mdl . --ignore-front-matter -r MD011,MD023,MD027,MD028,MD037,MD038,MD039,MD047 - run: mdl . --ignore-front-matter -r MD003,MD011,MD023,MD027,MD028,MD035,MD037,MD038,MD039,MD047

View File

@ -1116,8 +1116,7 @@ proc main() {
} // end main() } // end main()
``` ```
Who is this tutorial for? ## Who is this tutorial for?
-------------------------
This tutorial is for people who want to learn the ropes of chapel without This tutorial is for people who want to learn the ropes of chapel without
having to hear about what fiber mixture the ropes are, or how they were having to hear about what fiber mixture the ropes are, or how they were
@ -1132,28 +1131,27 @@ to see if more topics have been added or more tutorials created.
### What this tutorial is lacking: ### What this tutorial is lacking:
* Exposition of the [standard modules](https://chapel-lang.org/docs/latest/modules/standard.html) * Exposition of the [standard modules](https://chapel-lang.org/docs/latest/modules/standard.html)
* Multiple Locales (distributed memory system) * Multiple Locales (distributed memory system)
* Records * Records
* Parallel iterators * Parallel iterators
Your input, questions, and discoveries are important to the developers! ## Your input, questions, and discoveries are important to the developers!
-----------------------------------------------------------------------
The Chapel language is still in active development, so there are The Chapel language is still in active development, so there are
occasional hiccups with performance and language features. The more information occasional hiccups with performance and language features. The more information
you give the Chapel development team about issues you encounter or features you you give the Chapel development team about issues you encounter or features you
would like to see, the better the language becomes. would like to see, the better the language becomes.
There are several ways to interact with the developers: There are several ways to interact with the developers:
+ [Gitter chat](https://gitter.im/chapel-lang/chapel)
+ [sourceforge email lists](https://sourceforge.net/p/chapel/mailman) * [Gitter chat](https://gitter.im/chapel-lang/chapel)
* [sourceforge email lists](https://sourceforge.net/p/chapel/mailman)
If you're really interested in the development of the compiler or contributing If you're really interested in the development of the compiler or contributing
to the project, [check out the master GitHub repository](https://github.com/chapel-lang/chapel). to the project, [check out the master GitHub repository](https://github.com/chapel-lang/chapel).
It is under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0). It is under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).
Installing the Compiler ## Installing the Compiler
-----------------------
[The Official Chapel documentation details how to download and compile the Chapel compiler.](https://chapel-lang.org/docs/usingchapel/QUICKSTART.html) [The Official Chapel documentation details how to download and compile the Chapel compiler.](https://chapel-lang.org/docs/usingchapel/QUICKSTART.html)
@ -1161,23 +1159,22 @@ Chapel can be built and installed on your average 'nix machine (and cygwin).
[Download the latest release version](https://github.com/chapel-lang/chapel/releases/) [Download the latest release version](https://github.com/chapel-lang/chapel/releases/)
and it's as easy as and it's as easy as
1. `tar -xvf chapel-<VERSION>.tar.gz` 1. `tar -xvf chapel-<VERSION>.tar.gz`
2. `cd chapel-<VERSION>` 2. `cd chapel-<VERSION>`
3. `source util/setchplenv.bash # or .sh or .csh or .fish` 3. `source util/setchplenv.bash # or .sh or .csh or .fish`
4. `make` 4. `make`
5. `make check # optional` 5. `make check # optional`
You will need to `source util/setchplenv.EXT` from within the Chapel directory You will need to `source util/setchplenv.EXT` from within the Chapel directory
(`$CHPL_HOME`) every time your terminal starts so it's suggested that you drop (`$CHPL_HOME`) every time your terminal starts so it's suggested that you drop
that command in a script that will get executed on startup (like .bashrc). that command in a script that will get executed on startup (like .bashrc).
Chapel is easily installed with Brew for macOS Chapel is easily installed on macOS with Homebrew
1. `brew update` 1. `brew update`
2. `brew install chapel` 2. `brew install chapel`
Compiling Code ## Compiling Code
--------------
Builds like other compilers: Builds like other compilers:
@ -1185,10 +1182,10 @@ Builds like other compilers:
Notable arguments: Notable arguments:
* `--fast`: enables a number of optimizations and disables array bounds * `--fast`: enables a number of optimizations and disables array bounds
checks. Should only enable when application is stable. checks. Should only enable when application is stable.
* `--set <Symbol Name>=<Value>`: set config param `<Symbol Name>` to `<Value>` * `--set <Symbol Name>=<Value>`: set config param `<Symbol Name>` to `<Value>`
at compile-time. at compile-time.
* `--main-module <Module Name>`: use the main() procedure found in the module * `--main-module <Module Name>`: use the main() procedure found in the module
`<Module Name>` as the executable's main. `<Module Name>` as the executable's main.
* `--module-dir <Directory>`: includes `<Directory>` in the module search path. * `--module-dir <Directory>`: includes `<Directory>` in the module search path.

View File

@ -14,7 +14,6 @@ En resumen, Chapel es un lenguaje de programación paralela, código abierto, de
desarrolladp en Cray Inc. y está diseñado para ejecutarse en PC multi-nucleos, desarrolladp en Cray Inc. y está diseñado para ejecutarse en PC multi-nucleos,
así como en supercomputadoras multi-kilocore. así como en supercomputadoras multi-kilocore.
Puede encontrar más información y asistencia al final de este documento. Puede encontrar más información y asistencia al final de este documento.
```chapel ```chapel
@ -1133,8 +1132,7 @@ proc main() {
} // end main() } // end main()
``` ```
¿Para quién es este tutorial? ## ¿Para quién es este tutorial?
-------------------------
Este tutorial es para personas que desean aprender las cuerdas de chapel sin tener Este tutorial es para personas que desean aprender las cuerdas de chapel sin tener
que escuchar sobre qué mezcla de fibras son las cuerdas, o cómo fueron trenzadas, que escuchar sobre qué mezcla de fibras son las cuerdas, o cómo fueron trenzadas,
@ -1148,13 +1146,12 @@ para ver si se han agregado más temas o se han creado más tutoriales.
### Lo que le falta a este tutorial: ### Lo que le falta a este tutorial:
* Exposición de los [módulos estándar](https://chapel-lang.org/docs/latest/modules/standard.html) * Exposición de los [módulos estándar](https://chapel-lang.org/docs/latest/modules/standard.html)
* Múltiples configuraciones regionales (sistema de memoria distribuida) * Múltiples configuraciones regionales (sistema de memoria distribuida)
* Registros * Registros
* Iteradores paralelos * Iteradores paralelos
¡Sus comentarios, preguntas y descubrimientos son importantes para los desarrolladores! ## ¡Sus comentarios, preguntas y descubrimientos son importantes para los desarrolladores!
-----------------------------------------------------------------------
El lenguaje Chapel todavía está en desarrollo activo, por lo que El lenguaje Chapel todavía está en desarrollo activo, por lo que
ocasionalmente hay problemas con el rendimiento y ocasionalmente hay problemas con el rendimiento y
@ -1164,17 +1161,16 @@ Cuanta más información brinde al equipo de desarrollo de Chapel
sobre los problemas que encuentre o las características que le gustaría ver, sobre los problemas que encuentre o las características que le gustaría ver,
mejor será el lenguaje. mejor será el lenguaje.
Hay varias formas de interactuar con los desarrolladores: Hay varias formas de interactuar con los desarrolladores:
+ [Chat de Gitter](https://gitter.im/chapel-lang/chapel)
+ [lista de emails de Sourceforge](https://sourceforge.net/p/chapel/mailman) * [Chat de Gitter](https://gitter.im/chapel-lang/chapel)
* [lista de emails de Sourceforge](https://sourceforge.net/p/chapel/mailman)
Si está realmente interesado en el desarrollo del compilador o en contribuir al proyecto, Si está realmente interesado en el desarrollo del compilador o en contribuir al proyecto,
[consulte el repositorio maestro de GitHub](https://github.com/chapel-lang/chapel). [consulte el repositorio maestro de GitHub](https://github.com/chapel-lang/chapel).
Está bajo el [La licencia Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0). Está bajo el [La licencia Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0).
Instalar el compilador ## Instalar el compilador
-----------------------
[La documentación oficial de Chapel detalla cómo descargar y compilar el compilador de Chapel.](https://chapel-lang.org/docs/usingchapel/QUICKSTART.html) [La documentación oficial de Chapel detalla cómo descargar y compilar el compilador de Chapel.](https://chapel-lang.org/docs/usingchapel/QUICKSTART.html)
@ -1182,11 +1178,11 @@ Chapel se puede construir e instalar en su máquina promedio 'nix (y cygwin).
[Descargue la última versión de lanzamiento](https://github.com/chapel-lang/chapel/releases/) [Descargue la última versión de lanzamiento](https://github.com/chapel-lang/chapel/releases/)
y es tan fácil como y es tan fácil como
1. `tar -xvf chapel-<VERSION>.tar.gz` 1. `tar -xvf chapel-<VERSION>.tar.gz`
2. `cd chapel-<VERSION>` 2. `cd chapel-<VERSION>`
3. `source util/setchplenv.bash # or .sh or .csh or .fish` 3. `source util/setchplenv.bash # or .sh or .csh or .fish`
4. `make` 4. `make`
5. `make check # optional` 5. `make check # optional`
You will need to `source util/setchplenv.EXT` from within the Chapel directory You will need to `source util/setchplenv.EXT` from within the Chapel directory
(`$CHPL_HOME`) every time your terminal starts so it's suggested that you drop (`$CHPL_HOME`) every time your terminal starts so it's suggested that you drop
@ -1198,11 +1194,10 @@ en un script que se ejecutará al inicio (como .bashrc).
Chapel se instala fácilmente con Brew para OS X Chapel se instala fácilmente con Brew para OS X
1. `brew update` 1. `brew update`
2. `brew install chapel` 2. `brew install chapel`
Compilando Código ## Compilando Código
--------------
Construye como otros compiladores: Construye como otros compiladores:
@ -1210,10 +1205,10 @@ Construye como otros compiladores:
Argumentos notables: Argumentos notables:
* `--fast`: habilita varias optimizaciones y deshabilita las comprobaciones * `--fast`: habilita varias optimizaciones y deshabilita las comprobaciones
de los límites de la matriz Solo debe habilitarse cuando la aplicación es estable. de los límites de la matriz Solo debe habilitarse cuando la aplicación es estable.
* `--set <Nombre del Symbolo>=<Valor>`: establece el param de configuracion * `--set <Nombre del Symbolo>=<Valor>`: establece el param de configuracion
`<Nombre del Symbolo>` a `<Valor>`en tiempo de compilación. `<Nombre del Symbolo>` a `<Valor>`en tiempo de compilación.
* `--main-module <Nombre del módulo>`: use el procedimiento main() que se encuentra en el módulo * `--main-module <Nombre del módulo>`: use el procedimiento main() que se encuentra en el módulo
    `<Nombre del módulo>` como principal del ejecutable. `<Nombre del módulo>` como principal del ejecutable.
* `--module-dir <Directorio>`: incluye `<Directorio>` en la ruta de búsqueda del módulo. * `--module-dir <Directorio>`: incluye `<Directorio>` en la ruta de búsqueda del módulo.

View File

@ -6,14 +6,11 @@ contributors:
lang: pt-br lang: pt-br
--- ---
O Cypher é a linguagem de consulta do Neo4j para manipular gráficos facilmente. Ela reutiliza a sintaxe do SQL e a mistura com o tipo de ascii-art para representar gráficos. Este tutorial pressupõe que você já conheça conceitos de gráficos como nós e relacionamentos. O Cypher é a linguagem de consulta do Neo4j para manipular gráficos facilmente. Ela reutiliza a sintaxe do SQL e a mistura com o tipo de ascii-art para representar gráficos. Este tutorial pressupõe que você já conheça conceitos de gráficos como nós e relacionamentos.
[Leia mais aqui.](https://neo4j.com/developer/cypher-query-language/) [Leia mais aqui.](https://neo4j.com/developer/cypher-query-language/)
## Nós
Nós
---
**Representa um registro em um gráfico.** **Representa um registro em um gráfico.**
@ -34,21 +31,19 @@ Um nó pode ter algumas *propriedades*, aqui **name** e **age**. Começa com min
Os tipos permitidos nas propriedades: Os tipos permitidos nas propriedades:
- Numeric - Numeric
- Boolean - Boolean
- String - String
- Lista de tipos primitivos anteriores - Lista de tipos primitivos anteriores
*Aviso: não há propriedade datetime no Cypher! Você pode usar String com um padrão específico ou um Numeric a partir de uma data específica.* *Aviso: não há propriedade datetime no Cypher! Você pode usar String com um padrão específico ou um Numeric a partir de uma data específica.*
`p.name` `p.name`
Você pode acessar uma propriedade com o estilo de ponto. Você pode acessar uma propriedade com o estilo de ponto.
## Relacionamentos (ou Arestas)
Relacionamentos (ou Arestas) **Conecta dois nós.**
---
**Conecta dois nós**
`[:KNOWS]` `[:KNOWS]`
É um *relacionamento* com o *label* **KNOWS**. É um *label* como um rótulo do nó. Começa com maiúsculas e usa UPPER_SNAKE_CASE. É um *relacionamento* com o *label* **KNOWS**. É um *label* como um rótulo do nó. Começa com maiúsculas e usa UPPER_SNAKE_CASE.
@ -62,9 +57,7 @@ O mesmo *relacionamento*, com *propriedades* (como *nó*), aqui **since**.
`[k:KNOWS*..4]` `[k:KNOWS*..4]`
É uma informação estrutural para usar em um *path* (visto posteriormente). Aqui, **\*..4** diz, “Corresponda o padrão, com a relação **k** que é repetida de 1 a 4 vezes. É uma informação estrutural para usar em um *path* (visto posteriormente). Aqui, **\*..4** diz, “Corresponda o padrão, com a relação **k** que é repetida de 1 a 4 vezes.
## Paths
Paths
---
**A maneira de misturar nós e relacionamentos.** **A maneira de misturar nós e relacionamentos.**
@ -80,9 +73,9 @@ Você pode encadear vários relacionamentos. Este path descreve o amigo de um am
`(a:Person)-[:MANAGES]->(b:Person)-[:MANAGES]->(c:Person)` `(a:Person)-[:MANAGES]->(b:Person)-[:MANAGES]->(c:Person)`
Uma encadeamento também pode ser direcionada. Este path descreve que **a** é o chefe de **b** e o grande chefe de **c**. Uma encadeamento também pode ser direcionada. Este path descreve que **a** é o chefe de **b** e o grande chefe de **c**.
Padrões frequentemente usados (do Neo4j doc) : Padrões frequentemente usados (do Neo4j doc):
``` ```cypher
// Amigo de um amigo // Amigo de um amigo
(user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf) (user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf)
@ -96,13 +89,11 @@ path = shortestPath( (user)-[:KNOWS*..5]-(other) )
(root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product) (root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product)
``` ```
## Crie consultas
Crie consultas
---
Crie um novo nó Crie um novo nó
``` ```cypher
CREATE (a:Person {name:"Théo Gauchoux"}) CREATE (a:Person {name:"Théo Gauchoux"})
RETURN a RETURN a
``` ```
@ -111,52 +102,51 @@ RETURN a
Crie um novo relacionamento (com 2 novos nós) Crie um novo relacionamento (com 2 novos nós)
``` ```cypher
CREATE (a:Person)-[k:KNOWS]-(b:Person) CREATE (a:Person)-[k:KNOWS]-(b:Person)
RETURN a,k,b RETURN a,k,b
``` ```
Consultas que casam ## Consultas que casam
---
Casam todos os nós Casam todos os nós
``` ```cypher
MATCH (n) MATCH (n)
RETURN n RETURN n
``` ```
Casam nós por label Casam nós por label
``` ```cypher
MATCH (a:Person) MATCH (a:Person)
RETURN a RETURN a
``` ```
Casam nós por label e propriedade Casam nós por label e propriedade
``` ```cypher
MATCH (a:Person {name:"Théo Gauchoux"}) MATCH (a:Person {name:"Théo Gauchoux"})
RETURN a RETURN a
``` ```
Casam nós de acordo com os relacionamentos (não direcionados) Casam nós de acordo com os relacionamentos (não direcionados)
``` ```cypher
MATCH (a)-[:KNOWS]-(b) MATCH (a)-[:KNOWS]-(b)
RETURN a,b RETURN a,b
``` ```
Casam nós de acordo com os relacionamentos (direcionados) Casam nós de acordo com os relacionamentos (direcionados)
``` ```cypher
MATCH (a)-[:MANAGES]->(b) MATCH (a)-[:MANAGES]->(b)
RETURN a,b RETURN a,b
``` ```
Casam nós com um cláusula `WHERE` Casam nós com um cláusula `WHERE`
``` ```cypher
MATCH (p:Person {name:"Théo Gauchoux"})-[s:LIVES_IN]->(city:City) MATCH (p:Person {name:"Théo Gauchoux"})-[s:LIVES_IN]->(city:City)
WHERE s.since = 2015 WHERE s.since = 2015
RETURN p,state RETURN p,state
@ -164,19 +154,17 @@ RETURN p,state
Você pode usa a cláusula `MATCH WHERE` com a cláusula `CREATE` Você pode usa a cláusula `MATCH WHERE` com a cláusula `CREATE`
``` ```cypher
MATCH (a), (b) MATCH (a), (b)
WHERE a.name = "Jacquie" AND b.name = "Michel" WHERE a.name = "Jacquie" AND b.name = "Michel"
CREATE (a)-[:KNOWS]-(b) CREATE (a)-[:KNOWS]-(b)
``` ```
## Atualizar consultas
Atualizar consultas
---
Atualizar uma propriedade específica de um nó Atualizar uma propriedade específica de um nó
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p.age = 23 SET p.age = 23
@ -184,7 +172,7 @@ SET p.age = 23
Substituir todas as propriedades de um nó Substituir todas as propriedades de um nó
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p = {name: "Michel", age: 23} SET p = {name: "Michel", age: 23}
@ -192,7 +180,7 @@ SET p = {name: "Michel", age: 23}
Adicionar nova propriedade a um nó Adicionar nova propriedade a um nó
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p + = {studies: "IT Engineering"} SET p + = {studies: "IT Engineering"}
@ -200,19 +188,17 @@ SET p + = {studies: "IT Engineering"}
Adicione um label a um nó Adicione um label a um nó
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p:Internship SET p:Internship
``` ```
## Excluir consultas
Excluir consultas
---
Excluir um nó específico (os relacionamentos vinculados devem ser excluídos antes) Excluir um nó específico (os relacionamentos vinculados devem ser excluídos antes)
``` ```cypher
MATCH (p:Person)-[relationship]-() MATCH (p:Person)-[relationship]-()
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
DELETE relationship, p DELETE relationship, p
@ -220,7 +206,7 @@ DELETE relationship, p
Remover uma propriedade em um nó específico Remover uma propriedade em um nó específico
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
REMOVE p.age REMOVE p.age
@ -230,7 +216,7 @@ REMOVE p.age
Remover um label de um nó específico Remover um label de um nó específico
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
DELETE p:Person DELETE p:Person
@ -238,7 +224,7 @@ DELETE p:Person
Excluir o banco de dados inteiro Excluir o banco de dados inteiro
``` ```cypher
MATCH (n) MATCH (n)
OPTIONAL MATCH (n)-[r]-() OPTIONAL MATCH (n)-[r]-()
DELETE n, r DELETE n, r
@ -246,9 +232,7 @@ DELETE n, r
*Sério, é o `rm -rf /` do Cypher !* *Sério, é o `rm -rf /` do Cypher !*
## Outras cláusulas úteis
Outras cláusulas úteis
---
`PROFILE` `PROFILE`
Antes de uma consulta, mostre o plano de execução dela. Antes de uma consulta, mostre o plano de execução dela.
@ -259,9 +243,7 @@ Contar entidades (nós ou relacionamentos) que casam com **e**.
`LIMIT x` `LIMIT x`
Limite o resultado aos primeiros x resultados. Limite o resultado aos primeiros x resultados.
## Dicas Especiais
Dicas Especiais
---
- Há apenas comentários de uma linha no Cypher, com barras duplas : // Comentários - Há apenas comentários de uma linha no Cypher, com barras duplas : // Comentários
- Você pode executar um script Cypher armazenado em um arquivo **.cql** diretamente no Neo4j (é uma importação). No entanto, você não pode ter várias instruções neste arquivo (separadas por **;**). - Você pode executar um script Cypher armazenado em um arquivo **.cql** diretamente no Neo4j (é uma importação). No entanto, você não pode ter várias instruções neste arquivo (separadas por **;**).

View File

@ -13,11 +13,9 @@ Cypher - це мова запитів Neo4j для спрощення робот
[Деталі тут](https://neo4j.com/developer/cypher-query-language/) [Деталі тут](https://neo4j.com/developer/cypher-query-language/)
## Вершини
Вершини #### Відображує запис у графі
---
**Відображує запис у графі.**
`()` `()`
Таким чином у запиті позначається пуста *вершина*. Використовується зазвичай для того, щоб позначити, що вона є, проте це не так вже й важливо для запиту. Таким чином у запиті позначається пуста *вершина*. Використовується зазвичай для того, щоб позначити, що вона є, проте це не так вже й важливо для запиту.
@ -36,21 +34,18 @@ Cypher - це мова запитів Neo4j для спрощення робот
Наступні типи дозволяється використовувати у властивостях: Наступні типи дозволяється використовувати у властивостях:
- Чиселиний - Чиселиний
- Булевий - Булевий
- Рядок - Рядок
- Списки попередніх примітивних типів - Списки попередніх примітивних типів
*Увага! В Cypher не існує типу, що відображає час. Замість нього можна використовувати рядок із визначеним шаблоном або чисельне відображення певної дати.* *Увага! В Cypher не існує типу, що відображає час. Замість нього можна використовувати рядок із визначеним шаблоном або чисельне відображення певної дати.*
`p.name` `p.name`
За допомогою крапки можна звернутись до властивості вершини. За допомогою крапки можна звернутись до властивості вершини.
## Зв'язки (або ребра)
Зв'язки (або ребра) #### Сполучають дві вершини
---
**Сполучають дві вершини**
`[:KNOWS]` `[:KNOWS]`
Це *зв'язок* з *ярликом* **KNOWS**. Це такий же самий *ярлик* як і у вершини. Починається з великої літери та використовує ВЕРХНІЙ\_РЕГІСТР\_ІЗ\_ЗМІЇНОЮ\_НОТАЦІЄЮ. Це *зв'язок* з *ярликом* **KNOWS**. Це такий же самий *ярлик* як і у вершини. Починається з великої літери та використовує ВЕРХНІЙ\_РЕГІСТР\_ІЗ\_ЗМІЇНОЮ\_НОТАЦІЄЮ.
@ -64,11 +59,8 @@ Cypher - це мова запитів Neo4j для спрощення робот
`[k:KNOWS*..4]` `[k:KNOWS*..4]`
Це структурна інформація, яку використовують *шляхи*, які розглянуті нижче. В данному випадку, **\*..4** говорить: "Сумістити шаблон із зв'язком **k**, що повторюватиметься від одного до чотирьох разів." Це структурна інформація, яку використовують *шляхи*, які розглянуті нижче. В данному випадку, **\*..4** говорить: "Сумістити шаблон із зв'язком **k**, що повторюватиметься від одного до чотирьох разів."
## Шляхи
Шляхи #### Спосіб поєднувати вершини та зв'язки.
---
**Спосіб поєднувати вершини та зв'язки.**
`(a:Person)-[:KNOWS]-(b:Person)` `(a:Person)-[:KNOWS]-(b:Person)`
Шлях описує, що вершини **a** та **b** знають (knows) один одного. Шлях описує, що вершини **a** та **b** знають (knows) один одного.
@ -84,7 +76,7 @@ Cypher - це мова запитів Neo4j для спрощення робот
Шаблони, які часто використовуються (з документації Neo4j): Шаблони, які часто використовуються (з документації Neo4j):
``` ```cypher
// Друг-мого-друга // Друг-мого-друга
(user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf) (user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf)
@ -98,13 +90,11 @@ path = shortestPath( (user)-[:KNOWS*..5]-(other) )
(root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product) (root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product)
``` ```
## Запити на створення
Запити на створення
---
Створити нову вершину: Створити нову вершину:
``` ```cypher
CREATE (a:Person {name:"Théo Gauchoux"}) CREATE (a:Person {name:"Théo Gauchoux"})
RETURN a RETURN a
``` ```
@ -113,52 +103,51 @@ RETURN a
Створити новий зв'язок (із двома вершинами): Створити новий зв'язок (із двома вершинами):
``` ```cypher
CREATE (a:Person)-[k:KNOWS]-(b:Person) CREATE (a:Person)-[k:KNOWS]-(b:Person)
RETURN a,k,b RETURN a,k,b
``` ```
Запити на знаходження ## Запити на знаходження
---
Знайти всі вершини: Знайти всі вершини:
``` ```cypher
MATCH (n) MATCH (n)
RETURN n RETURN n
``` ```
Знайти вершини за ярликом: Знайти вершини за ярликом:
``` ```cypher
MATCH (a:Person) MATCH (a:Person)
RETURN a RETURN a
``` ```
Знайти вершини за ярликом та властивістю: Знайти вершини за ярликом та властивістю:
``` ```cypher
MATCH (a:Person {name:"Théo Gauchoux"}) MATCH (a:Person {name:"Théo Gauchoux"})
RETURN a RETURN a
``` ```
Знайти вершини відповідно до зв'язків (ненаправлених): Знайти вершини відповідно до зв'язків (ненаправлених):
``` ```cypher
MATCH (a)-[:KNOWS]-(b) MATCH (a)-[:KNOWS]-(b)
RETURN a,b RETURN a,b
``` ```
Знайти вершини відповідно до зв'язків (направлених): Знайти вершини відповідно до зв'язків (направлених):
``` ```cypher
MATCH (a)-[:MANAGES]->(b) MATCH (a)-[:MANAGES]->(b)
RETURN a,b RETURN a,b
``` ```
Знайти вершини за допомогою `WHERE`: Знайти вершини за допомогою `WHERE`:
``` ```cypher
MATCH (p:Person {name:"Théo Gauchoux"})-[s:LIVES_IN]->(city:City) MATCH (p:Person {name:"Théo Gauchoux"})-[s:LIVES_IN]->(city:City)
WHERE s.since = 2015 WHERE s.since = 2015
RETURN p,state RETURN p,state
@ -166,19 +155,17 @@ RETURN p,state
Можна використовувати вираз `MATCH WHERE` разом із операцією `CREATE`: Можна використовувати вираз `MATCH WHERE` разом із операцією `CREATE`:
``` ```cypher
MATCH (a), (b) MATCH (a), (b)
WHERE a.name = "Jacquie" AND b.name = "Michel" WHERE a.name = "Jacquie" AND b.name = "Michel"
CREATE (a)-[:KNOWS]-(b) CREATE (a)-[:KNOWS]-(b)
``` ```
## Запити на оновлення
Запити на оновлення
---
Оновити окрему властивість вершини: Оновити окрему властивість вершини:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p.age = 23 SET p.age = 23
@ -186,7 +173,7 @@ SET p.age = 23
Оновити всі властивості вершини: Оновити всі властивості вершини:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p = {name: "Michel", age: 23} SET p = {name: "Michel", age: 23}
@ -194,7 +181,7 @@ SET p = {name: "Michel", age: 23}
Додати нову властивіcть до вершини: Додати нову властивіcть до вершини:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p + = {studies: "IT Engineering"} SET p + = {studies: "IT Engineering"}
@ -202,19 +189,17 @@ SET p + = {studies: "IT Engineering"}
Повісити ярлик на вершину: Повісити ярлик на вершину:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
SET p:Internship SET p:Internship
``` ```
## Запити на видалення
Запити на видалення
---
Видалити окрему вершину (пов'язані ребра повинні бути видалені перед цим): Видалити окрему вершину (пов'язані ребра повинні бути видалені перед цим):
``` ```cypher
MATCH (p:Person)-[relationship]-() MATCH (p:Person)-[relationship]-()
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
DELETE relationship, p DELETE relationship, p
@ -222,7 +207,7 @@ DELETE relationship, p
Видалити властивість певної вершини: Видалити властивість певної вершини:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
REMOVE p.age REMOVE p.age
@ -232,7 +217,7 @@ REMOVE p.age
Видалити ярлик певної вершини: Видалити ярлик певної вершини:
``` ```cypher
MATCH (p:Person) MATCH (p:Person)
WHERE p.name = "Théo Gauchoux" WHERE p.name = "Théo Gauchoux"
DELETE p:Person DELETE p:Person
@ -240,7 +225,7 @@ DELETE p:Person
Видалити всю базу даних: Видалити всю базу даних:
``` ```cypher
MATCH (n) MATCH (n)
OPTIONAL MATCH (n)-[r]-() OPTIONAL MATCH (n)-[r]-()
DELETE n, r DELETE n, r
@ -248,9 +233,7 @@ DELETE n, r
*Так, це `rm -rf /` на мові Cypher !* *Так, це `rm -rf /` на мові Cypher !*
## Інші корисні запити
Інші корисні запити
---
`PROFILE` `PROFILE`
Перед виконанням, показати план виконання запитів. Перед виконанням, показати план виконання запитів.
@ -261,11 +244,9 @@ DELETE n, r
`LIMIT x` `LIMIT x`
Обмежити результат до x перших результатів. Обмежити результат до x перших результатів.
## Особливі підказки
Особливі підказки - У мові Cypher існують лише однорядкові коментарі, що позначаються двійним слешем : `// Коментар`
---
- У мові Cypher існують лише однорядкові коментарі, що позначаються двійним слешем : // Коментар
- Можна виконати скрипт Cypher, збережений у файлі **.cql** прямо в Neo4j (прямо як імпорт). Проте, не можна мати мати кілька виразів в цьому файлі (розділених **;**). - Можна виконати скрипт Cypher, збережений у файлі **.cql** прямо в Neo4j (прямо як імпорт). Проте, не можна мати мати кілька виразів в цьому файлі (розділених **;**).
- Використовуйте командний рядок Neo4j для написання запитів Cypher, це легко і швидко. - Використовуйте командний рядок Neo4j для написання запитів Cypher, це легко і швидко.
- Cypher планує бути стандартною мовою запитів для всіх графових баз даних (більш відома як **OpenCypher**). - Cypher планує бути стандартною мовою запитів для всіх графових баз даних (більш відома як **OpenCypher**).