Overview
Odeuropa Explorer is a fascinating project that digitizes European olfactory heritage. Funded by the EU's Horizon 2020 research program, it provides a platform for cross-searching and exploring historical scent experiences.
The project classifies scent-related information into three main categories:
- Smell sources: Objects and substances that emit odors
- Fragrant Spaces: Places and spaces associated with scents
- Gestures and Allegories: Gestures and allegorical expressions related to scents
This article reports the results of investigating what hierarchical structures these vocabularies have, using SKOS (Simple Knowledge Organization System) data published in the Odeuropa vocabularies repository.
Methodology
SKOS Hierarchy Visualization Script
To understand the hierarchical structure of the vocabularies, I created a script in Node.js to parse SKOS Turtle files.
import $rdf from 'rdflib';
import fs from 'fs';
const SKOS = $rdf.Namespace('http://www.w3.org/2004/02/skos/core#');
async function visualizeHierarchy(ttlFile) {
const store = $rdf.graph();
const data = fs.readFileSync(ttlFile, 'utf8');
$rdf.parse(data, store, 'http://example.org/', 'text/turtle');
// Get all concepts
const concepts = store.match(null,
$rdf.sym('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
SKOS('Concept'));
// Build maps for broader/narrower relationships
const broaderMap = new Map();
const narrowerMap = new Map();
const conceptLabels = new Map();
for (const concept of concepts) {
const subject = concept.subject;
// Get prefLabel
const labels = store.match(subject, SKOS('prefLabel'), null);
if (labels.length > 0) {
conceptLabels.set(subject.value, labels[0].object.value);
}
// Get broader concepts
const broaders = store.match(subject, SKOS('broader'), null);
if (broaders.length > 0) {
const broader = broaders[0].object.value;
broaderMap.set(subject.value, broader);
if (!narrowerMap.has(broader)) {
narrowerMap.set(broader, []);
}
narrowerMap.get(broader).push(subject.value);
}
}
// Print hierarchy recursively
function printHierarchy(conceptUri, indent = '', visited = new Set()) {
if (visited.has(conceptUri)) return;
visited.add(conceptUri);
const label = conceptLabels.get(conceptUri);
const children = narrowerMap.get(conceptUri) || [];
console.log(`${indent}${label}`);
children.forEach((child, index) => {
const isLast = index === children.length - 1;
const prefix = isLast ? 'βββ ' : 'βββ ';
printHierarchy(child, indent + prefix, new Set(visited));
});
}
// Find and display top-level concepts
const topLevelConcepts = [];
for (const concept of concepts) {
if (!broaderMap.has(concept.subject.value)) {
topLevelConcepts.push(concept.subject.value);
}
}
topLevelConcepts.forEach(concept => printHierarchy(concept));
}
The main processing steps of this script are:
- Loading the RDF graph: Parse vocabulary files in Turtle format using
rdflib - Extracting hierarchical relationships: Manage
skos:broaderandskos:narrowerrelationships with Map objects - Identifying top-level concepts: Detect concepts that do not have
skos:broader - Recursive hierarchy display: Visually represent the data as a tree structure
Execution
The script was run against all three vocabularies:
# Smell sources
node visualize-hierarchy.js olfactory-objects.ttl > olfactory-objects-hierarchy.txt
# Fragrant Spaces
node visualize-hierarchy.js fragrant-spaces.ttl > hierarchy-fragrant-spaces-20251010-231358.txt
# Gestures and Allegories
node visualize-hierarchy.js olfactory-gestures.ttl > olfactory-gestures-hierarchy.txt
Results
1. Smell Sources
Total concepts: 685
Top-level concepts: 13
Concepts with children: 77
Maximum hierarchy depth: 4
Depth distribution:
- Level 0 (top-level): 13 concepts
- Level 1: 383 concepts
- Level 2: 202 concepts
- Level 3: 42 concepts
- Level 4: 45 concepts
Top-level categories:
Abstract
Artefact
Being
Body
Element
Flora
Food
Fragrance / Cosmetic
Fumes
Matter
Nature
Product
Religion
Examples of notable deep hierarchical structures:
Being hierarchy (click to expand)
Being (555)
βββ Kadaver (23)
βββ Onycha (397)
βββ Person (539)
βββ βββ Man (540)
βββ βββ Woman (541)
βββ Tier (13)
βββ (gestrandeter) Wal (5)
βββ Γschen (428)
βββ Biber (14)
βββ Big cat (571)
βββ Drachen (56)
βββ DΓΌnger (98)
βββ Fell (76)
βββ Fisch (68)
βββ Hunde (55)
βββ Moschushirsch (101)
βββ Musk Rat (102)
βββ Oiselet (387)
βββ Pottwal (153)
βββ Stinktier (146)
βββ Wirbellos (464)
β βββ Crustacean (343)
β β βββ Crab (489)
β β βββ Languste (469)
β βββ Fliegen (468)
β βββ Garnele (470)
β βββ Insekt (471)
β β βββ Ant (490)
β β βββ Cocoon (518)
β β βββ Dragonfly (491)
β β βββ Grasshopper (504)
β β βββ Maggot (601)
β β βββ Moth (525)
β β βββ Vetiver (398)
β βββ Muschel (465)
β βββ Raupe (467)
β βββ Schmetterling (466)
β βββ Snail (488)
β βββ Spider (526)
β βββ Worm (542)
βββ Wirbeltiere (459)
β βββ Amphibia (479)
β β βββ Frog (524)
β βββ Karkasse (460)
β βββ Mammal (480)
β β βββ Antilopinae (580)
β β βββ Armadillo (581)
β β βββ Bear (514)
β β βββ Boar (584)
β β βββ Bullen (191)
β β βββ Camel (508)
β β βββ Deer (503)
β β βββ Elephant (590)
β β βββ Ferret (593)
β β βββ Fox (594)
β β βββ Guinea pig (510)
β β βββ Hausesel (463)
β β βββ Hauskatze (462)
β β βββ Hedgehog (599)
β β βββ KΓΌhe (190)
β β βββ Leopard (515)
β β βββ Lion (502)
β β βββ Monkey (499)
β β βββ Mouse (509)
β β βββ Pferde (189)
β β βββ Rabbit (501)
β β βββ Rat (500)
β β βββ Schaf (193)
β β βββ Schweine (188)
β β βββ Squirrel (606)
β β βββ Tiger (512)
β β βββ Wolf (513)
β β βββ Ziegenbock (192)
β βββ Reptile (478)
β β βββ Lizard (506)
β β βββ Snake (516)
β βββ Reptile/Amphibia (477)
β βββ Vogel (461)
β βββ Enten (578)
β βββ Huhn (194)
β βββ Tauben (195)
βββ Zibetkatze (45)
Flora hierarchy (click to expand)
Flora (560)
βββ Acacia farnesiana (239)
βββ Akeleien (91)
βββ Algae (543)
βββ Aloe (652)
βββ BΓ€ume (200)
β βββ Akazie (221)
β βββ Bark (625)
β βββ Conifer (358)
β β βββ Cedar (Virginia) (359)
β β βββ Cedar (Lebanon) (360)
β βββ Eiche (218)
β βββ Eucalyptus (355)
β βββ Holz (476)
β β βββ Lignum Aquilae (426)
β β βββ Oud (396)
β β βββ Sandelholz (202)
β βββ Kampfer (24)
β βββ Linde (201)
β βββ Lorbeer (232)
β βββ Myrte (234)
β βββ Nitre plant (402)
β βββ Ulme (61)
β βββ Wacholderbeere (231)
βββ Bergamot (668)
βββ Berry (675)
βββ Blossom (557)
β βββ Orange blossom (551)
βββ Blumen (72)
β βββ Agapanthus (579)
β βββ Calla Lily (585)
β βββ Chrysanthemum (586)
β βββ Epidendrum (591)
β βββ Galanthus (595)
β βββ Gerbera (597)
β βββ Hibiscus (600)
β βββ Marigold (684)
... (truncated)
Notable observations:
- Deepest hierarchical structure: With a maximum depth of 4, this vocabulary has the most complex hierarchy among the three
- 13 top-level categories: A systematic classification including Abstract, Artefact, Being, Body, Element, Flora, Food, Fragrance/Cosmetic, Fumes, Matter, Nature, Product, and Religion
- Overwhelming scale: 685 concepts far exceeds the other two vocabularies (138 and 36)
- Biological taxonomy approach: Being and Flora have detailed hierarchical structures resembling scientific classification
- Fusion of culture and science: Covers a wide range of knowledge domains from religious concepts to chemical substances
- Detailed artifact classification: The Artefact category includes diverse scent-related artifacts such as perfume bottles, jewelry, and smoking implements
2. Fragrant Spaces
Total concepts: 138
Top-level concepts: 91
Concepts with children: 23
Maximum hierarchy depth: 2
Depth distribution:
- Level 0 (top-level): 91 concepts
- Level 1: 44 concepts
- Level 2: 3 concepts
Full hierarchical structure:
Click to show all 138 concepts
Anatomical theatre (83)
Arabia (109)
Arcadia (110)
Badehaus (58)
Bakery (105)
Ball (3)
Bauernhof (25)
βββ Poultry farm (57)
Bleaching field (7)
Brauerei (6)
Brennerei (17)
Brothel (82)
Building (129)
βββ House (69)
βββ Apartment (118)
βββ Old House (86)
Burg (8)
Chimney (130)
Coal Wagon (113)
Countryside (122)
βββ Field (128)
βββ Hayfield (30)
Dilligence (114)
Fabrik (23)
βββ Cacao factory (10)
βββ Chemical industry (13)
βββ Factory-interior (24)
βββ Pastry factory (55)
βββ Sugar factory (65)
βββ Tobacco factory (71)
βββ Vinegar factory (90)
Factories and mills in landscape (22)
Field hospital (78)
Garten (27)
βββ Botanical garden (84)
βββ Fenced garden (81)
βββ Tea garden (72)
GewΓ€chshaus (29)
βββ Limonaia (43)
βββ Orangerie (44)
Graveyard (77)
Grocery (28)
Handicraft place (31)
Haystack (115)
Hell (101)
Hot-house (33)
Hotel (138)
Jagdszene (34)
Jail (137)
Kaffeehaus (36)
Kanal (11)
Kanalisation (98)
Keller (12)
Krankenhaus (32)
βββ Hospital ward (74)
KΓΌche (37)
βββ Poor kitchen (39)
βββ Rich kitchen (38)
Laboratory (136)
βββ Alchemist's workshop (1)
Lake (132)
Lane (40)
Laundry place (9)
Library (95)
Lime Kiln (42)
Limkiln (99)
Markt (45)
βββ Animal market (2)
βββ Fischmarkt (26)
βββ Markthalle (46)
Meadow (48)
Medical garden (87)
Misthaufen (18)
Mountain (49)
Museum (54)
Nursery (plants) (50)
Office (52)
Paradise (108)
Place (121)
Place of worship (53)
βββ Chapel (131)
βββ Kirche (35)
βββ Monastery (134)
βββ Mosque (89)
βββ Synagogue (88)
Pleasure fair (79)
Pond (133)
Print shop (106)
Prison (56)
Pub (100)
Public Bath (59)
Restaurant (92)
βββ Kantine (16)
Room (117)
βββ Badezimmer (4)
βββ Bedroom (111)
βββ Living room (112)
βββ Refectory (135)
βββ Speisesaal (15)
βββ Toilet (124)
Ropery (80)
Run factory (97)
Schlachtfeld (76)
School (104)
Sea (93)
βββ Ocean (51)
Shop (107)
βββ Toko (119)
Slaughter house (61)
Slum (62)
Soap works (85)
Stadt (14)
βββ Neighbourhood (123)
StΓ€lle (63)
βββ Pensionsstall (116)
Station (120)
Strand (5)
βββ Shore (125)
Street (64)
βββ Dirt road (103)
Stud farm (60)
Swamps and polders (66)
βββ Marshland (47)
βββ Polder (96)
βββ Swamp (67)
Tannery (68)
Teergrube (94)
Theatre (102)
Tobacco spinning workshop (91)
Town (126)
Tropic (127)
Village (73)
Wald (19)
βββ Waldbrand (20)
WalkmΓΌhle (21)
Warehouse (41)
Wash house (75)
Wig shop (70)
Notable hierarchical structure highlights:
Fabrik (Factory)
βββ Cacao factory
βββ Chemical industry
βββ Factory-interior
βββ Pastry factory
βββ Sugar factory
βββ Tobacco factory
βββ Vinegar factory
Garten (Garden)
βββ Botanical garden
βββ Fenced garden
βββ Tea garden
Place of worship
βββ Chapel
βββ Kirche (Church)
βββ Monastery
βββ Mosque
βββ Synagogue
Building
βββ House
βββ Apartment
βββ Old House
Notable observations:
- Multilingual nature: German (Fabrik, Garten, Wald) and English are mixed, reflecting the characteristics of this pan-European multilingual project
- Relatively flat structure: With a maximum depth of 2, most concepts are at the top level or one level below
- Diversity of places: Comprehensively covers scent-related locations including factories, markets, religious facilities, and natural environments
- Detailed classification of industrial facilities: Fabrik (Factory) in particular has 7 specialized subcategories, suggesting the importance of scents during the Industrial Revolution
3. Gestures and Allegories
Total concepts: 36
Top-level concepts: 34
Concepts with children: 2
Maximum hierarchy depth: 1
Depth distribution:
- Level 0 (top-level): 34 concepts
- Level 1: 2 concepts
Full hierarchical structure:
Click to show all 36 concepts
Ash collecting (27)
Bleaching (7)
Burning (19)
Burnt offering (31)
Changing diaper (17)
Defecation (8)
Doctor sniffing cane (34)
Eating (15)
Embalming (10)
Examination of urine (12)
Fainting (20)
Flatulence (4)
Food tasting (16)
Fumigating (health) (33)
Garbage collecting (26)
Hand towards the nose (24)
Harvesting civet from civet cat (30)
Holding one's nose (2)
Holding one's nose closed (3)
Holding something to the nose (14)
Hunting (5)
Making toilet (25)
Per fumum (9)
Perfuming (29)
Rag picking (35)
Scent distributing (23)
βββ Censing (21)
Smelling (1)
βββ Piss smelling (22)
Smoking (18)
Street sweeping (13)
Urination (11)
Using scents (28)
Vomiting (6)
Washing (36)
Womb fumigation (32)
Concepts with hierarchy:
Scent distributing
βββ Censing
Smelling
βββ Piss smelling
Key concepts by category:
- Nasal gestures: Holding one's nose, Hand towards the nose
- Hygiene and cleaning activities: Garbage collecting, Street sweeping, Washing
- Medical practices: Examination of urine, Embalming, Doctor sniffing cane
- Religious rituals: Burnt offering, Per fumum (through smoke)
- Daily activities: Eating, Smoking, Defecation
Notable observations:
- Nearly flat structure: 34 out of 36 concepts are at the top level, indicating low need for hierarchization
- Focus on physical actions: Most concepts are related to physical gestures or actions
- Medicine and hygiene: Includes historical medical and hygienic practices such as urine examination and fumigation
- Cultural diversity: Covers a wide range of cultural contexts from religious rituals to everyday activities
Technical Analysis
Comparison Among Vocabularies
Comparing the three vocabularies reveals the characteristics of each domain:
| Vocabulary | Total Concepts | Top-level | Max Depth | Characteristics |
|---|---|---|---|---|
| Smell sources | 685 | 13 | 4 | Systematic classification, deep hierarchy |
| Fragrant Spaces | 138 | 91 | 2 | Flat structure, diverse places |
| Gestures and Allegories | 36 | 34 | 1 | Nearly flat, independent actions |
Implications of scale differences:
- Smell sources is overwhelmingly the largest, reflecting the enormous diversity of scent sources
- Fragrant Spaces is medium-sized, dealing with concrete concepts of places
- Gestures and Allegories is the smallest but comprises carefully selected culturally significant actions
Implications of hierarchy depth:
- Deep hierarchy (Smell sources): Naturally hierarchical knowledge such as biological taxonomy and product categories
- Shallow hierarchy (Fragrant Spaces, Gestures): Places and actions exist as relatively independent concepts
Alignment with SKOS Design Principles
The three vocabularies investigated have structures faithful to SKOS design principles:
- Appropriate hierarchy depth: Maximum depths of 1 to 4, adapted to the nature of each domain
- Clear broader/narrower relationships: The hierarchical relationships between concepts are clearly defined
- Balanced top-level concepts: Smell sources has 13 systematic categories, Fragrant Spaces has 91 diverse places, and Gestures has 34 independent actions
Data Modeling Characteristics
The differences in hierarchy depth among the three vocabularies reflect the nature of each domain:
- Smell sources (depth 4): Inherently hierarchical knowledge systems such as natural classification and product hierarchies
- Example: Being > Tier > Wirbeltiere > Mammal > Lion
- Example: Flora > Baume > Holz > Sandelholz
- Fragrant Spaces (depth 2): Shallow hierarchy based on spatial containment relationships
- Example: Building > House > Apartment
- Gestures and Allegories (depth 1): Exist as independent actions with low need for hierarchization
- Example: Smelling > Piss smelling (one of the few hierarchical relationships)
Implementation Considerations
Key points in the script implementation:
- Circular reference checking: Using a
visitedSet to prevent infinite loops - Label retrieval: Fallback from URI when
skos:prefLabelis not available - Sorting: Alphabetical sorting to ensure output consistency
- Statistics: Aggregating depth distribution and child counts to quantitatively characterize the vocabularies
Summary
Through investigating the structures of the three Odeuropa Explorer vocabularies (Smell sources, Fragrant Spaces, Gestures and Allegories), the following findings emerged:
-
Domain-appropriate design:
- Smell sources (685 concepts, depth 4): Systematic classification with deep hierarchy
- Fragrant Spaces (138 concepts, depth 2): Moderate hierarchy with diversity
- Gestures and Allegories (36 concepts, depth 1): Flat structure with independence
-
Cultural and historical richness: The diversity of European olfactory cultural heritage is condensed into a total of 859 concepts
-
Multilingual nature: A mix of German, English, French, and Latin, embodying the characteristics of a pan-European project
-
Flexibility of hierarchical structure: Each domain adopts the optimal hierarchy depth, from natural classification to places and actions
-
Balance of practicality and scholarship: A balance between flat structures suitable for search and exploration and the hierarchy needed for systematic organization of knowledge
Understanding vocabulary hierarchical structures like these provides practical examples of knowledge organization in digital humanities. The analysis of three vocabularies with different characteristics demonstrates that SKOS is an effective tool not only for academic research but also for cultural heritage digitization projects.
References
- Odeuropa Explorer - Olfactory heritage exploration platform
- Odeuropa Vocabularies GitHub - Repository analyzed in this study
- SKOS Simple Knowledge Organization System - W3C SKOS specification
- Odeuropa Project - Official project website
Data and Code
Files used and generated in this study:
Analysis Target
- Odeuropa vocabularies - SKOS Turtle vocabulary data
Generated Files
visualize-hierarchy.js- SKOS hierarchy visualization scriptolfactory-objects-hierarchy.txt- Full hierarchy output for Smell sources (685 concepts)hierarchy-fragrant-spaces-20251010-231358.txt- Full hierarchy output for Fragrant Spaces (138 concepts)olfactory-gestures-hierarchy.txt- Full hierarchy output for Gestures and Allegories (36 concepts)



