The OMRAS2 Chord Ontology

Version :
Draft 1, http://purl.org/ontology/chord/draft1/ (html) (rdf)
Latest Version :
http://purl.org/ontology/chord/ (html) (rdf)
Published :
25th October 2007
Authors :
Christopher Sutton, Yves Raimond, Matthias Mauch
OMRAS2 Project Logo

Copyright © 2007 the authors above. Creative Commons License

Table of Contents

  1. Introduction
    1. Acknowledgements
    2. Namespaces
  2. The Chord Model
    1. An example chord description
    2. Chord symbol service
    3. Timeline annotation
  3. Overview of Terms
  4. Ontology Terms
    1. Classes
    2. Properties
    3. Individuals
  5. Future Work and Likely Revisions
  6. References

Introduction

This document describes the first draft of a chord ontology based on work from the Centre for Digital Music, Queen Mary, University of London. It has been created as part of the OMRAS2 project and is intended to provide a common, versatile vocabulary for describing chords and chord sequences in RDF. For more information on RDF and the W3C semantic web technologies on which this work is founded, please see the References section.

The ontology is complete enough to be usable and useful now - some tools for manipulating data from this ontology can be found in the motools project on Sourceforge. However, it is only a first draft and discussions have already brought to light several issues which must be addressed in future versions of the ontology. Some information on likely future revisions, and topics for discussion can be found in the future work section.

All feedback is welcome and if you would like to propose changes or additions to the ontology, the best place to do so is on the Music Ontology mailing list. If you prefer, please feel free to contact any of the authors listed at the top of this document.

Acknowledgements

The authors would like to thank our colleagues in the digital music research community for some very interesting discussions about useful revisions to this ontology. We are keen to make this ontology as widely useful as possible, and future revisions will incorporate input from these discussions and input from the wider community.

The design and layout of this ontology document is based on the Music Ontology and FOAF Vocabulary specification documents.

Namespaces

Several namespaces will be assumed to have been defined for the remainder of this document. These are as follows :

PrefixXML NamespaceDescription
chord http://purl.org/ontology/chord/ The OMRAS2 Chord Ontology
timeline http://purl.org/NET/c4dm/timeline.owl# The TimeLine ontology
event http://purl.org/NET/c4dm/event.owl# The Event ontology
mo http://purl.org/ontology/mo/ The Music Ontology

The Chord Model

The ontology uses a model originally based on Christopher Harte's chord notation with some modifications to better suit the domain, and allow more flexibility in the chords which may be described.

Chord model
Figure 1 - The chord model

Figure 1 shows the model of a chord used by the ontology (represented by the chord:Chord class). All properties are optional, such that one may use a bare Chord resource to indicate simply that some unknown chord is played.

More commonly, a chord will be specified using a root note and some constituent intervals. These are attached using the chord:interval property. The chord inversion may be indicated by specifying which interval is the bass (using the chord:bass property). Currently no further voicing information may be expressed with the ontology.

If the type of chord is known (eg. "these four notes in fact form a minor seventh chord") this information may be indicated by assigning a base_chord. Intervals present in the base chord but not in this particular chord may be indicated using the chord:without_interval property.

It is expected that the intervals specified for a chord are exactly the same as the set of intervals present in the given base_chord, minus any which are specified using chord:without_interval properties.

Note model
Figure 2 - The note model

Interval model
Figure 3 - The interval model


Figure 2 shows the note model for the ontology, where a note is either a natural, or a modified version of a natural. The ontology includes individuals for the seven natural notes and all single sharp and flat modifications.

Figure 3 shows the interval model for the ontology. If note names are known, the ScaleInterval class should be used. Otherwise the SemitoneInterval class can be used to indicate pitch without assigning note names. Currently one must still name the root note - this needs fixing.


Example chord description

Figure 4 shows an example chord description : D# minor with added ninth and missing flat third, over the fifth.

Example of a chord description
Figure 4 - Example of a chord description

The corresponding RDF/N3 description is as follows :

