Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece a especificação técnica completa para o tipo de grafo de rede social usado em toda a documentação da GQL. Esse esquema demonstra muitos recursos comuns de grafos complexos e serve como base para todos os exemplos de consulta na documentação da linguagem GQL.
Observação
O exemplo de rede social é derivado do LDBC SNB (LDBC Social Network Benchmark) publicado pelo GDC (Graph Data Council).
Para obter mais informações, consulte o artigo "O LDBC Social Network Benchmark". Para obter informações sobre como obter uma cópia do conjunto de dados derivado, consulte o conjunto de dados de grafo de exemplo de rede social.
Especificação de domínio
O domínio da rede social modela uma plataforma social abrangente com as seguintes entidades:
- Pessoas com propriedades demográficas e comportamentais
- Organizações incluindo instituições educacionais (universidades) e empregadores (empresas)
- Hierarquia geográfica de cidades por países/regiões para continentes
- Sistema de conteúdo com fóruns, postagens e comentários encadeados
- Sistema de taxonomia com marcas e classificações de marca
- Relações sociais e profissionais entre pessoas e organizações
Para obter uma introdução mais detalhada às entidades desse domínio, consulte o guia de linguagem GQL.
Recursos de esquema demonstrados
Este tipo de grafo mostra os recursos avançados da GQL:
-
Herança de tipo de nó usando tipos base abstratos (
Message,Organization,Place) - Vários padrões de herança com definições de propriedade compartilhada
- Famílias de tipo de borda em que o mesmo rótulo de relação conecta diferentes combinações de tipo de nó
- Sistema de restrição abrangente garantindo a integridade dos dados por meio de restrições de chave
- Padrões de relação mistos , incluindo contenção hierárquica, conexões sociais e interações de conteúdo
Definição de esquema completa
O tipo de grafo a seguir fornece uma definição de esquema completa na sintaxe GQL:
(:TagClass => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
CONSTRAINT tag_class_pk
FOR (n:TagClass) REQUIRE (n.id) IS KEY,
(:TagClass)-[:isSubclassOf]->(:TagClass),
(:Tag => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:Tag)-[:hasType]->(:TagClass),
CONSTRAINT tag_pk
FOR (n:Tag) REQUIRE (n.id) IS KEY,
ABSTRACT
(:Place => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:City => :Place),
(:Country => :Place),
(:Continent => :Place),
CONSTRAINT place_pk
FOR (n:Place) REQUIRE (n.id) IS KEY,
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent),
ABSTRACT
(:Organization => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:University => :Organization),
(:Company => :Organization),
CONSTRAINT organization_pk
FOR (n:Organization) REQUIRE (n.id) IS KEY,
(:University)-[:isLocatedIn]->(:City),
(:Company)-[:isLocatedIn]->(:Country),
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
}),
CONSTRAINT person_pk
FOR (n:Person) REQUIRE (n.id) IS KEY,
(:Person)-[:hasInterest]->(:Tag),
(:Person)-[:isLocatedIn]->(:City),
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University),
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company),
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person),
(:Forum => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
title :: STRING
}),
CONSTRAINT forum_pk
FOR (n:Forum) REQUIRE (n.id) IS KEY,
(:Forum)-[:hasTag]->(:Tag),
(:Forum)-[:hasMember { creationDate :: ZONED DATETIME, joinDate :: UINT64 }]->(:Person),
(:Forum)-[:hasModerator]->(:Person),
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
}),
CONSTRAINT message_pk
FOR (n:Message) REQUIRE (n.id) IS KEY,
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
}),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Post),
(:Post)-[:hasCreator]->(:Person),
(:Post)-[:isLocatedIn]->(:Country),
(:Forum)-[:containerOf]->(:Post),
(:Comment => :Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Comment),
(:Comment)-[:hasCreator]->(:Person),
(:Comment)-[:isLocatedIn]->(:Country),
(:Comment)-[:replyOf]->(<:Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(<:Message),
(<:Message)-[:hasCreator]->(:Person),
(<:Message)-[:isLocatedIn]->(:Country),
(<:Message)-[:hasTag]->(:Tag)
Análise de esquema
Hierarquia de tipos de nó
O esquema define três hierarquias de herança:
Hierarquia geográfica:
-
Place(abstrato) →City, ,CountryContinent
Hierarquia organizacional:
-
Organization(abstrato) →University,Company
Hierarquia de conteúdo:
-
Message(abstrato) →Post,Comment
Famílias de tipos de borda
Várias famílias de tipos de formulário de rótulos de borda que conectam diferentes combinações de nós:
Relações de localização (isPartOf):
- As cidades pertencem a países/regiões:
(:City)-[:isPartOf]->(:Country) - Países/regiões pertencem a continentes:
(:Country)-[:isPartOf]->(:Continent)
Interações de conteúdo (likes):
- As pessoas gostam de postagens:
(:Person)-[:likes]->(:Post) - As pessoas gostam de comentários:
(:Person)-[:likes]->(:Comment) - As pessoas gostam de mensagens:
(:Person)-[:likes]->(<:Message)
Localização geográfica (isLocatedIn):
- As pessoas vivem em cidades:
(:Person)-[:isLocatedIn]->(:City) - Universidades localizadas em cidades:
(:University)-[:isLocatedIn]->(:City) - Empresas localizadas em países/regiões:
(:Company)-[:isLocatedIn]->(:Country) - Postos localizados em países/regiões:
(:Post)-[:isLocatedIn]->(:Country) - Comentários localizados em países/regiões:
(:Comment)-[:isLocatedIn]->(:Country)
Restrições de chave
Cada tipo de nó tem uma restrição de chave correspondente, garantindo a identificação exclusiva por id propriedade:
-
tag_class_pk,tag_pk,place_pk,organization_pk, ,person_pk,forum_pk,message_pk