I am thinking of creating a software to manage bibliography and associated documents (especially, in academia). I discovered Solid recently and would like to make the software compatible. For this reason, I am turning to you to get advices on how to make a good start and what to keep in mind.
The main motivation for such a software is to make one’s bibliography more reusable. The only proper (= open source, open data format and a good set of features) bibliography management is Zotero. However, it has three main drawbacks: 1) the data is not stored in a convenient way (each document has its own folder, metadata are in a SQLite database with many foreign keys), 2) its does not scale well with large databases, 3) it is not modular. As an example, no mobile app has been designed for it (or only with short lifetime).
My first goal would be to get a desktop app with local storage. However, I want to make sure that it is possible to link the data to a pod later such that it can easily be reused by web or mobile apps (or even someone else’s desktop app). I am thinking to use Node.js and Electron.
Important points I see are:
- Choosing a good Vocabulary. For documents, I have found the DCMI vocabulary, which looks appropriate for my needs in order to store objective metadata. However, I don’t see how to include within subjective metadata (notes, tags, rating, read/unread status, etc.). What’s the best strategy to handle this case? I would say that it is to create a separate vocabulary including the subjective metadata and linking to the objective metadata.
- How to store the metadata locally? The FAQ says that Solid cannot be used offline yet, however, the module solid-node-client seems to allow it. I am not really familiar with non-SQL storage: it looks like RDF (using e.g. rdflib) is the preferred way, however, isn’t it possible to use more human-readable format like json, or some serialized form (which seems quite common in Electron apps), or is it a bad idea? Does a RDF database scales well with tens of thousands of data?
- Which aspects from Solid (acl, login…) should be implemented from the begin to avoid a painful integration later?
Any idea/comment/feedback is much appreciated!