view common/TypeRegistrar.cpp @ 11:98047b91b09d classical-rdf

* Add "proper" composer name matching from user input. Needs to be faster though
author Chris Cannam
date Thu, 18 Feb 2010 18:16:43 +0000
parents df999875c53b
children c8ef23d3888c
line wrap: on
line source

#include "TypeRegistrar.h"

#include "Objects.h"

#include <dataquay/BasicStore.h>
#include <dataquay/objectmapper/ObjectMapper.h>
#include <dataquay/objectmapper/ObjectBuilder.h>
#include <dataquay/objectmapper/ContainerBuilder.h>

using namespace Dataquay;

namespace ClassicalData {

TypeRegistrar::TypeRegistrar()
{
    qRegisterMetaType<HistoricalEvent *>
	("ClassicalData::HistoricalEvent*");
    qRegisterMetaType<Birth *>
	("ClassicalData::Birth*");
    qRegisterMetaType<Death *>
	("ClassicalData::Death*");
    qRegisterMetaType<Composition *>
	("ClassicalData::Composition*");
    qRegisterMetaType<Work *>
	("ClassicalData::Work*");
    qRegisterMetaType<Movement *>
	("ClassicalData::Movement*");
    qRegisterMetaType<Composer *>
	("ClassicalData::Composer*");
    qRegisterMetaType<Document *>
	("ClassicalData::Document*");
    qRegisterMetaType<Form *>
	("ClassicalData::Form*");
    qRegisterMetaType<QSet<Work *> >
	("QSet<ClassicalData::Work*>");
    qRegisterMetaType<QSet<Movement *> >
	("QSet<ClassicalData::Movement*>");
    qRegisterMetaType<QSet<Document *> >
	("QSet<ClassicalData::Document*>");
    qRegisterMetaType<QSet<Form *> >
	("QSet<ClassicalData::Form*>");
    qRegisterMetaType<QSet<QString> >
	("QSet<QString>");
    qRegisterMetaType<QSet<QUrl> >
	("QSet<QUrl>");

    ObjectBuilder::getInstance()->registerClass
	<HistoricalEvent>("ClassicalData::HistoricalEvent*");
    ObjectBuilder::getInstance()->registerClass
	<Birth>("ClassicalData::Birth*");
    ObjectBuilder::getInstance()->registerClass
	<Death>("ClassicalData::Death*");
    ObjectBuilder::getInstance()->registerClass
	<Composition>("ClassicalData::Composition*");
    ObjectBuilder::getInstance()->registerClass
	<Work, QObject>("ClassicalData::Work*");
    ObjectBuilder::getInstance()->registerClass
	<Movement, QObject>("ClassicalData::Movement*");
    ObjectBuilder::getInstance()->registerClass
	<Composer, QObject>("ClassicalData::Composer*");
    ObjectBuilder::getInstance()->registerClass
	<Document, QObject>("ClassicalData::Document*");
    ObjectBuilder::getInstance()->registerClass
	<Form, QObject>("ClassicalData::Form*");

    ContainerBuilder::getInstance()->registerContainer
	<QString, QSet<QString> >
	("QString", "QSet<QString>", ContainerBuilder::SetKind);

    ContainerBuilder::getInstance()->registerContainer
	<QUrl, QSet<QUrl> >
	("QUrl", "QSet<QUrl>", ContainerBuilder::SetKind);

    ContainerBuilder::getInstance()->registerContainer
	<Work*, QSet<Work*> >
	("ClassicalData::Work*", "QSet<ClassicalData::Work*>",
	 ContainerBuilder::SetKind);

    ContainerBuilder::getInstance()->registerContainer
	<Movement*, QSet<Movement*> >
	("ClassicalData::Movement*", "QSet<ClassicalData::Movement*>",
	 ContainerBuilder::SetKind);

    ContainerBuilder::getInstance()->registerContainer
	<Document*, QSet<Document*> >
	("ClassicalData::Document*", "QSet<ClassicalData::Document*>",
	 ContainerBuilder::SetKind);

    ContainerBuilder::getInstance()->registerContainer
	<Form*, QSet<Form*> >
	("ClassicalData::Form*", "QSet<ClassicalData::Form*>",
	 ContainerBuilder::SetKind);
}

void
TypeRegistrar::addMappings(BasicStore *store, ObjectMapper *mapper)
{
    store->addPrefix("foaf", "http://xmlns.com/foaf/0.1/");
    store->addPrefix("mo", "http://purl.org/ontology/mo/");
    store->addPrefix("dc", "http://purl.org/dc/elements/1.1/");
    store->addPrefix("bio", "http://purl.org/vocab/bio/0.1/");
    store->addPrefix("owl", "http://www.w3.org/2002/07/owl#");
    store->addPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
    store->addPrefix("db", "http://dbtune.org/musicbrainz/resource/");
    store->addPrefix("dbv", "http://dbtune.org/musicbrainz/resource/vocab/");
    store->addPrefix("cmn", "http://purl.org/ontology/classicalmusicnav#");
    store->addPrefix("sim", "http://purl.org/ontology/similarity/");

    store->add(Triple("classical:Composer", "a", store->expand("owl:Class")));
    store->add(Triple("classical:Composer", "rdfs:subClassOf", store->expand("mo:MusicArtist")));

    store->add(Triple("property:birth", "a", store->expand("owl:ObjectProperty")));
    store->add(Triple("property:birth", "rdfs:subPropertyOf", store->expand("bio:event")));

    store->add(Triple("property:death", "a", store->expand("owl:ObjectProperty")));
    store->add(Triple("property:death", "rdfs:subPropertyOf", store->expand("bio:event")));

    mapper->setObjectTypePrefix("http://dbtune.org/classical/resource/");
    mapper->setPropertyPrefix("http://dbtune.org/classical/resource/vocab/");
    mapper->setRelationshipPrefix("http://dbtune.org/classical/resource/vocab/relationship/");
    
    store->addPrefix("type", mapper->getObjectTypePrefix());
    store->addPrefix("classical", mapper->getObjectTypePrefix() + "type/");
    store->addPrefix("property", mapper->getPropertyPrefix());
    store->addPrefix("rel", mapper->getRelationshipPrefix());

    mapper->addTypeMapping("ClassicalData::Composer", "classical:Composer");
    mapper->addPropertyMapping("ClassicalData::Composer", "pages", "foaf:page");
    mapper->addPropertyMapping("ClassicalData::Composer", "name", "foaf:name");
    mapper->addPropertyMapping("ClassicalData::Composer", "aliases", "dbv:alias");
    mapper->addPropertyMapping("ClassicalData::Composer", "birth", "property:birth");
    mapper->addPropertyMapping("ClassicalData::Composer", "death", "property:death");
    mapper->addPropertyMapping("ClassicalData::Composer", "geonameURIs", "foaf:based_near");

    mapper->addTypeMapping("ClassicalData::Birth", "bio:Birth");
    mapper->addTypeMapping("ClassicalData::Death", "bio:Death");
    mapper->addTypeUriPrefixMapping("ClassicalData::Birth", ":event/");
    mapper->addTypeUriPrefixMapping("ClassicalData::Death", ":event/");
    mapper->addPropertyMapping("ClassicalData::Birth", "year", "bio:date");
    mapper->addPropertyMapping("ClassicalData::Death", "year", "bio:date");
    mapper->addPropertyMapping("ClassicalData::Composition", "year", "bio:date");
    mapper->addPropertyMapping("ClassicalData::Birth", "place", "bio:place");
    mapper->addPropertyMapping("ClassicalData::Death", "place", "bio:place");
    mapper->addPropertyMapping("ClassicalData::Composition", "place", "bio:place");

    mapper->addTypeMapping("ClassicalData::Document", "foaf:Document");
    mapper->addPropertyMapping("ClassicalData::Document", "topic", "foaf:primaryTopic");

    mapper->addTypeMapping("ClassicalData::Work", "mo:MusicalWork");

    mapper->addPropertyMapping("ClassicalData::Work", "composition", "mo:composed_in");
    mapper->addPropertyMapping("ClassicalData::Work", "opus", "mo:opus");
    mapper->addPropertyMapping("ClassicalData::Work", "catalogue", "mo:catalogue");
    mapper->addPropertyMapping("ClassicalData::Work", "number", "mo:number");
    mapper->addPropertyMapping("ClassicalData::Work", "partOf", "dc:isPartOf");
    mapper->addPropertyMapping("ClassicalData::Work", "parts", "dc:hasPart");
    mapper->addPropertyMapping("ClassicalData::Work", "pages", "foaf:page");
    mapper->addPropertyMapping("ClassicalData::Work", "forms", "property:form");
    mapper->addPropertyMapping("ClassicalData::Work", "key", "mo:key");
    mapper->addPropertyMapping("ClassicalData::Work", "aliases", "dbv:alias");
    mapper->addPropertyMapping("ClassicalData::Work", "name", "dc:title");

    mapper->addTypeMapping("ClassicalData::Composition", "mo:Composition");
    mapper->addTypeUriPrefixMapping("ClassicalData::Composition", ":event/");
    mapper->addPropertyMapping("ClassicalData::Composition", "composer", "mo:composer");
    mapper->addPropertyMapping("ClassicalData::Composition", "works", "mo:produced_work");
}

TypeRegistrar
TypeRegistrar::m_instance;

}