Metadata service, client, UI overview #4
Description
This is an issue that provides an overview of the proposed metadata service, client, and UI being developed in this repo.
Background
Entities in the JupyterLab universe (notebooks, text files, datasets, models, visualizations, etc.) often have rich context and metadata associated with them. Examples include:
- Authors
- Related works and publications
- Data catalogs
- Institutions
- Publishers
- Code snippets
This rich context is incredibly useful to groups of people working with code and data. This goal of this work is to build a metadata architecture to enable Jupyter users to collaboratively create and explore metadata for any entity in the Jupyter universe.
What metadata standard
We have considered a number of existing metadata standards, and the one that is emerging as a top candidate is that of https://schema.org/. It appears to be rich enough to describe the different types of metadata we encounter in the Jupyter universe. In talking with potential users of this system, that flexibility seems to be important.
See jupyterlab/jupyterlab#5733 for additional discussion about metadata schema.
Implementation
The current proposal is to create a Jupyter notebook server extension that is a GraphQL service for the relevant subset of the schema.org metadata schema. We haven't worked through what subset of the schema is relevant for Jupyter, but it will probably be the document and data related ones (probably won't start with things like https://schema.org/FlightReservation).
The usage of GraphQL is important because we imagine a wide range of complex UIs being built to display and edit this highly nested metadata. Being able to get back and edit rich data in single queries will be really helpful on the frontend.
We haven't decided if this notebook server extension will be written in Python or node.js (or both), but it shouldn't really matter.
For a client, we are imagining a TypeScript based library that provides a thin, well-typed API for talking to the service.
The notebook server and TypeScript client library should be entirely independent of JupyterLab and useful outside of it.
Finally, we plan on creating a JupyterLab extension that offers a user experience for editing and viewing metadata for entities in JupyterLab. Initial work will focus on notebooks, data sets, text documents.
Initially, this repo will create our explorations of the notebook server, TypeScript client, and JupyterLab UI extension, but these may be separated out over time.