Edge/Relationship Definitions
This section defines all relationship (edge) types organized alphabetically. Each definition includes a description, relational analogy, directionality and cardinality (in UML-style syntax), and any standard properties applied to that relationship type.
Legend: UML Notation for Cardinality and Composition
| Symbol | Meaning |
|---|---|
| ◆ | Composition — the "parent" node must exist for the "child" node to exist (e.g., a Song contains LyricLines). |
| ◇ | Aggregation — a looser grouping; the child may exist independently. |
| ──> | Directed edge/relationship from left (source) to right (target). |
| @[n..m] | Cardinality at that end (1 = exactly one, 0..1 = zero or one, 0..* = zero or many). |
| ⟵ @[n..m] | Cardinality at the opposite (target) end. |
All property names follow camelCase (e.g., sectionIndex), and all relationship types are UPPER_CASE (e.g., HAS_LINE).
ABOUT
Description: Connects a Reaction node to an Album, Artist, Concept, Event, LyricLine, Organization, Person, Place, Recording, Song, or SongSection node to indicate topical relevance or subject matter. Used for modeling reactions that discuss or comment on specific works, performances, or entities.
Analogy: Equivalent to a join table linking a “Reactions” table to multiple possible target tables via a foreign key pair and optional metadata.
Relevant Nodes, Directions, and Cardinality:
[ Reaction ] ──[ :ABOUT ]──> @[0..*] [ Album | Artist | Concept | Event | LyricLine | Organization | Person | Place | Reaction | Recording | Song | SongSection ] ⟵ @[0..*]
• Each Reaction can reference zero or many related entities.
• Each referenced entity can be the topic of zero or many Reactions.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | model or analyst certainty (0–1) |
0.92 |
| method | string | no | no | brief desription needed | "manual aggregation", "model:...", "panel consensus" |
| model | string | no | no | specific model(s) used on run |
"goemotions:base", "goemotions:base" |
| runID | string | no | no | uid of ModelRun, if model-derived |
"run-20251012-1245" |
Example Visualization:

ALIGNS_WITH
Description: Connects a Theme node to a Concept node when an analyst has identified conceptual equivalence between an interpretive theme and a more formal concept (e.g., from Wikidata).
Analogy: A join row or table linking a 'Themes' table to a 'Concepts' table for semantic alignment.
Relevant Nodes, Directions, and Cardinality:
[ Theme ] ──[ :ALIGNS_WITH ]──> @[0..*] [ Concept ] ⟵ @[0..*]
• A Theme may align with zero or many Concepts.
• A Concept may align with zero or many Themes.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | analyst's confidence in the alignment (0–1) |
0.72 |
Example Visualization:

ALLUDES_TO
Description: Connects creative text nodes (LyricLine, Song, or SongSection) or Reaction nodes to other contextual entities (Concept, Event, Person, or Place) when the reference is indirect, metaphorical, or interpretive rather than explicit.
Analogy: Join row or table linking textual expressions to inferred references or symbolic associations.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :ALLUDES_TO ]──> @[0..*] [ Concept | Event | Person | Place ] ⟵ @[0..*]
• Each expressive node may allude to zero or many external entities.
• Each referenced entity may be alluded to by zero or many sources.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | likelihood of interpretive link (0–1) |
0.77 |
| method | string | no | no | origin of identification (“analyst”, “model”) |
"analyst" |
Example Visualization:

CREDITED_ON
Description: Connects an Artist identity to a Recording to record formal artist credits on that performance (excluding individual Person performer roles, which use PERFORMED_ON).
Analogy: Join row or table linking 'Artists' to 'Recordings' with role metadata.
Relevant Nodes, Directions, and Cardinality:
[ Artist ] ──[ :CREDITED_ON ]──> @[0..*] [ Recording ] ⟵ @[1..*]
• Each Artist may be credited on many Recordings.
• Each Recording must have at least one credited Artist.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| role | [string] | yes | no | credited role(s) (e.g., "primary artist," "featured") |
["primary artist"], ["featured","vocals"] |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

