changeset 1:29ca5974905d classical-rdf

* More work on a nice tidy import; get some sensible URIs etc
author Chris Cannam
date Thu, 03 Dec 2009 15:42:10 +0000
parents e8f4c2b55fd8
children ff067a1e7e3d
files common/Objects.cpp common/Objects.h import/Import.cpp import/ImportClassicalComposersOrg.cpp import/Test.cpp import/importers.ttl
diffstat 6 files changed, 1147 insertions(+), 1061 deletions(-) [+]
line wrap: on
line diff
--- a/common/Objects.cpp	Tue Dec 01 17:50:41 2009 +0000
+++ b/common/Objects.cpp	Thu Dec 03 15:42:10 2009 +0000
@@ -12,6 +12,39 @@
 QMap<QString, Form *> Form::m_map;
 QMutex Form::m_mutex;
 
+bool
+Composer::datesMatch(const Composer *b) const
+{
+    const Composer *a = this;
+    
+    if (a->birth() && b->birth()) {
+        int ay = a->birth()->year(), by = b->birth()->year();
+        if (ay < 1800 || // birth dates before 1700 tend to be vague!
+            a->birth()->approximate() ||
+            b->birth()->approximate()) {
+            if (abs(ay - by) > 25) return false;
+        } else {
+            if (abs(ay - by) > 1) {
+                return false;
+            }
+        }
+    }
+    if (a->death() && b->death()) {
+        int ay = a->death()->year(), by = b->death()->year();
+        if (a->death()->approximate() || b->death()->approximate()) {
+            if (abs(ay - by) > 10) return false;
+        } else if (ay < 1700) {
+            if (abs(ay - by) > 25) return false;
+        } else if (ay < 1800) {
+            // cut a bit of slack, but not as much as for birth date
+            if (abs(ay - by) > 10) return false;
+        } else {
+            if (abs(ay - by) > 1) return false;
+        }
+    }
+    return true;
+}
+
 QString
 Composer::getSortName(bool caps) const
 {
--- a/common/Objects.h	Tue Dec 01 17:50:41 2009 +0000
+++ b/common/Objects.h	Thu Dec 03 15:42:10 2009 +0000
@@ -291,6 +291,7 @@
     const Death *death() const { return m_death; }
     void setDeath(Death *d) { m_death = d; }
 
+    bool datesMatch(const Composer *other) const; // "well enough"
     QString getSortName(bool caps) const;
     QString getDisplayDates() const;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/import/Import.cpp	Thu Dec 03 15:42:10 2009 +0000
@@ -0,0 +1,862 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+#include "Objects.h"
+
+#include <dataquay/BasicStore.h>
+#include <dataquay/RDFException.h>
+#include <dataquay/objectmapper/ObjectMapper.h>
+#include <dataquay/objectmapper/ObjectBuilder.h>
+#include <dataquay/objectmapper/ContainerBuilder.h>
+
+#include "ImportClassicalComposersOrg.h"
+#include "ImportClassicalDotNet.h"
+#include "ImportWikipediaComposers.h"
+#include "ImportWikipediaWorks.h"
+#include "ImportWikipediaWorksK.h"
+#include "ImportWikipediaWorksList.h"
+#include "ImportHoboken.h"
+
+#include <dataquay/Debug.h>
+
+using namespace ClassicalData;
+using namespace Dataquay;
+
+#include <iostream>
+#include <set>
+
+typedef QMap<QString, QSet<Composer *> > ComposerMap; // name -> composers
+
+void
+addMiscExpansions(Composer *c)
+{
+    QString n = c->name();
+
+    DEBUG << "addMiscExpansions: n = " << n << endl;
+
+    // lovely hard-coded special cases go here! some of these are
+    // needed for works->composer assignments
+    if (n == "Balakirev, Milii") {
+        c->addAlias("Mily Balakirev");
+    }
+    if (n.startsWith("Cui, C")) {
+        c->addAlias(QString::fromUtf8("C\303\251sar Cui"));
+    }
+    if (n == "Handel, George Frideric") {
+        c->addAlias("Handel, Georg Friedrich");
+        c->addAlias("Handel");
+    }
+    if (n == "Prokofiev, Sergey") {
+        c->addAlias("Prokofieff, Sergei");
+        c->addAlias("Sergei Prokofieff");
+    }
+    if (n == "Rossini, Gioacchino") {
+        c->addAlias("Rossini, Gioachino");
+        c->addAlias("Gioachino Rossini");
+    }
+    if (n == "Edwards, Richard") {
+        c->addAlias("Edwardes, Richard");
+        c->addAlias("Richard Edwardes");
+        c->addAlias("Richard Edwards");
+    }
+    if (n == "Rimsky-Korsakov, Nikolay Andreyevich") {
+        c->addAlias("Nikolai Rimsky-Korsakov");
+    }
+    if (n.startsWith("Piccinni, Nico")) {
+        c->addAlias(n);
+        c->setName(QString::fromUtf8("Piccinni, Niccol\303\262"));
+    }
+    if (n == "Tchaikovsky, Pyotr Ilyich") {
+        c->addAlias("Tchaikovsky, Piotr Ilyitch");
+    }
+    if (n == "Wilhelm Stenhammar") {
+        c->addAlias("Stenhammar, Vilhelm Eugene");
+        c->setName("Stenhammar, Wilhelm");
+        c->addAlias(n);
+    }
+    if (n == "Mercadante, Saverio Rafaele") {
+        c->addAlias("Mercadante, Giuseppe");
+    }
+    if (n == "Johann Wenzel Anton Stamitz") {
+        c->addAlias(n);
+        c->setName("Stamitz, Johann Wenzel Anton");
+        c->addAlias("Stamitz, Jan Vaclav");
+    }
+    if (n == "Mario Castelnuovo-Tedesco") {
+        c->addAlias("Castelnuovo Tedesco, Mario");
+    }
+    if (n == "Mayr, Simon") {
+        c->addAlias("Mayr");
+    }
+
+    n.replace(", Sr.", " Sr.");
+    n.replace(", Jr.", " Jr.");
+
+    int comma = n.indexOf(", ");
+    if (comma > 0 && comma + 2 < n.length()) {
+
+        QString left = n.left(comma);
+        QString right = n.right(n.length() - comma - 2);
+
+        QRegExp jrsr("( (Sr\\.|Jr\\.|I|II))$");
+        if (jrsr.indexIn(right) >= 0) {
+            left = left + jrsr.cap(1);
+            right = right.left(right.length()-jrsr.matchedLength());
+        }
+        n = right + " " + left;
+    }
+
+    if (n != c->name()) c->addAlias(n);
+
+    if (n.contains("Sergey")) {
+        QString nn(n);
+        nn.replace("Sergey", "Sergei");
+        c->addAlias(nn);
+    } else if (n.contains("Sergei")) {
+        QString nn(n);
+        nn.replace("Sergei", "Sergey");
+        c->addAlias(nn);
+    }
+
+    QRegExp sr("((, )?Sr\\.|Senior|\\(?the elder\\)?)", Qt::CaseInsensitive);
+    if (sr.indexIn(n) >= 0) {
+        QString nr = n;
+        nr.replace(sr.pos(0), sr.matchedLength(), " I");
+        nr.replace("  ", " ");
+        DEBUG << "addMiscExpansions: trying " << nr << " for " << n << endl;
+        c->addAlias(nr);
+    }
+    QRegExp jr("((, )?Jr\\.|Junior|\\(?the younger\\)?)", Qt::CaseInsensitive);
+    if (jr.indexIn(n) >= 0) {
+        QString nr = n;
+        nr.replace(jr.pos(0), jr.matchedLength(), " II");
+        nr.replace("  ", " ");
+        DEBUG << "addMiscExpansions: trying " << nr << " for " << n << endl;
+        c->addAlias(nr);
+    }
+    QString nr = n;
+    nr.replace("(I)", "I");
+    nr.replace("(II)", "II");
+    nr.replace("(III)", "III");
+    c->addAlias(nr);
+}
+
+bool namesFuzzyMatch(QString an, Composer *b)
+{
+    // ew!
+
+    QString bn = b->name();
+    if (bn == an) return true;
+    if (b->aliases().contains(an)) return true;
+    int aSurnameIndex = 0, bSurnameIndex = 0;
+    if (an.contains(",")) {
+        an.replace(",", "");
+    } else {
+        aSurnameIndex = -1;
+    }
+    if (bn.contains(",")) {
+        bn.replace(",", "");
+    } else {
+        bSurnameIndex = -1;
+    }
+    QStringList nl = an.split(QRegExp("[ -]"));
+    QStringList bnl = bn.split(QRegExp("[ -]"));
+    int matchCount = 0;
+    QString surnameMatch = "";
+    if (aSurnameIndex == -1) aSurnameIndex = nl.size()-1;
+    if (bSurnameIndex == -1) bSurnameIndex = bnl.size()-1;
+    if (nl[aSurnameIndex][0].isUpper() &&
+        nl[aSurnameIndex] != "Della" &&
+        nl[aSurnameIndex] == bnl[bSurnameIndex]) {
+        surnameMatch = nl[aSurnameIndex];
+    }
+    foreach (QString elt, nl) {
+        if (!elt[0].isUpper() || elt == "Della") continue;
+        if (bnl.contains(elt)) {
+            ++matchCount;
+            continue;
+        }
+    }
+    if (matchCount > 1 && surnameMatch != "") {
+        DEBUG << "namesFuzzyMatch: note: surnameMatch = " << surnameMatch << endl;
+        return true;
+    }
+    return false;
+}
+
+bool
+hasBetterName(Composer *c, Composer *other)
+{
+    if (c->name() == other->name()) return false;
+
+    // Try to guess which of c and other is more likely to have a good
+    // "canonical form" of the composer's name
+
+    if (c->name().startsWith("van ")) {
+        return false; // wrong choice of sort for e.g. LvB; should be
+                      // Beethoven, Ludwig van, not van Beethoven, Ludwig
+    }
+    if (other->name().startsWith("van ")) {
+        return true;
+    }
+
+    if (c->aliases().size() != other->aliases().size()) {
+        // a rather weak heuristic
+        return c->aliases().size() > other->aliases().size();
+    }
+
+    if (c->name().contains(',') && !other->name().contains(',')) {
+        // another rather weak heuristic
+        return true;
+    }
+
+    return false;
+}
+
+void mergeComposer(Composer *c, ComposerMap &composers)
+{
+    QString name = c->name();
+
+    QSet<QString> allNames = c->aliases();
+    allNames.insert(name);
+    
+    QString dates;
+    if (c->birth()) {
+        if (c->death()) {
+            dates = QString("%1-%2").arg(c->birth()->year()).arg(c->death()->year());
+        } else {
+            dates = QString("%1-").arg(c->birth()->year());
+        }
+    }
+    if (dates != "") {
+        allNames.insert(dates);
+    }
+
+    QSet<Composer *> matches;
+
+    foreach (QString candidateName, allNames) {
+        QString key = candidateName.toLower();
+        if (composers.contains(key)) {
+            foreach (Composer *candidate, composers[key]) {
+                if (candidateName == dates) {
+                    if (!namesFuzzyMatch(c->name(), candidate) &&
+                        !namesFuzzyMatch(candidate->name(), c)) {
+                        DEBUG << "mergeComposer: Names differ for " << c->name() << " and " << candidate->name() << " (having matched date(s) " << dates << ")" << endl;
+                        continue;
+                    } else {
+                        DEBUG << "mergeComposer: Note: Fuzzy name match for " << c->name() << " and " << candidate->name() << " with date(s) " << dates << endl;
+                    }
+                } else {
+                    if (!c->datesMatch(candidate)) {
+                        DEBUG << "mergeComposer: Dates differ for " << c->name() << " and " << candidate->name() << endl;
+                        continue;
+                    }
+                }
+                matches.insert(candidate);
+            }
+        }
+    }
+
+    if (matches.empty()) {
+        DEBUG << "mergeComposer: No existing composer with alias matching any alias of " << c->name() << ", adding" << endl;
+
+        if (!c->birth() && !c->death()) {
+            // laboriously look for fuzzy match across _all_ composers
+            for (ComposerMap::iterator i = composers.begin();
+                 i != composers.end(); ++i) {
+                foreach (Composer *candidate, *i) {
+                    if (namesFuzzyMatch(c->name(), candidate)) {
+                        DEBUG << "mergeComposer: Found fuzzy match for undated composer " << c->name() << " as " << candidate->name() << ", daringly merging" << endl;
+                        matches.insert(candidate);
+                        break;
+                    }
+                }
+                if (!matches.empty()) break;
+            }
+        }
+
+        if (matches.empty()) {
+            foreach (QString candidateName, allNames) {
+                composers[candidateName.toLower()].insert(c);
+                DEBUG << "added for alias or date " << candidateName << endl;
+            }
+            return;
+        }
+    }
+
+    if (matches.size() > 1) {
+        DEBUG << "mergeComposer: More than one composer matches name and date(s) for " << c->name() << " -- something fishy here" << endl;
+    }
+
+    Composer *other = *matches.begin();
+
+    DEBUG << "mergeComposer: Merging " << c->name() << " with " << other->name() << endl;
+
+    if (hasBetterName(c, other)) {
+        other->addAlias(other->name());
+        other->setName(c->name());
+    } else {
+        other->addAlias(c->name());
+    }
+    composers[c->name().toLower()].insert(other);
+    DEBUG << "linking from alias " << c->name() << endl;
+
+    foreach (QString alias, c->aliases()) {
+        if (alias != other->name() && 
+            !other->aliases().contains(alias)) {
+            other->addAlias(alias);
+            composers[alias.toLower()].insert(other);
+            DEBUG << "linking from alias " << alias << endl;
+        }
+    }
+    
+    foreach (Document *d, c->pages()) {
+        bool found = false;
+        foreach (Document *dd, other->pages()) {
+            if (d->uri() == dd->uri()) {
+                found = true;
+                break;
+            }
+        }
+        if (!found) {
+            d->setTopic(other);
+            other->addPage(d);
+        }
+    }
+
+    //!!! actually the "approximate" bits of the following are bogus;
+    // a source reporting birth or death date as approx is probably
+    // more accurate than one reporting an exact date
+
+    if (c->birth()) {
+        if (!other->birth() || other->birth()->approximate()) {
+            other->setBirth(c->birth());
+        }
+    }
+
+    if (c->death()) {
+        if (!other->death() || other->death()->approximate()) {
+            other->setDeath(c->death());
+        }
+    }
+
+    if (c->gender() != "") other->setGender(c->gender());
+    if (c->nationality() != "") other->setNationality(c->nationality());
+    if (c->remarks() != "") other->setRemarks(c->remarks());
+    if (c->period() != "") other->setPeriod(c->period());
+
+}
+    
+QString
+asciify(QString field)
+{
+    // accented characters etc -- add "ascii version" for dumb search purposes
+    QString ascii;
+    for (int i = 0; i < field.length(); ++i) {
+        QString dc = field[i].decomposition();
+        if (dc != "") ascii += dc[0];
+        else if (field[i] == QChar(0x00DF)) {
+            ascii += "ss";
+        } else {
+            ascii += field[i];
+        }
+    }
+    ascii.replace(QString::fromUtf8("\342\200\231"), "'"); // apostrophe
+    ascii.replace(QString::fromUtf8("\342\200\222"), "-");
+    ascii.replace(QString::fromUtf8("\342\200\223"), "-");
+    ascii.replace(QString::fromUtf8("\342\200\224"), "-");
+    ascii.replace(QString::fromUtf8("\342\200\225"), "-");
+    return ascii;
+}
+
+void
+asciify(Composer *c)
+{
+    QString n = c->name();
+    QString asc = asciify(n);
+    if (asc != n && !c->aliases().contains(asc)) c->addAlias(asc);
+    foreach (QString alias, c->aliases()) {
+        asc = asciify(alias);
+        if (asc != alias && !c->aliases().contains(asc)) c->addAlias(asc);
+    }
+}
+
+void
+asciify(Work *w)
+{
+    QString n = w->name();
+    QString asc = asciify(n);
+    if (asc != n && !w->aliases().contains(asc)) w->addAlias(asc);
+    foreach (QString alias, w->aliases()) {
+        asc = asciify(alias);
+        if (asc != alias && !w->aliases().contains(asc)) w->addAlias(asc);
+    }
+}
+
+void
+assignUri(Store *s, Composer *c)
+{
+    static QSet<QString> convSet;
+    QString conv = c->name();
+    if (!conv.contains(",")) {
+        QStringList sl = conv.split(" ");
+        if (!sl.empty()) {
+            sl.push_front(sl[sl.size()-1]);
+            sl.removeLast();
+            conv = sl.join(" ");
+            DEBUG << "assignUri: " << c->name() << " -> " << conv << endl;
+        }
+    }
+    conv = asciify(conv);
+    conv.replace(" ", "_");
+    conv.replace("-", "_");
+    conv.replace(QRegExp("[^a-zA-Z0-9_-]"), "");
+    conv = conv.toLower();
+    QString initial = conv;
+    int i = 2;
+    while (convSet.contains(conv)) {
+        conv = QString("%1__%2").arg(initial).arg(i);
+        i++;
+    }
+    convSet.insert(conv);
+    c->setProperty("uri", s->expand(":composer/" + conv));
+}
+
+void
+assignUri(Store *s, Work *w, Composer *c)
+{
+    QString pfx = c->property("uri").toUrl().toString();
+    DEBUG << "pfx = " << pfx << endl;
+    if (!pfx.contains("composer/")) pfx = "";
+
+    static QSet<QString> convSet;
+
+    QString conv = w->catalogue();
+    if (conv == "") conv = w->opus();
+    conv = conv.replace(".", "");
+    bool hasOpus = (conv != "");
+    if (conv == "") conv = w->name().toLower();
+    if (w->number() != "") conv = conv + "_no" + w->number();
+    conv = asciify(conv);
+    conv.replace(" ", "_");
+    conv.replace("-", "_");
+    conv.replace(":", "_");
+    conv.replace(QRegExp("[^a-zA-Z0-9_-]"), "");
+
+    if (pfx != "") conv = pfx + "/work/" + conv;
+
+    // I think actually for works we want to merge duplicates rather than
+    // assign them separate URIs, _unless_ they lack a viable opus number
+    if (!hasOpus) {
+        QString initial = conv;
+        int i = 2;
+        while (convSet.contains(conv)) {
+            conv = QString("%1__%2").arg(initial).arg(i);
+            i++;
+        }
+    }
+    convSet.insert(conv);
+
+    w->setProperty("uri", conv);
+}
+
+void
+addDbpediaResource(Store *store, QObject *o, QString s)
+{
+    QUrl u = o->property("uri").toUrl();
+    if (u == QUrl()) return;
+    if (s.startsWith("http://en.wikipedia.org/wiki/")) {
+        store->add(Triple(u,
+                          "mo:wikipedia",
+                          QUrl(s)));
+        s.replace("http://en.wikipedia.org/wiki/",
+                  "http://dbpedia.org/resource/");
+        store->add(Triple(u,
+                          "owl:sameAs",
+                          QUrl(s)));
+    }
+}
+
+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<ClassicalComposersOrgImporter *>
+	("ClassicalData::ClassicalComposersOrgImporter*");
+    qRegisterMetaType<ClassicalDotNetImporter *>
+	("ClassicalData::ClassicalDotNetImporter*");
+    qRegisterMetaType<WikipediaComposersImporter *>
+	("ClassicalData::WikipediaComposersImporter*");
+    qRegisterMetaType<WikipediaWorksImporter *>
+	("ClassicalData::WikipediaWorksImporter*");
+    qRegisterMetaType<WikipediaWorksKImporter *>
+	("ClassicalData::WikipediaWorksKImporter*");
+    qRegisterMetaType<WikipediaWorksListImporter *>
+	("ClassicalData::WikipediaWorksListImporter*");
+    qRegisterMetaType<HobokenImporter *>
+	("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*");
+    ObjectBuilder::getInstance()->registerClass
+	<WikipediaComposersImporter>("ClassicalData::WikipediaComposersImporter*");
+    ObjectBuilder::getInstance()->registerClass
+	<WikipediaWorksImporter>("ClassicalData::WikipediaWorksImporter*");
+    ObjectBuilder::getInstance()->registerClass
+	<WikipediaWorksKImporter>("ClassicalData::WikipediaWorksKImporter*");
+    ObjectBuilder::getInstance()->registerClass
+	<WikipediaWorksListImporter>("ClassicalData::WikipediaWorksListImporter*");
+    ObjectBuilder::getInstance()->registerClass
+	<HobokenImporter>("ClassicalData::HobokenImporter*");
+
+    ContainerBuilder::getInstance()->registerContainer
+        <QString, QSet<QString> >
+        ("QString", "QSet<QString>", 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());
+    
+    BasicStore *outstore = new BasicStore();
+    outstore->setBaseUri("http://dbtune.org/classical/resource/");
+    ObjectMapper outmapper(outstore);
+
+    outmapper.setPropertyStorePolicy(ObjectMapper::StoreIfChanged);
+
+    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/");
+
+    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.addTypeMapping("ClassicalData::Birth", "bio:Birth");
+    outmapper.addTypeMapping("ClassicalData::Death", "bio:Death");
+    outmapper.addPropertyMapping("ClassicalData::Birth", "year", "bio:date");
+    outmapper.addPropertyMapping("ClassicalData::Death", "year", "bio:date");
+    outmapper.addPropertyMapping("ClassicalData::Birth", "place", "bio:place");
+    outmapper.addPropertyMapping("ClassicalData::Death", "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.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;
+
+    ComposerMap composers;
+
+    QList<Composer *> dated;
+    QList<Composer *> undated;
+
+    QList<Work *> works;
+    QList<Composition *> compositions;
+    QList<QObject *> other;
+    
+    foreach (Importer *importer, importers) {
+        QObjectList objects = importer->getImportedObjects();
+        foreach (QObject *o, objects) {
+            Composer *c;
+            if ((c = qobject_cast<Composer *>(o))) {
+                addMiscExpansions(c);
+                asciify(c);
+                if (c->birth() || c->death()) dated.push_back(c);
+                else undated.push_back(c);
+                continue;
+            }
+            Work *w;
+            if ((w = qobject_cast<Work *>(o))) {
+                asciify(w); 
+                works.push_back(w);
+                continue;
+            }
+            Composition *cn;
+            if ((cn = qobject_cast<Composition *>(o))) {
+                compositions.push_back(cn);
+                continue;
+            }
+        }
+    }
+
+    // get all the dated composers merged before attempting to match
+    // the undated ones
+    foreach (Composer *c, dated) {
+        mergeComposer(c, composers);
+    }
+    foreach (Composer *c, undated) {
+        mergeComposer(c, composers);
+    }
+
+    QObjectList toStore;
+
+    QSet<Composer *> cset;
+    for (ComposerMap::iterator i = composers.begin(); i != composers.end(); ++i) {
+        foreach (Composer *c, i.value()) {
+            if (!cset.contains(c)) {
+                assignUri(outstore, c);
+                toStore.push_back(c);
+                cset.insert(c);
+            }
+            foreach (Document *d, c->pages()) {
+                QString s = d->uri().toString();
+                addDbpediaResource(outstore, c, s);
+            }                        
+        }
+    }
+
+    QSet<QString> storedUris;
+
+    foreach (Work *w, works) {
+        Composition *cn = w->composition();
+        if (!cn) continue;
+        if (!cn->composer()) {
+            QString cname = cn->composerName();
+            if (cname != "") {
+                if (!composers.contains(cname.toLower())) {
+                    DEBUG << "Failed to assign Composition to composer: no composer matches name " << cname << endl;
+                } else {
+                    QSet<Composer *> cs = composers[cname.toLower()];
+                    if (cs.empty()) {
+                        DEBUG << "Failed to assign Composition to composer: no composer matches name " << cname << endl;
+                    } else if (cs.size() > 1) {
+                        DEBUG << "Failed to assign Composition to composer: "
+                              << cs.size() << " composers match name " << cname << endl;
+                    } else {
+                        cn->setComposer(*cs.begin());
+                    }
+                }
+            } else {
+                DEBUG << "Failed to assign Composition to composer: composer name is empty" << endl;
+            }
+        }
+
+        if (cn->composer()) {
+            assignUri(outstore, w, cn->composer());
+        }
+
+        foreach (Document *d, w->pages()) {
+            QString s = d->uri().toString();
+            addDbpediaResource(outstore, w, s);
+            if (!storedUris.contains(s)) {
+                toStore.push_back(d);
+                storedUris.insert(s);
+            }
+        }                        
+
+        QString u = w->property("uri").toUrl().toString();
+        if (u == "" || !storedUris.contains(u)) {
+            toStore.push_back(w);
+            if (u != "") storedUris.insert(u);
+        }
+    }
+
+    try {
+        outmapper.storeAllObjects(toStore);
+        
+    } catch (RDFException e) {
+        std::cerr << "Caught RDF exception: " << e.what() << std::endl;
+    }
+
+    DEBUG << "Stored, now saving" << endl;
+
+    outstore->save("test-out.ttl");
+
+    DEBUG << "Saved" << endl;
+
+
+    QMultiMap<QString, Composer *> cmap;
+    foreach (Composer *c, cset) {
+        QString n = c->getSortName(true);
+        cmap.insert(n, c);
+    }
+
+    std::cout << "Composers: " << cmap.size() << std::endl;
+
+    for (QMultiMap<QString, Composer *>::iterator i = cmap.begin();
+         i != cmap.end(); ++i) {
+
+        QString n = i.key();
+        Composer *c = i.value();
+        
+        std::cout << n.toStdString();
+        
+        QString d = c->getDisplayDates();
+        if (d != "") std::cout << " (" << d.toStdString() << ")";
+        std::cout << std::endl;
+    }
+
+    std::cout << std::endl;
+
+    std::cout << "Works by composer:" << std::endl;
+
+    for (QMultiMap<QString, Composer *>::iterator i = cmap.begin();
+         i != cmap.end(); ++i) {
+
+        QString n = i.key();
+        Composer *c = i.value();
+    
+        std::set<Work *, Work::Ordering> wmap;
+        foreach (Work *w, works) {
+            Composition *cn = w->composition();
+            if (!cn) continue;
+            if (cn->composer() != c) continue;
+            if (w->partOf()) continue;
+            wmap.insert(w);
+        }
+
+        if (wmap.empty()) continue;
+        
+        std::cout << n.toStdString() << std::endl;
+
+        foreach (Work *w, wmap) {
+            std::cout << " * ";
+            std::cout << w->name().toStdString();
+            if (w->catalogue() != "") {
+                std::cout << " [" << w->catalogue().toStdString() << "]";
+            }
+            if (w->opus() != "") {
+                std::cout << " [op. " << w->opus().toStdString() << "]";
+            }
+            std::cout << std::endl;
+            std::set<Work *, Work::Ordering> orderedParts;
+            foreach (Work *ww, w->parts()) {
+                orderedParts.insert(ww);
+            }
+            foreach (Work *ww, orderedParts) {
+                std::cout << "    ";
+                if (ww->number() != "") {
+                    std::cout << ww->number().toStdString() << ". ";
+                }
+                std::cout << ww->name().toStdString();
+                if (ww->catalogue() != "" && ww->catalogue() != w->catalogue()) {
+                    std::cout << " [" << ww->catalogue().toStdString() << "]";
+                }
+                if (ww->opus() != "" && ww->opus() != w->opus()) {
+                    std::cout << " [op. " << ww->opus().toStdString() << "]";
+                }
+                std::cout << std::endl;
+            }
+        }
+
+        std::cout << std::endl;
+    }
+
+    delete outstore;
+
+    DEBUG << "Done" << endl;
+
+
+}
+
+
--- a/import/ImportClassicalComposersOrg.cpp	Tue Dec 01 17:50:41 2009 +0000
+++ b/import/ImportClassicalComposersOrg.cpp	Thu Dec 03 15:42:10 2009 +0000
@@ -262,7 +262,7 @@
     all.replace(QRegExp("^.*<div id=\"main\">"), "");
 
     QRegExp matcher
-	("<li><a href=\"([^\"]+)\">([^<]+)(<small>([^<]*)</small>)?</a> \\((\\*?)([0-9]+)[^0-9)]*([0-9]+)?\\)\\s*([^\\s])?</li>");
+	(QString::fromUtf8("<li><a href=\"([^\"]+)\">([^<]+)(<small>([^<]*)</small>)?</a> \\((\\*?)([0-9]+)([^0-9)]*)([0-9]+)?\\)\\s*([^\\s])?</li>"));
     
     int pos = 0, count = 0;
     while ((pos = matcher.indexIn(all, pos)) != -1) {
@@ -272,9 +272,11 @@
 
         QString page = matcher.cap(1);
         QString name = matcher.cap(2);
+        QString star = matcher.cap(5);
         QString birth = matcher.cap(6);
-        QString death = matcher.cap(7);
-        QString female = matcher.cap(8);
+        QString dagger = matcher.cap(7);
+        QString death = matcher.cap(8);
+        QString female = matcher.cap(9);
 
 	DEBUG << "Item " << count
 	      << ": page = " << page
@@ -314,6 +316,25 @@
             d->setSiteName("Classical Composers Database");
             composer->addPage(d);
         }
+
+        if (birth != "" && death == "") {
+            if (star == "" && dagger != QString::fromUtf8("\342\200\240")) {
+                DEBUG << "Unexpected \"dagger\" character" << dagger << endl;
+                birth = "";
+            }
+            if (star == "" && dagger == "") {
+                DEBUG << "Only one date in date range (" << birth << "), but no star or dagger -- ignoring" << endl;
+                birth = "";
+            } else if (star != "" && dagger != "") {
+                DEBUG << "Date range features both star and dagger -- ignoring" << endl;
+                birth = "";
+            } else if (dagger != "") {
+                DEBUG << "dagger found: setting death to " << birth << endl;
+                death = birth;
+                birth = "";
+            }
+        }
+
         if (birth != "") {
 	    Birth *e = new Birth(birth.toInt());
 	    composer->setBirth(e);
--- a/import/Test.cpp	Tue Dec 01 17:50:41 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,831 +0,0 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
-
-#include "Objects.h"
-
-#include <dataquay/BasicStore.h>
-#include <dataquay/RDFException.h>
-#include <dataquay/objectmapper/ObjectMapper.h>
-#include <dataquay/objectmapper/ObjectBuilder.h>
-#include <dataquay/objectmapper/ContainerBuilder.h>
-
-#include "ImportClassicalComposersOrg.h"
-#include "ImportClassicalDotNet.h"
-#include "ImportWikipediaComposers.h"
-#include "ImportWikipediaWorks.h"
-#include "ImportWikipediaWorksK.h"
-#include "ImportWikipediaWorksList.h"
-#include "ImportHoboken.h"
-
-#include <dataquay/Debug.h>
-
-using namespace ClassicalData;
-using namespace Dataquay;
-
-#include <iostream>
-#include <set>
-
-typedef QMap<QString, QSet<Composer *> > ComposerMap; // name -> composers
-
-bool datesMatch(Composer *a, Composer *b)
-{
-    if (a->birth() && b->birth()) {
-        if (abs(a->birth()->year() - b->birth()->year()) > 1) {
-            if ((!a->birth()->approximate() && !b->birth()->approximate()) ||
-                (abs(a->birth()->year() - b->birth()->year()) > 10)) {
-                return false;
-            }
-        }
-    }
-    if (a->death() && b->death()) {
-        if (abs(a->death()->year() - b->death()->year()) > 1) {
-            if ((!a->death()->approximate() && !b->death()->approximate()) ||
-                (abs(a->death()->year() - b->death()->year()) > 10)) {
-                return false;
-            }
-        }
-    }
-    return true;
-}
-
-void
-addMiscExpansions(Composer *c)
-{
-    QString n = c->name();
-
-    DEBUG << "addMiscExpansions: n = " << n << endl;
-
-    // lovely hard-coded special cases go here! some of these are
-    // needed for works->composer assignments
-    if (n == "Balakirev, Milii") {
-        c->addAlias("Mily Balakirev");
-    }
-    if (n.startsWith("Cui, C")) {
-        c->addAlias(QString::fromUtf8("C\303\251sar Cui"));
-    }
-    if (n == "Handel, George Frideric") {
-        c->addAlias("Handel, Georg Friedrich");
-        c->addAlias("Handel");
-    }
-    if (n == "Mayr, Simon") {
-        c->addAlias("Mayr");
-    }
-
-    n.replace(", Sr.", " Sr.");
-    n.replace(", Jr.", " Jr.");
-
-    int comma = n.indexOf(", ");
-    if (comma > 0 && comma + 2 < n.length()) {
-
-        QString left = n.left(comma);
-        QString right = n.right(n.length() - comma - 2);
-
-        QRegExp jrsr("( (Sr\\.|Jr\\.|I|II))$");
-        if (jrsr.indexIn(right) >= 0) {
-            left = left + jrsr.cap(1);
-            right = right.left(right.length()-jrsr.matchedLength());
-        }
-        n = right + " " + left;
-    }
-
-    if (n != c->name()) c->addAlias(n);
-
-    if (n.contains("Sergey")) {
-        QString nn(n);
-        nn.replace("Sergey", "Sergei");
-        c->addAlias(nn);
-    }
-
-    QRegExp sr("((, )?Sr\\.|Senior|\\(?the elder\\)?)", Qt::CaseInsensitive);
-    if (sr.indexIn(n) >= 0) {
-        QString nr = n;
-        nr.replace(sr.pos(0), sr.matchedLength(), " I");
-        nr.replace("  ", " ");
-        DEBUG << "addMiscExpansions: trying " << nr << " for " << n << endl;
-        c->addAlias(nr);
-    }
-    QRegExp jr("((, )?Jr\\.|Junior|\\(?the younger\\)?)", Qt::CaseInsensitive);
-    if (jr.indexIn(n) >= 0) {
-        QString nr = n;
-        nr.replace(jr.pos(0), jr.matchedLength(), " II");
-        nr.replace("  ", " ");
-        DEBUG << "addMiscExpansions: trying " << nr << " for " << n << endl;
-        c->addAlias(nr);
-    }
-    QString nr = n;
-    nr.replace("(I)", "I");
-    nr.replace("(II)", "II");
-    nr.replace("(III)", "III");
-    c->addAlias(nr);
-}
-
-bool namesFuzzyMatch(QString an, Composer *b)
-{
-    // ew!
-
-    QString bn = b->name();
-    if (bn == an) return true;
-    if (b->aliases().contains(an)) return true;
-    int aSurnameIndex = 0, bSurnameIndex = 0;
-    if (an.contains(",")) {
-        an.replace(",", "");
-    } else {
-        aSurnameIndex = -1;
-    }
-    if (bn.contains(",")) {
-        bn.replace(",", "");
-    } else {
-        bSurnameIndex = -1;
-    }
-    QStringList nl = an.split(QRegExp("[ -]"));
-    QStringList bnl = bn.split(QRegExp("[ -]"));
-    int matchCount = 0;
-    QString surnameMatch = "";
-    if (aSurnameIndex == -1) aSurnameIndex = nl.size()-1;
-    if (bSurnameIndex == -1) bSurnameIndex = bnl.size()-1;
-    if (nl[aSurnameIndex][0].isUpper() &&
-        nl[aSurnameIndex] != "Della" &&
-        nl[aSurnameIndex] == bnl[bSurnameIndex]) {
-        surnameMatch = nl[aSurnameIndex];
-    }
-    foreach (QString elt, nl) {
-        if (!elt[0].isUpper() || elt == "Della") continue;
-        if (bnl.contains(elt)) {
-            ++matchCount;
-            continue;
-        }
-    }
-    if (matchCount > 1 && surnameMatch != "") {
-        DEBUG << "namesFuzzyMatch: note: surnameMatch = " << surnameMatch << endl;
-        return true;
-    }
-    return false;
-}
-
-bool
-hasBetterName(Composer *c, Composer *other)
-{
-    if (c->name() == other->name()) return false;
-
-    // Try to guess which of c and other is more likely to have a good
-    // "canonical form" of the composer's name
-
-    if (c->name().startsWith("van ")) {
-        return false; // wrong choice of sort for e.g. LvB; should be
-                      // Beethoven, Ludwig van, not van Beethoven, Ludwig
-    }
-    if (other->name().startsWith("van ")) {
-        return true;
-    }
-
-    if (c->aliases().size() != other->aliases().size()) {
-        // a rather weak heuristic
-        return c->aliases().size() > other->aliases().size();
-    }
-
-    if (c->name().contains(',') && !other->name().contains(',')) {
-        // another rather weak heuristic
-        return true;
-    }
-
-    return false;
-}
-
-void mergeComposer(Composer *c, ComposerMap &composers)
-{
-    QString name = c->name();
-
-    QSet<QString> allNames = c->aliases();
-    allNames.insert(name);
-    
-    QString dates;
-    if (c->birth()) {
-        if (c->death()) {
-            dates = QString("%1-%2").arg(c->birth()->year()).arg(c->death()->year());
-        } else {
-            dates = QString("%1-").arg(c->birth()->year());
-        }
-    }
-    if (dates != "") {
-        allNames.insert(dates);
-    }
-
-    QSet<Composer *> matches;
-
-    foreach (QString candidateName, allNames) {
-        QString key = candidateName.toLower();
-        if (composers.contains(key)) {
-            foreach (Composer *candidate, composers[key]) {
-                if (candidateName == dates) {
-                    if (!namesFuzzyMatch(c->name(), candidate) &&
-                        !namesFuzzyMatch(candidate->name(), c)) {
-                        DEBUG << "mergeComposer: Names differ for " << c->name() << " and " << candidate->name() << " (having matched date(s) " << dates << ")" << endl;
-                        continue;
-                    } else {
-                        DEBUG << "mergeComposer: Note: Fuzzy name match for " << c->name() << " and " << candidate->name() << " with date(s) " << dates << endl;
-                    }
-                } else {
-                    if (!datesMatch(c, candidate)) {
-                        DEBUG << "mergeComposer: Dates differ for " << c->name() << " and " << candidate->name() << endl;
-                        continue;
-                    }
-                }
-                matches.insert(candidate);
-            }
-        }
-    }
-
-    if (matches.empty()) {
-        DEBUG << "mergeComposer: No existing composer with alias matching any alias of " << c->name() << ", adding" << endl;
-
-        if (!c->birth() && !c->death()) {
-            // laboriously look for fuzzy match across _all_ composers
-            for (ComposerMap::iterator i = composers.begin();
-                 i != composers.end(); ++i) {
-                foreach (Composer *candidate, *i) {
-                    if (namesFuzzyMatch(c->name(), candidate)) {
-                        DEBUG << "mergeComposer: Found fuzzy match for undated composer " << c->name() << " as " << candidate->name() << ", daringly merging" << endl;
-                        matches.insert(candidate);
-                        break;
-                    }
-                }
-                if (!matches.empty()) break;
-            }
-        }
-
-        if (matches.empty()) {
-            foreach (QString candidateName, allNames) {
-                composers[candidateName.toLower()].insert(c);
-                DEBUG << "added for alias or date " << candidateName << endl;
-            }
-            return;
-        }
-    }
-
-    if (matches.size() > 1) {
-        DEBUG << "mergeComposer: More than one composer matches name and date(s) for " << c->name() << " -- something fishy here" << endl;
-    }
-
-    Composer *other = *matches.begin();
-
-    DEBUG << "mergeComposer: Merging " << c->name() << " with " << other->name() << endl;
-
-    if (hasBetterName(c, other)) {
-        other->addAlias(other->name());
-        other->setName(c->name());
-    } else {
-        other->addAlias(c->name());
-    }
-    composers[c->name().toLower()].insert(other);
-    DEBUG << "linking from alias " << c->name() << endl;
-
-    foreach (QString alias, c->aliases()) {
-        if (alias != other->name() && 
-            !other->aliases().contains(alias)) {
-            other->addAlias(alias);
-            composers[alias.toLower()].insert(other);
-            DEBUG << "linking from alias " << alias << endl;
-        }
-    }
-    
-    foreach (Document *d, c->pages()) {
-        bool found = false;
-        foreach (Document *dd, other->pages()) {
-            if (d->uri() == dd->uri()) {
-                found = true;
-                break;
-            }
-        }
-        if (!found) {
-            d->setTopic(other);
-            other->addPage(d);
-        }
-    }
-
-    //!!! actually the "approximate" bits of the following are bogus;
-    // a source reporting birth or death date as approx is probably
-    // more accurate than one reporting an exact date
-
-    if (c->birth()) {
-        if (!other->birth() || other->birth()->approximate()) {
-            other->setBirth(c->birth());
-        }
-    }
-
-    if (c->death()) {
-        if (!other->death() || other->death()->approximate()) {
-            other->setDeath(c->death());
-        }
-    }
-
-    if (c->gender() != "") other->setGender(c->gender());
-    if (c->nationality() != "") other->setNationality(c->nationality());
-    if (c->remarks() != "") other->setRemarks(c->remarks());
-    if (c->period() != "") other->setPeriod(c->period());
-
-}
-    
-QString
-asciify(QString field)
-{
-    // accented characters etc -- add "ascii version" for dumb search purposes
-    QString ascii;
-    for (int i = 0; i < field.length(); ++i) {
-        QString dc = field[i].decomposition();
-        if (dc != "") ascii += dc[0];
-        else if (field[i] == QChar(0x00DF)) {
-            ascii += "ss";
-        } else {
-            ascii += field[i];
-        }
-    }
-    ascii.replace(QString::fromUtf8("\342\200\231"), "'"); // apostrophe
-    ascii.replace(QString::fromUtf8("\342\200\222"), "-");
-    ascii.replace(QString::fromUtf8("\342\200\223"), "-");
-    ascii.replace(QString::fromUtf8("\342\200\224"), "-");
-    ascii.replace(QString::fromUtf8("\342\200\225"), "-");
-    return ascii;
-}
-
-void
-asciify(Composer *c)
-{
-    QString n = c->name();
-    QString asc = asciify(n);
-    if (asc != n && !c->aliases().contains(asc)) c->addAlias(asc);
-    foreach (QString alias, c->aliases()) {
-        asc = asciify(alias);
-        if (asc != alias && !c->aliases().contains(asc)) c->addAlias(asc);
-    }
-}
-
-void
-asciify(Work *w)
-{
-    QString n = w->name();
-    QString asc = asciify(n);
-    if (asc != n && !w->aliases().contains(asc)) w->addAlias(asc);
-    foreach (QString alias, w->aliases()) {
-        asc = asciify(alias);
-        if (asc != alias && !w->aliases().contains(asc)) w->addAlias(asc);
-    }
-}
-
-void
-assignUri(Store *s, Composer *c)
-{
-    static QSet<QString> convSet;
-    QString conv = c->name();
-    if (!conv.contains(",")) {
-        QStringList sl = conv.split(" ");
-        if (!sl.empty()) {
-            sl.push_front(sl[sl.size()-1]);
-            sl.removeLast();
-            conv = sl.join(" ");
-            DEBUG << "assignUri: " << c->name() << " -> " << conv << endl;
-        }
-    }
-    conv = asciify(conv);
-    conv.replace(" ", "_");
-    conv.replace("-", "_");
-    conv.replace(QRegExp("[^a-zA-Z0-9_-]"), "");
-    conv = conv.toLower();
-    QString initial = conv;
-    int i = 1;
-    while (convSet.contains(conv)) {
-        conv = QString("%1__%2").arg(initial).arg(i);
-        i++;
-    }
-    convSet.insert(conv);
-    c->setProperty("uri", s->expand(":composer_" + conv));
-}
-
-void
-assignUri(Store *s, Work *w, Composer *c)
-{
-    QString pfx = c->property("uri").toUrl().toString();
-    DEBUG << "pfx = " << pfx << endl;
-    if (!pfx.contains("composer_")) pfx = "";
-    else pfx.replace(QRegExp("^.*composer_"), "");
-
-    static QSet<QString> convSet;
-    QString conv = w->catalogue();
-    if (conv == "") conv = w->opus();
-    conv = conv.replace(".", "");
-    bool hasOpus = (conv != "");
-    if (conv == "") conv = w->name();
-    if (w->number() != "") conv = conv + "_no" + w->number();
-    if (pfx != "") conv = pfx + "_" + conv;
-    conv = asciify(conv);
-    conv.replace(" ", "_");
-    conv.replace("-", "_");
-    conv.replace(":", "_");
-    conv.replace(QRegExp("[^a-zA-Z0-9_-]"), "");
-    conv = conv.toLower();
-    // I think actually for works we want to merge duplicates rather than
-    // assign them separate URIs, _unless_ they lack a viable opus number
-    if (!hasOpus) {
-        QString initial = conv;
-        int i = 1;
-        while (convSet.contains(conv)) {
-            conv = QString("%1__%2").arg(initial).arg(i);
-            i++;
-        }
-    }
-    convSet.insert(conv);
-    w->setProperty("uri", s->expand(":work_" + conv));
-}
-
-void
-addDbpediaResource(Store *store, QObject *o, QString s)
-{
-    QUrl u = o->property("uri").toUrl();
-    if (u == QUrl()) return;
-    if (s.startsWith("http://en.wikipedia.org/wiki/")) {
-        store->add(Triple(u,
-                          "mo:wikipedia",
-                          QUrl(s)));
-        s.replace("http://en.wikipedia.org/wiki/",
-                  "http://dbpedia.org/resource/");
-        store->add(Triple(u,
-                          "owl:sameAs",
-                          QUrl(s)));
-    }
-}
-
-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<ClassicalComposersOrgImporter *>
-	("ClassicalData::ClassicalComposersOrgImporter*");
-    qRegisterMetaType<ClassicalDotNetImporter *>
-	("ClassicalData::ClassicalDotNetImporter*");
-    qRegisterMetaType<WikipediaComposersImporter *>
-	("ClassicalData::WikipediaComposersImporter*");
-    qRegisterMetaType<WikipediaWorksImporter *>
-	("ClassicalData::WikipediaWorksImporter*");
-    qRegisterMetaType<WikipediaWorksKImporter *>
-	("ClassicalData::WikipediaWorksKImporter*");
-    qRegisterMetaType<WikipediaWorksListImporter *>
-	("ClassicalData::WikipediaWorksListImporter*");
-    qRegisterMetaType<HobokenImporter *>
-	("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*");
-    ObjectBuilder::getInstance()->registerClass
-	<WikipediaComposersImporter>("ClassicalData::WikipediaComposersImporter*");
-    ObjectBuilder::getInstance()->registerClass
-	<WikipediaWorksImporter>("ClassicalData::WikipediaWorksImporter*");
-    ObjectBuilder::getInstance()->registerClass
-	<WikipediaWorksKImporter>("ClassicalData::WikipediaWorksKImporter*");
-    ObjectBuilder::getInstance()->registerClass
-	<WikipediaWorksListImporter>("ClassicalData::WikipediaWorksListImporter*");
-    ObjectBuilder::getInstance()->registerClass
-	<HobokenImporter>("ClassicalData::HobokenImporter*");
-
-    ContainerBuilder::getInstance()->registerContainer
-        <QString, QSet<QString> >
-        ("QString", "QSet<QString>", 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());
-    
-    BasicStore *outstore = new BasicStore();
-    ObjectMapper outmapper(outstore);
-
-    outmapper.setPropertyStorePolicy(ObjectMapper::StoreIfChanged);
-    
-    outstore->addPrefix("type", outmapper.getObjectTypePrefix());
-    outstore->addPrefix("classical", outmapper.getObjectTypePrefix() + "ClassicalData/");
-    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#");
-
-    outmapper.addPropertyMapping("ClassicalData::Composer", "pages",
-                                 outstore->expand("foaf:page"));
-    outmapper.addPropertyMapping("ClassicalData::Composer", "name",
-                                 outstore->expand("foaf:name"));
-    outmapper.addPropertyMapping("ClassicalData::Composer", "aliases",
-                                 outstore->expand("property:also_known_as"));
-    outmapper.addPropertyMapping("ClassicalData::Document", "topic",
-                                 outstore->expand("foaf:primaryTopic"));
-
-    outmapper.addTypeMapping("ClassicalData::Work",
-                             outstore->expand("mo:MusicalWork"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "composition",
-                                 outstore->expand("mo:composed_in"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "opus",
-                                 outstore->expand("mo:opus"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "k6",
-                                 outstore->expand("mo:k6"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "bwv",
-                                 outstore->expand("mo:bwv"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "number",
-                                 outstore->expand("mo:number"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "partOf",
-                                 outstore->expand("dc:isPartOf"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "parts",
-                                 outstore->expand("dc:hasPart"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "pages",
-                                 outstore->expand("foaf:page"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "forms",
-                                 outstore->expand("property:form"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "key",
-                                 outstore->expand("mo:key"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "aliases",
-                                 outstore->expand("property:also_known_as"));
-    outmapper.addPropertyMapping("ClassicalData::Work", "name",
-                                 outstore->expand("dc:title"));
-
-    outmapper.addTypeMapping("ClassicalData::Composition",
-                             outstore->expand("mo:Composition"));
-    outmapper.addPropertyMapping("ClassicalData::Composition", "composer",
-                                 outstore->expand("mo:composer"));
-    outmapper.addPropertyMapping("ClassicalData::Composition", "works",
-                                 outstore->expand("mo:produced_work"));
-
-    outstore->add(Triple("classical:Composer", "a",
-                         outstore->expand("owl:Class")));
-    outstore->add(Triple("classical:Composer", "rdfs:subClassOf",
-                         outstore->expand("mo:MusicArtist")));
-
-    QList<Importer *> importers = parentObject->findChildren<Importer *>();
-    std::cerr << "have " << importers.size() << " importers" << std::endl;
-
-    ComposerMap composers;
-
-    QList<Composer *> dated;
-    QList<Composer *> undated;
-
-    QList<Work *> works;
-    QList<Composition *> compositions;
-    QList<QObject *> other;
-    
-    foreach (Importer *importer, importers) {
-        QObjectList objects = importer->getImportedObjects();
-        foreach (QObject *o, objects) {
-            Composer *c;
-            if ((c = qobject_cast<Composer *>(o))) {
-                addMiscExpansions(c);
-                asciify(c);
-                if (c->birth() || c->death()) dated.push_back(c);
-                else undated.push_back(c);
-                continue;
-            }
-            Work *w;
-            if ((w = qobject_cast<Work *>(o))) {
-                asciify(w); 
-                works.push_back(w);
-                continue;
-            }
-            Composition *cn;
-            if ((cn = qobject_cast<Composition *>(o))) {
-                compositions.push_back(cn);
-                continue;
-            }
-        }
-    }
-
-    // get all the dated composers merged before attempting to match
-    // the undated ones
-    foreach (Composer *c, dated) {
-        mergeComposer(c, composers);
-    }
-    foreach (Composer *c, undated) {
-        mergeComposer(c, composers);
-    }
-
-    QObjectList toStore;
-
-    QSet<Composer *> cset;
-    for (ComposerMap::iterator i = composers.begin(); i != composers.end(); ++i) {
-        foreach (Composer *c, i.value()) {
-            if (!cset.contains(c)) {
-                assignUri(outstore, c);
-                toStore.push_back(c);
-                cset.insert(c);
-            }
-            foreach (Document *d, c->pages()) {
-                QString s = d->uri().toString();
-                addDbpediaResource(outstore, c, s);
-            }                        
-        }
-    }
-
-    QSet<QString> storedUris;
-
-    foreach (Work *w, works) {
-        Composition *cn = w->composition();
-        if (!cn) continue;
-        if (!cn->composer()) {
-            QString cname = cn->composerName();
-            if (cname != "") {
-                if (!composers.contains(cname.toLower())) {
-                    DEBUG << "Failed to assign Composition to composer: no composer matches name " << cname << endl;
-                } else {
-                    QSet<Composer *> cs = composers[cname.toLower()];
-                    if (cs.empty()) {
-                        DEBUG << "Failed to assign Composition to composer: no composer matches name " << cname << endl;
-                    } else if (cs.size() > 1) {
-                        DEBUG << "Failed to assign Composition to composer: "
-                              << cs.size() << " composers match name " << cname << endl;
-                    } else {
-                        cn->setComposer(*cs.begin());
-                    }
-                }
-            } else {
-                DEBUG << "Failed to assign Composition to composer: composer name is empty" << endl;
-            }
-        }
-
-        if (cn->composer()) {
-            assignUri(outstore, w, cn->composer());
-        }
-
-        foreach (Document *d, w->pages()) {
-            QString s = d->uri().toString();
-            addDbpediaResource(outstore, w, s);
-            toStore.push_back(d);
-        }                        
-
-        QString u = w->property("uri").toUrl().toString();
-        if (u == "" || !storedUris.contains(u)) {
-            toStore.push_back(w);
-            if (u != "") storedUris.insert(u);
-        }
-    }
-
-    try {
-        outmapper.storeAllObjects(toStore);
-        
-    } catch (RDFException e) {
-        std::cerr << "Caught RDF exception: " << e.what() << std::endl;
-    }
-
-    DEBUG << "Stored, now saving" << endl;
-
-    outstore->save("test-out.ttl");
-
-    DEBUG << "Saved" << endl;
-
-
-    QMultiMap<QString, Composer *> cmap;
-    foreach (Composer *c, cset) {
-        QString n = c->getSortName(true);
-        cmap.insert(n, c);
-    }
-
-    std::cout << "Composers: " << cmap.size() << std::endl;
-
-    for (QMultiMap<QString, Composer *>::iterator i = cmap.begin();
-         i != cmap.end(); ++i) {
-
-        QString n = i.key();
-        Composer *c = i.value();
-        
-        std::cout << n.toStdString();
-        
-        QString d = c->getDisplayDates();
-        if (d != "") std::cout << " (" << d.toStdString() << ")";
-        std::cout << std::endl;
-    }
-
-    std::cout << std::endl;
-
-    std::cout << "Works by composer:" << std::endl;
-
-    for (QMultiMap<QString, Composer *>::iterator i = cmap.begin();
-         i != cmap.end(); ++i) {
-
-        QString n = i.key();
-        Composer *c = i.value();
-    
-        std::set<Work *, Work::Ordering> wmap;
-        foreach (Work *w, works) {
-            Composition *cn = w->composition();
-            if (!cn) continue;
-            if (cn->composer() != c) continue;
-            if (w->partOf()) continue;
-            wmap.insert(w);
-        }
-
-        if (wmap.empty()) continue;
-        
-        std::cout << n.toStdString() << std::endl;
-
-        foreach (Work *w, wmap) {
-            std::cout << " * ";
-            std::cout << w->name().toStdString();
-            if (w->catalogue() != "") {
-                std::cout << " [" << w->catalogue().toStdString() << "]";
-            }
-            if (w->opus() != "") {
-                std::cout << " [op. " << w->opus().toStdString() << "]";
-            }
-            std::cout << std::endl;
-            std::set<Work *, Work::Ordering> orderedParts;
-            foreach (Work *ww, w->parts()) {
-                orderedParts.insert(ww);
-            }
-            foreach (Work *ww, orderedParts) {
-                std::cout << "    ";
-                if (ww->number() != "") {
-                    std::cout << ww->number().toStdString() << ". ";
-                }
-                std::cout << ww->name().toStdString();
-                if (ww->catalogue() != "" && ww->catalogue() != w->catalogue()) {
-                    std::cout << " [" << ww->catalogue().toStdString() << "]";
-                }
-                if (ww->opus() != "" && ww->opus() != w->opus()) {
-                    std::cout << " [op. " << ww->opus().toStdString() << "]";
-                }
-                std::cout << std::endl;
-            }
-        }
-
-        std::cout << std::endl;
-    }
-
-    delete outstore;
-
-    DEBUG << "Done" << endl;
-
-
-}
-
-
--- a/import/importers.ttl	Tue Dec 01 17:50:41 2009 +0000
+++ b/import/importers.ttl	Thu Dec 03 15:42:10 2009 +0000
@@ -6,704 +6,704 @@
 
 
 :cdn a classical:ClassicalDotNetImporter ;
-     property:source <file:source-data/classical.net/masterindex.php> .
+     property:source <file:../source-data/classical.net/masterindex.php> .
  
 :wkiA a classical:WikipediaComposersImporter ;
-      property:source <file:source-data/en.wikipedia.org/composers/List_of_Renaissance_composers> .
+      property:source <file:../source-data/en.wikipedia.org/composers/List_of_Renaissance_composers> .
  
 :wkiM a classical:WikipediaComposersImporter ;
-      property:source <file:source-data/en.wikipedia.org/composers/Medieval_composers> .
+      property:source <file:../source-data/en.wikipedia.org/composers/Medieval_composers> .
  
 :wkiB a classical:WikipediaComposersImporter ;
-      property:source <file:source-data/en.wikipedia.org/composers/List_of_Baroque_composers> .
+      property:source <file:../source-data/en.wikipedia.org/composers/List_of_Baroque_composers> .
 
 :wkiC a classical:WikipediaComposersImporter ;
-      property:source <file:source-data/en.wikipedia.org/composers/List_of_Classical_era_composers> .
+      property:source <file:../source-data/en.wikipedia.org/composers/List_of_Classical_era_composers> .
 
 :wkiD a classical:WikipediaComposersImporter ;
-      property:source <file:source-data/en.wikipedia.org/composers/List_of_Romantic-era_composers> .
+      property:source <file:../source-data/en.wikipedia.org/composers/List_of_Romantic-era_composers> .
 
 :wkiE a classical:WikipediaComposersImporter ;
-     property:source <file:source-data/en.wikipedia.org/composers/List_of_20th-century_classical_composers_by_birth_date> .
+     property:source <file:../source-data/en.wikipedia.org/composers/List_of_20th-century_classical_composers_by_birth_date> .
 
 :wkiF a classical:WikipediaComposersImporter ;
-     property:source <file:source-data/en.wikipedia.org/composers/List_of_21st-century_classical_composers_by_birth_date> .
+     property:source <file:../source-data/en.wikipedia.org/composers/List_of_21st-century_classical_composers_by_birth_date> .
 
 :cciA a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstA> .
+     property:source <file:../source-data/classical-composers.org/firstA> .
 
 :cciB a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstB> .
+     property:source <file:../source-data/classical-composers.org/firstB> .
 
 :cciC a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstC> .
+     property:source <file:../source-data/classical-composers.org/firstC> .
 
 :cciD a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstD> .
+     property:source <file:../source-data/classical-composers.org/firstD> .
 
 :cciE a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstE> .
+     property:source <file:../source-data/classical-composers.org/firstE> .
 
 :cciF a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstF> .
+     property:source <file:../source-data/classical-composers.org/firstF> .
 
 :cciG a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstG> .
+     property:source <file:../source-data/classical-composers.org/firstG> .
 
 :cciH a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstH> .
+     property:source <file:../source-data/classical-composers.org/firstH> .
 
 :cciI a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstI> .
+     property:source <file:../source-data/classical-composers.org/firstI> .
 
 :cciJ a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstJ> .
+     property:source <file:../source-data/classical-composers.org/firstJ> .
 
 :cciK a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstK> .
+     property:source <file:../source-data/classical-composers.org/firstK> .
 
 :cciL a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstL> .
+     property:source <file:../source-data/classical-composers.org/firstL> .
 
 :cciM a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstM> .
+     property:source <file:../source-data/classical-composers.org/firstM> .
 
 :cciN a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstN> .
+     property:source <file:../source-data/classical-composers.org/firstN> .
 
 :cciO a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstO> .
+     property:source <file:../source-data/classical-composers.org/firstO> .
 
 :cciP a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstP> .
+     property:source <file:../source-data/classical-composers.org/firstP> .
 
 :cciQ a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstQ> .
+     property:source <file:../source-data/classical-composers.org/firstQ> .
 
 :cciR a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstR> .
+     property:source <file:../source-data/classical-composers.org/firstR> .
 
 :cciS a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstS> .
+     property:source <file:../source-data/classical-composers.org/firstS> .
 
 :cciT a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstT> .
+     property:source <file:../source-data/classical-composers.org/firstT> .
 
 :cciU a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstU> .
+     property:source <file:../source-data/classical-composers.org/firstU> .
 
 :cciV a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstV> .
+     property:source <file:../source-data/classical-composers.org/firstV> .
 
 :cciW a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstW> .
+     property:source <file:../source-data/classical-composers.org/firstW> .
 
 :cciX a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstX> .
+     property:source <file:../source-data/classical-composers.org/firstX> .
 
 :cciY a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstY> .
+     property:source <file:../source-data/classical-composers.org/firstY> .
 
 :cciZ a classical:ClassicalComposersOrgImporter ;
-     property:source <file:source-data/classical-composers.org/firstZ> .
+     property:source <file:../source-data/classical-composers.org/firstZ> .
 
 
 # These ones need more work:
 #:wki_216 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Antonio_Vivaldi> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Antonio_Vivaldi> .
 
 # mangling of Mazeppa
 #:wki_345 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Pyotr_Ilyich_Tchaikovsky> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Pyotr_Ilyich_Tchaikovsky> .
 
 # classification levels all wrong (many works listed at ** level)
 #:wki_354 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Prokofiev> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Prokofiev> .
 
 # tabular form
 #:wki_201 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_chorale_harmonisations_by_Johann_Sebastian_Bach> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_chorale_harmonisations_by_Johann_Sebastian_Bach> .
 
 
 :hob a classical:HobokenImporter ;
-     property:source <file:source-data/hoboken-klassika/sorted-with-hrefs-and-hob> .
+     property:source <file:../source-data/hoboken-klassika/sorted-with-hrefs-and-hob> .
 
 
 :wki_198 a classical:WikipediaWorksKImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/K%C3%B6chel_catalogue> .
+     property:source <file:../source-data/en.wikipedia.org/works/K%C3%B6chel_catalogue> .
 
 ## metapage only
 ##:wki_199 a classical:WikipediaWorksListImporter ;
-##     property:source <file:source-data/en.wikipedia.org/works/List_of_Schubert_compositions_by_D_number> .
+##     property:source <file:../source-data/en.wikipedia.org/works/List_of_Schubert_compositions_by_D_number> .
 
 :wki_200 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_cantatas_by_Johann_Sebastian_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_cantatas_by_Johann_Sebastian_Bach> .
 
 
 :wki_202 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_and_literary_works_by_Hector_Berlioz> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_and_literary_works_by_Hector_Berlioz> .
 
 
 :wki_203 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Aaron_Copland> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Aaron_Copland> .
 
 
 #:wki_204 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Akil_Mark_Koci> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Akil_Mark_Koci> .
 
 
 :wki_205 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Alban_Berg> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Alban_Berg> .
 
 
 :wki_206 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Borodin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Borodin> .
 
 
 :wki_207 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Glazunov> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Glazunov> .
 
 
 :wki_208 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Scriabin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Alexander_Scriabin> .
 
 #:wki_209 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton%C3%ADn_Dvo%C5%99%C3%A1k> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton%C3%ADn_Dvo%C5%99%C3%A1k> .
 
 # tabular
 #:wki_210 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton%C3%ADn_Dvo%C5%99%C3%A1k_by_Burghauser_number> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton%C3%ADn_Dvo%C5%99%C3%A1k_by_Burghauser_number> .
 
 :wki_211 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Bruckner> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Bruckner> .
 
 :wki_212 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Diabelli> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Diabelli> .
 
 :wki_213 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Reicha> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Reicha> .
 
 :wki_214 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Rubinstein> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Anton_Rubinstein> .
 
 
 # messy, doesn't work -- do we care?
 :wki_215 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Antonio_Salieri> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Antonio_Salieri> .
 
 
 :wki_217 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Aram_Khachaturian> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Aram_Khachaturian> .
 
 :wki_218 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Arthur_Bliss> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Arthur_Bliss> .
 
 :wki_219 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Arthur_Honegger> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Arthur_Honegger> .
 
 :wki_220 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_B%C3%A9la_Bart%C3%B3k> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_B%C3%A9la_Bart%C3%B3k> .
 
 :wki_221 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Bed%C5%99ich_Smetana> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Bed%C5%99ich_Smetana> .
 
 :wki_222 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Benjamin_Britten> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Benjamin_Britten> .
 
 :wki_223 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Bohuslav_Martin%C5%AF> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Bohuslav_Martin%C5%AF> .
 
 :wki_224 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_C%C3%A9sar_Cui> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_C%C3%A9sar_Cui> .
 
 :wki_225 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_C%C3%A9sar_Franck> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_C%C3%A9sar_Franck> .
 
 :wki_226 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Camille_Saint-Sa%C3%ABns> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Camille_Saint-Sa%C3%ABns> .
 
 :wki_227 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Czerny> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Czerny> .
 
 :wki_228 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Maria_von_Weber> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Maria_von_Weber> .
 
 :wki_229 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Nielsen> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Nielsen> .
 
 :wki_230 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Philipp_Emanuel_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Carl_Philipp_Emanuel_Bach> .
 
 #:wki_231 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Carlo_d%27Ordonez> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Carlo_d%27Ordonez> .
 
 :wki_232 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Charles-Valentin_Alkan> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Charles-Valentin_Alkan> .
 
 :wki_233 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Charles_Ives> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Charles_Ives> .
 
 :wki_234 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Charles_Wuorinen> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Charles_Wuorinen> .
 
 :wki_235 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Claude_Debussy> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Claude_Debussy> .
 
 :wki_236 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Claude_Debussy_by_Lesure_Numbers> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Claude_Debussy_by_Lesure_Numbers> .
 
 :wki_237 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Constant_Lambert> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Constant_Lambert> .
 
 :wki_238 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Darius_Milhaud> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Darius_Milhaud> .
 
 :wki_239 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Daron_Hagen> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Daron_Hagen> .
 
 :wki_240 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_David_Maslanka> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_David_Maslanka> .
 
 :wki_241 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Dieterich_Buxtehude> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Dieterich_Buxtehude> .
 
 :wki_242 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Django_Reinhardt> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Django_Reinhardt> .
 
 :wki_243 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Dmitri_Shostakovich> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Dmitri_Shostakovich> .
 
 :wki_244 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Edvard_Grieg> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Edvard_Grieg> .
 
 :wki_245 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Edward_Elgar> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Edward_Elgar> .
 
 :wki_246 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Einojuhani_Rautavaara> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Einojuhani_Rautavaara> .
 
 #:wki_247 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Emilio_Pujol> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Emilio_Pujol> .
 
 :wki_248 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Erik_Satie> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Erik_Satie> .
 
 :wki_249 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Ernest_Chausson> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Ernest_Chausson> .
 
 :wki_250 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Eug%C3%A8ne_Bozza> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Eug%C3%A8ne_Bozza> .
 
 #:wki_251 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fabio_Vacchi> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fabio_Vacchi> .
 
 :wki_252 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fanny_Mendelssohn> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fanny_Mendelssohn> .
 
 :wki_253 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Felix_Mendelssohn> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Felix_Mendelssohn> .
 
 :wki_254 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Ferdinando_Carulli> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Ferdinando_Carulli> .
 
 :wki_255 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fernando_Sor> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fernando_Sor> .
 
 :wki_256 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fr%C3%A9d%C3%A9ric_Chopin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fr%C3%A9d%C3%A9ric_Chopin> .
 
 :wki_257 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fran%C3%A7ois_Couperin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fran%C3%A7ois_Couperin> .
 
 :wki_258 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Francisco_Tarrega> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Francisco_Tarrega> .
 
 :wki_259 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Lachner> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Lachner> .
 
 :wki_260 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Liszt_(S.1_-_S.350)> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Liszt_(S.1_-_S.350)> .
 
 :wki_261 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Liszt_(S.351_-_S.999)> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Liszt_(S.351_-_S.999)> .
 
 :wki_262 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Schubert> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Franz_Schubert> .
 
 :wki_263 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Friedrich_Kuhlau> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Friedrich_Kuhlau> .
 
 :wki_264 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Fritz_Kreisler> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Fritz_Kreisler> .
 
 :wki_265 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Gabriel_Faur%C3%A9> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Gabriel_Faur%C3%A9> .
 
 :wki_266 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Georg_B%C3%B6hm> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Georg_B%C3%B6hm> .
 
 :wki_267 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_George_Enescu> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_George_Enescu> .
 
 :wki_268 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_George_Frideric_Handel> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_George_Frideric_Handel> .
 
 :wki_269 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_George_Gershwin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_George_Gershwin> .
 
 :wki_270 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_George_Onslow> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_George_Onslow> .
 
 :wki_271 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Georges_Bizet> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Georges_Bizet> .
 
 :wki_272 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Germaine_Tailleferre> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Germaine_Tailleferre> .
 
 :wki_273 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Giacinto_Scelsi> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Giacinto_Scelsi> .
 
 :wki_274 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Gioachino_Rossini> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Gioachino_Rossini> .
 
 :wki_275 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Giovanni_Bottesini> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Giovanni_Bottesini> .
 
 :wki_276 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Giovanni_Pierluigi_da_Palestrina> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Giovanni_Pierluigi_da_Palestrina> .
 
 :wki_277 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Girolamo_Frescobaldi> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Girolamo_Frescobaldi> .
 
 :wki_278 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Giuseppe_Verdi> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Giuseppe_Verdi> .
 
 :wki_279 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Gregory_Short> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Gregory_Short> .
 
 :wki_280 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Guillaume_de_Machaut> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Guillaume_de_Machaut> .
 
 :wki_281 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Gustav_Holst> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Gustav_Holst> .
 
 :wki_282 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Harrison_Birtwistle> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Harrison_Birtwistle> .
 
 :wki_283 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Heinrich_Sch%C3%BCtz> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Heinrich_Sch%C3%BCtz> .
 
 :wki_284 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Heitor_Villa-Lobos> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Heitor_Villa-Lobos> .
 
 :wki_285 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Henry_Purcell> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Henry_Purcell> .
 
 :wki_286 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Henryk_G%C3%B3recki> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Henryk_G%C3%B3recki> .
 
 :wki_287 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Herbert_Howells> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Herbert_Howells> .
 
 :wki_288 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Howard_Skempton> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Howard_Skempton> .
 
 :wki_289 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Iannis_Xenakis> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Iannis_Xenakis> .
 
 :wki_290 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Igor_Stravinsky> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Igor_Stravinsky> .
 
 :wki_291 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_James_Scott> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_James_Scott> .
 
 :wki_292 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Jan_Ladislav_Dussek> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Jan_Ladislav_Dussek> .
 
 :wki_293 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Jean-Baptiste_Lully> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Jean-Baptiste_Lully> .
 
 :wki_294 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Jean_Sibelius> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Jean_Sibelius> .
 
 :wki_295 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Jennifer_Higdon> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Jennifer_Higdon> .
 
 :wki_296 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Adolph_Hasse> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Adolph_Hasse> .
 
 :wki_297 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Christian_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Christian_Bach> .
 
 :wki_298 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Jakob_Froberger> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Jakob_Froberger> .
 
 :wki_299 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Joachim_Quantz> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Joachim_Quantz> .
 
 :wki_300 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Nepomuk_Hummel> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Nepomuk_Hummel> .
 
 :wki_301 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Pachelbel> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Pachelbel> .
 
 :wki_302 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Sebastian_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Sebastian_Bach> .
 
 :wki_303 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Strauss_II> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johann_Strauss_II> .
 
 :wki_304 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Johannes_Brahms> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Johannes_Brahms> .
 
 :wki_305 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_John_Cage> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_John_Cage> .
 
 :wki_306 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_John_Philip_Sousa> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_John_Philip_Sousa> .
 
 :wki_307 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Josef_Suk> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Josef_Suk> .
 
 :wki_308 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Joseph_Martin_Kraus> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Joseph_Martin_Kraus> .
 
 #:wki_309 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Juan_Mar%C3%ADa_Solare> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Juan_Mar%C3%ADa_Solare> .
 
 :wki_310 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Karlheinz_Stockhausen> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Karlheinz_Stockhausen> .
 
 :wki_311 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Karol_Szymanowski> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Karol_Szymanowski> .
 
 :wki_312 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Krzysztof_Penderecki> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Krzysztof_Penderecki> .
 
 :wki_313 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Kurt_Atterberg> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Kurt_Atterberg> .
 
 :wki_314 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_L%C3%A9o_Delibes> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_L%C3%A9o_Delibes> .
 
 :wki_315 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Leo%C5%A1_Jan%C3%A1%C4%8Dek> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Leo%C5%A1_Jan%C3%A1%C4%8Dek> .
 
 :wki_316 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Leo_Sowerby> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Leo_Sowerby> .
 
 :wki_317 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Lorenzo_Perosi> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Lorenzo_Perosi> .
 
 :wki_318 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Louis_Couperin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Louis_Couperin> .
 
 :wki_319 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Luciano_Berio> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Luciano_Berio> .
 
 :wki_320 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Ludwig_van_Beethoven> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Ludwig_van_Beethoven> .
 
 :wki_321 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Luigi_Boccherini> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Luigi_Boccherini> .
 
 :wki_322 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Lukas_Foss> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Lukas_Foss> .
 
 :wki_323 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Malcolm_Williamson> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Malcolm_Williamson> .
 
 #:wki_324 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Matteo_Carcassi> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Matteo_Carcassi> .
 
 :wki_325 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Maurice_Ravel> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Maurice_Ravel> .
 
 :wki_326 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Mauro_Giuliani> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Mauro_Giuliani> .
 
 :wki_327 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Max_Bruch> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Max_Bruch> .
 
 :wki_328 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Max_Reger> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Max_Reger> .
 
 :wki_329 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Michael_Haydn> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Michael_Haydn> .
 
 :wki_330 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Mieczyslaw_Weinberg> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Mieczyslaw_Weinberg> .
 
 :wki_331 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Mily_Balakirev> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Mily_Balakirev> .
 
 :wki_332 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Modest_Mussorgsky> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Modest_Mussorgsky> .
 
 :wki_333 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Moritz_Moszkowski> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Moritz_Moszkowski> .
 
 :wki_334 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Muzio_Clementi> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Muzio_Clementi> .
 
 #:wki_335 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Nicholas_Lens> . # who?
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Nicholas_Lens> . # who?
 
 :wki_336 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Nikolai_Kapustin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Nikolai_Kapustin> .
 
 :wki_337 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Nikolai_Rimsky-Korsakov> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Nikolai_Rimsky-Korsakov> .
 
 :wki_338 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Olivier_Messiaen> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Olivier_Messiaen> .
 
 :wki_339 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Otto_Albert_Tich%C3%BD> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Otto_Albert_Tich%C3%BD> .
 
 :wki_340 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Hindemith> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Hindemith> .
 
 :wki_341 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Juon> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Juon> .
 
 :wki_342 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Moravec> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Paul_Moravec> .
 
 :wki_343 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Philip_Glass> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Philip_Glass> .
 
 :wki_344 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Pierre_Boulez> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Pierre_Boulez> .
 
 
 :wki_346 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Rebecca_Clarke> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Rebecca_Clarke> .
 
 :wki_347 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Reynaldo_Hahn> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Reynaldo_Hahn> .
 
 :wki_348 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Richard_Strauss> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Richard_Strauss> .
 
 :wki_349 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Richard_Wagner> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Richard_Wagner> .
 
 :wki_350 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Robert_Schumann> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Robert_Schumann> .
 
 :wki_351 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Robert_Simpson> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Robert_Simpson> .
 
 :wki_352 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Samuel_Barber> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Samuel_Barber> .
 
 :wki_353 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Scott_Joplin> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Scott_Joplin> .
 
 
 :wki_355 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Rachmaninoff> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Rachmaninoff> .
 
 :wki_356 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Taneyev> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Sergei_Taneyev> .
 
 :wki_357 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Sigismond_Thalberg> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Sigismond_Thalberg> .
 
 :wki_358 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Simon_Mayr> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Simon_Mayr> .
 
 :wki_359 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_T%C5%8Dru_Takemitsu> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_T%C5%8Dru_Takemitsu> .
 
 :wki_360 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Takashi_Yoshimatsu> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Takashi_Yoshimatsu> .
 
 :wki_361 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Ad%C3%A8s> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Ad%C3%A8s> .
 
 :wki_362 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Arne> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Arne> .
 
 :wki_363 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Tallis> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Thomas_Tallis> .
 
 :wki_364 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Tomaso_Albinoni> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Tomaso_Albinoni> .
 
 :wki_365 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Victor_Herbert> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Victor_Herbert> .
 
 :wki_366 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Vincent_d%27Indy> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Vincent_d%27Indy> .
 
 #:wki_367 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Wilhelm_Kienzl> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Wilhelm_Kienzl> .
 
 :wki_368 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_William_Byrd> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_William_Byrd> .
 
 :wki_369 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Witold_Lutos%C5%82awski> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Witold_Lutos%C5%82awski> .
 
 :wki_370 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Wolfgang_Amadeus_Mozart> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Wolfgang_Amadeus_Mozart> .
 
 :wki_371 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_compositions_by_Zden%C4%9Bk_Fibich> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_compositions_by_Zden%C4%9Bk_Fibich> .
 
 :wki_372 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_concert_arias,_songs_and_canons_by_Wolfgang_Amadeus_Mozart> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_concert_arias,_songs_and_canons_by_Wolfgang_Amadeus_Mozart> .
 
 :wki_373 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_dances_and_marches_by_Ziehrer> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_dances_and_marches_by_Ziehrer> .
 
 :wki_374 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_fugal_works_by_Johann_Sebastian_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_fugal_works_by_Johann_Sebastian_Bach> .
 
 :wki_375 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_musical_compositions_by_Arthur_Sullivan> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_musical_compositions_by_Arthur_Sullivan> .
 
 :wki_376 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_operas_by_Handel> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_operas_by_Handel> .
 
 :wki_377 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_operas_by_Mayr> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_operas_by_Mayr> .
 
 #:wki_378 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_recorded_compositions_by_Ferruccio_Busoni> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_recorded_compositions_by_Ferruccio_Busoni> .
 
 :wki_379 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Felix_Mendelssohn> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Felix_Mendelssohn> .
 
 :wki_380 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Franz_Schubert> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Franz_Schubert> .
 
 :wki_381 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Johannes_Brahms> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Johannes_Brahms> .
 
 :wki_382 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Robert_Schumann> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Robert_Schumann> .
 
 :wki_383 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Wolfgang_Amadeus_Mozart> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_solo_piano_compositions_by_Wolfgang_Amadeus_Mozart> .
 
 :wki_384 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_songs_and_arias_of_Johann_Sebastian_Bach> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_songs_and_arias_of_Johann_Sebastian_Bach> .
 
 #:wki_386 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_symphonies_in_F_major> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_symphonies_in_F_major> .
 
 :wki_387 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/List_of_works_by_Karl_von_Ordonez> .
+     property:source <file:../source-data/en.wikipedia.org/works/List_of_works_by_Karl_von_Ordonez> .
 
 #:wki_388 a classical:WikipediaWorksListImporter ;
-#     property:source <file:source-data/en.wikipedia.org/works/List_of_works_for_the_stage_by_Wagner> .
+#     property:source <file:../source-data/en.wikipedia.org/works/List_of_works_for_the_stage_by_Wagner> .
 
 :wki_389 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/Schubert_compositions_D_number_1-504> .
+     property:source <file:../source-data/en.wikipedia.org/works/Schubert_compositions_D_number_1-504> .
 
 :wki_390 a classical:WikipediaWorksListImporter ;
-     property:source <file:source-data/en.wikipedia.org/works/Schubert_compositions_D_number_505-998> .
+     property:source <file:../source-data/en.wikipedia.org/works/Schubert_compositions_D_number_505-998> .