<http://purl.org/ontology/chord/symbol/Ds:min7(*b3,9)/5>
    a chord:Chord;
    chord:root [ a chord:Note;
                 chord:modifier chord:sharp;
                 chord:natural <http://purl.org/ontology/chord/note/D> ];

    chord:bass [ a chord:ScaleInterval;
                 chord:degree 5 ];

    chord:base_chord chord:min7;

    chord:without_interval [ a chord:ScaleInterval;
                             chord:degree 3
                             chord:modifier chord:flat ];

    chord:interval [ a chord:ScaleInterval;
                     chord:degree 1    ],
                   [ a chord:ScaleInterval;
                     chord:degree 5 ],
                   [ a chord:ScaleInterval;
                     chord:degree 7;
                     chord:modifier chord:flat ],
                   [ a chord:ScaleInterval;
                     chord:degree 9 ].

Chord symbol service

As part of the chord ontology, there is a service to provide RDF descriptions from more compact chord labels. The base URI of the service is <http://purl.org/ontology/chord/symbol/> and chord symbols as defined in [Harte05] may be appended to this base URI to form valid chord URIs, with the one required change that an s character is used in place of the # character.

So for example the URI <http://purl.org/ontology/chord/symbol/D:min7> can be retrieved using a HTTP GET with the "Accept" header set to "application/rdf+xml" to retrieve an RDF description of D minor 7 (Figure 5).

Some further discussion of the semantics of using such shortcuts is required, and the shorthand used by the service may be changed in future, subject to community discussion.

Example of using the symbol service
Figure 5 - Illustration of using the symbol service

Timeline annotation

The ontology is designed for use in conjunction with the OWL-Time, TimeLine and Event ontologies and so provides a ChordEvent class which can be used to attach chords to a timeline. This timeline may be associated with an audio signal, a musical score, a symbolic music file, etc. using terms from the Music Ontology. An overview of the structures involved is given in Figure 6.

Example of annotating a timeline
Figure 6 - Example of annotating a timeline


Overview of Terms

An alphabetical index of the ontology terms, divided into classes, properties and individuals. All the terms are hyperlinked to their detailed description for quick reference.

Ontology Terms

Classes

Class: chord:Chord - unstable -

Chord - A representation of two or more notes played together.

[back to top]


in-range-of:base_chord chord
in-domain-of:without_interval interval bass root base_chord

Class: chord:ChordEvent - unstable -

ChordEvent - An event signifying that a chord is played.

[back to top]


in-domain-of:chord
sub-class-of:event:Event

Class: chord:Interval - unstable -

Interval - An interval above the root of a chord.

[back to top]


in-range-of:interval bass

Class: chord:Modifier - unstable -

Modifier - A modifier applied to a note to change its pitch.

[back to top]


in-range-of:modifier

Class: chord:Natural - unstable -

Natural - One of the seven natural notes of the Western music system.

[back to top]


in-range-of:natural
sub-class-of:Note

Class: chord:Note - unstable -

Note - A musical note which can be one of the seven natural notes or a modified version thereof.

[back to top]


in-range-of:root
in-domain-of:modifier natural

Class: chord:ScaleInterval - unstable -

ScaleInterval - An interval measured in the root scale, made up of the degree of the scale and optional modifier. For use when note names are known.

[back to top]


in-range-of:without_interval
in-domain-of:modifier degree
sub-class-of:Interval

Class: chord:SemitoneInterval - unstable -

SemitoneInterval - An interval measured in semitones. For use when note names are not definitively known.

[back to top]


in-domain-of:semitone_interval
sub-class-of:Interval

Properties

Property: chord:base_chord - unstable -

base_chord - The chord on which this one is based.
For example, a C7 chord might have chord:symbol/C:maj as its base chord.
All intervals of the base chord are expected to be present in this chord, except when explicitly removed using a without_interval statement.
Domain: Chord
Range: Chord

Property: chord:bass - unstable -

bass - The bass note of the chord (thus indicating the inversion).
Domain: Chord
Range: Interval

Property: chord:chord - unstable -

chord - Used to attach the Chord played to a ChordEvent.
Domain: ChordEvent
Range: Chord

Property: chord:degree - unstable -

degree - The degree of an interval based on the root of a chord.
Domain: ScaleInterval
Range: xsd:integer

Property: chord:interval - unstable -

interval - Associates the Intervals making up a chord with the Chord resource itself.
Domain: Chord
Range: Interval

Property: chord:modifier - unstable -

modifier - A modification to a note's pitch.
Domain: ScaleInterval Note
Range: Modifier

Property: chord:natural - unstable -

natural - The natural note from which this note is derived.
Domain: Note
Range: Natural

Property: chord:root - unstable -

root - The root note of the chord.
Domain: Chord
Range: Note

Property: chord:semitone_interval - unstable -

semitone_interval - The size of a SemitoneInterval, measured in semitones.
Domain: SemitoneInterval
Range: xsd:integer

Property: chord:without_interval - unstable -

without_interval - A degree of the scale expected in the chord but not actually present here.
This is intended for the case when a Chord does not include an interval indicated by its base_chord.
Domain: Chord
Range: ScaleInterval

Individuals

Individual: aug -

aug - An augmented chord.
Class: chord:Chord

Individual: dim -

dim - A diminished chord.
Class: chord:Chord

Individual: dim7 -

dim7 - A diminished seventh chord.
Class: chord:Chord

Individual: doubleflat -

double flat -
Class: chord:Modifier

Individual: doublesharp -

double sharp -
Class: chord:Modifier

Individual: flat -

flat -
Class: chord:Modifier

Individual: hdim7 -

hdim7 - A half-diminished seventh chord.
Class: chord:Chord

Individual: maj -

maj - A major chord.
Class: chord:Chord

Individual: maj6 -

maj6 - A major sixth chord.
Class: chord:Chord

Individual: maj7 -

maj7 - A major seventh chord.
Class: chord:Chord

Individual: maj9 -

maj9 - A major ninth chord.
Class: chord:Chord

Individual: min -

min - A minor chord.
Class: chord:Chord

Individual: min6 -

min6 - A minor sixth chord.
Class: chord:Chord

Individual: min7 -

min7 - A minor seventh chord.
Class: chord:Chord

Individual: min9 -

min9 - A minor ninth chord.
Class: chord:Chord

Individual: minmaj7 -

minmaj7 - A minor (major 7th) chord.
Class: chord:Chord

Individual: ninth -

9 - A ninth chord.
Class: chord:Chord

Individual: noChord -

noChord - Indicates that no chord is played.
Class: chord:Chord

Individual: note/A -

A -
Class: chord:Natural

Individual: note/Ab -

Ab -
Class: chord:Note

Individual: note/As -

A# -
Class: chord:Note

Individual: note/B -

B -
Class: chord:Natural

Individual: note/Bb -

Bb -
Class: chord:Note

Individual: note/Bs -

B# -
Class: chord:Note

Individual: note/C -

C -
Class: chord:Natural

Individual: note/Cb -

Cb -
Class: chord:Note

Individual: note/Cs -

C# -
Class: chord:Note

Individual: note/D -

D -
Class: chord:Natural

Individual: note/Db -

Db -
Class: chord:Note

Individual: note/Ds -

D# -
Class: chord:Note

Individual: note/E -

E -
Class: chord:Natural

Individual: note/Eb -

Eb -
Class: chord:Note

Individual: note/Es -

E# -
Class: chord:Note

Individual: note/F -

F -
Class: chord:Natural

Individual: note/Fb -

Fb -
Class: chord:Note

Individual: note/Fs -

F# -
Class: chord:Note

Individual: note/G -

G -
Class: chord:Natural

Individual: note/Gb -

Gb -
Class: chord:Note

Individual: note/Gs -

G# -
Class: chord:Note

Individual: seventh -

7 - A seventh chord.
Class: chord:Chord

Individual: sharp -

sharp -
Class: chord:Modifier

Individual: sus2 -

sus2 - A suspended second chord.
Class: chord:Chord

Individual: sus4 -

sus4 - A suspended fourth chord.
Class: chord:Chord

Future Work and Likely Revisions

In no particular order, here are some things which might be incorporated in future versions. We are grateful to John Ibbotson of IBM and Tillman Weyde and Jens Wissmann of City University, London for their advice and suggestions. We hope to discuss these more fully via the mailing list - please feel free to give your input on these or other issues there.

References

  1. Semantic Web information
  2. [Harte05] : Christopher Harte et al. - Symbolic Representation of Musical Chords: A Proposed Syntax for Text Annotations