Mercurial > hg > classical
changeset 7:df999875c53b classical-rdf
* Test application for load/query (beginnings of)
author | Chris Cannam |
---|---|
date | Tue, 09 Feb 2010 17:33:39 +0000 |
parents | 96bf272e74c5 |
children | 71cf328c2a9d |
files | common/TypeRegistrar.cpp common/TypeRegistrar.h common/common.pro import/Import.cpp import/import.pro testapp/Loader.cpp testapp/testapp.pro testapp/testapp.qrc |
diffstat | 8 files changed, 301 insertions(+), 151 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/TypeRegistrar.cpp Tue Feb 09 17:33:39 2010 +0000 @@ -0,0 +1,174 @@ + +#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; + +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/TypeRegistrar.h Tue Feb 09 17:33:39 2010 +0000 @@ -0,0 +1,27 @@ + +#ifndef _TYPE_REGISTRAR_H_ +#define _TYPE_REGISTRAR_H_ + +namespace Dataquay { + class BasicStore; + class ObjectMapper; +} + +namespace ClassicalData +{ + +class TypeRegistrar +{ +public: + static void addMappings(Dataquay::BasicStore *, Dataquay::ObjectMapper *); + +private: + TypeRegistrar(); + static TypeRegistrar m_instance; +}; + +} + +#endif + +
--- a/common/common.pro Fri Dec 11 18:05:51 2009 +0000 +++ b/common/common.pro Tue Feb 09 17:33:39 2010 +0000 @@ -8,8 +8,8 @@ MOC_DIR = m # Input -HEADERS += Objects.h -SOURCES += Objects.cpp +HEADERS += Objects.h TypeRegistrar.h +SOURCES += Objects.cpp TypeRegistrar.cpp solaris* { @@ -20,3 +20,4 @@ } + QMAKE_CXXFLAGS_DEBUG += -Wall -Woverloaded-virtual -Wextra -Wformat-nonliteral -Wformat-security -Winit-self -O1 -pg
--- a/import/Import.cpp Fri Dec 11 18:05:51 2009 +0000 +++ b/import/Import.cpp Tue Feb 09 17:33:39 2010 +0000 @@ -17,6 +17,8 @@ #include "ImportWikipediaWorksList.h" #include "ImportHoboken.h" +#include "TypeRegistrar.h" + #include <dataquay/Debug.h> using namespace ClassicalData; @@ -522,37 +524,6 @@ int main(int argc, char **argv) { - 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>"); - qRegisterMetaType<ClassicalComposersOrgImporter *> ("ClassicalData::ClassicalComposersOrgImporter*"); qRegisterMetaType<ClassicalDotNetImporter *> @@ -571,25 +542,6 @@ ("ClassicalData::HobokenImporter*"); 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*"); - - ObjectBuilder::getInstance()->registerClass <ClassicalComposersOrgImporter>("ClassicalData::ClassicalComposersOrgImporter*"); ObjectBuilder::getInstance()->registerClass <ClassicalDotNetImporter>("ClassicalData::ClassicalDotNetImporter*"); @@ -606,34 +558,6 @@ ObjectBuilder::getInstance()->registerClass <HobokenImporter>("ClassicalData::HobokenImporter*"); - 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); - BasicStore *store = BasicStore::load("file:importers.ttl"); ObjectMapper mapper(store); QObject *parentObject = mapper.loadAllObjects(new QObject()); @@ -642,80 +566,12 @@ outstore->setBaseUri("http://dbtune.org/classical/resource/"); ObjectMapper outmapper(outstore); + TypeRegistrar::addMappings(outstore, &outmapper); + outmapper.setPropertyStorePolicy(ObjectMapper::StoreIfChanged); outmapper.setObjectStorePolicy(ObjectMapper::StoreAllObjects); outmapper.setBlankNodePolicy(ObjectMapper::NoBlankNodes); - outmapper.setObjectTypePrefix("http://dbtune.org/classical/resource/"); - outmapper.setPropertyPrefix("http://dbtune.org/classical/resource/vocab/"); - outmapper.setRelationshipPrefix("http://dbtune.org/classical/resource/vocab/relationship/"); - - outstore->addPrefix("type", outmapper.getObjectTypePrefix()); - outstore->addPrefix("classical", outmapper.getObjectTypePrefix() + "type/"); - outstore->addPrefix("property", outmapper.getPropertyPrefix()); - outstore->addPrefix("rel", outmapper.getRelationshipPrefix()); - - outstore->addPrefix("foaf", "http://xmlns.com/foaf/0.1/"); - outstore->addPrefix("mo", "http://purl.org/ontology/mo/"); - outstore->addPrefix("dc", "http://purl.org/dc/elements/1.1/"); - outstore->addPrefix("bio", "http://purl.org/vocab/bio/0.1/"); - outstore->addPrefix("owl", "http://www.w3.org/2002/07/owl#"); - outstore->addPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); - outstore->addPrefix("db", "http://dbtune.org/musicbrainz/resource/"); - outstore->addPrefix("dbv", "http://dbtune.org/musicbrainz/resource/vocab/"); - outstore->addPrefix("cmn", "http://purl.org/ontology/classicalmusicnav#"); - outstore->addPrefix("sim", "http://purl.org/ontology/similarity/"); - - outmapper.addTypeMapping("ClassicalData::Composer", "classical:Composer"); - outmapper.addPropertyMapping("ClassicalData::Composer", "pages", "foaf:page"); - outmapper.addPropertyMapping("ClassicalData::Composer", "name", "foaf:name"); - outmapper.addPropertyMapping("ClassicalData::Composer", "aliases", "dbv:alias"); - outmapper.addPropertyMapping("ClassicalData::Composer", "birth", "property:birth"); - outmapper.addPropertyMapping("ClassicalData::Composer", "death", "property:death"); - outmapper.addPropertyMapping("ClassicalData::Composer", "geonameURIs", "foaf:based_near"); - - outmapper.addTypeMapping("ClassicalData::Birth", "bio:Birth"); - outmapper.addTypeMapping("ClassicalData::Death", "bio:Death"); - outmapper.addTypeUriPrefixMapping("ClassicalData::Birth", ":event/"); - outmapper.addTypeUriPrefixMapping("ClassicalData::Death", ":event/"); - outmapper.addPropertyMapping("ClassicalData::Birth", "year", "bio:date"); - outmapper.addPropertyMapping("ClassicalData::Death", "year", "bio:date"); - outmapper.addPropertyMapping("ClassicalData::Composition", "year", "bio:date"); - outmapper.addPropertyMapping("ClassicalData::Birth", "place", "bio:place"); - outmapper.addPropertyMapping("ClassicalData::Death", "place", "bio:place"); - outmapper.addPropertyMapping("ClassicalData::Composition", "place", "bio:place"); - - outmapper.addTypeMapping("ClassicalData::Document", "foaf:Document"); - outmapper.addPropertyMapping("ClassicalData::Document", "topic", "foaf:primaryTopic"); - - outmapper.addTypeMapping("ClassicalData::Work", "mo:MusicalWork"); - - outmapper.addPropertyMapping("ClassicalData::Work", "composition", "mo:composed_in"); - outmapper.addPropertyMapping("ClassicalData::Work", "opus", "mo:opus"); - outmapper.addPropertyMapping("ClassicalData::Work", "catalogue", "mo:catalogue"); - outmapper.addPropertyMapping("ClassicalData::Work", "number", "mo:number"); - outmapper.addPropertyMapping("ClassicalData::Work", "partOf", "dc:isPartOf"); - outmapper.addPropertyMapping("ClassicalData::Work", "parts", "dc:hasPart"); - outmapper.addPropertyMapping("ClassicalData::Work", "pages", "foaf:page"); - outmapper.addPropertyMapping("ClassicalData::Work", "forms", "property:form"); - outmapper.addPropertyMapping("ClassicalData::Work", "key", "mo:key"); - outmapper.addPropertyMapping("ClassicalData::Work", "aliases", "dbv:alias"); - outmapper.addPropertyMapping("ClassicalData::Work", "name", "dc:title"); - - outmapper.addTypeMapping("ClassicalData::Composition", "mo:Composition"); - outmapper.addTypeUriPrefixMapping("ClassicalData::Composition", ":event/"); - outmapper.addPropertyMapping("ClassicalData::Composition", "composer", "mo:composer"); - outmapper.addPropertyMapping("ClassicalData::Composition", "works", "mo:produced_work"); - - outstore->add(Triple("classical:Composer", "a", outstore->expand("owl:Class"))); - outstore->add(Triple("classical:Composer", "rdfs:subClassOf", outstore->expand("mo:MusicArtist"))); - - outstore->add(Triple("property:birth", "a", outstore->expand("owl:ObjectProperty"))); - outstore->add(Triple("property:birth", "rdfs:subPropertyOf", outstore->expand("bio:event"))); - - outstore->add(Triple("property:death", "a", outstore->expand("owl:ObjectProperty"))); - outstore->add(Triple("property:death", "rdfs:subPropertyOf", outstore->expand("bio:event"))); - QList<Importer *> importers = parentObject->findChildren<Importer *>(); std::cerr << "have " << importers.size() << " importers" << std::endl;
--- a/import/import.pro Fri Dec 11 18:05:51 2009 +0000 +++ b/import/import.pro Tue Feb 09 17:33:39 2010 +0000 @@ -23,4 +23,3 @@ } } -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testapp/Loader.cpp Tue Feb 09 17:33:39 2010 +0000 @@ -0,0 +1,56 @@ + +#include "Objects.h" +#include "TypeRegistrar.h" + +#include <dataquay/BasicStore.h> +#include <dataquay/objectmapper/ObjectMapper.h> + +#include <QTemporaryFile> + +#include <iostream> + +using namespace Dataquay; +using namespace ClassicalData; + +bool +load(BasicStore *store, QString resourceName) +{ + QTemporaryFile tf; + if (!tf.open()) return false; + tf.setAutoRemove(true); + QFile f(resourceName); + if (!f.open(QFile::ReadOnly)) return false; + QByteArray buffer; + int bufsiz = 10240; + while (!f.atEnd()) { + buffer = f.read(bufsiz); + tf.write(buffer); + } + std::cerr << "unpacked, importing..." << std::endl; + store->import("file://" + tf.fileName(), + BasicStore::ImportPermitDuplicates, // fastest mode + "ntriples"); + return true; +} + +int main(int argc, char **argv) +{ + BasicStore *store = new BasicStore(); + store->setBaseUri("http://dbtune.org/classical/resource/"); + ObjectMapper *mapper = new ObjectMapper(store); + + TypeRegistrar::addMappings(store, mapper); + + if (!load(store, ":data.ntriples")) { + std::cerr << "Failed to unpack and load resource" << std::endl; + return 1; + } + + std::cerr << "imported, mapping..." << std::endl; + + QObject *parent = mapper->loadAllObjects(0); + + delete mapper; + delete store; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testapp/testapp.pro Tue Feb 09 17:33:39 2010 +0000 @@ -0,0 +1,31 @@ +TEMPLATE = app +TARGET = testapp +CONFIG += debug + +OBJECTS_DIR = o +MOC_DIR = m + +DEPENDPATH += . +INCLUDEPATH += . ../common ../../turbot + +PRE_TARGETDEPS += ../common/libcommon.a + +SOURCES += Loader.cpp + +RESOURCES += testapp.qrc + +LIBS += ../common/libcommon.a ../../turbot/dataquay/libdataquay.a ../../turbot/ext/libext.a + +solaris* { + + debug { + QMAKE_CXXFLAGS_DEBUG += -xprofile=tcov + LIBS += -xprofile=tcov + } + +} + + +QMAKE_CXXFLAGS_DEBUG += -Wall -Woverloaded-virtual -Wextra -Wformat-nonliteral -Wformat-security -Winit-self -O1 -pg + +LIBS += -pg