├── doc ├── spec.sh ├── split.sh ├── onto_spec.pl ├── onto_splitter.pl ├── imgs │ ├── Mo-logo-big.jpg │ └── mo-workflow.jpg ├── wiki │ └── images │ │ ├── Agent.jpg │ │ ├── Event.png │ │ ├── MoEvent.jpg │ │ ├── Timeline.png │ │ ├── Arrangement.jpg │ │ ├── MoMusicItem.jpg │ │ ├── Musicalwork.jpg │ │ ├── Releasestatus.jpg │ │ ├── Releasetype.jpg │ │ ├── Mo_-_musical_work.gif │ │ ├── Mo_-_release_event.gif │ │ ├── Mo_-_4_level_concept.gif │ │ ├── Frbr_-_4_level_concept.gif │ │ ├── Mo_-_musical_item_ext.gif │ │ ├── Mo_-_MusicalManifestation.jpg │ │ ├── Mo_-_musical_expression_02.gif │ │ ├── Mo_-_recording_session_event.gif │ │ ├── Mo_-_musical_manifestation_ext.gif │ │ ├── Mo_-_MusicalItem_MusicalManifestation.jpg │ │ └── Mo_-_MusicalArtist_Group_Label_Membership.gif ├── musicontology-level3.rdfs ├── 6-glance-level1.htm ├── 4-glance-core.htm ├── 7-glance-level2.htm ├── 8-glance-level3.htm ├── 5-glance-external.htm ├── 12-full-detail.htm ├── gen_spec.sh ├── README ├── css │ ├── style.css │ ├── ptsw-style.css │ └── xmlns-style.css ├── 14-changelog+footer.htm ├── 2-overview.htm ├── 13-references.htm ├── 3-introduction.htm ├── 11-standards.htm ├── 1-header.htm ├── 10-large-intro.htm ├── 9-rdf-proplist.htm └── musicontology-level2.rdfs ├── ontosplit ├── split.sh └── onto_splitter.pl ├── rdf ├── gen_xml.sh └── ChangeLog ├── TODO ├── README.md ├── examples ├── clapton_perf │ └── clapton.n3 ├── requiem │ └── requiem.n3 ├── ismir_opera_male5 │ └── opera_male5.n3 ├── phil_and_mary │ ├── phil_and_mary.n3 │ └── phil_and_mary.rdf ├── bach_kunst │ ├── bach_kunst.n3 │ └── bach_kunst.rdf └── code_monkey │ └── cm.n3 ├── ontospec ├── spec.sh └── onto_spec.pl ├── proposals ├── ci-tracklists-releases.n3 └── identification-properties.n3 └── grddl └── hAudio2RDF.xsl /doc/spec.sh: -------------------------------------------------------------------------------- 1 | ../ontospec/spec.sh -------------------------------------------------------------------------------- /doc/split.sh: -------------------------------------------------------------------------------- 1 | ../ontosplit/split.sh -------------------------------------------------------------------------------- /doc/onto_spec.pl: -------------------------------------------------------------------------------- 1 | ../ontospec/onto_spec.pl -------------------------------------------------------------------------------- /doc/onto_splitter.pl: -------------------------------------------------------------------------------- 1 | ../ontosplit/onto_splitter.pl -------------------------------------------------------------------------------- /doc/imgs/Mo-logo-big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/imgs/Mo-logo-big.jpg -------------------------------------------------------------------------------- /doc/imgs/mo-workflow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/imgs/mo-workflow.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Agent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Agent.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Event.png -------------------------------------------------------------------------------- /doc/wiki/images/MoEvent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/MoEvent.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Timeline.png -------------------------------------------------------------------------------- /doc/wiki/images/Arrangement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Arrangement.jpg -------------------------------------------------------------------------------- /doc/wiki/images/MoMusicItem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/MoMusicItem.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Musicalwork.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Musicalwork.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Releasestatus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Releasestatus.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Releasetype.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Releasetype.jpg -------------------------------------------------------------------------------- /ontosplit/split.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/swipl -s 2 | 3 | :- use_module(onto_splitter). 4 | 5 | :- split. 6 | 7 | :- halt. 8 | 9 | -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_musical_work.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_musical_work.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_release_event.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_release_event.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_4_level_concept.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_4_level_concept.gif -------------------------------------------------------------------------------- /doc/wiki/images/Frbr_-_4_level_concept.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Frbr_-_4_level_concept.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_musical_item_ext.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_musical_item_ext.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_MusicalManifestation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_MusicalManifestation.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_musical_expression_02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_musical_expression_02.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_recording_session_event.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_recording_session_event.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_musical_manifestation_ext.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_musical_manifestation_ext.gif -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_MusicalItem_MusicalManifestation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_MusicalItem_MusicalManifestation.jpg -------------------------------------------------------------------------------- /doc/wiki/images/Mo_-_MusicalArtist_Group_Label_Membership.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/motools/musicontology/HEAD/doc/wiki/images/Mo_-_MusicalArtist_Group_Label_Membership.gif -------------------------------------------------------------------------------- /rdf/gen_xml.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | # Generate the RDF/XML from the Turtle code 4 | 5 | rapper -I "http://purl.org/ontology/mo/" -i turtle -o rdfxml-abbrev musicontology.n3 > musicontology.rdfs 6 | 7 | 8 | -------------------------------------------------------------------------------- /doc/musicontology-level3.rdfs: -------------------------------------------------------------------------------- 1 | 2 | 4 | ]> 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /doc/6-glance-level1.htm: -------------------------------------------------------------------------------- 1 | 2 |

Music Ontology At A Glance - Level 1 terms

3 | 4 |

5 | A list of terms used within the level 1 of the Music Ontology, 6 | therefore covering simple editorial information (tracks, releases, artists, groups, etc.). 7 |

8 | -------------------------------------------------------------------------------- /doc/4-glance-core.htm: -------------------------------------------------------------------------------- 1 | 2 |

Music Ontology At A Glance

3 | 4 |

An alphabetical index of Music Ontology terms, by class (categories or types), by 5 | 6 | property and by individuals. All the terms are hyperlinked to their detailed description for quick reference.

7 | 8 | 9 | -------------------------------------------------------------------------------- /doc/7-glance-level2.htm: -------------------------------------------------------------------------------- 1 | 2 |

Music Ontology At A Glance - Level 2 terms

3 | 4 |

5 | A list of terms used within the level 2 of the Music Ontology, 6 | therefore covering information about the music creation workflow (Composition, Performance, Arrangement, Recording, etc.). 7 |

8 | -------------------------------------------------------------------------------- /doc/8-glance-level3.htm: -------------------------------------------------------------------------------- 1 | 2 |

Music Ontology At A Glance - Level 3 terms

3 | 4 |

