History:Object Model/Composition Object

From MusicBrainz Wiki
Jump to navigationJump to search

This page describes the composition object and its role in the ObjectModel.


A Composition is the object below the ../SongObject.

Actually a composition is an object of national law. A composition is considered a "work" of art and is copyrightable. We could use that definition. However they differ slightly from nation to nation. For now we can define a composition as something that can be put down on a score.


Boundary to the SongObject

A song becomes factual when the artists start composing and writing lyrics. This is more "touchable" than the mere idea of the song, as you can see the lyrics and notes. Therefore as soon as the song becomes an object of the real world (not the world of ideas[1]), it is a composition.

Boundary to the Recording Object

A composition exists in the mind of the composer or as notes as sheet music. As long as it is not audible, it is a composition. Every recording of the performed composition becomes a ../RecordingObject instance.


Relationships to the SongObject

  • Attention.png Because the ../SongObject became obsolete, the relationships to song will not be implemented. A ../CompositionObject is based on exactly 1 ../SongObject.
    • Since the song is an abstract idea, we can say that a composition is based on exactly one song. There is an idea to every object of the real world[2].
      • Or should we allow a composition to be based on multiple songs? At this point the abstract idea of a song is becoming wobbly. We'd need some examples here.


Relationships to the RecordingObject


Relationships to the ArtistObject

  • The artist(s) responsible for writing the music and/or lyrics of a ../CompositionObject are its composers. This relationship is optional (for cases where the composing artist is unknown or not available). This relationship defines the ../ArtistObjectRole Composer.
  1. That is Plato
  2. That is Plato again. We really have 2400 years of philosophical backing for this ObjectModel :-)