[Sv1-commits] SF.net SVN: sv1: [1044] sonic-visualiser/branches/rdf-import
Brought to you by:
cannam
From: <ca...@us...> - 2008-04-07 16:54:46
|
Revision: 1044 http://sv1.svn.sourceforge.net/sv1/?rev=1044&view=rev Author: cannam Date: 2008-04-07 09:54:44 -0700 (Mon, 07 Apr 2008) Log Message: ----------- * Add first bits of RDF import code (a long way from doing anything useful) Modified Paths: -------------- sonic-visualiser/branches/rdf-import/framework/MainWindowBase.cpp sonic-visualiser/branches/rdf-import/sonic-visualiser.pro sonic-visualiser/branches/rdf-import/sv/sv.pro sonic-visualiser/branches/rdf-import/sv.prf sonic-visualiser/branches/rdf-import/widgets/FileFinder.cpp Added Paths: ----------- sonic-visualiser/branches/rdf-import/rdf/ sonic-visualiser/branches/rdf-import/rdf/RDFImporter.cpp sonic-visualiser/branches/rdf-import/rdf/RDFImporter.h sonic-visualiser/branches/rdf-import/rdf/rdf.pro Modified: sonic-visualiser/branches/rdf-import/framework/MainWindowBase.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/framework/MainWindowBase.cpp 2008-04-07 16:48:57 UTC (rev 1043) +++ sonic-visualiser/branches/rdf-import/framework/MainWindowBase.cpp 2008-04-07 16:54:44 UTC (rev 1044) @@ -51,6 +51,7 @@ #include "data/fileio/MIDIFileWriter.h" #include "data/fileio/BZipFileDevice.h" #include "data/fileio/FileSource.h" +#include "rdf/RDFImporter.h" #include "data/fft/FFTDataServer.h" @@ -1100,8 +1101,19 @@ QString path = source.getLocalFilename(); - if (source.getExtension() == "svl" || source.getExtension() == "xml") { + if (source.getExtension() == "rdf" || source.getExtension() == "n3" || + source.getExtension() == "ttl") { + RDFImporter importer("file://" + path); + if (importer.isOK()) { + importer.getDataModels(); //!!!... + return FileOpenSucceeded; + } + + return FileOpenFailed; + + } else if (source.getExtension() == "svl" || source.getExtension() == "xml") { + PaneCallback callback(this); QFile file(path); Added: sonic-visualiser/branches/rdf-import/rdf/RDFImporter.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/RDFImporter.cpp (rev 0) +++ sonic-visualiser/branches/rdf-import/rdf/RDFImporter.cpp 2008-04-07 16:54:44 UTC (rev 1044) @@ -0,0 +1,151 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2008 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "RDFImporter.h" + +#include <redland.h> + +#include <iostream> + +using std::cerr; +using std::endl; + +typedef const unsigned char *STR; // redland's expected string type + +QString +RDFImporter::getKnownExtensions() +{ + return "*.rdf *.n3 *.ttl"; +} + +RDFImporter::RDFImporter(QString url) : + m_d(new RDFImporterImpl(url)) +{ +} + +RDFImporter::~RDFImporter() +{ + delete m_d; +} + +bool +RDFImporter::isOK() +{ + return m_d->isOK(); +} + +QString +RDFImporter::getErrorString() const +{ + return m_d->getErrorString(); +} + +std::vector<Model *> +RDFImporter::getDataModels() +{ + return m_d->getDataModels(); +} + +RDFImporterImpl::RDFImporterImpl(QString uri) +{ + m_world = librdf_new_world(); + librdf_world_open(m_world); + m_uri = librdf_new_uri(m_world, (STR)uri.toUtf8().data()); + m_storage = librdf_new_storage(m_world, "memory", "test", NULL); //!!!??? + librdf_parser *parser = librdf_new_parser(m_world, "guess", NULL, NULL); + m_model = librdf_new_model(m_world, m_storage, NULL); + + if (librdf_parser_parse_into_model(parser, m_uri, m_uri, m_model)) { + m_errorString = QString("Failed to parse RDF from URI \"%1\"") + .arg(uri); + } + + librdf_free_parser(parser); +} + +RDFImporterImpl::~RDFImporterImpl() +{ + librdf_free_uri(m_uri); + librdf_free_model(m_model); + librdf_free_storage(m_storage); + librdf_free_world(m_world); +} + +bool +RDFImporterImpl::isOK() +{ + return (m_errorString == ""); +} + +QString +RDFImporterImpl::getErrorString() const +{ + return m_errorString; +} + +std::vector<Model *> +RDFImporterImpl::getDataModels() +{ + std::vector<Model *> models; + + // We want to suck in every FeatureEvent (or sub-classifier + // thereof) and then decide what to do with it. Does it have a + // feature? Can we extract a timestamp? Do we have an ontology + // that tells us what sort of model to use, or can we deduce it + // from the feature structure? + + // NB af:Onset (for example) is subclass of af:Instant which is + // subclass of af:FeatureEvent + + // intervals subclass from af:Interval which subclass af:FeatureEvent + + // OR -- would it be better to suck in anything that has a + // timestamp, and then filter 'em? + + librdf_node *eventTime = librdf_new_node_from_uri_string + (m_world, (STR)"http://purl.org/NET/c4dm/event.owl#time"); + + //!!! Doesn't work, can't have NULL third arg -- guess this sort + //of query can't happen in plain old redland + + // need rasqal query: SELECT ?a WHERE {?a event:time ?t} + + // NB also: curl -L -H "Accept: text/rdf+n3" http://purl.org/ontology/af/ + + librdf_iterator *i = librdf_model_get_sources + (m_model, eventTime, NULL); + + if (!i || librdf_iterator_end(i)) { + cerr << "RDFImporterImpl::getDataModels(): No nodes found with event:time properties" << endl; + if (i) librdf_free_iterator(i); + librdf_free_node(eventTime); + return models; + } + + while (!librdf_iterator_end(i)) { + + librdf_node *node = (librdf_node *)librdf_iterator_get_object(i); + + QString literal = (const char *)librdf_node_get_literal_value(node); + + cerr << "Found node: \"" << literal.toStdString() << "\"" << endl; + } + + librdf_free_iterator(i); + librdf_free_node(eventTime); + + return models; +} + Added: sonic-visualiser/branches/rdf-import/rdf/RDFImporter.h =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/RDFImporter.h (rev 0) +++ sonic-visualiser/branches/rdf-import/rdf/RDFImporter.h 2008-04-07 16:54:44 UTC (rev 1044) @@ -0,0 +1,76 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2008 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _RDF_IMPORTER_H_ +#define _RDF_IMPORTER_H_ + +#include <QObject> + +#include "data/model/Model.h" +#include <vector> + +class RDFImporterImpl; + +class RDFImporter : public QObject +{ + Q_OBJECT + +public: + /** + * Return the file extensions that we have data file readers for, + * in a format suitable for use with QFileDialog. For example, + * "*.rdf *.n3". + */ + static QString getKnownExtensions(); + + RDFImporter(QString url); + virtual ~RDFImporter(); + + bool isOK(); + QString getErrorString() const; + + std::vector<Model *> getDataModels(); + +protected: + RDFImporterImpl *m_d; +}; + + +//!!! move out of this header! + +#include <redland.h> + +class RDFImporterImpl : public QObject +{ + Q_OBJECT + +public: + RDFImporterImpl(QString url); + virtual ~RDFImporterImpl(); + + bool isOK(); + QString getErrorString() const; + + std::vector<Model *> getDataModels(); + +protected: + librdf_world *m_world; + librdf_uri *m_uri; + librdf_storage *m_storage; + librdf_model *m_model; + QString m_errorString; +}; + +#endif Added: sonic-visualiser/branches/rdf-import/rdf/rdf.pro =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/rdf.pro (rev 0) +++ sonic-visualiser/branches/rdf-import/rdf/rdf.pro 2008-04-07 16:54:44 UTC (rev 1044) @@ -0,0 +1,18 @@ +TEMPLATE = lib + +SV_UNIT_PACKAGES = redland +load(../sv.prf) + +CONFIG += sv staticlib qt thread warn_on stl rtti exceptions + +TARGET = svrdf + +DEPENDPATH += . .. +INCLUDEPATH += . .. +OBJECTS_DIR = tmp_obj +MOC_DIR = tmp_moc + +# Input +HEADERS += RDFImporter.h +SOURCES += RDFImporter.cpp + Modified: sonic-visualiser/branches/rdf-import/sonic-visualiser.pro =================================================================== --- sonic-visualiser/branches/rdf-import/sonic-visualiser.pro 2008-04-07 16:48:57 UTC (rev 1043) +++ sonic-visualiser/branches/rdf-import/sonic-visualiser.pro 2008-04-07 16:54:44 UTC (rev 1044) @@ -1,7 +1,7 @@ TEMPLATE = subdirs -SUBDIRS = audioio base data framework layer plugin transform view widgets system sv +SUBDIRS = audioio base data framework layer plugin transform rdf view widgets system sv TRANSLATIONS += i18n/sonic-visualiser_ru.ts i18n/sonic-visualiser_en_GB.ts Modified: sonic-visualiser/branches/rdf-import/sv/sv.pro =================================================================== --- sonic-visualiser/branches/rdf-import/sv/sv.pro 2008-04-07 16:48:57 UTC (rev 1043) +++ sonic-visualiser/branches/rdf-import/sv/sv.pro 2008-04-07 16:54:44 UTC (rev 1044) @@ -1,7 +1,7 @@ TEMPLATE = app -SV_UNIT_PACKAGES = vamp vamp-hostsdk rubberband fftw3 fftw3f samplerate jack portaudio mad id3tag oggz fishsound lrdf raptor sndfile liblo +SV_UNIT_PACKAGES = vamp vamp-hostsdk rubberband fftw3 fftw3f samplerate jack portaudio mad id3tag oggz fishsound lrdf raptor sndfile liblo redland load(../sv.prf) CONFIG += sv qt thread warn_on stl rtti exceptions @@ -13,11 +13,11 @@ DEPENDPATH += . .. i18n main transform INCLUDEPATH += . .. transform main -LIBPATH = ../view ../layer ../data ../widgets ../transform ../plugin ../base ../system ../framework ../audioio $$LIBPATH +LIBPATH = ../view ../layer ../data ../widgets ../transform ../plugin ../base ../system ../framework ../audioio ../rdf $$LIBPATH contains(DEFINES, BUILD_STATIC):LIBS -= -ljack -LIBS = -lsvframework -lsvaudioio -lsvview -lsvlayer -lsvdata -lsvtransform -lsvwidgets -lsvplugin -lsvbase -lsvsystem $$LIBS +LIBS = -lsvframework -lsvaudioio -lsvview -lsvlayer -lsvrdf -lsvdata -lsvtransform -lsvwidgets -lsvplugin -lsvbase -lsvsystem $$LIBS PRE_TARGETDEPS += ../view/libsvview.a \ ../layer/libsvlayer.a \ @@ -27,6 +27,7 @@ ../plugin/libsvplugin.a \ ../base/libsvbase.a \ ../audioio/libsvaudioio.a \ + ../rdf/libsvrdf.a \ ../system/libsvsystem.a OBJECTS_DIR = tmp_obj Modified: sonic-visualiser/branches/rdf-import/sv.prf =================================================================== --- sonic-visualiser/branches/rdf-import/sv.prf 2008-04-07 16:48:57 UTC (rev 1043) +++ sonic-visualiser/branches/rdf-import/sv.prf 2008-04-07 16:54:44 UTC (rev 1044) @@ -26,7 +26,7 @@ # pkg-config, edit the "If you don't have pkg-config" block below (see # comments). # -PKGCONFIG_PACKAGES = vamp vamp-hostsdk oggz fishsound mad id3tag rubberband fftw3 fftw3f sndfile samplerate lrdf raptor jack liblo +PKGCONFIG_PACKAGES = vamp vamp-hostsdk oggz fishsound mad id3tag rubberband fftw3 fftw3f sndfile samplerate lrdf raptor jack liblo redland # No pkg-config test for the bzip2 library. This library is required. # If you don't have it, install it. @@ -88,11 +88,12 @@ DEFINES += HAVE_SNDFILE # Required -- to import and export .wav files DEFINES += HAVE_SAMPLERATE # Required -- for resampling DEFINES += HAVE_RUBBERBAND # Required -- for time stretching + DEFINES += HAVE_REDLAND # Required -- for RDF # INCLUDEPATH += ../../vamp-plugin-sdk LIBPATH += ../../vamp-plugin-sdk/vamp-sdk # - LIBS += -lvamp-hostsdk -lsndfile -lrubberband -lsamplerate + LIBS += -lvamp-hostsdk -lsndfile -lrubberband -lrdf -lsamplerate d } @@ -187,6 +188,7 @@ contains(SV_UNIT_PACKAGES, sndfile):!contains(DEFINES, HAVE_SNDFILE):error("sndfile library required") contains(SV_UNIT_PACKAGES, samplerate):!contains(DEFINES, HAVE_SAMPLERATE):error("libsamplerate required") contains(SV_UNIT_PACKAGES, rubberband):!contains(DEFINES, HAVE_RUBBERBAND):error("Rubber Band library required") +contains(SV_UNIT_PACKAGES, redland):!contains(DEFINES, HAVE_REDLAND):error("Redland RDF library required") VERSION_CFLAGS += -D"'"SVNREV='"'$$system(svnversion -n .)'"'"'" Modified: sonic-visualiser/branches/rdf-import/widgets/FileFinder.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/widgets/FileFinder.cpp 2008-04-07 16:48:57 UTC (rev 1043) +++ sonic-visualiser/branches/rdf-import/widgets/FileFinder.cpp 2008-04-07 16:54:44 UTC (rev 1044) @@ -17,6 +17,7 @@ #include "data/fileio/FileSource.h" #include "data/fileio/AudioFileReaderFactory.h" #include "data/fileio/DataFileReaderFactory.h" +#include "rdf/RDFImporter.h" #include <QFileInfo> #include <QMessageBox> @@ -74,12 +75,12 @@ case LayerFile: settingsKey = "layerpath"; - filter = tr("All supported files (%1)\nSonic Visualiser Layer XML files (*.svl)\nComma-separated data files (*.csv)\nSpace-separated .lab files (*.lab)\nMIDI files (*.mid)\nText files (*.txt)\nAll files (*.*)").arg(DataFileReaderFactory::getKnownExtensions()); + filter = tr("All supported files (%1 %2)\nSonic Visualiser Layer XML files (*.svl)\nComma-separated data files (*.csv)\nSpace-separated .lab files (*.lab)\nRDF files (%3)\nMIDI files (*.mid)\nText files (*.txt)\nAll files (*.*)").arg(DataFileReaderFactory::getKnownExtensions()).arg(RDFImporter::getKnownExtensions()).arg(RDFImporter::getKnownExtensions()); break; case LayerFileNoMidi: settingsKey = "layerpath"; - filter = tr("All supported files (%1)\nSonic Visualiser Layer XML files (*.svl)\nComma-separated data files (*.csv)\nSpace-separated .lab files (*.lab)\nText files (*.txt)\nAll files (*.*)").arg(DataFileReaderFactory::getKnownExtensions()); + filter = tr("All supported files (%1 %2)\nSonic Visualiser Layer XML files (*.svl)\nComma-separated data files (*.csv)\nSpace-separated .lab files (*.lab)\nRDF files (%3)\nText files (*.txt)\nAll files (*.*)").arg(DataFileReaderFactory::getKnownExtensions()).arg(RDFImporter::getKnownExtensions()).arg(RDFImporter::getKnownExtensions()); break; case SessionOrAudioFile: @@ -104,9 +105,10 @@ case AnyFile: settingsKey = "lastpath"; - filter = tr("All supported files (*.sv %1 %2)\nSonic Visualiser session files (*.sv)\nAudio files (%1)\nLayer files (%2)\nAll files (*.*)") + filter = tr("All supported files (*.sv %1 %2 %3)\nSonic Visualiser session files (*.sv)\nAudio files (%1)\nLayer files (%2)\nAll files (*.*)") .arg(AudioFileReaderFactory::getKnownExtensions()) - .arg(DataFileReaderFactory::getKnownExtensions()); + .arg(DataFileReaderFactory::getKnownExtensions()) + .arg(RDFImporter::getKnownExtensions()); break; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |