GQL スキーマの例: ソーシャル ネットワーク

この記事では、GQL ドキュメント全体で使用されるソーシャル ネットワーク グラフの種類の完全な技術仕様について説明します。 このスキーマは、複雑なグラフの多くの一般的な機能を示し、GQL 言語ドキュメントのすべてのクエリ例の基礎として機能します。

定義は参照のために正式なGQLグラフ型構文を使用しており、Graph上で直接実行可能ではありません。 サポートされたFabric体験を通じてグラフを作成するには、「グラフスキーマの設計」をご覧ください。 この例の構文の説明については、 GQLグラフの種類を参照してください。

注

ソーシャル ネットワークの例は、GDC (Graph Data Council) によって発行された LDBC SNB (LDBC ソーシャル ネットワーク ベンチマーク) から派生しています。

詳細については、「 LDBC ソーシャル ネットワーク ベンチマーク」の記事を参照してください。 派生データセットのコピーを取得する方法については、 ソーシャル ネットワークのグラフ データセットの例を参照してください。

ソーシャル ネットワーク スキーマを示す図。

ドメインの仕様

ソーシャル ネットワーク ドメインは、次のエンティティを持つ包括的なソーシャル プラットフォームをモデル化します。

  • 人口統計と行動特性を持つユーザー
  • 教育機関 (大学) および雇用主 (企業) を含む組織
  • 都市から国/地域、大陸までの地理的階層
  • フォーラム、投稿、スレッド化されたコメントを含むコンテンツ システム
  • タグとタグ分類を使用した分類システム
  • 人と組織の間の社会的および専門的な関係

ソーステーブルやデータに関する情報は 、ソーシャルネットワークデータセットをご覧ください。

スキーマ機能のデモ

このグラフの種類では、高度な GQL 機能が紹介されています。

  • 抽象基本型 (、Message、Organization) を使用したPlace
  • 共有プロパティ定義を使用した複数の継承パターン
  • 同じリレーションシップ ラベルが異なるノード タイプの組み合わせを接続するエッジ タイプ ファミリ
  • キー制約によってデータの整合性を確保する包括的な制約システム
  • 階層的包含、ソーシャル接続、コンテンツの相互作用を含む混合リレーションシップ パターン

完全なスキーマ定義

次の グラフの種類 は、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)

スキーマ分析

ノードの種類の階層

スキーマでは、次の 3 つの継承階層が定義されています。

地理的階層:

  • Place (抽象) → City、 Country、 Continent

組織階層:

  • Organization (抽象) → University、 Company

コンテンツ階層:

  • Message (抽象) → Post、 Comment

エッジ タイプ ファミリ

複数のエッジ ラベルは、異なるノードの組み合わせを接続するタイプ ファミリを形成します。

場所のリレーションシップ (isPartOf):

  • 都市は国/地域に属します。 (:City)-[:isPartOf]->(:Country)
  • 国/地域は大陸に属しています。 (:Country)-[:isPartOf]->(:Continent)

コンテンツ操作 (likes):

  • 投稿が好きな人: (:Person)-[:likes]->(:Post)
  • コメントが好きな人: (:Person)-[:likes]->(:Comment)
  • メッセージが好きな人: (:Person)-[:likes]->(<:Message)

地理的な場所 (isLocatedIn):

  • 都市に住む人々: (:Person)-[:isLocatedIn]->(:City)
  • 都市にある大学: (:University)-[:isLocatedIn]->(:City)
  • 国/地域に所在する企業: (:Company)-[:isLocatedIn]->(:Country)
  • 国・地域にあるポスト: (:Post)-[:isLocatedIn]->(:Country)
  • 国・地域ごとのコメント: (:Comment)-[:isLocatedIn]->(:Country)

キー制約

すべてのノード の種類には、対応するキー制約があり、 id プロパティによる一意の識別が保証されます。

  • tag_class_pk、 tag_pk、 place_pk、 organization_pk、 person_pk、 forum_pk、 message_pk