DATA_DERIVED_IN
Description: Connects analytic targets (LyricLine, Reaction, Song, SongSection) to a ModelRun node, recording that their NLP or ML-derived data were generated in that run.
Analogy: Join row or table linking source data records to a specific model-run record.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :DATA_DERIVED_IN ]──> @[0..*] [ ModelRun ] ⟵ @[0..*]
• Each analytic object may have zero or many originating ModelRuns.
• Each ModelRun can produce derived data for many nodes.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| derivedData | [string] | no | no | names of properties derived by this run |
["vaderCompound","goTopScore"] |
Example Visualization:

EVOKES_THEME
Description: Connects interpretive or expressive nodes (LyricLine, SongSection, Song, or Reaction) to a Theme node when a recurring motif or human-identified theme is perceived in the expression.
Analogy: Join row or table linking textual or media items to analytic thematic categories.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :EVOKES_THEME ]──> @[0..*] [ Theme ] ⟵ @[0..*]
• Each expressive node may evoke zero or many Themes.
• Each Theme may be evoked by zero or many sources.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | strength of thematic interpretation |
0.91 |
| analyst | string | no | no | identifier of human or model annotator |
"student-group-A" |
Example Visualization:

EXPRESSES
Description: Connects an expressive node (LyricLine, SongSection, Song, or Reaction) to an Emotion node representing the emotion(s) conveyed or detected.
Analogy: Join row or table between expressive elements and an 'Emotions' lookup table, optionally recording model provenance.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :EXPRESSES ]──> @[0..*] [ Emotion ] ⟵ @[0..*]
• Each expressive node may express multiple emotions.
• Each Emotion may be expressed by many nodes.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| score | float | yes | no | probability or intensity (0–1) |
0.85 |
| model | string | no | no | source model name | "GoEmotions" |
| runID | string | no | no | identifier of model run | "run_20251016_2108" |
| level | string | no | no | granularity (“line”, “song”, “reaction”) |
"line" |
Example Visualization:

HAS_LINE
Description: Connects a Song to its individual LyricLine nodes, preserving their sequence within the song.
Analogy: Join row or table linking 'Songs' to 'LyricLines' with ordering metadata.
Relevant Nodes, Directions, and Cardinality:
[ Song ] ◆──[ :HAS_LINE {lineNumber:int} ]──> @[0..*] [ LyricLine ] ⟵ @[1]
• Each Song can have zero or many LyricLines (instrumental allowed).
• Each LyricLine belongs to exactly one Song.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| lineNumber | integer | yes | no | sequential line number within Song |
32 |
Example Visualization:

HAS_LINE_IN_SECTION
Description: Connects a SongSection to its LyricLine nodes, preserving order within that section.
Analogy: Join row or table linking 'SongSections' to 'LyricLines' with order metadata.
Relevant Nodes, Directions, and Cardinality:
[ SongSection ] ◇──[ :HAS_LINE_IN_SECTION {lineIndex:int} ]──> @[0..*] [ LyricLine ] ⟵ @[0..1]
• Each SongSection can have zero or many LyricLines.
• Each LyricLine may belong to zero or one SongSection (but note that all LyricLines must belong to a Song).
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| lineIndex | integer | yes | no | position of line within the section |
6 |
Example Visualization:

HAS_SECTION
Description: Connects a Song to its constituent SongSection nodes, preserving their order within the song.
Analogy: Join row or table linking 'Songs' to 'SongSections' with section sequence metadata.
Relevant Nodes, Directions, and Cardinality:
[ Song ] ◆──[ :HAS_SECTION {sectionIndex:int} ]──> @[0..*] [ SongSection ] ⟵ @[1]
• Each Song can have zero (not all Songs are divided into sections) or many SongSections.
• Each SongSection belongs to exactly one Song.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| sectionIndex | integer | yes | no | order of section within Song |
4 |
Example Visualization:

