Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a GQL dokumentációjában használt közösségi hálózati gráftípus teljes műszaki specifikációját tartalmazza. Ez a séma az összetett gráfok számos gyakori funkcióját mutatja be, és a GQL nyelvi dokumentációjában szereplő összes lekérdezési példa alapjául szolgál.
Megjegyzés:
A közösségi hálózati példa a GDC (Graph Data Council) által közzétett LDBC SNB -ből (LDBC Social Network Benchmark) származik.
További információ: "The LDBC Social Network Benchmark". A származtatott adathalmaz másolatának beszerzéséről további információt a közösségi hálózat példagráfadatkészletében talál.
Tartomány specifikációja
A közösségi hálózat tartománya egy átfogó közösségi platformot modellez az alábbi entitásokkal:
- Demográfiai és viselkedési tulajdonságokkal rendelkező személyek
- Oktatási intézményeket (egyetemeket ) és munkáltatókat (vállalatokat) is beleértve
- Földrajzi hierarchia városoktól országokon/régiókon át kontinensekig
- Tartalomrendszer fórumokkal, bejegyzésekkel és szálas megjegyzésekkel
- Osztályozási rendszer címkékkel és címkebesorolásokkal
- Emberek és szervezetek közötti társadalmi és szakmai kapcsolatok
A tartomány entitásainak részletesebb ismertetését a GQL nyelvi útmutatójában találja.
A bemutatott sémafunkciók
Ez a gráftípus speciális GQL-képességeket mutat be:
-
Csomóponttípus-öröklés absztrakt alaptípusokkal (
Message,Organization,Place) - Több öröklési minta megosztott tulajdonságdefiníciókkal
- Peremhálózati típuscsaládok , ahol ugyanaz a kapcsolatcímke különböző csomóponttípus-kombinációkat kapcsol össze
- Az adatintegritást kulcskorlátozásokkal biztosító átfogó kényszerrendszer
- Vegyes kapcsolati minták, beleértve a hierarchikus elszigetelést, a közösségi kapcsolatokat és a tartalom interakcióit
Sémadefiníció befejezése
A következő gráftípus teljes sémadefiníciót biztosít a GQL szintaxisában:
(: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)
Sémaelemzés
Csomóponttípus-hierarchia
A séma három öröklési hierarchiát határoz meg:
Földrajzi hierarchia:
-
Place(absztrakt) →City,CountryContinent
Szervezeti hierarchia:
-
Organization(absztrakt) →University,Company
Tartalomhierarchia:
-
Message(absztrakt) →Post,Comment
Peremhálózat-típuscsaládok
Több élfelirat típuscsaládja különböző csomópontkombinációkat köt össze:
Helykapcsolatok (isPartOf):
- A városok országokhoz/régiókhoz tartoznak:
(:City)-[:isPartOf]->(:Country) - Az országok/régiók kontinensekhez tartoznak:
(:Country)-[:isPartOf]->(:Continent)
Tartalom-interakciók (likes):
- A bejegyzéseket kedvelő személyek:
(:Person)-[:likes]->(:Post) - A felhasználók szeretik a megjegyzéseket:
(:Person)-[:likes]->(:Comment) - A felhasználók szeretik az üzeneteket:
(:Person)-[:likes]->(<:Message)
Földrajzi hely (isLocatedIn):
- Az emberek városokban élnek:
(:Person)-[:isLocatedIn]->(:City) - Városokban található egyetemek:
(:University)-[:isLocatedIn]->(:City) - Országokban/régiókban található vállalatok:
(:Company)-[:isLocatedIn]->(:Country) - Országokban/régiókban található posztok:
(:Post)-[:isLocatedIn]->(:Country) - Hozzászólások országokban/régiókban:
(:Comment)-[:isLocatedIn]->(:Country)
Fő megkötések
Minden csomóponttípus rendelkezik egy megfelelő kulcskényszerrel, amely tulajdonságonként egyedi azonosítást id biztosít:
-
tag_class_pk,tag_pk,place_pk,organization_pkperson_pk,forum_pkmessage_pk