DOREMUS applicationUser guide
User guide

Cataloguing and discovering music with the DOREMUS model

The application has two spaces built on the same knowledge graph: Discover music, to search and explore works, concerts, performers and recordings, and the Music catalogue, to describe them following the DOREMUS ontology. This guide walks through every screen.

Overview

Discover music

Read-only, for the public and for librarians: works, people, questions in plain language answered by Claude, instruments, performance history, scoring, timeline and map, networks of performers, explained recommendations and generated programme notes.

Music catalogue

For cataloguers: records of works, events (planned and actual), programming, recordings, post-production, publications, persons and corporate bodies, each one checked against the model's rules (SHACL) before it is saved, with its RDF visible at all times.

Both spaces read the same triplestore (Apache Jena Fuseki). It holds a real extract of data.doremus.org — BnF, Philharmonie de Paris and Radio France data — and the records created in the catalogue. The DOREMUS model extends FRBRoo and CIDOC-CRM: a work (F14) is realised by an expression (F22), a concert is a performance (F31), an announced concert is a foreseen performance (M26), and so on (see Model codes).

A record of data.doremus.org is never changed. When you open one in the catalogue to enrich it, the application copies it into a new catalogue record that points to the original (owl:sameAs, prov:wasDerivedFrom); from then on Discover shows the enriched record instead of the original.

Getting started