HAS_THEME
Description: Connects an Album or Song to an analyst-identified Theme, recording an aggregated analytical interpretation at the work level.
Analogy: Join row or table linking 'Albums' or 'Songs' to 'Themes' for high-level thematic categorization.
Relevant Nodes, Directions, and Cardinality:
[ Album | Song ] ──[ :HAS_THEME ]──> @[0..*] [ Theme ] ⟵ @[0..*]
• Each Album or Song may be associated with multiple Themes.
• Each Theme may characterize many Albums or Songs.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | analyst's confidence (0–1) |
0.95 |
| method | string | no | no | process or source of identification |
"manual-coding" |
Example Visualization:

INSPIRED_BY
Description: Connects a Song to external entities (Concept, Event, Person, or Place) that served as inspiration for its creation.
Analogy: Join row or table linking 'Songs' to source entities representing creative influences.
Relevant Nodes, Directions, and Cardinality:
[ Song ] ──[ :INSPIRED_BY ]──> @[0..*] [ Concept | Event | Person | Place ] ⟵ @[0..*]
• Each Song may be inspired by zero or many external entities.
• Each entity may inspire zero or many Songs.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | strength of inferred inspiration |
0.82 |
| evidence | string | no | no | evidence for claim (analyst, interview, etc.) |
"artist-interview" |
| sourceUri | string | no | no | uri to source | "http://source.com" |
Example Visualization:

MEMBER_OF
Description: Connects a Person to an Artist or Organization to record formal membership or affiliation.
Analogy: Join row or table linking 'People' to collective entities, optionally with dates and roles.
Relevant Nodes, Directions, and Cardinality:
[ Person ] ──[ :MEMBER_OF ]──> @[0..*] [ Artist | Organization ] ⟵ @[0..*]
• A Person may belong to multiple groups or organizations.
• A group or organization may include many members.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| role | [string] | yes | no | member's role(s) | ["vocals","guitar"] |
| dateStart | date | no | no | membership start date | 2012-03-01 |
| dateEnd | date | no | no | membership end date | 2018-02-11 |
Example Visualization:

MENTIONS
Description: Connects any expressive node (LyricLine, SongSection, Song, or Reaction) to any identifiable entity explicitly referenced in text (Album, Artist, Concept, Event, LyricLine, Organization, Person, Place, Reaction, Recording, or Song).
Analogy: Join row or table linking expressive items to directly named entities (explicit mentions rather than allusions).
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :MENTIONS ]──> @[0..*] [ Album | Artist | Concept | Event | LyricLine | Organization | Person | Place | Reaction | Recording | Song | SongSection ] ⟵ @[0..*]
• Each expressive node may mention zero or many entities.
• Each mentioned entity may be referenced by many sources.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | model or analyst certainty (0–1) |
0.99 |
| offset | integer | no | no | character offset of mention in text |
135 |
Example Visualization:

OWNED_BY
Description: Connects an Account to the Person, Artist, or Organization that owns or controls it.
Analogy: Join row or table linking 'Accounts' to their owners in a relational schema.
Relevant Nodes, Directions, and Cardinality:
[ Account ] ──[ :OWNED_BY ]──> @[1] [ Artist | Organization | Person ] ⟵ @[0..*]
• Each Account must have one owner entity.
• Each Person, Artist, or Organization may own multiple Accounts.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| verified | boolean | no | no | true if ownership is verified |
true |
Example Visualization:

PERFORMANCE_OF
Description: Connects a Recording to the Song it represents or performs.
Analogy: Join row or table linking 'Recordings' to 'Songs'.
Relevant Nodes, Directions, and Cardinality:
[ Recording ] ──[ :PERFORMANCE_OF ]──> @[1..*] [ Song ] ⟵ @[0..*]
• Each Recording performs one or more Songs (medleys supported).
• Each Song may be performed by zero or many Recordings.
• Medley order/timing can be captured on the relationship (optional).
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| medleyIndex | integer | no | no | description here | 1 |
| startOffsetSec | integer | no | no | where this song's portion starts in the recording (seconds) |
32 |
| endOffsetSec | integer | no | no | where this song's portion ends in the recording (seconds) |
142 |
| arrangement | string | no | no | special arrangement note |
"acoustic" |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