5 | A list of terms used within the level 3 of the Music Ontology, 6 | therefore covering event decomposition (`this particular performer was playing that particular instrument at that particular time'). 7 |

8 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | 2 | A tool should be able to get the SVN changelog, and re-generate 3 | the changelog at the bottom of the specification document, as 4 | well as updating a RSS 1.0 feed. 5 | 6 | 7 | (We may have to hardcode the mapping SVN username --> URI). 8 | 9 | A couple of related tools: 10 | 11 | * svn2cl stylesheet 12 | * chalow Changelog to RDF/HTML/JS converter 13 | 14 | 15 | -------------------------------------------------------------------------------- /doc/5-glance-external.htm: -------------------------------------------------------------------------------- 1 | 2 |

External Ontologies used by the Music Ontology At A Glance

3 | 4 |

An alphabetical index of external ontologies terms, by class (categories or types), by 5 | 6 | property and by individuals, used by the Music Ontology. All the terms are hyperlinked to their detailed description for quick reference.

7 | 8 | -------------------------------------------------------------------------------- /doc/12-full-detail.htm: -------------------------------------------------------------------------------- 1 |

The Music Ontology cross-reference: Classes, Properties and Individuals

2 | 3 |

The Music Ontology introduces the following classes, properties and individuals. See the Music Ontology 4 | 5 | namespace document in RDF/XML for more detail.

6 | 7 | 8 | 9 |

Classes, Properties and Individuals (full detail)

10 | 11 |
12 | -------------------------------------------------------------------------------- /doc/gen_spec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if !(test -e musicontology.rdfs) ; then ln -s ../rdf/musicontology.rdfs . ; fi 4 | if !(test -e onto_splitter.pl) ; then ln -s ../ontosplit/onto_splitter.pl . ; fi 5 | if !(test -e onto_spec.pl) ; then ln -s ../ontospec/onto_spec.pl . ; fi 6 | if !(test -e split.sh) ; then ln -s ../ontosplit/split.sh . ; fi 7 | if !(test -e spec.sh) ; then ln -s ../ontospec/spec.sh . ; fi 8 | 9 | if (test -e musicontology-core.rdfs) ; then rm musicontology-core.rdfs ; fi 10 | if (test -e musicontology-external.rdfs) ; then rm musicontology-external.rdfs ; fi 11 | 12 | ./split.sh 13 | ./spec.sh 14 | 15 | -------------------------------------------------------------------------------- /doc/README: -------------------------------------------------------------------------------- 1 | Music Ontology automatic specification generation script 2 | -------------------------------------------------------- 3 | 4 | Yves Raimond, Centre for Digital Music, Queen Mary, University of London 5 | yves.raimond (at) elec.qmul.ac.uk 6 | 7 | You can re-generated the documentation held in this directory using the 8 | two tools `ontosplit' and `ontospec' - all you need to make them run 9 | is a working installation of SWI-Prolog and its `semweb' package. 10 | 11 | The gen_spec.sh script should do the job, with minimal tweaks (basically 12 | telling the split.sh and the spec.sh where your Prolog executable lies). 13 | 14 | 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | The Music Ontology 2 | ================== 3 | 4 | About 5 | ----- 6 | 7 | The [Music Ontology](http://purl.org/ontology/mo/) provides main concepts and properties fo describing music (i.e. artists, albums, tracks, but also performances, arrangements, etc.) on the Semantic Web. 8 | 9 | All pushes to master are now automatically deployed using a [post-receive hook](https://github.com/motools/musicontology-postreceive). 10 | 11 | PS 12 | -- 13 | 14 | The [old project repository location at SourceForge](http://motools.svn.sourceforge.net/viewvc/motools/mo/) is now deprecated. All new developments will be pushed to this repository location here at GitHub. 15 | 16 | 17 | -------------------------------------------------------------------------------- /doc/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | div.specterm { 3 | padding: 0 0 10px 20px; 4 | border: 1px solid black; 5 | } 6 | 7 | body { 8 | padding: 0 25px 50px 50px; 9 | background-color: #E7F5F2; 10 | } 11 | 12 | h1 { 13 | font-size: 3em; 14 | } 15 | 16 | h2 { 17 | font-size: 2em; 18 | padding-top: 1.5em; 19 | } 20 | 21 | h3 { 22 | font-size: 1.5em; 23 | } 24 | 25 | p.copyright { 26 | font-size: small; 27 | } 28 | 29 | div.page { 30 | min-width: 750px; 31 | width: 90%; 32 | padding: 30px 20px 30px 20px; 33 | margin-top: 5px; 34 | float: center; 35 | background-color: white; 36 | } 37 | 38 | div.glance { 39 | padding: 5px; 40 | border: dotted; 41 | background-color: #C6D3D0;" 42 | 43 | } 44 | -------------------------------------------------------------------------------- /doc/14-changelog+footer.htm: -------------------------------------------------------------------------------- 1 |

Change Log

2 |

3 | See the full changelog. 4 |

5 | 6 | 7 | 8 | 9 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /examples/clapton_perf/clapton.n3: -------------------------------------------------------------------------------- 1 | @prefix mo: . 2 | @prefix event: . 3 | @prefix mit: . 4 | @prefix rdfs: . 5 | @prefix : <#> . 6 | 7 | :p 8 | a mo:Performance ; 9 | event:sub_event :clapton_on_guitar, :bruce_on_bass, :baker_on_drums ; 10 | rdfs:label "A Cream performance" ; 11 | mo:recorded_as :master . 12 | 13 | :clapton_on_guitar 14 | a mo:Performance ; 15 | mo:performer :eric_clapton ; 16 | mo:instrument mit:guitar . 17 | :bruce_on_bass 18 | a mo:Performance ; 19 | mo:performer :jack_bruce ; 20 | mo:instrument mit:bass . 21 | :baker_on_drums 22 | a mo:Performance ; 23 | mo:performer :ginger_baker ; 24 | mo:instrument mit:drums . 25 | 26 | :master 27 | a mo:Signal ; 28 | mo:published_as [ a mo:Track ; rdfs:label "'I Feel Free' on 'Fresh Cream'" ; mo:track_number 1 ] ; 29 | mo:published_as [ a mo:Track ; rdfs:label "'I Feel Free' on 'Best of Cream'" ; mo:track_number 10 ] . 30 | -------------------------------------------------------------------------------- /examples/requiem/requiem.n3: -------------------------------------------------------------------------------- 1 | @prefix mo: . 2 | @prefix event: . 3 | @prefix dc: . 4 | @prefix xsd: . 5 | @prefix : <#>. 6 | 7 | :requiem-comp-m a mo:Composition; 8 | mo:composer ; 9 | dc:date "1791"^^xsd:gYear; 10 | event:place ; 11 | mo:produced_work :introitus, :kyrie, :sequenz, :offertorium, :agnus-dei; 12 | . 13 | 14 | :requiem-comp-s a mo:Composition; 15 | mo:composer ; 16 | # date? place? 17 | mo:produced_work :kyrie, :confutatis, :lacrimosa, :sanctus, :benedictus, :agnus-dei, :communion. 18 | 19 | :requiem-orch-s a mo:Orchestration; 20 | event:agent ; 21 | event:product :kyrie, :dies-irae, :sequenz, :sanctus, :benedictus, :agnus-dei, :communion. 22 | 23 | 24 | # Decomposing the Requiem 25 | :requiem a mo:MusicalWork; 26 | mo:k6 "626"; 27 | dc:title "Requiem in D minor"; 28 | mo:tonality ; 29 | mo:movement :introitus, :kyrie, :sequenz, :offertorium, :sanctus, :benedictus, :agnus-dei, :communion. 30 | 31 | :sequenz a mo:Movement; 32 | mo:movement :dies-irae, :tuba-mirum, :rex-tremendae, :recordare, :confutatis, :lacrimosa. 33 | 34 | :offertorium a mo:Movement; 35 | mo:movement :domine-jesu, :hostias; 36 | . 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/ismir_opera_male5/opera_male5.n3: -------------------------------------------------------------------------------- 1 | @prefix rdfs: . 2 | @prefix owl: . 3 | @prefix event: . 4 | @prefix tl: . 5 | @prefix mo: . 6 | @prefix db: . # Fix that? 7 | @prefix : <#>. 8 | 9 | 10 | # Linking our annotations to the audio file 11 | 12 | db:opera_male5 13 | a mo:AudioFile; 14 | mo:encodes :sig. 15 | 16 | :sig 17 | a mo:Signal; 18 | mo:time [tl:timeline :tl]. # :tl is the anchor timeline for our annotations 19 | 20 | # Defining our "classifiers" 21 | 22 | :SingEvent 23 | a owl:Class; 24 | rdfs:subClassOf event:Event; 25 | rdfs:label "Classify regions as holding some singing voice"; 26 | . 27 | 28 | :FreqEvent 29 | a owl:Class; 30 | rdfs:subClassOf event:Event; 31 | rdfs:label "Attach a frequency of the singing voice to a region"; 32 | . 33 | 34 | :freq 35 | rdfs:subPropertyOf event:literal_factor; 36 | rdfs:label "Actual value of the frequency"; 37 | rdfs:domain :FreqEvent; 38 | . 39 | 40 | # And annotate... We define events on the timeline :tl 41 | 42 | :e1 43 | a :SingEvent; 44 | event:time [tl:start "PT0.017S"; tl:end "PT3.291S"; tl:timeline :tl] 45 | . 46 | 47 | :f1 48 | a :FreqEvent; 49 | event:time [tl:at "PT0.017S"]; 50 | :freq "192.662"; 51 | . 52 | 53 | :f2 54 | a :FreqEvent; 55 | event:time [tl:at "PT0.023S"]; 56 | :freq "183.918"; 57 | . 58 | 59 | :f3 60 | a :FreqEvent; 61 | event:time [tl:at "PT0.029S"]; 62 | :freq "173.222"; 63 | . 64 | 65 | -------------------------------------------------------------------------------- /doc/2-overview.htm: -------------------------------------------------------------------------------- 1 |

Table of Contents

2 | 3 | 75 | 76 |
77 | -------------------------------------------------------------------------------- /doc/css/ptsw-style.css: -------------------------------------------------------------------------------- 1 | div.rdf-proplist { 2 | background-color: #ddf; 3 | border: 1px solid black; 4 | float: left; 5 | width: 26%%; 6 | margin: 0.3em 1%%; 7 | margin-left: 20px; 8 | } 9 | img { border: 0 } 10 | /* .glance { 11 | border: 1px dotted black; 12 | } */ 13 | 14 | .example { 15 | border: 1px dotted black; 16 | background-color: #D9E3E9; 17 | padding: 5px; 18 | } 19 | 20 | code { 21 | /* border: 1px dotted black; 22 | background-color: #D9E3E9; 23 | padding: 5px; */ 24 | } 25 | 26 | .editorial { 27 | border: 2px solid green; 28 | padding: 5px; 29 | } 30 | 31 | div.rdf-classlist { 32 | background-color: #eef; 33 | border: 1px solid black; 34 | float: left; 35 | margin: 0.3em 1%%; 36 | width: 26%%; 37 | } 38 | 39 | div.rdf-proplist ul { 40 | margin: 0.3em 0.3em 1em; 41 | } 42 | 43 | div.rdf-proplist h3 { 44 | background-color: #bbf; 45 | font-size: 100%%; 46 | margin: 0; 47 | padding: 2px; 48 | } 49 | 50 | div.rdf-classlist h3 { 51 | background-color: #ccf; 52 | font-size: 100%%; 53 | margin: 0; 54 | padding: 2px; 55 | } 56 | 57 | specterm.h3 { 58 | /* foreground-color: #000; */ 59 | background-color: #bbf; 60 | font-size: 100%%; 61 | margin: 0; 62 | padding: 2px; 63 | } 64 | 65 | .rel-table { 66 | border: 1px; 67 | } 68 | 69 | div.specterm { 70 | /* background-color: #ccc; */ 71 | padding: 10px; 72 | border: 1px solid black; 73 | } 74 | 75 | .http\:\/\/www\.w3\.org\/1999\/02\/22-rdf-syntax-ns\# { color: black } 76 | .http\:\/\/www\.w3\.org\/2000\/01\/rdf-schema\# { color: blue } 77 | .http\:\/\/www\.w3\.org\/2002\/07\/owl\# { color: purple } 78 | .http\:\/\/xmlns\.com\/foaf\/0.1\/ {color: red } 79 | .http\:\/\/xmlns\.com\/wot\/0.1\/ {color: yellow } 80 | .http\:\/\/purl\.org\/dc\/elements\/1\.1\/ {color: grey } 81 | .http\:\/\/purl\.org\/rss\/1\.0\/modules\/syndication\/ { color: red } 82 | .http\:\/\/www\.w3\.org\/2003\/06\/sw-vocab-status\/ns\# { color: orange } 83 | 84 | 85 | .edit { 86 | background-color:#fdf; 87 | border: thin solid black; 88 | color:black; 89 | } 90 | 91 | .stable { 92 | background-color:#66FF66; 93 | border: 1px solid black; 94 | color:black; 95 | padding:3px; 96 | font-size:14px; 97 | } 98 | 99 | .unstable { 100 | background-color:#FFFF66; 101 | border: 1px solid black; 102 | color:black; 103 | padding:3px; 104 | font-size:14px; 105 | } 106 | 107 | 108 | -------------------------------------------------------------------------------- /examples/phil_and_mary/phil_and_mary.n3: -------------------------------------------------------------------------------- 1 | @prefix rdf: . 2 | @prefix rdfs: . 3 | @prefix owl: . 4 | @prefix vs: . 5 | @prefix timeline: . 6 | @prefix time: . 7 | @prefix event: . 8 | @prefix foaf: . 9 | @prefix frbr: . 10 | @prefix wot: . 11 | @prefix bio: . 12 | @prefix dc: . 13 | @prefix mo: . 14 | 15 | 16 | a mo:MusicalGroup; 17 | dc:title "The Needles"; 18 | foaf:homepage ; 19 | mo:myspace . 20 | 21 | 22 | a mo:Performance; 23 | dc:title "Gig at the Albany Pub, in London, of the Needles, the 14th of February"; 24 | mo:performer ; 25 | mo:produced_sound ; 26 | event:time ; 27 | event:place ; 28 | mo:listener , . 29 | 30 | 31 | a timeline:Interval; 32 | timeline:during ; 33 | dc:title "When the gig of the needles actually occured: we just know it happened on the 14th of february 2007" . 34 | 35 | 36 | a foaf:Person; 37 | foaf:name "Phil" . 38 | 39 | 40 | a mo:Recording; 41 | dc:title "I actually recorded something there with my cell phone!"; 42 | mo:recording_of ; 43 | event:factor ; 44 | mo:produced_signal . 45 | 46 | 47 | mo:published_as [ 48 | a mo:Record; 49 | mo:available_as , 50 | ] . 51 | 52 | 53 | a mo:Stream . 54 | 55 | 56 | a mo:Stream . 57 | 58 | 59 | a foaf:Person; 60 | foaf:name "Mary" . 61 | 62 | 63 | a mo:Recording; 64 | dc:title "Hey, I recorded this gig with my zPod, it was amazing, check it out!!"; 65 | mo:recording_of ; 66 | mo:produced_signal . 67 | 68 | 69 | mo:published_as [ 70 | a mo:Record; 71 | mo:available_as 72 | ] . 73 | 74 | 75 | a mo:Stream . 76 | 77 | -------------------------------------------------------------------------------- /ontosplit/onto_splitter.pl: -------------------------------------------------------------------------------- 1 | :- module(onto_splitter,[split/0]). 2 | 3 | /** 4 | * Just a util to split the ontology between terms defined by the document 5 | * and terms defined outside it 6 | * 7 | * Yves Raimond, C4DM, QMUL, 2007 8 | */ 9 | 10 | :- use_module(library('semweb/rdf_db')). 11 | :- use_module(library('rdf')). 12 | 13 | 14 | /** 15 | * Adjust these to your needs 16 | */ 17 | document('musicontology.rdfs'). 18 | primary_ns('http://purl.org/ontology/mo/'). 19 | output_core('musicontology-core.rdfs'). 20 | output_external('musicontology-external.rdfs'). 21 | output_level1('musicontology-level1.rdfs'). 22 | output_level2('musicontology-level2.rdfs'). 23 | output_level3('musicontology-level3.rdfs'). 24 | 25 | :- rdf_register_ns(mo,'http://purl.org/ontology/mo/'). 26 | 27 | /** 28 | * Top-level goal 29 | */ 30 | split :- 31 | load, 32 | core, 33 | %external, 34 | level1, 35 | level2, 36 | level3. 37 | 38 | /** 39 | * Load the document 40 | */ 41 | load :- 42 | document(Doc), 43 | rdf_db:rdf_load(Doc). 44 | 45 | /** 46 | * Extract and export the core (explores up to three bnodes) 47 | */ 48 | core :- 49 | primary_ns(NS), 50 | findall(rdf(S,P,O), 51 | (rdf_db:rdf(A,rdfs:isDefinedBy,NS),description(A,rdf(S,P,O))), 52 | TriplesCore), 53 | output_core(Core), 54 | open(Core,write,CoreStream), 55 | rdf_write_xml(CoreStream,TriplesCore), 56 | close(CoreStream). 57 | 58 | /** 59 | * Extract and export the externals 60 | */ 61 | external :- 62 | primary_ns(NS), 63 | findall(rdf(S,P,O), 64 | (rdf_db:rdf(A,B,C),\+(C=mo:_),description(C,rdf(S,P,O))), 65 | TriplesExternal), 66 | output_external(External), 67 | open(External,write,ExternalStream), 68 | rdf_write_xml(ExternalStream,TriplesExternal), 69 | close(ExternalStream). 70 | 71 | /** 72 | * Extract and export level 1 terms 73 | */ 74 | level1 :- 75 | findall(rdf(S,P,O), 76 | (rdf_db:rdf(A,mo:level,literal('1')),description(A,rdf(S,P,O))), 77 | Triples1), 78 | output_level1(Level1), 79 | open(Level1,write,Level1Stream), 80 | rdf_write_xml(Level1Stream,Triples1), 81 | close(Level1Stream). 82 | 83 | /** 84 | * Extract and export level 2 terms 85 | */ 86 | level2 :- 87 | findall(rdf(S,P,O), 88 | (rdf_db:rdf(A,mo:level,literal('2')),description(A,rdf(S,P,O))), 89 | Triples2), 90 | output_level2(Level2), 91 | open(Level2,write,Level2Stream), 92 | rdf_write_xml(Level2Stream,Triples2), 93 | close(Level2Stream). 94 | /** 95 | * Extract and export level 3 terms 96 | */ 97 | level3 :- 98 | findall(rdf(S,P,O), 99 | (rdf_db:rdf(A,mo:level,literal('3')),description(A,rdf(S,P,O))), 100 | Triples3), 101 | output_level3(Level3), 102 | open(Level3,write,Level3Stream), 103 | rdf_write_xml(Level3Stream,Triples3), 104 | close(Level3Stream). 105 | 106 | 107 | 108 | /** 109 | * All the triples describing a given ontology term 110 | * This predicates include blank-nodes closure 111 | */ 112 | description(A,rdf(A,P,O)) :- 113 | rdf_db:rdf(A,P,O). 114 | description(A,rdf(S,P,O)) :- 115 | rdf_db:rdf(A,_,BN), 116 | rdf_db:rdf_is_bnode(BN), 117 | description(BN,rdf(S,P,O)). 118 | 119 | 120 | -------------------------------------------------------------------------------- /ontospec/spec.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/swipl -s 2 | 3 | :- use_module(onto_spec). 4 | :- use_module(library('semweb/rdf_db')). 5 | 6 | all('musicontology.rdfs'). 7 | core_rdfs('musicontology-core.rdfs'). 8 | %external_rdfs('musicontology-external.rdfs'). 9 | level1_rdfs('musicontology-level1.rdfs'). 10 | level2_rdfs('musicontology-level2.rdfs'). 11 | level3_rdfs('musicontology-level3.rdfs'). 12 | 13 | 14 | output('musicontology.html'). 15 | 16 | spec(File,Glance,Classes,Props,Inds,Deprecs) :- 17 | rdf_db:rdf_load(File), 18 | glance_html_desc(Glance), 19 | classes_html_desc(Classes), 20 | props_html_desc(Props), 21 | inds_html_desc(Inds), 22 | deprecs_html_desc(Deprecs), 23 | rdf_db:rdf_retractall(_,_,_). 24 | 25 | core(Glance,Classes,Props,Inds,Deprecs) :- 26 | core_rdfs(Core), 27 | spec(Core,Glance,Classes,Props,Inds,Deprecs). 28 | 29 | %external(Glance,Classes,Props,Inds,Deprecs) :- 30 | % external_rdfs(External), 31 | % spec(External,Glance,Classes,Props,Inds,Deprecs). 32 | 33 | %level1(Glance,Classes,Props,Inds,Deprecs) :- 34 | % level1_rdfs(Level1), 35 | % spec(Level1,Glance,Classes,Props,Inds,Deprecs). 36 | 37 | %level2(Glance,Classes,Props,Inds,Deprecs) :- 38 | % level2_rdfs(Level2), 39 | % spec(Level2,Glance,Classes,Props,Inds,Deprecs). 40 | 41 | %level3(Glance,Classes,Props,Inds,Deprecs) :- 42 | % level3_rdfs(Level3), 43 | % spec(Level3,Glance,Classes,Props,Inds,Deprecs). 44 | 45 | all(Glance,Classes,Props,Inds,Deprecs) :- 46 | all(All), 47 | spec(All,Glance,Classes,Props,Inds,Deprecs). 48 | 49 | 50 | :- 51 | open('1-header.htm',read,Header), 52 | open('2-overview.htm',read,Overview), 53 | open('3-introduction.htm',read,Introduction), 54 | open('4-glance-core.htm',read,GlanceCore), 55 | %open('5-glance-external.htm',read,GlanceExternal), 56 | %open('6-glance-level1.htm',read,GlanceLevel1), 57 | %open('7-glance-level2.htm',read,GlanceLevel2), 58 | %open('8-glance-level3.htm',read,GlanceLevel3), 59 | open('9-rdf-proplist.htm',read,PropList), 60 | open('10-large-intro.htm',read,LargeIntro), 61 | open('11-standards.htm',read,Standards), 62 | open('12-full-detail.htm',read,FullDetail), 63 | open('13-references.htm',read,References), 64 | open('14-changelog+footer.htm',read,ChangeLog), 65 | core(CoreGlanceD,_,_,_,_), 66 | %external(ExternalGlanceD,_,_,_,_), 67 | %level1(Level1GlanceD,_,_,_,_), 68 | %level2(Level2GlanceD,_,_,_,_), 69 | %level3(Level3GlanceD,_,_,_,_), 70 | all(_,Classes,Props,Inds,Deprecs), 71 | output(Output), 72 | open(Output,write,Otp), 73 | copy_stream_data(Header,Otp), 74 | copy_stream_data(Overview,Otp), 75 | copy_stream_data(Introduction,Otp), 76 | copy_stream_data(GlanceCore,Otp), 77 | write(Otp,CoreGlanceD), 78 | %copy_stream_data(GlanceExternal,Otp), 79 | %write(Otp,ExternalGlanceD), 80 | %copy_stream_data(GlanceLevel1,Otp), 81 | %write(Otp,Level1GlanceD), 82 | %copy_stream_data(GlanceLevel2,Otp), 83 | %write(Otp,Level2GlanceD), 84 | %copy_stream_data(GlanceLevel3,Otp), 85 | %write(Otp,Level3GlanceD), 86 | copy_stream_data(PropList,Otp), 87 | copy_stream_data(LargeIntro,Otp), 88 | copy_stream_data(Standards,Otp), 89 | copy_stream_data(FullDetail,Otp), 90 | write(Otp,Classes), 91 | write(Otp,Props), 92 | write(Otp,Inds), 93 | write(Otp,Deprecs), 94 | copy_stream_data(References,Otp), 95 | copy_stream_data(ChangeLog,Otp), 96 | close(Otp), 97 | halt. 98 | 99 | -------------------------------------------------------------------------------- /doc/13-references.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |



6 | 7 | 8 | 9 |

Ontology namespaces referenced:

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
PrefixXML NamespaceSpecification
frbrhttp://purl.org/vocab/frbr/core#Expression of Core FRBR Concepts in RDF
timelinehttp://purl.org/NET/c4dm/timeline.owl#The TimeLine ontology
eventhttp://purl.org/NET/c4dm/event.owl#The Event ontology
timehttp://www.w3.org/TR/owl-time/The Time ontology
dchttp://purl.org/dc/elements/1.1/Dublin Core Element Set v1.1
dctermshttp://purl.org/dc/terms/Dublin Core Element Refinements and Encoding Schemes
foafhttp://xmlns.com/foaf/0.1/Friend of a Friend (FOAF) Vocabulary
relhttp://purl.org/vocab/relationship/Relationship: A vocabulary for describing relationships between people
96 | 97 |
98 | 99 | 100 | 101 |



102 | 103 | 104 | 105 |

References

106 | 107 |
    108 | 109 | 110 | 111 |
  • "Functional Requirements for Bibliographic Records - Final Report", 1998 by International Federation of Library Associations and Institutions, ISBN 3-598-11382-X. (http://www.ifla.org/VII/s13/frbr/frbr.htm.)
  • 114 | 115 | 116 | 117 |
  • [RFC 2119] S. Bradner, 118 | 119 | "Key words for use in RFCs to Indicate Requirement Levels," RFC 2119, Harvard University, March 1997. (http://www.ietf.org/rfc/rfc2119.txt.)
  • 122 | 123 | 124 | 125 |
  • [RFC 2396] T.Berners-Lee, et al, "Uniform Resource Identifiers 126 | 127 | (URI): Generic Syntax," RFC 2396, Internet Engineering Task Force, August 1998. (http://www.ietf.org/rfc/rfc2396.txt.)
  • 130 | 131 | 132 | 133 |
134 | -------------------------------------------------------------------------------- /examples/bach_kunst/bach_kunst.n3: -------------------------------------------------------------------------------- 1 | @prefix dc: . 2 | @prefix mo: . 3 | @prefix foaf: . 4 | @prefix instrument: . 5 | @prefix bach: . 6 | @prefix timeline: . 7 | @prefix event: . 8 | @prefix xsd: . 9 | 10 | # Bach, die Kunst der Fuge 11 | ############################################ 12 | 13 | # Bach' FOAF profile (who knows... Bach may have been some sort of a geek!) 14 | bach:bach a foaf:Person; 15 | foaf:name "Johann Sebastian Bach"; 16 | mo:wikipedia ; 17 | # foaf:mbox ... :-) 18 | . 19 | 20 | # Composition event 21 | bach:kdfcomposition a mo:Composition; 22 | dc:title "The composition event, when Bach composed the art of the fugue"; 23 | mo:composer bach:bach; 24 | event:time bach:compti; 25 | mo:produced_work bach:kunstderfuge; 26 | event:product bach:kunstderfugescore; # there should be a dedicated property in MO 27 | . 28 | 29 | # The time interval where these composition event has occured. 30 | # We just know it was between 1742 and June 1749 31 | bach:compti a timeline:Interval; 32 | timeline:during ; 33 | . 34 | 35 | # The actual MusicalWork: 36 | bach:kunstderfuge a mo:MusicalWork; 37 | dc:title "Die Kunst der Fuge"; 38 | . 39 | 40 | # The related expression: the composer's score - this is an informational object, not the actual piece of paper 41 | bach:kunstderfugescore a mo:Score; 42 | dc:title "Die Kunst der Fuge, composer's score"; 43 | mo:published_as bach:firstpub 44 | . 45 | 46 | # First publication (1751): 47 | bach:firstpub a mo:PublishedScore; 48 | dc:title "Die Kunst der Fuge, published posthumously in 1751"; 49 | dc:date "1751"^^xsd:year; 50 | . 51 | 52 | ######################################### 53 | # 54 | # The Emerson Quartet, 2003, string quartet 55 | # 56 | bach:emersonperf a mo:Performance; 57 | event:time bach:emersonperfti; 58 | mo:performer bach:emersonquartet; 59 | mo:instrument instrument:violin; # plug your favorite instrument taxnonomy here... 60 | mo:instrument instrument:violin; 61 | mo:instrument instrument:viola; 62 | mo:instrument instrument:cello; 63 | mo:produced_sound bach:emersonsound; # the MusicalExpression 64 | mo:performance_of bach:kunstderfuge; # the MusicalWork 65 | . 66 | 67 | # During 2003: 68 | bach:emersonperfti a timeline:Interval; 69 | timeline:during ; 70 | . 71 | 72 | #Emerson Quartet: 73 | bach:emersonquartet a mo:MusicalGroup; 74 | foaf:name "The Emerson Quartet"; 75 | foaf:member bach:eugenedrucker; 76 | foaf:member bach:philipsetzer; 77 | foaf:member bach:lawrencedutton; 78 | foaf:member bach:davidfinckel; 79 | . 80 | 81 | # The actual MusicalExpression(s) 82 | bach:emersonsound a mo:Sound. 83 | bach:emersonrec a mo:Recording; 84 | mo:recording_of bach:emersonsound; 85 | mo:produced_signal [ 86 | a mo:Signal; 87 | mo:published_as bach:emersonrecord; 88 | ] 89 | . 90 | 91 | # The MusicalManifestation 92 | bach:emersonrecord a mo:Record; 93 | dc:title "The Art of the Fugue"; 94 | mo:release_status mo:official; 95 | foaf:maker bach:emersonquartet; # Redundant 96 | . 97 | 98 | 99 | -------------------------------------------------------------------------------- /examples/bach_kunst/bach_kunst.rdf: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | Johann Sebastian Bach 14 | 15 | 16 | 17 | The composition event, when Bach composed the art of the fugue 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | Die Kunst der Fuge 28 | 29 | 30 | Die Kunst der Fuge, composer's score 31 | 32 | 33 | 34 | Die Kunst der Fuge, published posthumously in 1751 35 | 1751 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | The Emerson Quartet 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | The Art of the Fugue 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /examples/phil_and_mary/phil_and_mary.rdf: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | The Needles 19 | 20 | 21 | 22 | 23 | 24 | Gig at the Albany Pub, in London, of the Needles, the 14th of February 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | When the gig of the needles actually occured: we just know it happened on the 14th of february 2007 36 | 37 | 38 | 39 | Phil 40 | 41 | 42 | 43 | I actually recorded something there with my cell phone! 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | Mary 63 | 64 | 65 | 66 | Hey, I recorded this gig with my zPod, it was amazing, check it out!! 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /doc/3-introduction.htm: -------------------------------------------------------------------------------- 1 | 2 |

Introduction

3 | 4 |

5 | 6 | Internet changed the music industry. At first, sharing systems like Napster 7 | allowed people to share any song they had on their computer with millions other people. 8 | That new reality changed the music industry’s landscape for good, and many juridical battles followed. 9 | However, a biggest change followed a couple of years later. 10 | Communities like MySpace started to appear. 11 | Strong of millions of regular users, such communities helped garage bands and obscure musicians to create 12 | their musical niche: the longtail of the music industry. 13 | This second change is more profound than the first one: 14 | now any musician has the possibility to reach their audience by sharing their work on the Web. 15 | In the mean time, a free database called MusicBrainz archiving 16 | million of between artists, albums and tracks appeared; music suggesting services like 17 | Pandora or Last.FM started to appear and Apple started 18 | to sell individual tracks at 1$ with iTunes.

19 | 20 |

At that point, the music industry of the eighties leaded by blockbusters was completely changed.

21 | 22 |

23 | 24 | The Music Ontology is an attempt to provide a vocabulary for linking a wide range music-related information, 25 | and to provide a democratic mechanism for doing so. 26 | Anybody can publish Music Ontology data and link it with existing data, in order to help 27 | create a music-related web of data. 28 | 29 | For example, John Doe may publish some information about a performance he saw last night (like the fact 30 | that he was there, and a review). Mary Doe may publish the fact that she attended the same performance, that 31 | she recorded it using her cell-phone, and that the corresponding item is available in her podcast. 32 | 33 | The Music Ontology provides a vocabulary to express information ranging from this example to: 34 |

35 |
36 | In this performance was interpreted a particular arrangement of the Trout Quintet by Franz Schubert.
37 | 
38 |
39 | This work was performed ten times, but only two of these performances were recorded.
40 | 
41 |
42 | Ten takes of this particular track have been recorded, each of which with a particular microphone location.
43 | 
44 |
45 | "Come as You Are" by Nirvana was released on a single and the "Nevermind" album.
46 | 
47 |
48 | During this gig, the band played ten songs. During the last one (a cover of "Eight days a week"), 
49 | the drummer from the support band joined them to play with them.
50 | 
51 | 52 |

53 | The Music Ontology is divided in three levels of expressiveness - from the simplest one to the more complex one. 54 | Everything is clustered around the following categories: 55 |

56 | 57 |
    58 |
  • Level 1: aims at providing a vocabulary for simple editorial information (tracks/artists/releases, etc.)
  • 59 |
  • Level 2: aims at providing a vocabulary for expressing the music creation workflow (composition, arrangement, 60 | performance, recording, etc.)
  • 61 |
  • Level 3: aims at providing a vocabulary for complex event decomposition, to express, for example, what happened during 62 | a particular performance, what is the melody line of a particular work, etc.
  • 63 |
64 | 65 | 66 |

 

67 | 68 |

Terminology and Notation

69 | 70 |

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 71 | 72 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 73 | 74 | document are to be interpreted as described in RFC 2119 [RFC 2119].

75 | 76 |

Namespace URIs of the general form "http://www.example.com/." represents some application-dependent 77 | 78 | or context-dependent URI as defined in RFC 2396 [RFC 2396].

79 | 80 |

The XML Namespace URI that MUST be used by implementations of this specification is:

81 | 82 | 87 | -------------------------------------------------------------------------------- /doc/css/xmlns-style.css: -------------------------------------------------------------------------------- 1 | /* Stylesheet adapted from http://xmlns.com/xmlns-style.css */ 2 | 3 | /* from leigh's foaf2doc thing */ 4 | 5 | dt { 6 | font-weight: bold; 7 | } 8 | 9 | .class-table { 10 | margin: 1px; 11 | padding: 3px; 12 | } 13 | 14 | .tableheading { background: #CCCCFF; font-weight: bold; font-size: 120%;} /*$ 15 | 16 | .float-right { 17 | float:right; 18 | } 19 | 20 | .code { 21 | margin-top: 8pt; 22 | margin-bottom: 8pt; 23 | background-color: #FFFFEE; 24 | white-space: pre; 25 | border-style: solid; 26 | border-width: 1pt; 27 | border-color: #999999; 28 | color:#111111; 29 | padding-left: 0.4%; 30 | padding-top: 2pt; 31 | padding-bottom: 2pt; 32 | width: 99.6%; 33 | } 34 | 35 | textarea { 36 | margin-top: 8pt; 37 | margin-bottom: 8pt; 38 | background-color: #FFFFEE; 39 | white-space: pre; 40 | border-style: dotted; 41 | border-width: 1pt; 42 | border-color: #999999; 43 | color:#111111; 44 | padding-left: 0.4%; 45 | padding-top: 2pt; 46 | padding-bottom: 2pt; 47 | width: 99.6%; 48 | } 49 | 50 | /* OK I'm going to create a derrivative work from this. I guess I leave 51 | in the W3C copyright and state the differences here. 52 | This started out as the CSS for a W3C Note, I'm changing it hopefully 53 | enough so it is clear we are not pretending that xmlns.com docs are 54 | W3Cish. The style is so nice though! 55 | Dan Brickley , 56 | */ 57 | 58 | /* 59 | (This document was based on one which was...) 60 | 61 | Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved. 62 | The following software licensing rules apply: 63 | http://www.w3.org/Consortium/Legal/copyright-software 64 | 65 | originally: base.css,v 1.24 2003/04/17 13:56:40 bbos Exp */ 66 | 67 | body { 68 | padding: 2em 1em 2em 70px; 69 | margin: 0; 70 | font-family: sans-serif; 71 | color: black; 72 | background: white; 73 | background-position: top left; 74 | background-attachment: fixed; 75 | background-repeat: no-repeat; 76 | } 77 | :link { color: #00C; background: transparent } 78 | :visited { color: #609; background: transparent } 79 | a:active { color: #C00; background: transparent } 80 | 81 | a:link img, a:visited img { border-style: none } /* no border on img links */ 82 | 83 | a img { color: white; } /* trick to hide the border in Netscape 4 */ 84 | @media all { /* hide the next rule from Netscape 4 */ 85 | a img { color: inherit; } /* undo the color change above */ 86 | } 87 | 88 | th, td { /* ns 4 */ 89 | font-family: sans-serif; 90 | } 91 | 92 | h1, h2, h3, h4, h5, h6 { text-align: left } 93 | /* background should be transparent, but WebTV has a bug */ 94 | h1, h2, h3, h4, h5 { color: #000000; background: white } 95 | h1 { font: 170% sans-serif } 96 | h2 { font: 140% sans-serif } 97 | h3 { font: 120% sans-serif } 98 | h4 { font: bold 100% sans-serif } 99 | h5 { font: italic 100% sans-serif } 100 | h6 { font: small-caps 100% sans-serif } 101 | 102 | .hide { display: none } 103 | 104 | div.head { margin-bottom: 1em } 105 | div.head h1 { margin-top: 2em; clear: both } 106 | div.head table { margin-left: 2em; margin-top: 2em } 107 | 108 | p.copyright { font-size: small } 109 | p.copyright small { font-size: small } 110 | 111 | @media screen { /* hide from IE3 */ 112 | a[href]:hover { background: #ffa } 113 | } 114 | 115 | pre { margin-left: 2em } 116 | /* 117 | p { 118 | margin-top: 0.6em; 119 | margin-bottom: 0.6em; 120 | } 121 | */ 122 | dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */ 123 | dt { font-weight: bold } 124 | 125 | pre, code { font-family: monospace } /* navigator 4 requires this */ 126 | 127 | ul.toc { 128 | list-style: disc; /* Mac NS has problem with 'none' */ 129 | list-style: none; 130 | } 131 | 132 | @media aural { 133 | h1, h2, h3 { stress: 20; richness: 90 } 134 | .hide { speak: none } 135 | p.copyright { volume: x-soft; speech-rate: x-fast } 136 | dt { pause-before: 20% } 137 | pre { speak-punctuation: code } 138 | } 139 | 140 | 141 | 142 | .vocablogo { 143 | background-image: url(http://xmlns.com/images/foafvocab-logo.jpg); 144 | } 145 | -------------------------------------------------------------------------------- /proposals/ci-tracklists-releases.n3: -------------------------------------------------------------------------------- 1 | @prefix mo: . 2 | @prefix owl: . 3 | @prefix rdfs: . 4 | @prefix event: . 5 | @prefix tl: . 6 | @prefix dc: . 7 | @prefix : <#> . 8 | 9 | # Three entities to consider 10 | # 1) Cultural identifier (e.g. "Sgt. Pepper") 11 | # - Issued from a recording session lasting 129 days, starting on the 6th of December 1966 12 | # 2) Tracklist 13 | # - A set of tracks: Track 1 is ... Track 2 is ... 14 | # - One cultural identifier may have many tracklists 15 | # 3) Release (e.g. UK on the 1st of June 1967, US on the 2nd of June 1967) 16 | # - One tracklist may have many releases 17 | 18 | # Relationships to existing MO concepts 19 | # 1) 20 | # mo:Signal has been used for it so far, but this is confusing (we want something higher-level) 21 | # We want to keep a track of a recording session event, which product is this cultural identifier 22 | # 2) 23 | # Corresponds to our current mo:Record 24 | # 3) 25 | # Not handled yet. We can model that as another event. 26 | # We need to reconsider the status of mo:release_type and mo:release_status when adding it 27 | 28 | # Existing level 1 MO stuff 29 | mo:Track a owl:Class . 30 | mo:Record a owl:Class . 31 | mo:Signal a owl:Class . 32 | mo:track a owl:ObjectProperty; rdfs:domain mo:Record; rdfs:range mo:Track . 33 | 34 | # 1) Cultural identifier 35 | # Based on Zazi's email, http://groups.google.com/group/music-ontology-specification-group/browse_thread/thread/8e1ec6cc68e2c035 36 | mo:RecordingSession a owl:Class; rdfs:subPropertyOf event:Event . 37 | # an mo:RecordingSession can be decomposed in several performances/recordings using event:sub_event to be described in further details 38 | # also, we should add it to the range of mo:performer, mo:engineer etc. 39 | mo:Album a owl:Class ; rdfs:subClassOf mo:MusicalExpression . # Matches Musicbrainz terminology, but not sure if it is an appropriate name 40 | mo:produced_album a owl:ObjectProperty; rdfs:domain mo:RecordingSession; rdfs:range mo:Album . 41 | 42 | # 2) Tracklist 43 | mo:Tracklist a owl:Class; owl:equivalentClass mo:Record . # Do we need that? Or can we keep on using mo:Record? 44 | # Adding Zazi's trackcount property 45 | mo:track_count a owl:DatatypeProperty; rdfs:range mo:Tracklist . 46 | # Handling multi-disc releases 47 | mo:sub_tracklist a owl:ObjectProperty; rdfs:domain mo:Tracklist; rdfs:range mo:Tracklist . 48 | 49 | # 3) Release events 50 | mo:ReleaseEvent a owl:Class; rdfs:subClassOf event:Event . 51 | mo:label a owl:ObjectProperty; rdfs:domain mo:ReleaseEvent; rdfs:subPropertyOf event:agent . 52 | mo:released_record a owl:ObjectProperty; rdfs:domain mo:ReleaseEvent; rdfs:range mo:Record ; rdfs:subPropertyOf event:factor . 53 | mo:release a owl:ObjectProperty; rdfs:domain mo:Record; rdfs:range mo:ReleaseEvent; owl:inverseOf mo:released_record . 54 | 55 | 56 | # EXAMPLE 57 | 58 | :session 59 | a mo:RecordingSession ; 60 | event:place ; 61 | event:time [ tl:start "1966-12-06" ; tl:duration "P129D" ] ; 62 | mo:performer ; 63 | mo:produced_album :album . 64 | :album 65 | a mo:Album; 66 | dc:title "Sgt. Pepper's Lonely Hearts Club Band" ; 67 | owl:sameAs ; 68 | mo:published_as :original_tracklist, :cd_tracklist . 69 | :original_tracklist 70 | a mo:Tracklist; 71 | dc:title "Sgt. Pepper's Lonely Hearts Club Band (original tracklist)"; 72 | mo:sub_tracklist :disc1, :disc2 ; 73 | mo:release :uk, :us . 74 | :disc1 75 | a mo:Tracklist; 76 | dc:title "Sgt. Pepper's Lonely Hearts Club Band (original tracklist, disc 1)"; 77 | mo:track_count 7; 78 | mo:track :splhc, :wlhmf, :lsd, :gb, :fh, :slh, :bbmk . 79 | :disc2 80 | a mo:Tracklist; 81 | dc:title "Sgt. Pepper's Lonely Hearts Club Band (original tracklist)"; 82 | mo:track_count 6; 83 | mo:track :wwy, :wsf, :lr, :gmgm, :splhcr, :dl . 84 | :cd_tracklist 85 | a mo:Tracklist; 86 | dc:title "Sgt. Pepper's Lonely Hearts Club Band (CD tracklist)"; 87 | mo:track_count 13 . 88 | 89 | 90 | :uk 91 | a mo:ReleaseEvent; 92 | event:place [ rdfs:label "UK" ]; 93 | event:time [ tl:at "1967-06-01" ] . 94 | :us 95 | a mo:ReleaseEvent; 96 | event:place [ rdfs:label "US" ]; 97 | event:time [ tl:at "1967-06-02" ] . 98 | -------------------------------------------------------------------------------- /grddl/hAudio2RDF.xsl: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | PTMS 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /examples/code_monkey/cm.n3: -------------------------------------------------------------------------------- 1 | @prefix : . 2 | @prefix owl: . 3 | @prefix rdfs: . 4 | @prefix foaf: . 5 | @prefix mo: . 6 | @prefix event: . 7 | @prefix time: . 8 | @prefix timeline: . 9 | @prefix dc: . 10 | @prefix yago: . 11 | @prefix geo: . 12 | 13 | ########################### Level 1 ########################### 14 | :joco 15 | rdfs:type mo:MusicArtist ; 16 | rdfs:label "Jonathan Coulton" ; 17 | owl:sameAs 18 | . 19 | 20 | :rit_surr_sound 21 | rdfs:type mo:MusicGroup ; 22 | foaf:name "RIT's Surround Sound" ; 23 | foaf:homepage "http://www.ritsurroundsound.org/" . 24 | 25 | :taw3 26 | rdfs:type mo:Record ; 27 | rdfs:label "Thing a Week III" ; 28 | mo:track :c_m_album_version ; 29 | owl:sameAs 30 | . 31 | 32 | :code_monkey 33 | rdfs:type mo:MusicalWork ; 34 | dc:title "Code Monkey" . 35 | 36 | :c_m_album_track 37 | rdfs:type mo:Track ; 38 | dc:title "Code Monkey" ; 39 | dc:creator :joco ; 40 | owl:sameAs 41 | ; 42 | mo:free_download 43 | . 44 | ########################### Level 2 ########################### 45 | :c_m_comp 46 | rdfs:type mo:Composition ; 47 | rdfs:label "Composition of Code Monkey (Thing a Week 29)"; 48 | event:hasAgent :joco ; 49 | event:hasProduct :code_monkey ; 50 | event:time 51 | . 52 | 53 | ### Album performance 54 | :c_m_album_perf 55 | rdfs:type mo:Performance ; 56 | mo:performance_of :code_monkey ; 57 | mo:performer :joco ; 58 | event:time 59 | ; 60 | mo:produced_sound :c_m_album_sound . 61 | 62 | :c_m_album_sound 63 | rdfs:type mo:Sound ; 64 | mo:recorded_in :c_m_album_recording ; 65 | mo:recorded_in :c_m_remix . 66 | 67 | :c_m_album_recording 68 | rdfs:type mo:Recording ; 69 | mo:produced_signal :c_m_album_signal . 70 | 71 | :c_m_album_signal 72 | rdfs:type mo:Signal ; 73 | mo:published_as :c_m_album_track . 74 | 75 | ### Live performance 76 | :c_m_live_perf 77 | rdfs:type mo:Performance ; 78 | rdfs:label "Performance of Code Monkey (video available)"; 79 | event:hasAgent :joco ; 80 | event:usesWork :code_monkey ; 81 | event:place :TempleBar ; 82 | mo:available_as . 83 | 84 | :TempleBar 85 | rdfs:type yago:venue ; 86 | foaf:name "Temple Bar, Santa Monica, CA" ; 87 | geo:locatedIn . 88 | 89 | ### A Cappella arrangement & live performance 90 | :c_m_acappella_arr 91 | rdfs:type mo:Arrangement ; 92 | rdfs:label "A Cappella arrangement of Code Monkey" ; 93 | event:hasFactor :code_monkey ; 94 | foaf:Agent :rit_surr_sound . 95 | 96 | :c_m_acappella_perf 97 | rdfs:type mo:Performance ; 98 | rdfs:label "A Cappella Code Monkey Performance (video avail.)"; 99 | foaf:Agent :rit_surr_sound ; 100 | event:hasFactor :c_m_acappella_arr ; 101 | mo:available_as . 102 | 103 | ### "Speed Monkey" remix 104 | :c_m_remix_signal 105 | rdfs:type mo:Signal ; 106 | mo:remix_of :c_m_album_signal ; 107 | mo:available_as :c_m_remix . 108 | 109 | :c_m_remix 110 | rdfs:type mo:Track ; 111 | dc:title "Speed Monkey" ; 112 | mo:release_type mo:remix ; 113 | foaf:homepage ; 114 | mo:free_download 115 | . -------------------------------------------------------------------------------- /doc/11-standards.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

The Music Ontology and Standards

7 | 8 |

It is important to understand that the Music Ontology as specified in this document is not a standard 9 | 10 | in the sense of ISO Standardisation, 11 | 12 | or that associated with W3C Process. 13 | 14 | 15 | 16 |

17 | 18 |

The Music Ontology depends heavily on W3C's standards work, specifically on XML, XML Namespaces, RDF, and OWL. 19 | 20 | All the Music Ontology documents must be well-formed RDF/XML documents.

21 | 22 |

This specification contributes an ontology, the "Music Ontology ", to the Semantic 23 | 24 | Web, specifying it using W3C's Resource 25 | 26 | Description Framework (RDF). As such, the Music Ontology adopts by reference both 27 | 28 | a syntax (using XML), a data model (RDF graphs) and a mathematically 29 | 30 | grounded definition for the rules that underpin the RDF design.

31 | 32 | 33 |

The Music Ontology and RDF

34 | 35 |

Why does the Music Ontology use RDF?

36 | 37 |

The Music Ontology is an application of the Resource Description Framework (RDF) because the subject area we're describing – music: artists, albums and tracks -- has so many competing requirements that a standalone format would not capture them or would lead to trying to describe these requirements in a number of incompatible formats. By using RDF, the Music Ontology gains a powerful extensibility mechanism, allowing Music-Ontology-based descriptions to be mixed with claims made in any other RDF vocabulary.

38 | 39 |

This is for that reason that the RDF document examples at the beginning of this document suggested to use the FOAF ontology to describe the Person, and its relations with other Person (artist or non-artist), and to use the Music Ontology to specify that that Person is also an Artist. That way, we can re-use other ontologies such as the Relationship ontology, in conjunction with the FOAF ontology, to describe different relationship between Artists.

40 | 41 |

The Music Ontology as an ontology cannot incorporate everything we might want to talk about that is related to music: artists (people), albums and tracks. Instead of covering all topics within the Music Ontology itself, we describe the basic topics and build into a larger framework - RDF - that allows us to take advantage of work elsewhere on more specific description vocabularies.

42 | 43 |

RDF provides the Music Ontology with a way to mix together different descriptive vocabularies in a consistent way. Vocabularies can be created by different communities and groups as appropriate and mixed together as required, without needing any centralized agreement on how terms from different vocabularies can be written down in XML or N3.

44 | 45 |

Check the Ontology namespaces referenced section to find some ontologies that ca be use in conjonction with the Music Ontology.

46 | 47 |

This mixing happens in two ways: firstly, RDF provides an underlying model of (typed) objects and their attributes or relationships. mo:Album is an example of a type of object (a "class"), while mo:compilation_of and mo:has_track are examples of a relationship and an attribute of an mo:Album; in RDF we call these "properties". Any vocabulary described in RDF shares this basic model, which is discernable in the syntax for RDF, and which removes one level of confusion in understanding a given vocabulary, making it simpler to comprehend and therefore reuse a vocabulary that you have not written yourself. This is the minimal self-documentation that RDF gives you.

48 | 49 |

Secondly, there are mechanisms for saying which RDF properties are connected to which classes, and how different classes are related to each other, using RDF Syntax and OWL. These can be quite general (all RDF properties by default come from an rdf:Resource for example) or very specific and precise (for example by using OWL constructs). This is another form of self-documentation, which allows you to connect different vocabularies together as you please.

52 | 53 |

In summary then, RDF is self-documenting in ways which enable the creation and combination of vocabularies in a devolved manner. This is particularly important for an ontology which describes communities, since online communities connect to many other domains of interest, which it would be impossible (as well as suboptimal) for a single group to describe adequately in non-geological time.

54 | 55 |

RDF is usually written using the XML or N3 syntaxes. If you want to process the data, you will need to use one of the many RDF toolkits available, such as Jena (Java) or Redland (C).

56 | 57 |

More information about RDF can be found in the RDF Primer.

58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /proposals/identification-properties.n3: -------------------------------------------------------------------------------- 1 | @prefix mo: . 2 | @prefix dcterms: . 3 | @prefix owl: . 4 | @prefix rdfs: . 5 | 6 | # One could also define some datatypes to capture the exact formats allowed for some of the identifiers. 7 | # The datatype definitions would then be pointed to via rdfs:range. 8 | 9 | mo:gtin a owl:DatatypeProperty . 10 | mo:gtin rdfs:subPropertyOf dcterms:identifier . 11 | mo:gtin rdfs:label "GTIN"@en . 12 | mo:gtin rdfs:comment "GTIN is a grouping term for EANs and UPCs. In common speech those are called barcodes although the barcodes are just a representation of those identifying numbers."@en . 13 | mo:gtin rdfs:seeAlso . 14 | 15 | mo:ean a owl:DatatypeProperty . 16 | mo:ean rdfs:subPropertyOf mo:gtin . 17 | mo:ean rdfs:label "EAN"@en . 18 | mo:ean rdfs:seeAlso . 19 | 20 | mo:upc a owl:DatatypeProperty . 21 | mo:upc rdfs:subPropertyOf mo:gtin . 22 | mo:upc rdfs:label "UPC"@en . 23 | mo:upc rdfs:seeAlso . 24 | 25 | mo:uuid a owl:DatatypeProperty . 26 | # Note: this could also be just a datatype. 27 | # The only semantics the property includes are that the object identifies the subject 28 | # (but it doesn't restrict the subject to any characteristics like the other identifiers listed here do) 29 | # and that it does so universally, i.e. with a very high certainty two generated UUIDs never identify the same thing. 30 | # The semantic "object identifies subject" is already covered by dcterms:identifier so the only semantic left is the universality. 31 | # I'd say though that the universality is not imposed to it but rather inherent through the process of generating the UUIDs. 32 | # So yes, maybe this really should just be a datatype. 33 | mo:uuid rdfs:subPropertyOf dcterms:identifier . 34 | mo:uuid rdfs:label "UUID"@en . 35 | mo:uuid rdfs:seeAlso . 36 | 37 | mo:mb_artist_id a owl:DatatypeProperty . 38 | mo:mb_artist_id rdfs:subPropertyOf mo:uuid . 39 | mo:mb_artist_id rdfs:domain mo:MusicArtist . # Although in MB this is used for all kinds of people, e.g. photographers for CD booklets 40 | mo:mb_artist_id rdfs:label "MusicBrainz Artist Identifier"@en . 41 | mo:mb_artist_id rdfs:seeAlso . 42 | 43 | mo:mb_release_id a owl:DatatypeProperty . 44 | mo:mb_release_id rdfs:subPropertyOf mo:uuid . 45 | mo:mb_release_id rdfs:domain mo:Record . # Hmmm... 46 | mo:mb_release_id rdfs:label "MusicBrainz Release Identifier"@en . 47 | mo:mb_release_id rdfs:seeAlso . 48 | 49 | mo:mb_track_id a owl:DatatypeProperty . 50 | mo:mb_track_id rdfs:subPropertyOf mo:uuid . 51 | mo:mb_track_id rdfs:domain mo:Track . 52 | mo:mb_track_id rdfs:label "MusicBrainz Track Identifier"@en . 53 | mo:mb_track_id rdfs:seeAlso . 54 | 55 | mo:mb_label_id a owl:DatatypeProperty . 56 | mo:mb_label_id rdfs:subPropertyOf mo:uuid . 57 | mo:mb_label_id rdfs:domain mo:Label . 58 | mo:mb_label_id rdfs:label "MusicBrainz Label Identifier"@en . 59 | mo:mb_label_id rdfs:seeAlso . 60 | 61 | mo:mb_disc_id a owl:DatatypeProperty . 62 | mo:mb_disc_id rdfs:subPropertyOf dcterms:identifier . 63 | mo:mb_disc_id rdfs:domain mo:Cd . 64 | mo:mb_disc_id rdfs:label "MusicBrainz Disc ID"@en . 65 | mo:mb_disc_id rdfs:seeAlso . 66 | 67 | mo:audio_fingerprint a owl:DatatypeProperty . 68 | mo:audio_fingerprint rdfs:subPropertyOf dcterms:identifier . 69 | mo:audio_fingerprint rdfs:domain mo:Signal . 70 | mo:audio_fingerprint rdfs:label "audio fingerprint"@en . 71 | mo:audio_fingerprint rdfs:seeAlso . 72 | 73 | mo:trmid a owl:DatatypeProperty . 74 | mo:trmid rdfs:subPropertyOf mo:audio_fingerprint . 75 | mo:trmid rdfs:label "TRM ID"@en . 76 | mo:trmid rdfs:seeAlso . 77 | 78 | mo:puid a owl:DatatypeProperty . 79 | mo:puid rdfs:subPropertyOf mo:audio_fingerprint . 80 | mo:puid rdfs:label "PUID"@en . 81 | mo:puid rdfs:seealso . 82 | 83 | mo:isrc a owl:DatatypeProperty . 84 | mo:isrc rdfs:subPropertyOf dcterms:identifier . 85 | mo:isrc rdfs:domain mo:Track . # Hmmm... 86 | mo:isrc rdfs:label "ISRC"@en . 87 | mo:isrc rdfs:seeAlso . 88 | 89 | mo:iswc a owl:DatatypeProperty . 90 | mo:iswc rdfs:subPropertyOf dcterms:identifier . 91 | mo:iswc rdfs:domain mo:MusicalWork . # Although it's only about the composition kind of work. An album could be a work as well. 92 | mo:iswc rdfs:label "ISWC"@en . 93 | mo:iswc rdfs:seeAlso . 94 | 95 | mo:ismn a owl:DatatypeProperty . 96 | mo:ismn rdfs:subPropertyOf dcterms:identifier . 97 | mo:ismn rdfs:domain [a owl:Class ; owl:unionOf (mo:PublishedLyrics mo:PublishedLibretto mo:PublishedScore)] . 98 | mo:ismn rdfs:label "ISMN"@en . 99 | mo:ismn rdfs:seeAlso . 100 | 101 | mo:ipi a owl:DatatypeProperty . 102 | mo:ipi rdfs:subPropertyOf dcterms:identifier . 103 | mo:ipi rdfs:domain mo:CorporateBody . 104 | mo:ipi rdfs:label "IPI"@en . 105 | mo:ipi rdfs:seeAlso . 106 | 107 | mo:grid a owl:DatatypeProperty . 108 | mo:grid rdfs:subPropertyOf dcterms:identifier . 109 | mo:grid rdfs:domain mo:Record . 110 | mo:grid rdfs:label "GRid"@en . 111 | mo:grid rdfs:seeAlso . 112 | 113 | mo:lc a owl:DatatypeProperty . 114 | mo:lc rdfs:subPropertyOf dcterms:identifier . 115 | mo:lc rdfs:domain mo:Label . 116 | mo:lc rdfs:label "label code"@en . 117 | mo:lc rdfs:seeAlso . 118 | 119 | mo:catalog_number a owl:DatatypeProperty . 120 | mo:catalog_number rdfs:subPropertyOf dcterms:identifier . 121 | mo:catalog_number rdfs:domain mo:Record . # Hmmm... 122 | mo:catalog_number rdfs:label "catalog number"@en-US . 123 | mo:catalog_number rdfs:label "catalogue number"@en-GB . 124 | mo:catalog_number rdfs:seeAlso . 125 | 126 | # Now with ASINs the situation is a bit more complicated. mo:amazon_asin currently is used to point to an Amazon page about a product. 127 | # The Amazon URLs though are far from being canonical when you access their site. 128 | # You can even hack them and put random stuff in the middle and still reach the page you want. 129 | # You could just use the actual ASINs for identification but there's a problem with them. 130 | # ASINs are *supposed* to identify products across all local Amazon sites theoretically but in practice they don't. 131 | # You can get ASINs on amazon.co.uk which don't exist on amazon.fr, 132 | # you can get ASINs on amazon.de which identify a different edition on amazon.com and so on. 133 | # So really you need a pair of (domain, ASIN) to uniquely and minimally identify products on Amazon. It could look like this: 134 | 135 | mo:amazon_identification a owl:ObjectProperty . 136 | mo:amazon_identification rdfs:range mo:AmazonIdentification . 137 | 138 | mo:AmazonIdentification a owl:Class . 139 | 140 | mo:amazon_domain a owl:DatatypeProperty . 141 | mo:amazon_domain rdfs:domain mo:AmazonIdentification . 142 | 143 | mo:amazon_asin a owl:DatatypeProperty . 144 | mo:amazon_asin rdfs:subPropertyOf dcterms:identifier . 145 | mo:amazon_asin rdfs:domain mo:AmazonIdentification . -------------------------------------------------------------------------------- /rdf/ChangeLog: -------------------------------------------------------------------------------- 1 | ========================= 2 | Version 2.0 (Feb 2010) 3 | ======================== 4 | * ADDED: mo:Membership 5 | * ADDED: mo:SignalGroup 6 | * ADDED: mo:RecordingSession 7 | * ADDED: mo:Transcription 8 | * ADDED: mo:ReleaseEvent 9 | * ADDED: mo:Release 10 | * ADDED: mo:membership 11 | * ADDED: mo:group 12 | * ADDED: mo:primary_instrument 13 | * ADDED: mo:produced_signal_group 14 | * ADDED: mo:signal 15 | * ADDED: mo:record 16 | * ADDED: mo:release_event 17 | * ADDED: mo:record_count 18 | * ADDED: mo:label 19 | * ADDED: mo:track_count 20 | * ADDED: mo:uuid 21 | * ADDED: mo:musicbrainz_guid 22 | * ADDED: mo:catalogue_number 23 | * ADDED: mo:iswc 24 | * ADDED: mo:ismn 25 | * ADDED: mo:ipi 26 | * ADDED: mo:lc 27 | * ADDED: mo:gtin 28 | * ADDED: mo:ean 29 | * ADDED: mo:upc 30 | * ADDED: mo:grid 31 | * ADDED: mo:text 32 | * ADDED: mo:meter 33 | * MODIFIED: domain/range of mo:similar_to 34 | * MODIFIED: domain/range of mo:published_as 35 | * MODIFIED: domain/range of mo:publication_of 36 | * MODIFIED: domain/range of mo:engineer/mo:engineered 37 | * MODIFIED: domain/range of mo:genre 38 | * REMOVED: mo:manifestation/mo:hasManifestation 39 | 40 | ========================= 41 | Version 1.2 (july 2007) 42 | ========================= 43 | 44 | * ADDED: mo:availableAs subPropertyOf frbr:examplar 45 | * ADDED: mo:Torrent as medium (bittorrent items) 46 | * ADDED: mo:ED2K as medium (edonkey items) 47 | * ADDED: mo:usesScore (Performance --> Score (particular arrangement of a 48 | work)) 49 | * ADDED: mo:preview_download (Agent or Manifestation to Document 50 | * ADDED: mo:download, super-property of mo:previewdonwload, mo:paiddownload 51 | and mo:freedownload 52 | * ADDED: mo:AudioFile (as a medium) 53 | * ADDED: two sub-properties of mo:availableAs -- mo:item (full manifestation 54 | available) and mo:preview (only a part of the manifestation is available) 55 | * ADDED: wrapper for foaf:maker, foaf:made, foaf:Agent, foaf:Person, 56 | foaf:Group, foaf:member 57 | * ADDED: mo:isrc (international standard recording code) 58 | * ADDED: mo:encodes (musical item --> signal), allowing to associate, for 59 | example, an item to a lower-resolution version of the master signal (issued 60 | from a Recording event) 61 | * ADDED: mo:genre, subproperty of event:hasFactor 62 | * ADDED: mo:level, an annotation property to specify wether a term belongs to 63 | level 1, 2 or 3 64 | * ADDED: mo:sampled_version, inverse of sampled_version_of 65 | * ADDED: produced_score (Arrangement --> Score) 66 | * MODIFIED: mo:usesSound to mo:recording_of (still a owl:sameAs statement between these two for backward compatibility sake) 67 | * MODIFIED: mo:usedInRecording to mo:recorded_in (same) 68 | * MODIFIED: mo:producesSignal to mo:produced_signal (same) 69 | * MODIFIED: mo:producesSound to mo:produced_sound (same) 70 | * MODIFIED: mo:usesWork to mo:performance_of (same) 71 | * MODIFIED: mo:productOfComposition to mo:composed_in (same) 72 | * MODIFIED: mo:usedInPerformance to mo:performed_in (same) 73 | * MODIFIED: mo:producesWork to mo:produced_work (same) 74 | * MODIFIED: mo:paiddownload to mo:paid_download (same) 75 | * MODIFIED: mo:freedownload to mo:free_download (same) 76 | * MODIFIED: mo:signalTime to mo:time (same) 77 | * MODIFIED: mo:sampledVersionOf to mo:sampled_version_of (same) 78 | * MODIFIED: mo:has_track to mo:track (same) 79 | * MODIFIED: mo:trackNum to mo:track_number (same) 80 | * MODIFIED: mo:releaseType to mo:release_type (same) 81 | * MODIFIED: mo:releaseStatus to mo:release_status (same) 82 | * MODIFIED: mo:eventHomePage to mo:event_homepage (same) 83 | * MODIFIED: mo:hasManifestation to mo:manifestation (same) 84 | * MODIFIED: mo:publishedAs to mo:published_as (same) 85 | * MODIFIED: mo:movementNum to mo:movement_number (same) 86 | * MODIFIED: mo:publicationOf to mo:publication_of (same) 87 | * MODIFIED: mo:publishingLocation to mo:publishing_location (same) 88 | * MODIFIED: mo:sampleRate to mo:sample_rate (same) 89 | * MODIFIED: mo:recordedAs to mo:recorded_as (same) 90 | * MODIFIED: mo:availableAs to mo:available_as (same) 91 | * MODIFIED: mo:image subproperty of foaf:depiction 92 | * MODIFIED: changed comments and domain of freedownload and paiddownload 93 | * MODIFIED: changed comments on mo:MusicalWork 94 | * MODIFIED: changed comments on availableAs 95 | * MODIFIED: mo:encoding has MusicalItem as a domain 96 | * MODIFIED: Mentions of mo:MusicManifestation to mo:MusicalManifestation (typo) in mo:publisher, mo:published 97 | * MODIFIED: Mentions of mo:isAgentIn to event:isAgentIn in mo:Composer, mo:Arranger 98 | * MODIFIED: foaf:Person - added two :subClassOf properties from the foaf spec. 99 | * DELETED: mo:creatorOf - use foaf:made instead 100 | * DELETED: mo:pitch and mo:timbre - this should go to the audio features 101 | ontology 102 | * DELETED: mo:stream_url (it should be the identifier of the resource (eg. 103 | rtsp://...) 104 | * DELETED: sub concepts of mo:Instrument - instead, a link to Ivan Herman 105 | musical instrument SKOS taxonomy 106 | * DELETED: sub concepts of mo:Genre - instead a more proper documentation of 107 | this concept 108 | 109 | ========================= 110 | Version 1.11 (March 2007) 111 | ========================= 112 | 113 | * ADDED: Performance and Show 114 | * ADDED: records (inverse of recordedAs) and publicationOf (inverse of 115 | publishedAs) 116 | * ADDED: mo:composer (Composition --> Agent) 117 | * ADDED: mo:producesWork (Composition --> MusicalWork) 118 | * ADDED: mo:usedInPerformance (Work --> Performance) 119 | * ADDED: mo:productOfComposition (MusicalWork --> Composition) 120 | * ADDED: mo:usesWork (Performance --> MusicalWork) 121 | * ADDED: Medium subclassof MusicalItem 122 | * ADDED: mo:producesSound (Perfomance --> Sound) 123 | * ADDED: mo:usedInRecording (Sound --> Recording) 124 | * ADDED: mo:usesSound (Recording --> Soung) 125 | * ADDED: mo:producesSignal (Recording --> Signal) 126 | * ADDED: shortcut mo:recordedAs (Performance --> Signal) 127 | * ADDED: term status: all subproperties of hasAgent, hasProduct, has Factor 128 | are stable, all the inverse are unstable 129 | * ADDED: mo:musibrainz 130 | (Work;Expression;Manifestation;Item;Agent;Instrument;Genre --> Document) 131 | * ADDED: mo:ep a ReleaseType 132 | * ADDED: mo:publicationLocation (MusicalManifestation --> SpatialThing) 133 | * ADDED: mo:contains_sample_from (Signal --> Signal) 134 | * ADDED: wrapper for event:place (Event --> SpatialThing) 135 | * CHANGED: pitch and timber' domain: now Signal 136 | * CHANGED: remixed has as a domain Signal, same for the range of remixer 137 | * CHANGED: same thing for sampled/sampler 138 | * CHANGED: same thing for djmixed 139 | * CHANGED: same thing for remix_of 140 | * CHANGED: same thing for medley_of 141 | * CHANGED: same thing for djmix_of 142 | * CHANGED: same thing for remaster_of 143 | * CHANGED: same thing for mashup_of 144 | * CHANGED: collaborated_with/other_release_of are symmetric 145 | * CHANGED: added inverse properties statements on all djmix/... 146 | * CHANGED: mark compilation_of as unstable. this should be done through a 147 | release type and through explicit links to each Signal. 148 | * CHANGED: translation_of goes from a MusicalExpression to a 149 | MusicalExpression (well, a Work is independent of its wording) 150 | * CHANGED: tribute_to from MusicalManifestation to Artist 151 | 152 | 153 | 154 | NOTE: 155 | * remix_of/djmix_of should be transitive? 156 | * other_release_of is *really* vague... 157 | * compilation_of and tribute_to should be removed... too redundant with 158 | existing stuff, and not even shortcuts 159 | * musicbrainz is maybe too ambitious in its domain 160 | -------------------------------------------------------------------------------- /doc/1-header.htm: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Music Ontology Specification 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 |

Music Ontology Specification

35 | 36 |

Specification Document

37 | 38 | 39 | 40 | 41 | 77 | 78 | 115 | 116 | 117 |
42 |
43 | 44 |
Latest version:
45 | 46 |
http://purl.org/ontology/mo/ (RDF/XML, Turtle) 47 | 48 | 49 | 50 |
51 | 52 |
Last update:
53 | 54 |
2012/08/12
55 | 56 |
Revision:
57 | 58 |
Revision: 2.1
59 | 60 |
Editor:
61 | 62 |
Yves Raimond - BBC
63 |
Frédérick Giasson - Structured Dynamics
64 | 65 |
Authors:
66 | 67 |
Yves Raimond - BBC
68 |
Frédérick Giasson - Structured Dynamics
69 |
Kurt Jacobson - Centre for Digital Music, Queen Mary, University of London
70 |
George Fazekas - Centre for Digital Music, Queen Mary, University of London
71 |
Thomas Gängler - Faculty of Computer Science, University of Technology Dresden, Germany
72 |
Simon Reinhardt
73 |
Alexandre Passant - Seevl
74 |
75 | 76 |
79 | 80 | 81 | 82 | 85 | 86 | 87 | 89 | 90 | 91 | 92 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 108 | 109 | 110 | 111 | 112 |
83 | Github 84 | Music Ontology Github project
88 | Source code, Tools
93 | 94 | Google Groups 95 | 96 | Music Ontology Specification Group
Browse Archives
106 | Wiki 107 | Music Ontology Wiki
Examples, datasets, working drafts
113 | 114 |
118 | 119 | 120 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 |

148 | This visual layout and structure of the 149 | 150 | specification was adapted from the FOAF 151 | 152 | Vocabulary Specification by Dan Brickley and Libby Miller and the SIOC Ontology Specification by Uldis Bojars and John G. Breslin. This document was automatically generated using the OntoSpec script. 153 |

154 | 155 | 156 | 157 | 158 | 159 | 164 | 165 | 166 |
167 | 168 | 169 | 170 |
171 | 172 |

Abstract

173 | 174 |

175 | The Music Ontology Specification provides main concepts and properties fo describing music (i.e. artists, albums, tracks, but also performances, 176 | arrangements, etc.) on the Semantic Web. 177 | This document contains a detailed description of the Music Ontology. 178 | 179 |

180 | 181 | 182 |
183 | 184 |
185 | 186 | 187 | 188 |
189 | 190 |

191 | 192 | Status of This Document

193 | 194 |

NOTE: 195 | 196 | 197 | 198 | This section describes the status of this document at the time 199 | 200 | of its publication. Other documents may supersede this document. 201 | 202 |

203 | 204 |

This specification is an evolving document. This document is generated 205 | 206 | by a machine-readable Music Ontology expressed in RDF/XML with a specification template.

207 | 208 |

Authors welcome suggestions on the Music Ontology and this document. This document may be updated or added to based on implementation experience, but no commitment is made 209 | 210 | by the authors regarding future updates.

211 | 212 | 213 |
214 | -------------------------------------------------------------------------------- /doc/10-large-intro.htm: -------------------------------------------------------------------------------- 1 |

Music Ontology Classes Hierarchy

2 | 3 | 4 | 5 |

6 | 7 | There are the schemes of the hierarchy of the Music Ontology classes. These schemes show the interaction between the Music Ontology classes and other ontologies classes. 8 | 9 |

10 | 11 | 12 | 13 | 14 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |



33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |

RDF Document Examples

41 | 42 | 43 | 44 | 45 | 46 |
47 | 48 |


49 | 50 | 51 | 52 |

Examples of SPARQL queries against these RDF graphs

53 | 54 | 55 | 56 |
57 | 58 |

59 | 60 |

Background

61 | 62 |

The Music Ontology is an online community effort 63 | to express music-related information on the Semantic Web. 64 |

65 | 66 |

The Music Ontology is mainly influenced by: 67 |

68 | 75 | 76 |

77 | More detailed are available on the Wiki publication page. 78 |

79 | 80 |

 

81 | 82 |

The Music Ontology 83 | 84 | Description

85 | 86 |

This specification serves as the Music Ontology "namespace document". As such 87 | 88 | it describes the Music Ontology and the terms (RDF classes and properties) that 91 | 92 | constitute it, so that Semantic 93 | 94 | Web applications can use those terms in a variety of RDF-compatible 95 | 96 | document formats and applications. 97 | 98 | 99 | 100 |

101 | 102 |

This document presents the Music Ontology as a Semantic Web vocabulary or Ontology. 105 | 106 | The Music Ontology is straightforward, pragmatic and designed to allow 107 | 108 | simultaneous deployment and extension, and is therefore intended for 109 | 110 | widescale use.

111 | 112 |

 

113 | 114 |

Evolution and 115 | 116 | Extension of the Music Ontology

117 | 118 | The Music Ontology is identified by the namespace URI 119 | 120 | 'http://purl.org/ontology/mo/'. 121 | 122 |

Revisions and extensions of Music Ontology are conducted through edits to the namespace document, which by convention is published in the Web at the namespace 123 | 124 | URI.

125 | 126 | 135 | 136 | 137 | 138 |

The properties and types defined here provide some basic 139 | 140 | concepts for use in Music Ontology descriptions. Other vocabularies (e.g. the 141 | 142 | Dublin Core metadata elements for 143 | 144 | simple bibliographic description, FOAF, etc.) can also be mixed in with the Music Ontology terms, as can local 145 | 146 | extensions. The Music Ontology is designed to be extended, and modules may be added 147 | 148 | at a later date.

149 | 150 | 151 | 152 |

 

153 | 154 |

Music Ontology Modules

155 | 156 | 157 | 158 | Music Ontology modules may be used to extend the ontology and avoid making the base ontology too complex. 159 | 160 | 161 | A list of available modules is available on the Wiki. 162 | 163 | 164 | 165 | 166 | 167 |

 

168 | 169 |

Time, TimeLine and Event

170 | 171 | 172 |

173 | The parts of the Music Ontology related to the production process of a particular piece of music (composition, performance, arrangement,...) as well as the parts dealing with time-related information are based on three external ontologies. The Music Ontology provides RDFS wrappers for the main classes, properties and individuals of these three ontologies. 174 | 175 |

176 | 177 |

178 | 179 | The first ontology is: OWL-Time. Three terms of this ontology are used by the Music Ontology: TemporalThing, Instant and Interval. 180 | 181 |

182 | 183 |

184 | However the kind of temporal information we may want to express goes a bit beyond OWL-Time, so we use an extension of it, developped in the Centre for Digital Music, Queen Mary, University of London: the TimeLine ontology. Indeed, we may want to express instants and intervals on multiple "timelines" (a timeline being a coherent backbone for temporal things): the one backing a particular audio file, the one behind an audio/video stream, or the physical one, backing a musical performance. Two classes of timelines are defined: PhysicalTimeLine (an instance of it being universaltimeline, which is the one on which we may address "the 13th of october, 2006"), and RelativeTimeLine (instances of this class may back audio signals, and we may address things such as "between 2 and 3 seconds" on them). 185 |

186 | 187 |

188 | There is only one way of addressing temporal things per class of timeline. On a physical time line, a point is identified by a xsd:dateTime -- through the beginsAtDateTime property, and a duration by a xsd:duration -- through the durationXSD property. On a relative time line, a point P is identified by the duration of the interval [0,P], and this duration is identified by a xsd:duration -- through the beginsAtDuration property. A duration is identified by durationXSD. 189 |

190 | 191 |

192 | In order to express knowledge about the production process of a piece of music, we use the Event ontology, also developped at the Centre for Digital Music. Events are seen as a way to arbitrary classify a space/time region. We have the possibiliy to attach to these events: agents (active participants to the event, like a performer, a sound engineer, ...), factors (passive things having a role in the event, like a musical instrument, a musical score, ...) and products (things produced by the event, such as a sound, a musical work, ...). A key feature of this ontology is also to allow "splitting" of events, through the sub_event transitive property. Using events, we may express: this musician was playing this instrument at this given time. 193 |

194 | 195 |

196 | In the current version of the Music Ontology, the main sub-classes of Event are: Performance, Recording, Arrangement, Composition. However, given its abstract definition, we can describe lots of other things using this class: results of feature extraction, beat tracking, segmentation of songs... 197 |

198 | 199 | 200 | 201 |
202 | 203 |



204 | 205 | 206 | 207 | 208 | 209 |

Music Creation Workflow

210 | 211 | 212 | 213 |

214 | 215 | In order to describe music-related events, we consider describing the 216 | 217 | workflow beginning with the creation of a musical work to 218 | 219 | its release on a particular record. This is our main description
220 | 221 | paradigm, and was first used in the music production ontology 222 | 223 | developed at C4DM. 224 | 225 |

226 | 227 |

228 | 229 | In the "easy" case (non-electronic music), We can describe this 230 | 231 | workflow within two boundaries: the simplest one and the most expressive one.
232 | 233 |

234 | 235 |

236 | 237 | The simplest one consider the existence of 4 concepts within this workflow: 238 | 239 | MusicalWork (the musical work itself), Performance (the event 240 | 241 | corresponding to an actual performance
242 | 243 | of the work), Signal (recording the performance as a signal), 244 | 245 | and MusicalManifestation 246 | 247 | (the release of this signal on a particular record). 248 | 249 |

250 | 251 |

252 | 253 | The most expressive one consider the existence of 7 concepts: 254 | 255 | Composition (the event leading to the creation of a musical work), 256 | 257 | MusicalWork, Performance, Sound (the physical sound
258 | 259 | produced by the performance), Recording (the event representing the 260 | 261 | transduction from a physical sound to a signal, through 262 | 263 | the use of a microphone), Signal, and MusicalManifestation. 264 | 265 |

266 | 267 |

268 | 269 | Thus, we could imagine other ontologies plugged on top of MO, in order 270 | 271 | to represent the cognition of a sound (related to Sound), 272 | 273 | the different types of microphones that can be used (related to 274 | 275 | Recording), and so on. 276 | 277 |

278 | 279 |

280 | 281 | In order to switch from the simplest workflow to the most expressive 282 | 283 | one, we define a single shortcut property: 284 | 285 | recorded_as, directly linking a Performance to a Signal. 286 | 287 | This property MUST be present in every case, in order to be 288 | 289 | able to do a simple query for accessing simple information. 290 | 291 |

292 | 293 | 294 | 295 |

296 | 297 | A Music Production Workflow in the Music Ontology 298 | 299 |

300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | -------------------------------------------------------------------------------- /doc/9-rdf-proplist.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Music Ontology Overview

4 | 5 |

6 | 7 | The Music Ontology definitions presented here are written using 8 | 9 | a computer language (RDF/OWL) that makes it easy for software to 10 | 11 | process some basic facts about the terms in the Music Ontology, and 12 | 13 | consequently about the things described in Music Ontology documents. A Music Ontology 14 | 15 | document, unlike a traditional Web page, can be combined with other 16 | 17 | Music Ontology documents to create a unified database of information

18 | 19 | 20 | 21 | 22 |
23 | 24 |

MO Basics

25 | 26 | 58 | 59 |
60 | 61 | 62 | 63 |
64 | 65 |

MO Record Types

66 | 67 | 96 | 97 |
98 | 99 | 100 | 101 |
102 | 103 |

MO Release

104 | 105 | 133 | 134 |
135 | 136 | 137 | 138 | 139 |

140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 |
149 | 150 |

MO Mediums

151 | 152 | 180 | 181 |
182 | 183 | 184 | 185 |
186 | 187 |

MO Performance
Relationships

188 | 189 | 213 | 214 |
215 | 216 | 217 | 218 | 219 | 220 |
221 | 222 |

MO Signal
223 | 224 | Relationships

225 | 226 | 227 | 228 | 257 | 258 |
259 | 260 | 261 | 262 | 263 | 264 |

265 | 266 | 267 | 268 | 269 | 270 |
271 | 272 |

MO Musical Work
Relationships

273 | 274 | 283 | 284 |
285 | 286 | 287 | 288 |
289 | 290 |

MO Musical Expression
291 | 292 | Relationships

293 | 294 | 304 | 305 |
306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 |
316 | 317 |

MO Musical Item
Trading Relationships

318 | 319 | 332 | 333 |
334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 |

342 | 343 | 344 | 345 | 346 |
347 | 348 |

MO Record
349 | 350 | Relationships

351 | 352 | 363 | 364 |
365 | 366 | 367 | 368 |
369 | 370 |

MO Arrangement
371 | 372 | Relationships

373 | 374 | 381 | 382 |
383 | 384 | 385 | 386 |

387 | 388 | 389 | 390 | 391 | 392 |
393 | 394 |

MO Musical Expression/
Manifestation
395 | 396 | Relationships

397 | 398 | 401 | 402 |
403 | 404 | 405 | 406 |
407 | 408 |

MO Musical Manifestation /
Musical Item
Relationships

409 | 410 | 411 | 412 | 415 | 416 |
417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 |

427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 |

445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 |
465 | 466 |

MO Publication
Relationships

467 | 468 | 469 | 470 | 481 | 482 |
483 | 484 | 485 | 486 |
487 | 488 |

MO Other Versions
Relationships

489 | 490 | 511 | 512 |
513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 |
523 | 524 |

MO workflow properties

525 | 526 | 545 | 546 |
547 | 548 | 549 | 550 | 551 | 552 |

553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 |
563 | 564 |

MO Production
Relationships

565 | 566 | 585 | 586 |
587 | 588 | 589 | 590 |
591 | 592 |

MO Musical Association
Relationships

593 | 594 | 609 | 610 |
611 | 612 | 613 | 614 | 615 | 616 |
617 | 618 |

MO Affiliate
Relationships

619 | 620 | 627 | 628 |
629 | 630 | 631 | 632 | 633 | 634 |

635 | 636 | 637 | 638 | 639 | 640 |
641 | 642 |

MO External web document links
Relationships

643 | 644 | 661 | 662 |
663 | 664 | 665 | 666 | 667 | 668 |
669 | 670 |

MO Get Music
Relationships

671 | 672 | 681 | 682 |
683 | 684 | 685 | 686 |
687 | 688 |

MO Music Communities
Relationships

689 | 690 | 707 | 708 |
709 | 710 | 711 | 712 |

713 | 714 | 715 | 716 | 717 | 718 |
719 | 720 |

MO Show/Festival
721 | 722 | Relationships

723 | 724 | 733 | 734 |
735 | 736 | 737 | 738 | 739 | 740 |
741 | 742 | 743 | 744 | 745 | 746 |



747 | 748 | 749 | -------------------------------------------------------------------------------- /ontospec/onto_spec.pl: -------------------------------------------------------------------------------- 1 | :- module(onto_spec,[ 2 | op(200,fx,gen) 3 | , gen/1 4 | , onto_spec/1 5 | , onto_spec_to_file/1 6 | , header/1 7 | , glance_html_desc/1 8 | , classes_html_desc/1 9 | , props_html_desc/1 10 | , inds_html_desc/1 11 | , deprecs_html_desc/1 12 | ]). 13 | 14 | 15 | /** 16 | * This SWI-Prolog module allows to generate a 17 | * HTML specification from the local RDF knowledge 18 | * base. 19 | * 20 | * The output is similar to the specgen script used in 21 | * the SIOC project. 22 | * 23 | * It handles rdfs:Class, rdf:Property, individuals, domain, range, domain-of, range-of, 24 | * and also unionOf for domains and ranges 25 | * 26 | * Copyright Yves Raimond (c) 2007, Centre for Digital Music, Queen Mary, University of London 27 | */ 28 | 29 | :- use_module(library('semweb/rdf_db')). 30 | :- use_module(library('semweb/rdfs')). 31 | :- consult(library('semweb/rdf_http_plugin')). 32 | :- consult(library('semweb/rdf_turtle')). 33 | 34 | :- op(200,fx,gen). 35 | 36 | :- rdf_db:rdf_register_ns(bibo,'http://purl.org/ontology/bibo/'). 37 | :- rdf_db:rdf_register_ns(dc,'http://purl.org/dc/elements/1.1/'). 38 | :- rdf_db:rdf_register_ns(foaf,'http://xmlns.com/foaf/0.1/'). 39 | :- rdf_db:rdf_register_ns(mo,'http://purl.org/ontology/mo/'). 40 | :- rdf_db:rdf_register_ns(frbr,'http://purl.org/vocab/frbr/core#'). 41 | :- rdf_db:rdf_register_ns(dcterms,'http://purl.org/dc/terms/'). 42 | :- rdf_db:rdf_register_ns(event,'http://purl.org/NET/c4dm/event.owl#'). 43 | :- rdf_db:rdf_register_ns(timeline,'http://purl.org/NET/c4dm/timeline.owl#'). 44 | :- rdf_db:rdf_register_ns(time,'http://www.w3.org/2006/time#'). 45 | :- rdf_db:rdf_register_ns(vs,'http://www.w3.org/2003/06/sw-vocab-status/ns#'). 46 | :- rdf_db:rdf_register_ns(geo,'http://www.w3.org/2003/01/geo/wgs84_pos#'). 47 | :- rdf_db:rdf_register_ns(af,'http://purl.org/ontology/af/'). 48 | :- rdf_db:rdf_register_ns(chord,'http://purl.org/ontology/chord/'). 49 | 50 | /** 51 | * Top-level predicate: 52 | * generate a HTML specification of the in-store schema 53 | * 54 | * onto_spec(-Spec) 55 | */ 56 | onto_spec(Spec) :- 57 | header(Header), 58 | tail(Tail), 59 | glance_html_desc(Glance), 60 | classes_html_desc(Classes), 61 | props_html_desc(Properties), 62 | inds_html_desc(Individuals), 63 | deprecs_html_desc(Deprecated), 64 | format(atom(Spec),'~w~w\n

Classes and Properties (full detail)

\n~w~w~w~w~w', 65 | [Header,Glance,Classes,Properties,Individuals,Deprecated,Tail]). 66 | 67 | classes_html_desc(Classes) :- 68 | ((setof(NC-Desc,NS^(class_html_desc(NS:NC,Desc)),DescsMess),!);DescsMess=[]), 69 | keysort(DescsMess,Descs), 70 | reverse(Descs,DescsR), 71 | list_to_atom(DescsR,Classes). 72 | 73 | props_html_desc(Properties) :- 74 | ((setof(NP-Descp,NS^prop_html_desc(NS:NP,Descp),DescspMess),!);DescspMess=[]), 75 | keysort(DescspMess,Descsp), 76 | reverse(Descsp,DescspR), 77 | list_to_atom(DescspR,Properties). 78 | 79 | inds_html_desc(Individuals) :- 80 | ((setof(NI-Desci,NS^(ind_html_desc(NS:NI,Desci)),DescsiMess),!);DescsiMess=[]), 81 | keysort(DescsiMess,Descsi), 82 | reverse(Descsi,DescsiR), 83 | list_to_atom(DescsiR,Individuals). 84 | 85 | deprecs_html_desc(Deprecated) :- 86 | ((setof(Dep-Descd,NS^(deprecated_html_desc(NS:Dep,Descd)),DescsdMess),!);DescsdMess=[]), 87 | keysort(DescsdMess,Descsd), 88 | reverse(Descsd,DescsdR), 89 | list_to_atom(DescsdR,Deprecated). 90 | 91 | 92 | header(H) :- author_name(Name), author_foaf(FOAF), page_title(Title), 93 | sformat(H, 94 | '\n\n\n\n \n\n\n~w\n\n', 95 | [FOAF,Name,Title]). 96 | 97 | tail(''). 98 | 99 | /** 100 | * Outputs the specification to a file 101 | */ 102 | gen File :- onto_spec_to_file(File). 103 | onto_spec_to_file(File) :- 104 | open(File,write,Stream,[]), 105 | onto_spec(Spec), 106 | write(Stream,Spec), 107 | close(Stream). 108 | 109 | /** 110 | * Wrappers for some simple rdf queries - plug your ontology language here:-) 111 | */ 112 | class_comment(NS:C,Comment) :- 113 | class(Class), 114 | rdf(Class,rdfs:comment,literal(Comment1)),newline_to_br(Comment1,Comment), 115 | rdf_global_id(NS:C,Class). 116 | class_status(NS:C,Status) :- 117 | class(Class), 118 | rdf(Class,vs:term_status,literal(Status)), 119 | rdf_global_id(NS:C,Class). 120 | property_comment(NS:P,Comment) :- 121 | property(Property), 122 | rdf(Property,rdfs:comment,literal(Comment1)),newline_to_br(Comment1,Comment), 123 | rdf_global_id(NS:P,Property). 124 | property_status(NS:P,Status) :- 125 | property(Property), 126 | rdf(Property,vs:term_status,literal(Status)), 127 | rdf_global_id(NS:P,Property). 128 | property_domain(NS:P,Domain) :- 129 | rdf(Property,rdfs:domain,Domain), 130 | \+bnode(Domain), 131 | rdf_global_id(NS:P,Property). 132 | property_domain(NS:P,Domain) :- 133 | rdf(Property,rdfs:domain,UnionOf), 134 | rdf(UnionOf,rdf:type,owl:'Class'), 135 | rdf(UnionOf,owl:unionOf,DomainList), 136 | rdf_list_member(Domain,DomainList), 137 | rdf_global_id(NS:P,Property). 138 | property_range(NS:P,Range) :- 139 | rdf(Property,rdfs:range,Range), 140 | \+bnode(Range), 141 | rdf_global_id(NS:P,Property). 142 | property_range(NS:P,Range) :- 143 | rdf(Property,rdfs:range,UnionOf), 144 | rdf(UnionOf,rdf:type,owl:'Class'), 145 | rdf(UnionOf,owl:unionOf,RangeList), 146 | rdf_list_member(Range,RangeList), 147 | rdf_global_id(NS:P,Property). 148 | property_inverse(NS:P,Inverse) :- 149 | rdf(Property,owl:inverseOf,Inverse), 150 | rdf_global_id(NS:P,Property). 151 | property_subprop_of(NS:P,Super) :- 152 | rdf(Property,rdfs:subPropertyOf,Super), 153 | rdf_global_id(NS:P,Property). 154 | 155 | /* dc:title */ 156 | individual_title(NS:C,Title) :- 157 | individual(I), 158 | rdf(I,dc:title,literal(Title)), 159 | rdf_global_id(NS:C,I) . 160 | /* rdfs:label */ 161 | individual_title(NS:C,Title) :- 162 | \+((individual(I), 163 | rdf(I,dc:title,literal(Title)), 164 | rdf_global_id(NS:C,I))), 165 | 166 | individual(I), 167 | rdf(I,rdfs:label,literal(Title)), 168 | rdf_global_id(NS:C,I) . 169 | /* default : blank */ 170 | individual_title(NS:C,Title) :- 171 | \+((individual(I), 172 | rdf(I,dc:title,literal(Title)), 173 | rdf_global_id(NS:C,I))), 174 | \+((individual(I), 175 | rdf(I,rdfs:label,literal(Title)), 176 | rdf_global_id(NS:C,I))), 177 | Title=''. 178 | 179 | /* dc:description */ 180 | individual_description(NS:C,Desc) :- 181 | individual(I), 182 | rdf(I,dc:description,literal(Desc)), 183 | rdf_global_id(NS:C,I) . 184 | /* rdfs:comment */ 185 | individual_description(NS:C,Desc) :- 186 | \+((individual(I), 187 | rdf(I,dc:description,literal(Desc)), 188 | rdf_global_id(NS:C,I))), 189 | 190 | individual(I), 191 | rdf(I,rdfs:comment,literal(Desc)), 192 | rdf_global_id(NS:C,I) . 193 | /* default : blank */ 194 | individual_description(NS:C,Desc) :- 195 | \+((individual(I), 196 | rdf(I,dc:description,literal(Desc)), 197 | rdf_global_id(NS:C,I))), 198 | \+((individual(I), 199 | rdf(I,rdfs:comment,literal(Desc)), 200 | rdf_global_id(NS:C,I))), 201 | Desc = ''. 202 | 203 | individual_class(NS:I,NS2:C) :- 204 | individual(In), 205 | class(Cl), 206 | rdf(In,rdf:type,Cl), 207 | rdf_global_id(NS:I,In),rdf_global_id(NS2:C,Cl). 208 | subclassof(C,C2) :- 209 | rdf(C,rdfs:subClassOf,C2). 210 | class(Class) :- 211 | rdf(Class,rdf:type,owl:'Class'). 212 | term_level(NS:T,Level) :- 213 | (rdf(Term,mo:level,literal(Level1)),rdf_global_id(NS:T,Term),format(atom(Level),'level ~w',[Level1]),!);Level=''. 214 | %class(Class) :- 215 | % rdf(Class,rdf:type,owl:'Class'). 216 | individual(I) :- 217 | rdf(I,rdf:type,C),class(C). 218 | property(Property) :- 219 | rdf(Property,rdf:type,rdf:'Property'). 220 | property(Property) :- 221 | rdf(Property,rdf:type,owl:'ObjectProperty'). 222 | property(Property) :- 223 | rdf(Property,rdf:type,owl:'DatatypeProperty'). 224 | rdf_list_member(Member,List) :- 225 | rdf(List,rdf:first,Member). 226 | rdf_list_member(Member,List) :- 227 | rdf(List,rdf:rest,List2), 228 | rdf_list_member(Member,List2). 229 | deprecated(Old,New) :- 230 | rdf(Old,vs:term_status,literal('deprecated')), 231 | (rdf(Old,owl:sameAs,New) ; rdf(Old,owl:equivalentProperty,New)). 232 | 233 | 234 | /** 235 | * Spec At A Glance - FOAF/SIOC style 236 | */ 237 | glance_html_desc(Desc) :- 238 | ((setof(C-CD, 239 | Class^S1^NS^( 240 | class(Class),rdf_global_id(NS:C,Class),\+deprecated(Class,D), NS = 'mo', 241 | sformat(S1, 242 | '~w | ', 243 | [C,C] 244 | ), 245 | string_to_atom(S1,CD) 246 | ), 247 | ClassesL),!);ClassesL=[]), 248 | keysort(ClassesL,ClassesLSorted),reverse(ClassesLSorted,ClassesLSR), 249 | list_to_atom(ClassesLSR,Classes), 250 | ((setof(P-PD, 251 | Property^S2^NS^( 252 | property(Property),rdf_global_id(NS:P,Property),\+deprecated(Property,D), NS = 'mo', 253 | sformat(S2, 254 | '~w | \n', 255 | [P,P] 256 | ), 257 | string_to_atom(S2,PD) 258 | ), 259 | PropertiesL),!);PropertiesL=[]), 260 | keysort(PropertiesL,PropertiesLS),reverse(PropertiesLS,PropertiesLSR), 261 | list_to_atom(PropertiesLSR,Properties), 262 | ((setof(I-ID, 263 | Individual^S3^NS^( 264 | individual(Individual),rdf_global_id(NS:I,Individual),\+deprecated(Individual,D), 265 | sformat(S3, 266 | '~w | \n', 267 | [I,I] 268 | ), 269 | string_to_atom(S3,ID) 270 | ), 271 | IndividualsL),!);IndividualsL=[]), 272 | keysort(IndividualsL,IndividualsLS),reverse(IndividualsLS,IndividualsLSR), 273 | list_to_atom(IndividualsLSR,Individuals), 274 | sformat(String, 275 | '
\n

Classes: | ~w

\n

Properties: | ~w

\n

Individuals: | ~w

', 276 | [Classes,Properties,Individuals] 277 | ), 278 | string_to_atom(String,Desc). 279 | 280 | 281 | /** 282 | * HTML description of classes - FOAF/SIOC style 283 | */ 284 | class_html_desc(NS:C,HtmlDesc) :- %domain-of AND range-of available 285 | class_comment(NS:C,Comment), 286 | class_status(NS:C,Status),term_level(NS:C,Level), 287 | sformat(StringHtml, 288 | '

Class: ~w - ~w - ~w

\n~w\n - ~w \n
\n

[back to top]

\n
', 289 | [C,NS:C,Status,Level,C,Comment] 290 | ), 291 | string_to_atom(StringHtml,HtmlDesc1), 292 | range_of_desc(NS:C,RangeOf), 293 | domain_of_desc(NS:C,DomainOf), 294 | subclass_of_desc(NS:C,SubClassOf), 295 | sformat(StringAtt, 296 | '\n~w\n~w\n~w
\n', 297 | [RangeOf,DomainOf,SubClassOf] 298 | ), 299 | string_to_atom(StringAtt,Att), 300 | atom_concat(Att,'\n
',Att2), 301 | atom_concat(HtmlDesc1,Att2,HtmlDesc). 302 | 303 | range_of_desc(NS:C,'') :- 304 | range_of_html_desc(NS:C,''),!. 305 | range_of_desc(NS:C,Desc) :- 306 | range_of_html_desc(NS:C,RangeOf), 307 | sformat(ROF, 308 | 'in-range-of:~w\n', 309 | [RangeOf] 310 | ), 311 | string_to_atom(ROF,Desc). 312 | 313 | domain_of_desc(NS:C,'') :- 314 | domain_of_html_desc(NS:C,''),!. 315 | domain_of_desc(NS:C,Desc) :- 316 | domain_of_html_desc(NS:C,DomainOf), 317 | sformat(DOF, 318 | 'in-domain-of:~w\n', 319 | [DomainOf] 320 | ), 321 | string_to_atom(DOF,Desc). 322 | 323 | subclass_of_desc(NS:C,'') :- 324 | subclass_of_html_desc(NS:C,''),!. 325 | subclass_of_desc(NS:C,Desc) :- 326 | subclass_of_html_desc(NS:C,SubClassOf), 327 | sformat(SOF, 328 | 'sub-class-of:~w\n', 329 | [SubClassOf] 330 | ), 331 | string_to_atom(SOF,Desc). 332 | 333 | /** 334 | * HTML description of properties - FOAF/SIOC style 335 | */ 336 | prop_html_desc(NS:P,HtmlDesc) :- 337 | property_comment(NS:P,Comment), 338 | property_status(NS:P,Status),term_level(NS:P,Level), 339 | sformat(StringHtmlComment, 340 | '
\n

Property: ~w - ~w - ~w

\n~w - ~w \n
', 341 | [P,NS:P,Status,Level,P,Comment] 342 | ), 343 | string_to_atom(StringHtmlComment,HtmlComment), 344 | domain_html_desc(NS:P,DomainHtmlDesc), 345 | range_html_desc(NS:P,RangeHtmlDesc), 346 | inverse_html_desc(NS:P,InverseHtmlDesc), 347 | subprop_html_desc(NS:P,SubPropHtmlDesc), 348 | sformat(StringHtmlDomainRange, 349 | '\n\n~w\n\n\n~w\n~w\n~w\n
Domain:
Range:
\n
', 350 | [DomainHtmlDesc,RangeHtmlDesc,InverseHtmlDesc,SubPropHtmlDesc] 351 | ), 352 | string_to_atom(StringHtmlDomainRange,HtmlDomainRange), 353 | atom_concat(HtmlComment,HtmlDomainRange,HtmlDesc). 354 | 355 | /** 356 | * HTML description of individuals 357 | */ 358 | ind_html_desc(NS:I,HtmlDesc) :- 359 | individual_title(NS:I,Title), 360 | individual_description(NS:I,Description),term_level(NS:I,Level), 361 | individual_class(NS:I,NS2:C), 362 | sformat(S, 363 | '
\n

Individual: ~w - ~w

\n~w - ~w \n
\n\n
Class:~w
', 364 | [I,I,Level,Title,Description,C,NS2:C] 365 | ), 366 | string_to_atom(S,HtmlDesc). 367 | 368 | /** 369 | * HTML description of domains 370 | */ 371 | domain_html_desc(NS:P,DomainHtmlDesc) :- 372 | property(Prop),rdf_global_id(NS:P,Prop), 373 | findall(Html,( 374 | property_domain(NS:P,Domain), 375 | ((class(Domain),rdf_global_id(_:D,Domain), 376 | sformat(S, 377 | '~w\n', 378 | [D,D]), 379 | string_to_atom(S,Html) 380 | ); 381 | (\+class(Domain),rdf_global_id(NS2:D2,Domain),sformat(S, 382 | '~w\n', 383 | [Domain,NS2:D2]) 384 | )), 385 | string_to_atom(S,Html) 386 | ),Htmls), 387 | list_to_atom(Htmls,DomainHtmlDesc). 388 | 389 | /** 390 | * HTML description of range 391 | */ 392 | range_html_desc(NS:P,RangeHtmlDesc) :- 393 | property(Prop),rdf_global_id(NS:P,Prop), 394 | findall(Html,( 395 | property_range(NS:P,Range), 396 | ((class(Range),rdf_global_id(_:D,Range), 397 | sformat(S, 398 | '~w\n', 399 | [D,D]), 400 | string_to_atom(S,Html) 401 | ); 402 | (\+class(Range),rdf_global_id(NS2:D2,Range),sformat(S, 403 | '~w\n', 404 | [Range,NS2:D2]) 405 | )), 406 | string_to_atom(S,Html) 407 | ),Htmls), 408 | list_to_atom(Htmls,RangeHtmlDesc). 409 | 410 | /** 411 | * HTML description of inverse-of 412 | */ 413 | inverse_html_desc(NS:P,InverseHtmlDesc) :- 414 | property(Prop),rdf_global_id(NS:P,Prop), 415 | findall(Html,( 416 | property_inverse(NS:P,Inverse), 417 | ((class(Inverse),rdf_global_id(_:D,Inverse), 418 | sformat(S, 419 | '~w\n', 420 | [D,D]), 421 | string_to_atom(S,Html) 422 | ); 423 | (\+class(Inverse),rdf_global_id(NS2:D2,Inverse),sformat(S, 424 | '~w\n', 425 | [Inverse,NS2:D2]) 426 | )), 427 | string_to_atom(S,Html) 428 | ),Htmls), 429 | list_to_atom(Htmls,InverseHtmlDesc2), 430 | (InverseHtmlDesc2=''->InverseHtmlDesc='';(sformat(Temp,'Inverse-of: ~w',[InverseHtmlDesc2]),string_to_atom(Temp,InverseHtmlDesc))). 431 | 432 | /** 433 | * HTML description of sub-property-of 434 | */ 435 | subprop_html_desc(NS:P,SubPropHtmlDesc) :- 436 | property(Prop),rdf_global_id(NS:P,Prop), 437 | findall(Html,( 438 | property_subprop_of(NS:P,Super), 439 | ((property(Super),rdf_global_id(_:D,Super), 440 | sformat(S, 441 | '~w\n', 442 | [D,D]), 443 | string_to_atom(S,Html) 444 | ); 445 | (\+property(Super),rdf_global_id(NS2:D2,Super),sformat(S, 446 | '~w\n', 447 | [Super,NS2:D2]) 448 | )), 449 | string_to_atom(S,Html) 450 | ),Htmls), 451 | list_to_atom(Htmls,SubPropHtmlDesc2), 452 | (SubPropHtmlDesc2=''->SubPropHtmlDesc='';(sformat(Temp,'Sub-property-of: ~w',[SubPropHtmlDesc2]),string_to_atom(Temp,SubPropHtmlDesc))). 453 | 454 | 455 | /** 456 | * HTML description of "domain of" 457 | */ 458 | domain_of_html_desc(NS:C,DomainOf) :- 459 | class(Class),rdf_global_id(NS:C,Class), 460 | findall(Html,( 461 | property_domain(NS2:P,Class),rdf_global_id(NS2:P,_Property), 462 | sformat(S, 463 | '~w\n', 464 | [P,P]), 465 | string_to_atom(S,Html) 466 | ),Htmls), 467 | list_to_atom(Htmls,DomainOf). 468 | 469 | /** 470 | * HTML description of "range of" 471 | */ 472 | range_of_html_desc(NS:C,RangeOf) :- 473 | class(Class),rdf_global_id(NS:C,Class), 474 | findall(Html,( 475 | property_range(NS2:P,Class),rdf_global_id(NS2:P,_Property), 476 | sformat(S, 477 | '~w\n', 478 | [P,P]), 479 | string_to_atom(S,Html) 480 | ),Htmls), 481 | list_to_atom(Htmls,RangeOf). 482 | 483 | /** 484 | * HTML description of "subclass of" 485 | */ 486 | subclass_of_html_desc(NS:C,SubClassDesc) :- 487 | class(Class),rdf_global_id(NS:C,Class), 488 | findall(Html,( 489 | subclassof(Class,Class2), 490 | ((class(Class2),rdf_global_id(_:D,Class2), 491 | sformat(S, 492 | '~w\n', 493 | [D,D]), 494 | string_to_atom(S,Html) 495 | ); 496 | (\+class(Class2),rdf_global_id(NS2:D2,Class2),sformat(S, 497 | '~w\n', 498 | [Class2,NS2:D2]) 499 | )), 500 | string_to_atom(S,Html) 501 | ),Htmls), 502 | list_to_atom(Htmls,SubClassDesc). 503 | 504 | 505 | /** 506 | * HTML description of deprecated concepts/properties 507 | */ 508 | deprecated_html_desc(NS:T,DepDesc) :- 509 | deprecated(Term,NewTerm), 510 | rdf_global_id(NS:T,Term), 511 | rdf_global_id(NS:NT,NewTerm), 512 | format(atom(DepDesc), 513 | '
\n

Deprecated: ~w

\nEquivalent to - ~w \n
' 514 | ,[T,NS:T,NT,NS:NT]). 515 | 516 | list_to_atom([],''). 517 | list_to_atom([_-A],A):-!. 518 | list_to_atom([A],A):-!. 519 | list_to_atom([_-H|T],At) :- 520 | !, 521 | list_to_atom(T,Temp), 522 | atom_concat(Temp,H,At). 523 | list_to_atom([H|T],At) :- 524 | list_to_atom(T,Temp), 525 | atom_concat(Temp,H,At). 526 | 527 | 528 | bnode(B) :- atom_concat('__',_,B). 529 | 530 | newline_to_br(Literal,LiteralBR) :- 531 | atom_chars(Literal,L1), 532 | newline_to_br_l(L1,L2), 533 | atom_chars(LiteralBR,L2). 534 | newline_to_br_l([],[]). 535 | newline_to_br_l(['\n'|T1],['<','b','r','/','>','\n'|T2]) :- 536 | !,newline_to_br_l(T1,T2). 537 | newline_to_br_l([H|T1],[H|T2]) :- 538 | newline_to_br_l(T1,T2). 539 | 540 | :- 541 | nl, 542 | writeln(' Usage:'), 543 | writeln(' - Load a RDF file using rdf_load/1'), 544 | writeln(' - Specify author_name/1, author_foaf/1 and page_title/1'), 545 | writeln(' - Generate the spec using ''gen ''spec.html'''''), 546 | nl,nl. 547 | 548 | -------------------------------------------------------------------------------- /doc/musicontology-level2.rdfs: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | ]> 10 | 11 | 19 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | An arrangement event. 35 | Takes as agent the arranger, and produces a score (informational object, not the actually published score). 36 | 37 | 38 | 39 | 40 | 41 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 71 | A composition event. 72 | Takes as agent the composer himself. 73 | It produces a MusicalWork, or a MusicalExpression (when the initial "product" is a score, for example), or both... 74 | 75 | 76 | 77 | 78 | 79 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 98 | 99 | 100 | 101 | 102 | 103 | 107 | A festival - musical/artistic event lasting several days, like Glastonbury, Rock Am Ring... 108 | We migth decompose this event (which is in fact just a classification of the space/time region related to 109 | a particular festival) using hasSubEvent in several performances at different space/time. 110 | 111 | 112 | 113 | 114 | 115 | 119 | An expressive style of music. 120 | 121 | Any taxonomy can be plug-in here. You can either define a genre by yourself, like this: 122 | 123 | :mygenre a mo:Genre; dc:title "electro rock". 124 | 125 | Or you can refer to a DBPedia genre (such as http://dbpedia.org/resource/Baroque_music), allowing semantic web 126 | clients to access easily really detailed structured information about the genre you are refering to. 127 | 128 | 129 | 130 | 131 | 135 | Any of various devices or contrivances that can be used to produce musical tones or sound. 136 | 137 | Any taxonomy can be used to subsume this concept. The default one is one extracted by Ivan Herman 138 | from the Musicbrainz instrument taxonomy, conforming to SKOS. This concept holds a seeAlso link 139 | towards this taxonomy. 140 | 141 | 142 | 143 | 144 | 145 | 149 | Instrumentation deals with the techniques of writing music for a specific instrument, 150 | including the limitations of the instrument, playing techniques and idiomatic handling of the instrument. 151 | 152 | 153 | 154 | 155 | 156 | 162 | 163 | 164 | 165 | 166 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 185 | 186 | 187 | 188 | 189 | 193 | A movement is a self-contained part of a musical work. While individual or selected movements from a composition are sometimes performed separately, a performance of the complete work requires all the movements to be performed in succession. 194 | 195 | Often a composer attempts to interrelate the movements thematically, or sometimes in more subtle ways, in order that the individual 196 | movements exert a cumulative effect. In some forms, composers sometimes link the movements, or ask for them to be played without a 197 | pause between them. 198 | 199 | 200 | 201 | 202 | 203 | 207 | Distinct intellectual or artistic musical creation. 208 | 209 | From the FRBR final report: A work is an abstract entity; there is no single material object one can point to as the work. We recognize the work through individual realizations or expressions of the work, but the work itself exists only in the commonality of 210 | content between and among the various expressions of the work. When we speak of Homer's Iliad as a work, our point of reference is not a particular recitation or text of the work, but the intellectual creation that lies behind all the various expressions of the work. 211 | 212 | For example: 213 | 214 | work #1 J. S. Bach's The art of the fugue 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 226 | Orchestration includes, in addition to instrumentation, the handling of groups of instruments and their balance and interaction. 227 | 228 | 229 | 230 | 231 | 232 | 236 | A performance event. 237 | It might include as agents performers, engineers, conductors, or even listeners. 238 | It might include as factors a score, a MusicalWork, musical instruments. 239 | It might produce a sound:-) 240 | 241 | 242 | 243 | 244 | 245 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 263 | 264 | 265 | 266 | 267 | 272 | 273 | 274 | 275 | 276 | 281 | 282 | 283 | 284 | 285 | 289 | A recording event. 290 | Takes a sound as a factor to produce a signal (analog or digital). 291 | The location of such events (if any) is the actual location of the corresponding 292 | microphone or the "recording device". 293 | 294 | 295 | 296 | 297 | 298 | 302 | A set of performances/recordings/mastering events. This event can be decomposed in its constituent events using event:sub_event 303 | 304 | 305 | 306 | 307 | 311 | Here, we are dealing with the informational object (the MusicalExpression), not the actually "published" score. 312 | This may be, for example, the product of an arrangement process. 313 | 314 | 315 | 316 | 317 | 318 | 322 | A show - a musical event lasting several days, in a particular venue. Examples can be 323 | "The Magic Flute" at the Opera Bastille, August 2005, or a musical in the west end... 324 | 325 | 326 | 327 | 328 | 329 | 333 | 334 | 335 | A subclass of MusicalExpression, representing a sound. Realisation of a MusicalWork during a musical Performance. 336 | 337 | 338 | 339 | 340 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 358 | 359 | 360 | 361 | 362 | 366 | Associates a work to an arrangement event where it was arranged 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 379 | Associates an arrangement event to a work 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 392 | Indicates the BPM of a MusicalWork or a particular Performance 393 | Beats per minute: the pace of music measured by the number of beats occurring in 60 seconds. 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 423 | Associates a MusicalWork to the Composition event pertaining 424 | to its creation. For example, I might use this property to associate 425 | the Magic Flute to its composition event, occuring during 1782 and having as 426 | a mo:composer Mozart. 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 439 | Associates a composition event to the actual composer. For example, 440 | this property could link the event corresponding to the composition of the 441 | Magic Flute in 1782 to Mozart himself (who obviously has a FOAF profile:-) ). 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 476 | Relates a performance or a recording to the engineer involved 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 507 | 508 | 509 | Relates agents to the performances/recordings they were engineering in 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 550 | Associates an event (like a performance or a recording) to a particular musical genre. 551 | Further version of this property may also include works and scores in the domain. 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 618 | 619 | 620 | 621 | 622 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 636 | Indicated the key used by the musicians during a performance, or the key of a MusicalWork. 637 | Any of 24 major or minor diatonic scales that provide the tonal framework for a piece of music. 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 691 | 692 | 693 | 694 | 695 | 696 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 724 | 725 | 726 | 727 | 728 | 729 | 734 | 735 | 736 | 737 | 738 | 739 | 743 | Used to define a creative work, especially a musical composition numbered to designate the order of a composer's works. 744 | 745 | 746 | 747 | 748 | 749 | 750 | 754 | Associates a Performance to a musical work or an arrangement that is being used as a factor in it. 755 | For example, I might use this property to attach the Magic Flute musical work to 756 | a particular Performance. 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 796 | Associates a Musical Work or an Score to Performances in which they were 797 | a factor. For example, I might use this property in order to 798 | associate the Magic Flute to a particular performance at the Opera 799 | Bastille last year. 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 836 | Associates an arrangement event to a score product (score here does not refer to a published score, but more 837 | an abstract arrangement of a particular work). 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 849 | Associates a Recording to the outputted signal. 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 861 | Associates a recording session with a group of master signals produced by it. 862 | 863 | 864 | 865 | 866 | 867 | 868 | 872 | Associates a Performance to a physical Sound that is being produced by it. 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 884 | Associates a composition event to the produced MusicalWork. For example, 885 | this property could link the event corresponding to the composition of the 886 | Magic Flute in 1782 to the Magic Flute musical work itself. This musical work 887 | can then be used in particular performances. 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 900 | This is a shortcut property, allowing to bypass all the Sound/Recording steps. This property 901 | allows to directly link a Performance to the recorded Signal. This is recommended for "normal" 902 | users. However, advanced users wanting to express things such as the location of the microphone will 903 | have to create this shortcut as well as the whole workflow, in order to let the "normal" users access 904 | simply the, well, simple information:-) . 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 916 | Associates a physical Sound to a Recording event where it is being used 917 | in order to produce a signal. For example, I might use this property to 918 | associate the sound produced by a particular performance of the magic flute 919 | to a given recording, done using my cell-phone. 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 932 | Associates a Recording event to a physical Sound being recorded. 933 | For example, I might use this property to 934 | associate a given recording, done using my cell phone, to the 935 | sound produced by a particular performance of the magic flute. 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 948 | This is the inverse of the shortcut property recordedAs, allowing to relate directly a performance 949 | to a signal. 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 961 | Associates an analog signal with a sampled version of it 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 973 | 974 | Associates a digital signal with the analog version of it 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 997 | Rate of speed or pace of music. Tempo markings are traditionally given in Italian; 998 | common markings include: grave (solemn; very, very slow); largo (broad; very slow); 999 | adagio (quite slow); andante (a walking pace); moderato (moderate); allegro (fast; cheerful); 1000 | vivace (lively); presto (very fast); accelerando (getting faster); ritardando (getting slower); 1001 | and a tempo (in time; returning to the original pace). 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1027 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | --------------------------------------------------------------------------------