Open the application in a browser at the address of the server (on a local installation: http://localhost:8000). The start page leads to the two spaces:

Each space has a link to the other in its top bar (« ↔ Cataloguing space », « ↔ Discover »). In Discover, the model codes box shows the classes and properties of the model beside each heading (F22, M6 → M23…), for those who want to see how a page is built on the graph.

Languages

The interface is available in French, English and German: use FR · EN · DE at the top right of either space. The choice is remembered by the browser. A link can also give the language: /explore.html?lang=de.

Discover music

The top bar has Home and three menus, by what you want to do: Search (works, concerts and programming, people and ensembles, instruments), Explore (all the text and questions, scoring, timeline and map, networks, recommendation) and Write (text generation). Click a menu to open it: each service says in one line what it does. The menu of the current page is highlighted. Escape or a click elsewhere closes it. On the right: model codes, Documentation, the link to the catalogue and the language switch.

The Explore menu opened
The Explore menu opened: each service with a line saying what it does.

On a phone or a narrow window, the bar keeps only the title and a menu button (☰). It opens the whole menu on the screen — every service with its line, then Documentation, the catalogue and the language switch — and becomes a cross to close it.

Every page title, work, performer or concert is a link; every page has a link to its RDF data.

Home

The home page has a single search box: type a name or a title and the full-text index suggests works, performers and concerts as you type; type a question and press Ask to send it to Claude. Below, the figures of the corpus and one card per service.

Home page of Discover music
Home page: search box, sample questions, figures of the corpus and the services.

Combine facets that are properties of the model: composer, genre, period, key, instrument family, level and duration. Results are the intersection of the choices, and the counts beside each value are recomputed after every click. Sort by number of performances, creation date, duration or title. By default only works performed in a catalogued concert or recorded are listed; tick include works with no known performance for all expressions (F22). These works may well have been performed: the data simply hold no concert or recording of them.

Works: search with facets
Works: facets on the left, works with their genre and scoring on the right.

People & ensembles

Find a person or an ensemble by any of their names — variants, transliterations, pseudonyms, the BnF form — even misspelt (« bernstien »), by what they did (« pianiste », « chef ») or by words of their biography (« né à Vienne »). Facets: type, role, instrument played, century and place of birth, gender; an A–Z index browses the list by surname. Each row links to the person's network, their RDF data and their Wikipedia page when the alignments found one.

People and ensembles search
People & ensembles: search box, facets, alphabetical index and results with life dates and biography.

Person page

The name of a person or an ensemble opens its page. At the top, what the graph knows: names, dates, roles and instruments, biography, the works composed (most performed first), recent concerts, frequent partners and the composers performed. Below, one box per external source the person is aligned with — Wikidata, Wikipedia, BnF (data.bnf.fr), MusicBrainz, ISNI, VIAF — with a short summary; Show everything opens the whole record, in sections (Wikidata statements, the full Wikipedia article, the BnF authority record and its links to other authorities, the MusicBrainz discography and relationships, the ISNI name forms and titles). The sources are read live and kept a week; each box gives its licence and the date it was read. VIAF no longer has an open interface: its box only links to viaf.org.

The sources compared puts dates, places and identifiers side by side and marks the disagreements (for example a birth year, or an ISNI that belongs to someone else). When no source is aligned yet, the page offers searches in Wikidata, the BnF catalogue and MusicBrainz.

All the text & questions

One box for two uses. A word or a phrase, then Enter: every text of the database that contains it is listed at once — names and titles, but also biographies, programme and catalogue notes, casts, other title forms, definitions and notes of the vocabularies — with the passage where it was found, highlighted, and the field it is in. Results are grouped by kind (people, works, concerts and announcements, recordings, publications, places, vocabularies, other resources) and can be filtered by kind and by field. Accents and capitals do not matter; all the words must be in the same text; « "création mondiale" » looks for the exact phrase and « dodéca* » for words beginning so. No stemming: « compositeur » does not find « compositeurs » (write « compositeur* »).

A question in plain language, then Ask Claude (or Ctrl+Enter), as you would ask a librarian: « Who has most often played Schubert's Death and the Maiden? », « Which works were premiered in Darmstadt? ». Claude searches the same texts, writes and runs SPARQL queries on the graph, and answers with links to the works, performers and concerts it found. The queries it ran are shown under each answer. Answers rely only on the graph: « no result » means « not in the extract », not « never happened ». For « what has been written about… » Claude reads the open library catalogues live (tool bibliographie, see Bibliography) and cites the records with their links; a question that crosses the bibliography with the graph (« conductors who have a monograph and conducted at Pleyel ») only covers the records kept in the graph, and Claude says so. Questions need an Anthropic API key on the server; the search in all the text does not.

Questions about the graph
Questions: type a question, Claude answers from the graph and shows its queries.

Work page

The page of a work gathers what the graph knows: composer, creation, genre, key, opus, duration and the scoring planned by the composer (M6 → M23); its figures (catalogued performances, published recordings, first and last performance, places, performers) and a chart of performances per year; the full history of its performances; its recordings (tracks and sets of tracks, from the radio, the studio or a recorded concert, with or without a catalogued concert); related works and a button to generate a programme note.

Work page
Work page: the work, its figures, the chart of performances per year, then the history and the recordings.

Performance page

A concert (F31): its programme with the performers of each work and their role, the performers of the whole concert, the recording and publication chain when there is one, and — when an announcement (M26) was paired with it — the difference between what was announced and what was played: replacements, additions, removals.

Performance page
Performance page: programme, performers and the comparison with the announced concert.

Instruments

A gallery of the instruments, voices and ensembles of the works and concerts, the most used first, with a picture from Wikimedia Commons when there is one. Filter by family (strings, winds, keyboards, percussion, voices, ensembles) or search by name. Each tile opens the page of the instrument.

Gallery of the instruments
Instruments: the gallery, with families as filters.

The page of an instrument brings together what the graph and the web know about it:

The instruments of a work's scoring link to their page. To study a whole family (« Clarinets », « Strings »), type its name in the gallery's search: the families are offered above the instruments.

Page of the clarinet
The page of the clarinet.

Bibliography

The pages of a work, a person, an ensemble and an instrument have a Bibliography button in their header and a section of the same name at the end (also a tab of the page). It brings the books, theses and articles about it, read live in the open catalogues — the BnF (data.bnf.fr), the French university libraries (IdRef / SUDOC), Wikidata, the Deutsche Nationalbibliothek (by the GND identifier), the Library of Congress (by its name or subject heading) and OpenAlex — the first time in a few seconds, then from a cache kept a week.

In the catalogue, the same section is on the work's Bibliography tab and at the end of a person's record, read only. Claude also answers « what has been written about… » with the tool bibliographie.

Concerts and programming

The page is about concerts: the ones that took place (F31), the programming (M26) — past or to come, as programmes and announcements give it, each the result of reading a programme —, the gap between the two, and the venues. Four tabs: Programming — the same search as for the concerts, on what was programmed (works, performers and instruments foreseen, venue, period, words); Concerts — by a work played, a performer present, an instrument, voice or ensemble played (M28 U1; a family such as « strings » finds all its instruments, and the IAML and MIMO concepts of the same name find each other), a venue, a period (since / until a year or a month) and words of the title, venue, city, performers or works, all combined; Programmed / performed: the gap; and Concert venues — every place with its number of concerts, years and programmings, and the concerts held there. The data does not link a programming (M26) to its concert (F31): the application pairs them (same day, then shared performers and works). The performance history of a work is on its work page.

Concerts and programming page with tabs
Concerts and programming: find a concert by work, performer, instrument, venue or period; the venues; programmed compared with performed.

By scoring

« Which works can I play with a quartet and a clarinet? ». Add instruments, voices or ensembles; choose whether the works must include them, be playable with only them, or have been played in concert with them; narrow by genre and period. The instrument hierarchy is used: « strings » also finds violins, violas and cellos.

Search by scoring
By scoring: instruments, mode and examples.

Timeline & map

Performances in time and space: a chart by year or by decade, filtered by composer or city; a map of the places (coordinates from GeoNames; the size of a circle is the number of performances); the cities and their halls.

Timeline and map
Timeline & map: performances over time, map of the places and list of cities.

Networks

Who plays with whom: two performers are linked when they appear in the same concert, and the thickness of the link counts the concerts they shared. Click a node to centre the network on it; the list below gives every performer with their main roles, period and partners.

Network of performers
Networks: Leonard Bernstein and his most frequent partners.

Recommendation

Related works scored on the links of the graph — same composer, genre, key, period, similar scoring, shared performers, played in the same concert — and each suggestion says why.

Explained recommendations
Recommendation: related works with the reasons for each one.

Text generation

Choose a work or a concert and a style — concert introduction, programme note, catalogue entry, social media post. The subgraph of the record (shown on the page) gives the catalogue facts; for the introduction, the programme note and the post, Claude adds its own knowledge of the composer and the work, in the style of the Philharmonie de Paris presentations. The catalogue entry sticks to the graph. Without an API key, a template text built with fixed rules is shown.

Text generation
Text generation: the subgraph sent to Claude, the styles and the text.

RDF data

Every resource has a page with all its triples: the properties where it is the subject, the incoming relations where it is the object, and the graph each triple comes from. Each value is a link to its own RDF page.

RDF data of a resource
RDF data: properties and incoming relations of a work.

Music catalogueDescribing music in the catalogue

The left menu follows the chain of the musical event — works, programming, events, recordings, post-production, publications — then the agents and the vocabularies. The search box at the top (⌘K) finds a work, a concert or a performer. Each list shows the catalogue records and, below, the resources of data.doremus.org of the same kind.

Dashboard

Counts for the whole database and for what was created with the application, the chain of the musical event (each step is an FRBRoo triad: an event creates a work and its expression; what is planned is distinct from what happened) and a list of things to do.

Catalogue dashboard
Dashboard of the catalogue.

Editing a record

Every record has the same buttons at the top right:

ButtonWhat it does
Check the RDFChecks the record against the rules of the DOREMUS model (SHACL shapes) and shows the report and the RDF on the right. Nothing is saved.
DiscardDiscards the unsaved changes: the record goes back to its last saved version. A record never saved (new, or copied from data.doremus.org) is dropped; the original resource is unchanged.
SaveChecks the record, then saves it in the catalogue graph. Refused while errors remain; warnings do not prevent saving.

Beside the buttons, a status says whether the record is saved, has unsaved changes, or is a new record (or a copy of data.doremus.org) not saved yet. Leaving the page with unsaved changes asks for confirmation. The RDF inspector (top bar) shows, at all times, the RDF graph of the record as the API generates it, and the SHACL report: errors in red, warnings in orange.

Fields that take a value from a vocabulary (key, genre, instrument, function…) propose the concepts as you type; agents and places are chosen in the same way, and a new one can be created on the spot.

Works

A work record (F14 realised by F22) has four tabs. Identification: uniform titles, one per language, variant titles, type and level, key, opus and thematic catalogue number, genres, duration, creation (composer and other creators with their function, date in EDTF, place), dedication. Scoring (M6): the parts planned by the composer, each with its instrument or voice and number. Structure: the movements. Performances: the events where the work was played.

List of works
Works: catalogue records, then the works of data.doremus.org, most performed first. Opening a DOREMUS work copies it into the catalogue to enrich it.
Work record, identification tab
Work record, Identification tab.
Work record, scoring tab
Work record, Scoring tab (M6 Casting → M23 Casting Detail).

Events

An event separates what was planned (M26, one version per announcement: brochure, programme sheet, press release) from what actually happened (F31). The chain at the top links the event to its programming, recording, post-production and publication.

A concert of data.doremus.org opens as a pre-filled event card (planned and actual), ready to be enriched and saved.

List of events
Events: catalogue events, then the concerts and the announcements of data.doremus.org.
Planned event
Event, Planned tab: versions of the announcement and planned cast.
Actual event
Event, Actual tab: works played and individual performances.
Planned and actual comparison
Planned / actual comparison: the conductor announced was replaced (orange), a concertmaster and an encore were added (green).

Programming

Seasons, festivals, series and tours: a programming activity (E7, or M25 when it is only planned) puts a programme (M59) into effect; the programme lists its events.

Programming record
Programming record: type, period, organiser, programme and its events.

Recordings

A recording event (F29) records a concert (F31) and creates a recording (F26) and its master (F4): producer, technical team, equipment, duration, technical features, spatialisation, carrier of the master. A recording of data.doremus.org opens as a pre-filled recording card, with the recorded concert, the producer and the place cited by their IRI.

Recording record
Recording record.

Post-production

An editing (M29) edits a recording and creates a set of tracks (M46): contributors, equalisation, noise reduction, spatialisation, mastering and mixing equipment, and the tracks with their order, title, duration and the performed work each one records.

Post-production record
Post-production record with its tracks.

Publications

A publication event (F30) creates a publication expression (F24) carried by a product type (F3) and its copies (F5): label, date, title proper and statements of responsibility (ISBD areas), identifiers such as the EAN, carrier, extent, duration, and the copies with their shelfmark, holder and status.

Publication record
Publication record.

Agents

One list for the catalogue records and the persons and corporate bodies of data.doremus.org, searchable by any form of the name, by role and by A–Z index. A record describes a person (E21), a group (E74) or a corporate body (F11): preferred name in the BnF form, other forms, gender, birth and death (date in EDTF, place), identifiers and alignments (ISNI, BnF, VIAF, Wikidata, MusicBrainz), cataloguer's note and biography. A person of data.doremus.org opens as a pre-filled record and is saved as an enrichment.

List of agents
Agents: one list, with sources, types and the A–Z index.
Agent record
Agent record: identity, life, identifiers and alignments, notes, and what the data says about the person.

Vocabularies

The SKOS vocabularies the records take their values from: instruments (MIMO and IAML), genres, keys, functions… The first page lists them with their source, languages, hierarchy and how much the data uses them; a vocabulary opens on its concepts in every language, in hierarchical order, with a search across all languages and non-preferred forms.

List of vocabularies
Vocabularies.
Concepts of a vocabulary
The concepts of the « Keys » vocabulary in each language.

From a concert programme

Give a photo of a concert programme (JPEG, PNG, WebP) or a link to a concert page: Claude reads the document, and the application matches the works, performers, place and instruments with the graph. You check each line — choose a candidate or create a new record — then the planned event (M26) is pre-filled.

Import from a concert programme
From a concert programme: photo or link.

DOREMUS model

The Help section of the menu has a page that maps each screen to the classes and properties of the model, and lists what the prototype does not cover.

DOREMUS model page
What each screen covers in the DOREMUS model.

Data and sources

GraphContent
urn:g:doremusExtract of data.doremus.org: the most performed works and their performances, Philharmonie concerts, all announcements (M26), plus a jazz extract and a French chanson extract, with their concerts and recordings. Changed only by documented loading steps (genre harmonisation, instrument values, ISNI URIs).
urn:g:dataRecords created or enriched in the catalogue.
urn:g:vocab, urn:g:vocab-localSKOS vocabularies, and local concepts added from the catalogue.
urn:g:alignISNI alignments of persons (ISNI SRU API: name, then dates or years of musical activity).
urn:g:wikidataWikidata alignments: persons with a BnF record by their BnF identifier, the others by name with the same rules as for ISNI. Adds Wikidata, ISNI, VIAF, MusicBrainz and BnF links, French and English Wikipedia pages and missing life years. Disagreements are not written but listed for review.
urn:g:instrumentsWhat the web knows about the instruments, by MIMO number: Wikidata (picture, sound, Hornbostel-Sachs number), Commons (author and licence of each file), Wikipedia introductions (fr, en, de), Hornbostel-Sachs names (MIMO vocabulary service), museum objects of MIMO on Europeana.
urn:g:biblioThe bibliography the users chose to keep (Bibliography section): documents « about » a work, a person, an ensemble or an instrument (E73, or F24 for an edition, P129 is about), with their original record and digital version, and the number of publications per year. Read again by make biblio-refresh. The rest of the bibliography is read live from the BnF, IdRef / SUDOC, Wikidata, the DNB, the Library of Congress and OpenAlex, and kept a week in a cache, not in the store.
urn:g:same-agentsComposers that data.doremus.org has several times under names differing only by capitals, accents or hyphens (« Antonio VIVALDI » / « Antonio Vivaldi »), with dates that agree: each duplicate owl:sameAs the agent kept (make dedup-agents). Discovery shows one person with all the works and concerts; the data of data.doremus.org are not changed.
urn:g:provProvenance (PROV) of every save and every loading step.

Administration

On the server, from the application folder (commands of the Makefile):

make up              # start Fuseki
make dev             # start the application (port 8000)
make load-doremus    # reload the data.doremus.org extracts and their loading steps
make import-jazz     # fetch and add the jazz extract
make import-chanson  # fetch and add the French chanson extract
make import-works    # fetch and add every work not yet loaded (no performances; about 22 hours)
make isni            # align persons with ISNI
make wikidata        # align persons with Wikidata
make instruments     # collect pictures, sounds, Wikipedia and museum objects for the instruments
make biblio-refresh  # read again from the catalogues the bibliography kept in urn:g:biblio
make test            # run the tests

The questions and the generated texts use the Anthropic API: set ANTHROPIC_API_KEY in the .env file. Without it, the rest of the application works and text generation falls back on the template.

Model codes

The codes shown beside headings (when « model codes » is ticked) and in the catalogue are those of FRBRoo (F, R), CIDOC-CRM (E, P) and DOREMUS (M, U).

CodeMeaning
F14 / F22Individual work / its self-contained expression (titles, key, genre, scoring)
F28Expression creation: composer, date and place of composition
M6 → M23Casting planned by the composer → casting detail (one part)
M26 / M27Foreseen performance (an announced concert) / foreseen individual performance
F31 / M28Performance (a concert, or a work in it) / individual performance (a performer, an instrument, a role)
M42 → M43Performed expression creation → performed expression (the work as played)
F29 → F26, F4Recording event → recording, master
M29 → M46, M24Editing → set of tracks, track
F30 → F24, F3, F5Publication event → publication expression, product type, item
E7 / M25, M59Programming activity (actual / planned), programme
E21 / E74 / F11Person / group / corporate body
E52 / E53Time-span / place

Technical architecture

The application is two programs: a triple store that holds every piece of data, and one Python process that serves the API and the web pages. There is no other database: the records of the catalogue, their editing state, the vocabularies, the ontologies and the provenance are all RDF in the triple store.

Discover music

explore.html · read-only services, questions, RDF view

Music catalogue

app.html · records, RDF inspector, validation report

User guide

guide/index.html · this document

↕ HTTP and JSON (/api/…), streamed answers for questions

Application server · FastAPI (Python 3.12)

Read services and discovery index, conversion of records to RDF, SHACL validation, provenance, calls to Claude

Anthropic API

Claude: questions, text generation, reading of concert programmes

↕ SPARQL 1.1 Query and Update

Apache Jena Fuseki 5.6.0

TDB2 store, one named graph per source, default graph = union of the graphs, Lucene full-text index

Loading only

data.doremus.org SPARQL endpoint, ISNI SRU API, Wikidata

The external services in dashed boxes are not needed to browse or catalogue: the data.doremus.org extract and the alignments are loaded once into the store; only questions, generated texts and programme reading call the Anthropic API.

Technology stack

LayerTechnologyRole
Triple storeApache Jena Fuseki 5.6.0 (Java 21), TDB2Stores all the RDF in named graphs; SPARQL 1.1 Query, Update and Graph Store Protocol. Built from fuseki/Dockerfile and run with Docker Compose, reachable from the machine only.
Full-text searchJena text + Apache LuceneIndex of rdfs:label, skos:prefLabel / altLabel, uniform titles (U71), titles (P102) and subtitles (U67), insensitive to accents and case; queried in SPARQL with text:query.
Application serverPython 3.12, FastAPI 0.156, Uvicorn 0.54One process for the REST API and the static pages.
RDF and validationrdflib 7.6, pySHACL 0.40Builds the RDF of each record and validates it against the SHACL shapes before it is saved.
HTTP clienthttpx 0.28Calls to Fuseki, to data.doremus.org and to the alignment sources.
Language modelAnthropic Python SDK 1.16, Claude Opus 5.5Questions in plain language (tools: full-text search, read-only SPARQL, bibliography), generated texts, reading of concert programmes. Optional: set ANTHROPIC_API_KEY.
Web pagesHTML, CSS and plain JavaScriptNo framework and no build step; French, English and German interface; light and dark themes.
Toolinguv, Docker Compose, Make, pytestPython environment, the store's container, the commands of the Administration chapter, the automated tests.

Ontologies

The ontologies are loaded in urn:g:ontology (folder ontology/); the catalogue writes RDF that respects their domains and ranges.

OntologyPrefixFile and versionUsed for
CIDOC-CRM, Erlangen OWL version (ECRM)ecrm:crm.rdf, CIDOC-CRM 6.2.1Events, actors (E21, E74), time-spans (E52), places (E53), titles, identifiers
FRBRoo, Erlangen OWL version (EFRBRoo)efrbroo:frbroo.owl, EFRBRoo 121016 / FRBRoo 1.0.2Works and expressions (F14, F22, F28), performances (F31), recordings (F29, F26), publications (F30, F24, F5)
DOREMUS ontologymus:doremus.ttl, modified March 2024The music extension: casting (M6, M23), foreseen performances (M26, M27), individual performances (M28), editing and tracks (M29, M46, M24), programming (M59), keys, genres, opus and catalogue statements
SKOSskos:W3CThe controlled vocabularies and their hierarchies (skos:broader)
PROV-Oprov:W3CProvenance of every save, deletion and loading step
Dublin Core terms, BIBOdcterms:, bibo:DCMI, Bibliographic OntologyThe bibliography kept in urn:g:biblio: title, creator, date, publisher, language, type; ISBN and DOI
OWL-Timetime:W3CDates of data.doremus.org (time:hasBeginning, time:inXSDDate)
OWLowl:W3Cowl:sameAs between an enriched record and the data.doremus.org original
Schema.org, GeoNames, WGS84schema:, gn:, geo:as used by data.doremus.orgBirth and death dates of persons; cities and coordinates of places

Vocabularies and shapes

How the data moves

Code layout

PathContent
backoffice/main.pyApplication entry point (the back-office): API routes and static pages; the code below is the shared core core/doremus_core/
core/doremus_core/store.py, core/doremus_core/sparql/Access to Fuseki and the SPARQL queries
core/doremus_core/corpus.py, services.py, people.py, resource.pyDiscovery index, discovery services, people search, generic RDF view
core/doremus_core/cards.py, records.py, validation.py, importer.pyCatalogue records: RDF conversion, saving, SHACL validation, pre-filled records from data.doremus.org
core/doremus_core/vocab.py, vocabularies.pyControlled vocabularies
core/doremus_core/chat.py, textgen.py, programme.pyFeatures that use Claude
core/doremus_core/biblio.py, backoffice/web/biblio.jsBibliography: the catalogues read live (BnF, IdRef / SUDOC, Wikidata, DNB, Library of Congress, OpenAlex), one record per book, exports for Zotero, what is kept in urn:g:biblio
backoffice/web/, core/doremus_core/i18n/The web pages and this guide; the interface translations (shared core)
ontology/, vocabularies/, shapes/Ontologies, SKOS vocabularies, SHACL shapes
scripts/, fuseki/, tests/Loading and alignment scripts, the store's container and configuration, automated tests

Screenshots taken from the application in English, October 2026.