PERFORMED_DURING
Description: Connects a live Recording to the Event during which it was made.
Analogy: Join row or table linking 'Recordings' to 'Events'.
Relevant Nodes, Directions, and Cardinality:
[ Recording ] ──[ :PERFORMED_DURING ]──> @[0..1] [ Event ] ⟵ @[0..*]
• Each live Recording may reference one Event.
• Each Event may have multiple associated Recordings.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| date | date | no | no | specific performance date | 2024-09-21 |
Example Visualization:

PERFORMED_ON
Description: Connects a Person to a Recording to record specific performance contributions (distinct from CREDITED_ON used for Artist-level credits).
Analogy: Join row or table linking 'People' to 'Recordings' with performance role metadata.
Relevant Nodes, Directions, and Cardinality:
[ Person ] ──[ :PERFORMED_ON ]──> @[0..*] [ Recording ] ⟵ @[0..*]
• A Person may perform on many Recordings.
• Each Recording may include multiple performers.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| role | [string] | yes | no | performance role(s) | ["vocals","guitar"] |
Example Visualization:

PERFORMS_AS
Description: Links a Person to their Artist identity (solo/alias). Distinct from MEMBER_OF (for membership in an Artist group/band/ensemble).
Analogy: Join row or table with timeline of persona usage.
Relevant Nodes, Directions, and Cardinality:
[ Person ] ──[ :PERFORMS_AS ]──> @[0..*] [ Artist ] ⟵ @[0..1]
• A Person may perform as zero or many Artists.
• Each Artist may belong to zero or one Person.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| dateStart | date | no | no | date when performs_as started in YYYY-MM-DD format |
2012-03-01 |
| dateEnd | date | no | no | date when performs_as ended in YYYY-MM-DD format |
2018-02-11 |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

POSTED
Description: Connects an Account to the Reaction it posted.
Analogy: Join row or table linking 'Accounts' to 'Reactions'.
Relevant Nodes, Directions, and Cardinality:
[ Account ] ──[ :POSTED ]──> @[0..*] [ Reaction ] ⟵ @[1]
• An Account may post zero or many Reactions.
• Each Post belongs to exactly one Account.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

PUBLISHED_ON
Description: Connects a Reaction to the Platform on which it was published.
Analogy: Join row or table linking 'Reactions' to 'Platforms'.
Relevant Nodes, Directions, and Cardinality:
[ Reaction ] ──[ :PUBLISHED_ON ]──> @[1] [ Platform ] ⟵ @[0..*]
• Each Reaction is published on one Platform.
• Each Platform may publish zero or many Reactions.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

QUOTES
Description: Connects a LyricLine, Reaction, SongSection, or Song to a Concept (e.g., book/film/etc.), LyricLine, Reaction, or Song that it exactly quotes or paraphrases.
Analogy: Join row or table linking 'LyricLines,' 'Reactions,' 'SongSections,' or 'Songs' to 'Concepts,' 'LyricLines,' 'Reaction,' or 'Songs' with exactness flag.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine | Reaction | Song | SongSection ] ──[ :QUOTES ]──> @[0..*] [ Concept | LyricLine | Reaction | Song ] ⟵ @[0..*]
• Each quoting node may quote or paraphrase zero or many entities.
• Each quoted entity may be quoted or paraphrased by many sources.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| confidence | float | no | no | model or analyst certainty (0–1) |
0.99 |
| exact | boolean | no | no | is this an exact quote (true) or paraphrase (false) |
true |
| note | string | no | no | any special notes | "note text goes here" |
Example Visualization:

