# HG changeset patch # User Chris Cannam # Date 1580310032 0 # Node ID 6547119dbc5487c34c90d6989b4be8c0da727e50 # Parent ba8d1129a062d060568983ba8fbd6185544c5050 Import all sets of RDF files; omit resources without titles; show any given library once only; warn to stderr if any are missing diff -r ba8d1129a062 -r 6547119dbc54 installer.cpp --- a/installer.cpp Wed Jan 29 14:16:47 2020 +0000 +++ b/installer.cpp Wed Jan 29 15:00:32 2020 +0000 @@ -50,33 +50,39 @@ return entries; } +void +loadLibraryRdf(BasicStore &store, QString filename) +{ + QFile f(filename); + if (!f.open(QFile::ReadOnly | QFile::Text)) { + cerr << "Failed to open RDF resource file " + << filename.toStdString() << endl; + return; + } + + QByteArray content = f.readAll(); + f.close(); + + try { + store.importString(QString::fromUtf8(content), + Uri("file:" + filename), + BasicStore::ImportIgnoreDuplicates); + } catch (const RDFException &ex) { + cerr << "Failed to import RDF resource file " + << filename.toStdString() << ": " << ex.what() << endl; + } +} + unique_ptr loadLibrariesRdf() { - QDir dir(":out/"); - auto entries = dir.entryList({ "*.ttl", "*.n3" }); - unique_ptr store(new BasicStore); - for (auto e: entries) { + vector dirs { ":rdf/plugins", ":out" }; - QFile f(":out/" + e); - if (!f.open(QFile::ReadOnly | QFile::Text)) { - cerr << "Failed to open RDF resource file " - << e.toStdString() << endl; - continue; - } - - QByteArray content = f.readAll(); - f.close(); - - try { - store->importString(QString::fromUtf8(content), - Uri("file:" + e), - BasicStore::ImportIgnoreDuplicates); - } catch (const RDFException &ex) { - cerr << "Failed to import RDF resource file " - << e.toStdString() << ": " << ex.what() << endl; + for (auto d: dirs) { + for (auto e: QDir(d).entryList({ "*.ttl", "*.n3" })) { + loadLibraryRdf(*store, d + "/" + e); } } @@ -126,18 +132,17 @@ continue; } + Node title = store.complete(Triple(t.subject(), + store.expand("dc:title"), + Node())); + if (title.type != Node::Literal) { + continue; + } + LibraryInfo info; info.id = wi->first; info.fileName = wi->second; - - Node title = store.complete(Triple(t.subject(), - store.expand("dc:title"), - Node())); - if (title.type == Node::Literal) { - info.title = title.value; - } else { - info.title = info.id; - } + info.title = title.value; Node maker = store.complete(Triple(t.subject(), store.expand("foaf:maker"), @@ -173,8 +178,14 @@ } results.push_back(info); + wanted.erase(libId.value); } + for (auto wp: wanted) { + cerr << "Failed to find any RDF information about library " + << wp.second << endl; + } + return results; }