Vue d’ensemble
Les modèles de node et les modèles d'edge sont conjointement appelés modèles d'élément, ils servent de blocs de construction pour les modèles de path.
Modèles de Node
Un modèle de node sert à correspondre aux nodes dans le graph, représenté par une paire de parenthèses ()
. Un modèle de node est composé de trois parties successives facultatives :
- Déclaration de Variable d'Élément
- Expression de Label
- Prédicat de Modèle d'Élément :
<node pattern> ::=
"(" [ <element variable declaration> ]
[ <label expression> ]
[ <element pattern predicate> ] ")"
<element pattern predicate> ::=
<element property specification> | <element pattern where clause>
Le modèle de node vide le plus simple correspond à n'importe quel node dans le graph :
()
Pour faire correspondre les nodes étiquetés Person
et les lier à la variable n
:
(n:Person)
Pour faire correspondre les nodes dont les propriétés fullname
et age
ont des valeurs spécifiques :
({fullname: "John Doe", age: 30})
Pour faire correspondre les nodes étiquetés Person
où la propriété age
est supérieure à 30, et lier ces nodes à la variable n
:
(n:Person WHERE age > 30)
Modèles d'Edge
Un modèle d'edge sert à correspondre aux edges dans le graph, généralement en conjonction avec des modèles de node de chaque côté, formant ainsi efficacement un modèle de path. Si un modèle de node n'est pas fourni de part et d'autre du modèle d'edge, un modèle de node vide implicite est supposé.
Un modèle d'edge est soit un modèle d'edge complet soit un modèle d'edge abrégé.
<edge pattern> ::= <full edge pattern> | <abbreviated edge pattern>
Modèle d'Edge Complet
Un modèle d'edge complet est représenté à l'aide d'une paire de crochets carrés []
et de la direction de l'edge. Les modèles d'edge complets incluent :
- Edge complet pointant vers la gauche :
<-[]-
- Edge complet pointant vers la droite :
-[]->
- Edge complet dans n'importe quelle direction :
-[]-
Un modèle d'edge complet est composé de trois parties successives facultatives :
- Déclaration de Variable d'Élément
- Expression de Label
- Prédicat de Modèle d'Élément :
<full edge pattern> ::=
<full edge pointing left> | <full edge pointing right> | <full edge any direction>
<full edge pointing left> ::=
"<-" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]-"
<full edge pointing right> ::=
"-" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]->"
<full edge any direction> ::=
"-" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]-"
<element pattern predicate> ::=
<element property specification> | <element pattern where clause>
Pour faire correspondre tous les edges dans le graph et les lier à la variable e
:
()-[e]-()
Pour faire correspondre les edges sortants étiquetés WorkingIn
dont la propriété role
a une valeur spécifique, et les lier à la variable e
:
()-[e:WorkingIn {role: "Manager"}]->()
Pour faire correspondre les edges entrants où la propriété score
est inférieure à 2, et les lier à la variable e
:
<-[e WHERE score < 2]-
Le modèle d'edge individuel ci-dessus s'étend implicitement à un modèle de path comme suit :
()<-[e WHERE score < 2]-()
Modèle d'Edge Abrégé
Un modèle d'edge abrégé ne contient que la direction de l'edge et ne prend donc pas en charge la déclaration de variable ni le filtrage du modèle. Les modèles d'edge abrégés incluent :
- Edge abrégé pointant vers la gauche :
<-
- Edge abrégé pointant vers la droite :
->
- Edge abrégé dans n'importe quelle direction :
-
<abbreviated edge pattern> ::= "<-" | "->" | "-"
Pour faire correspondre les nodes que nodes étiquetés User
peuvent atteindre via un edge sortant :
(:User)->(n)
Pour faire correspondre tous les paths en une étape dans le graph :
p = -
Le modèle d'edge individuel ci-dessus s'étend implicitement à un modèle de path comme suit :
p = ()-()
Variable d'Élément
Les variables de node et les variables d'edge sont collectivement appelées variables d'élément.
Variable de Node
Une variable de node est déclarée dans un modèle de node, placée avant toute étiquette ou filtre de propriété. La valeur d'une variable de node représente une liste de nodes liés.
La variable n
est liée aux nodes étiquetés Person
:
MATCH (n:Person)
RETURN n.name
Variable de Edge
Une variable de edge est déclarée dans un modèle d'edge complet, placée avant toute étiquette ou filtre de propriété. La valeur d'une variable de edge représente une liste d'edges liés.
La variable e
est liée aux edges étiquetés Follows
:
MATCH ()-[e:Follows]->()
RETURN e
Expression de Label
Une expression de label est un prédicat booléen qui commence par un deux-points :
ou le mot-clé IS
dans un modèle de node ou de edge complet. Elle spécifie une ou plusieurs étiquettes et renvoie vrai lorsqu'elle correspond à l'étiquette d'un node ou d'un edge.
Pour faire correspondre les nodes étiquetés Movie
:
(m:Movie)
Ceci est équivalent à :
(m IS Movie)
L'expression de label peut combiner plusieurs étiquettes à l'aide des opérateurs suivants :
Opérateur | Description | Priorité |
---|---|---|
() |
Groupement | 1 (la plus haute) |
! |
Négation (NOT) | 2 |
& |
Conjonction (AND) | 3 |
| |
Disjonction (OR) | 4 |
Pour faire correspondre les nodes étiquetés Movie
ou Country
:
(n:Movie|Country)
Pour faire correspondre les edges étiquetés autres que LIVING_IN
:
()-[e:!LIVING_IN]-()
Pour faire correspondre les nodes étiquetés autres que Movie
et Country
:
(n:!(Movie&Country))
Dans Ultipa, chaque node ou edge a une et une seule étiquette. Par conséquent, cela ne correspondra jamais à un node :
(n:Movie&Country)
Il existe également un symbole générique %
correspondant à toute étiquette :
(n:%)
Spécification de Propriété d'Élément
Les paires clef-valeur de propriété peuvent être incluses dans une paire d'accolades {}
à l'intérieur d'un modèle de node ou d'edge complet. Cela permet d'appliquer des égalités conjointes pour filtrer les nodes ou les edges en fonction des valeurs de leurs propriétés.
Pour faire correspondre les nodes dont les propriétés type
et level
ont des valeurs spécifiques :
(n {type: "Gold", level: 5})
Ceci est équivalent à ce qui suit avec l'utilisation de la clause WHERE du modèle d'élément :
(n WHERE type = "Gold" AND level = 5)