Some notes to accompany the schema (HTML). Note that the schema only encompasses the metadata vocabulary (MM) not the query vocab (MQ).
A given Track can have one or more trmids (relatable id). Although in principle the id is supposed to be a unique acoustic fingerprint for a track, differences in codecs, etc. can yield different trmids for tracks that sound the same. However a given trmid only identifies a single track (or version of a track) and so can be safely labelled as an Inverse-Functional property.
I've defined duration, etc as simple RDF literals. It's possible to refine that using XML Schema data types to state, e.g. that a duration is an integer.
albumList
is used not only as a property of Artist but also for
mq:Result
. The schema currently states that the domain of albumList
is Artist, an additional super-class might need to be introduced to encompass both uses.
Just as FOAF is tied into Wordnet, I thought it important that the musicbrainz concepts should be similarly related to standard dictionary definitions.
As the use of the MusicBrainz Artist class covers both individuals and bands, we can relate the Wordnet term "Musician" to MusicBrainz "Artist":
<rdf:Class rdf:about="http://xmlns.com/wordnet/1.6/Musician">
<rdfs:subClassOf rdf:resource="http://musicbrainz.org/mm/mm-2.1#Artist"/>
</rdf:Class>
Therefore all musicians are artists, but not all artists are musicians.
The Album class is another generic term, and actually means "compact disk" (the type of release is a property of this class, rather than a sub-class). Wordnet has a term AudioCD which can be related to this class as follows:
<rdfs:Class rdf:about="http://musicbrainz.org/mm/mm-2.1#Album">
<rdfs:subClassOf rdf:resource="http://xmlns.com/wordnet/1.6/AudioCD"/>
</rdfs:Class>
TODO: tie Track to a suitable term, not sure that wn:MusicalComposition is correct.
The first draft of the schema makes little use of OWL, just some simple ontology description terms, plus a few Inverse-Functional properties. It's possible that this could be usefully expanded, I'd welcome comments/thoughts on this. I'm not an OWL expert and there may be benefits that I'm missing.
One area that I thought OWL might be useful is in constraining the releaseStatus
and releaseType
properties, e.g. at most one of each, with AllValuesFrom one
of the relevant sub-classes (Type
, Status
). I also wasn't sure
whether it would be possible to define sub-classes of Album based on the value of these properties.
One area that OWL could be useful is to state that an Album must have a dc:title
and dc:creator
. However I'm not sure whether that is overly restrictive, or
necessary.
The current output from SongBuddy has entries like this:
<foaf:Person>
<mm:trackList>
<rdf:Seq>
<rdf:li rdf:resource="http://www.roboranch.com/music/BackToYou.mp3"/>
...
</rdf:Seq>
</mm:trackList>
</foaf:Person>
<mm:Track rdf:about="http://www.roboranch.com/music/BackToYou.mp3">
<dc:title>Back To You</dc:title>
<dc:creator
rdf:resource="http://www.songbuddy.com/lc/soaf/artist/name=Amy+McKenna"/>
</mm:Track>
I think that there are a couple of issues with this usage. Firstly the reuse of the
mm:trackList
property seems inappropriate, an alternate way of modelling
this would be as some kind of playlist property. At present using my schema an RDF
processor would infer from the above usage that that particular instance of
foaf:Person was also an mb:Album!
Secondly while the entries use the MusicBrainz vocabulary they don't use MusicBrainz identifiers. The RDF statements are therefore about a specific MP3, or SongBuddy view of an artist. This will make it difficult to merge SongBuddy data with that from MusicBrainz. An alternative would be to lookup MusicBrainz identifiers where these are available and use those instead.
An rdfs:seeAlso
property could be used to direct users to the SongBuddy
page for an artist, and a "location" or similar property to indicate from where the
track can be downloaded.