RECORDED_AT
Description: Connects a Recording to the Place where ir occurred (supports multi-session, multi-place).
Analogy: Join row or table linking 'Recordings' to 'Places.'
Relevant Nodes, Directions, and Cardinality:
[ Recording ] ──[ :RECORDED_AT ]──> @[0..*] [ Place ] ⟵ @[0..*]
• A Recording may be recorded at zero or many Places.
• Each Place may be linked to zero or many Recordings.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| date | date | no | no | session date in YYYY-MM-DD format |
2018-03-01 |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

RELATED_TO
Description: Looser thematic association between a Theme and a Concept (weaker than ALIGNS_WITH).
Analogy: Join row or table linking 'Themes' to 'Concepts.'
Relevant Nodes, Directions, and Cardinality:
[ Theme ] ──[ :RELATED_TO ]──> @[0..*] [ Concept ] ⟵ @[0..*]
• A Theme may be related to zero or many Concepts.
• Each Concept may be related to zero or many Themes.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| strength | float | no | no | model or analyst certainty (0–1) |
0.99 |
| method | string | no | no | brief desription needed | "manual aggregation", "model:...", "panel consensus" |
| model | string | no | no | specific model(s) used on run |
"goemotions:base", "goemotions:base" |
| runID | string | no | no | uid of ModelRun, if model-derived |
"run-20251012-1245" |
Example Visualization:

RELEASED_ALBUM
Description: Connects an Artist to an Album (LP/EP/Single) that they released.
Analogy: Join row or table linking 'Artists' to 'Albums.'
Relevant Nodes, Directions, and Cardinality:
[ Artist ] ──[ :RELEASED_ALBUM ]──> @[0..*] [ Album ] ⟵ @[0..*]
• An Artist may release zero or many Albums.
• Each Album may be released by zero or many Artists.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| date | date | no | no | release date in YYYY-MM-DD format |
2018-03-01 |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

RELEASED_ON
Description: Connects a 'Recording' to an 'Album' (LP/EP/Single) on which it appears.
Analogy: Join row or table linking 'Recordings' to 'Albums,' with track metadata.
Relevant Nodes, Directions, and Cardinality:
[ Recording ] ──[ :RELEASED_ON ]──> @[0..*] [ Album ] ⟵ @[0..*]
• A Recording may appear on zero or many Albums.
• Each Album may feature zero or many Recordings.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| trackNumber | integer | no | no | track number on album |
3 |
| discNumber | integer | no | no | disc number on multi-disc album |
1 |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:

SIMILAR_TO
Description: Links semantically similar LyricLines to each other, using cosine similarity between calculated and stored sentence-transformers embeddings. Treat as undirected by convention; store one orientation only.
Analogy: Join row or table linking 'LyricLines' with a similarity score.
Relevant Nodes, Directions, and Cardinality:
[ LyricLine ] ──[ :SIMILAR_TO ]──> @[0..*] [ LyricLine ] ⟵ @[0..*]
• A LyricLine may be similar to zero or many other LyricLines.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| cosine | float | no | no | similarity cosine as float between 0 to 1 |
0.789 |
| method | string | no | no | specific method or model used in calculation |
"all-MiniLM-L6-v2" |
| runID | string | no | no | uid of ModelRun, if model-derived |
"run-20251012-1245" |
Example Visualization:

WROTE_SONG
Description: Connects a Person to a Song to record songwriting credits. Supports anonymous and 'traditional' credits.
Analogy: Join row or table linking 'Person' to 'Song,' with specific role(s).
Relevant Nodes, Directions, and Cardinality:
[ Person ] ──[ :WROTE_SONG ]──> @[0..*] [ Song ] ⟵ @[0..*]
• Each Person may have writing credits on zero or many Songs.
• Each Song may may have writing credits for zero or many Persons.
Edge Properties:
| propertyName | type | req? | uniq? | description | example(s) |
|---|---|---|---|---|---|
| role | [string] | yes | no | specific writing role as string array |
["lyrics","music"] |
| note | string | no | no | any relevant notes | "note text here" |
Example Visualization:
