Add complete schema for heritage custodian observation reconstruction

- Introduced a comprehensive class diagram for the heritage custodian observation reconstruction schema.
- Defined multiple classes including AllocationAgency, ArchiveOrganizationType, AuxiliaryDigitalPlatform, and others, with relevant attributes and relationships.
- Established inheritance and associations among classes to represent complex relationships within the schema.
- Generated on 2025-11-28, version 0.9.0, excluding the Container class.
This commit is contained in:
kempersc 2025-11-28 13:13:23 +01:00
parent 0d1741c55e
commit 5cdce584b2
33 changed files with 5467 additions and 532 deletions

View file

@ -0,0 +1,218 @@
# LinkML Technical Classes: Exclusion from Visualizations
**Date**: 2025-11-28
**Purpose**: Document technical LinkML classes that should be excluded from semantic visualizations (UML, ERD, etc.)
---
## Overview
Some LinkML classes exist solely for **technical validation purposes** and have **no semantic/ontological significance**. These classes should be excluded from UML diagrams, entity-relationship diagrams, and other visualizations that represent the domain model.
**Metaphor**: Like construction scaffolding - essential for building but not part of the final structure.
---
## Excluded Classes
### `Container`
**Definition**: `schemas/20251121/linkml/modules/classes/Container.yaml`
```yaml
Container:
description: >-
Root container for validating complete instance documents.
Contains top-level entity lists for each major class.
Not used in RDF serialization (flattened).
tree_root: true
attributes:
# Lists of all entity types for validation
custodian_observations: ...
custodian_names: ...
# ... etc.
```
**Purpose**:
- Enables `linkml-validate -C Container instance.yaml` validation
- Provides a `tree_root` entry point for parsing YAML/JSON instance documents
- Aggregates all entity types into a single validation target
**Why Excluded**:
- ❌ Has NO `class_uri` (not mapped to any ontology)
- ❌ Not serialized to RDF (explicitly stated in description)
- ❌ Purely structural - no domain semantics
- ❌ Would clutter diagrams with non-semantic relationships
**Evidence**:
```yaml
# From Container.yaml - NO class_uri mapping
Container:
tree_root: true
# Notice: NO class_uri field - not mapped to any ontology
```
---
## Exclusion Implementation
### Python: Mermaid Diagram Generators
**Files**:
- `scripts/generate_complete_mermaid_diagram.py`
- `scripts/generate_mermaid_modular.py`
**Pattern**:
```python
# Define excluded classes at module level
EXCLUDED_CLASSES = {"Container"}
# Filter in entity generation
for class_name, class_def in schema.classes.items():
if class_name in EXCLUDED_CLASSES:
continue # Skip technical classes
# ... generate entity definition
# Filter in relationship generation
for class_name, class_def in schema.classes.items():
if class_name in EXCLUDED_CLASSES:
continue
for slot in class_def.attributes.values():
if slot.range in EXCLUDED_CLASSES:
continue # Skip relationships to technical classes
```
### TypeScript: Frontend UML Parsers
**File**: `frontend/src/components/uml/UMLParser.ts`
**Pattern**:
```typescript
// Excluded technical classes (no semantic significance)
const EXCLUDED_CLASSES = new Set(['Container']);
// Filter function applied to all parsers
function filterExcludedClasses(entities: UMLEntity[]): UMLEntity[] {
return entities.filter(entity => !EXCLUDED_CLASSES.has(entity.name));
}
// Applied in each parser
export const parseMermaidClassDiagram = (content: string): UMLDiagram => {
// ... parse entities
const filteredEntities = filterExcludedClasses(entities);
// ... return filtered diagram
};
```
---
## How to Add New Exclusions
When you identify a new technical class that should be excluded:
### Step 1: Verify It's Truly Technical
Check these criteria:
- [ ] Has no `class_uri` (not mapped to any ontology)
- [ ] Documentation states it's not for RDF serialization
- [ ] Exists only for validation/parsing purposes
- [ ] Has no domain semantics
### Step 2: Add to Python Generators
In both generator scripts, add to the `EXCLUDED_CLASSES` set:
```python
# scripts/generate_complete_mermaid_diagram.py
# scripts/generate_mermaid_modular.py
EXCLUDED_CLASSES = {"Container", "NewTechnicalClass"}
```
### Step 3: Add to Frontend Parser
In `frontend/src/components/uml/UMLParser.ts`:
```typescript
const EXCLUDED_CLASSES = new Set(['Container', 'NewTechnicalClass']);
```
### Step 4: Document in This File
Add a new section under "Excluded Classes" with:
- Definition location
- Purpose description
- Reason for exclusion
- Evidence (no class_uri, etc.)
### Step 5: Regenerate Diagrams
```bash
cd /Users/kempersc/apps/glam
python scripts/generate_complete_mermaid_diagram.py
python scripts/generate_mermaid_modular.py
# Verify class count decreased
```
---
## Verification
### Check Current Diagram Class Count
```bash
# Count classes in latest diagram (should NOT include Container)
grep -c "class " schemas/20251121/uml/mermaid/complete_schema_*.mmd | tail -1
# Verify Container is NOT in diagram
grep "Container" schemas/20251121/uml/mermaid/complete_schema_*.mmd
# Should return no matches
```
### Expected Results (as of 2025-11-28)
- **Total classes in schema**: 72 (including Container)
- **Classes in diagrams**: 71 (Container excluded)
- **Frontend visualization**: 71 classes (Container filtered)
---
## Why This Matters
### For AI Agents
When generating or analyzing UML diagrams:
- ✅ **DO**: Focus on the 71 semantic classes
- ❌ **DON'T**: Expect to see Container in diagrams
- ❌ **DON'T**: Add Container to ontology mappings
### For Developers
When modifying diagram generators:
- ✅ **DO**: Apply exclusion filters consistently
- ❌ **DON'T**: Hardcode class names in multiple places (use the constant)
- ✅ **DO**: Document new exclusions in this file
### For Schema Designers
When adding new technical classes:
- ✅ **DO**: Mark them with `tree_root: true` if for validation
- ✅ **DO**: Omit `class_uri` if not semantically meaningful
- ✅ **DO**: Add to exclusion lists in generators
- ✅ **DO**: Document purpose in class description
---
## Related Documentation
- **AGENTS.md**: Rule 0 - LinkML Schemas Are Single Source of Truth
- `.opencode/SCHEMA_GENERATION_RULES.md`: Generation workflow
- `.opencode/HYPER_MODULAR_STRUCTURE.md`: Module organization
- `schemas/20251121/linkml/modules/classes/Container.yaml`: Container definition
---
**Status**: ✅ ACTIVE
**Version**: 1.0
**Last Updated**: 2025-11-28
**Applies To**: All UML/ERD diagram generation in this project

View file

@ -222,6 +222,52 @@ Mansion:
**Each aspect changes independently over time!** **Each aspect changes independently over time!**
### Rule 4: Technical Classes Are Excluded from Visualizations
**Some LinkML classes exist solely for validation purposes and have NO semantic significance.**
These "scaffolding" classes are essential for building (validation, parsing) but are not part of the final ontology structure. They MUST be excluded from UML diagrams, entity-relationship diagrams, and other semantic visualizations.
**Currently Excluded Classes**:
| Class | Purpose | Why Excluded |
|-------|---------|--------------|
| `Container` | LinkML `tree_root` for instance validation | No `class_uri`, not serialized to RDF, purely structural |
**The `Container` Class**:
**Definition**: `schemas/20251121/linkml/modules/classes/Container.yaml`
```yaml
Container:
description: >-
Root container for validating complete instance documents.
Not used in RDF serialization (flattened).
tree_root: true # ← This is why it exists
# Notice: NO class_uri - not mapped to any ontology
```
**Purpose**:
- Enables `linkml-validate -C Container instance.yaml` validation
- Provides entry point for parsing YAML/JSON instance documents
- Has NO semantic meaning in the domain model
**Exclusion Implementation**:
- Python generators: `EXCLUDED_CLASSES = {"Container"}` in `scripts/generate_*.py`
- Frontend parsers: `EXCLUDED_CLASSES` Set in `frontend/src/components/uml/UMLParser.ts`
**Verification**:
```bash
# Check that Container is NOT in diagrams
grep "Container" schemas/20251121/uml/mermaid/complete_schema_*.mmd
# Should return no matches
# Verify class count (should be 71, not 72)
grep -c "class " schemas/20251121/uml/mermaid/complete_schema_*.mmd | tail -1
```
**See**: `.opencode/LINKML_TECHNICAL_CLASSES.md` for complete documentation and how to add new exclusions.
--- ---
## Project Overview ## Project Overview

View file

@ -11,8 +11,67 @@ original_entry:
- S - S
entry_index: 9 entry_index: 9
processing_timestamp: '2025-11-27T14:59:57.951098+00:00' processing_timestamp: '2025-11-27T14:59:57.951098+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T15:00:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:00:00+00:00'
fetch_status: SUCCESS
source_url: https://www.werkenbijdeswo.nl/
organization_details:
full_name: Samenwerkingsorganisatie De Wolden Hoogeveen
short_name: SWO
description: |
Shared services organization (ambtelijke fusie) between municipalities
De Wolden and Hoogeveen. Second largest municipal organization in Drenthe.
Provides integrated services for both a urban (Hoogeveen) and rural
(De Wolden) municipality.
organization_type: samenwerkingsorganisatie
relationship_type: Ambtelijke fusie (administrative merger)
member_municipalities:
- name: Gemeente De Wolden
address: Raadhuisstraat 2, 7921 GD Zuidwolde (Dr.)
type: plattelandsgemeente (rural municipality)
- name: Gemeente Hoogeveen
address: Raadhuisplein 1, 7901 BP Hoogeveen
type: stedelijke gemeente (urban municipality)
location:
primary_address:
street_address: Raadhuisplein 1
postal_code: 7901 BP
city: Hoogeveen
province: Drenthe
country: NL
secondary_address:
street_address: Raadhuisstraat 2
postal_code: 7921 GD
city: Zuidwolde (Dr.)
province: Drenthe
country: NL
contact:
phone: "14 0528"
phone_international: "+31 140528"
website: https://www.dewoldenhoogeveen.nl/
recruitment_portal: https://www.werkenbijdeswo.nl/
employment_info:
training_program: S.K.I.K.
work_model: Hybride werken (hybrid work)
facilities: "Bureaus met twee beeldschermen"
notable_features:
- "Op één na grootste gemeentelijke organisatie van Drenthe"
- "Werkt voor zowel stad als platteland"
- "Flexibele werkdagen mogelijk"
- "Thuiswerken mogelijk"
# Google Maps enrichment data
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJhdiM7JAayEcRxJgw-TgSdj8 place_id: ChIJhdiM7JAayEcRxJgw-TgSdj8
name: Samenwerkingsorganisatie De Wolden Hoogeveen name: Samenwerkingsorganisatie De Wolden Hoogeveen
@ -65,11 +124,17 @@ google_maps_enrichment:
- establishment - establishment
primary_type: government_office primary_type: government_office
business_status: OPERATIONAL business_status: OPERATIONAL
google_maps_url: https://maps.google.com/?cid=4572862507549497540&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA google_maps_url: https://maps.google.com/?cid=4572862507549497540
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.726195399999995,6.4747949&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/civic-bldg_pinlet
icon_background_color: '#7B9EB0'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Samenwerkingsorganisatie De Wolden/Hoogeveen, Raadhuisplein google_maps_search_query: Samenwerkingsorganisatie De Wolden/Hoogeveen, Raadhuisplein 1 (Raadhuisstraat 2), Hoogeveen (en Zuidwolde), Netherlands
1 (Raadhuisstraat 2), Hoogeveen (en Zuidwolde), Netherlands
notes: |
- Shared services organization (ambtelijke fusie) between De Wolden and Hoogeveen
- Second largest municipal organization in Drenthe province
- Provides integrated services for urban (Hoogeveen) and rural (De Wolden) areas
- ISIL code: NL-HgvSWO
- Hybrid work model with flexible scheduling
- Has unique training program called S.K.I.K.
- Note: This is primarily an administrative/HR organization, not a heritage institution
- The archival functions are handled by the individual municipal archives

View file

@ -12,13 +12,10 @@ processing_timestamp: '2025-11-27T15:00:13.008461+00:00'
enrichment_status: enriched enrichment_status: enriched
enrichment_source: website_scrape enrichment_source: website_scrape
enrichment_timestamp: '2025-11-28T12:00:00+00:00' enrichment_timestamp: '2025-11-28T12:00:00+00:00'
# Website enrichment data
website_enrichment: website_enrichment:
fetch_timestamp: '2025-11-28T12:00:00+00:00' fetch_timestamp: '2025-11-28T12:00:00+00:00'
fetch_status: SUCCESS fetch_status: SUCCESS
source_url: https://historiedewijkkoekange.nl/ source_url: https://historiedewijkkoekange.nl/
organization_details: organization_details:
full_name: Historische Vereniging de Wijk-Koekange full_name: Historische Vereniging de Wijk-Koekange
short_name: HV de Wijk-Koekange short_name: HV de Wijk-Koekange
@ -26,8 +23,7 @@ website_enrichment:
founding_location: Hotel-Café-Restaurant "Het Oude Hogenkamp", de Wijk founding_location: Hotel-Café-Restaurant "Het Oude Hogenkamp", de Wijk
membership_count: 1250 membership_count: 1250
membership_count_date: '2025-10-01' membership_count_date: '2025-10-01'
membership_milestone: "1250 members reached end of 2022" membership_milestone: 1250 members reached end of 2022
location: location:
venue_name: Oudheidkamer onder de molen venue_name: Oudheidkamer onder de molen
venue_description: Heritage room located under the historic windmill venue_description: Heritage room located under the historic windmill
@ -36,158 +32,193 @@ website_enrichment:
province: Drenthe province: Drenthe
country: NL country: NL
municipality: De Wolden municipality: De Wolden
opening_hours: opening_hours:
regular: "Fridays 14:00-16:00" regular: Fridays 14:00-16:00
closed_months: "June, July, August" closed_months: June, July, August
special_events: "Saturday openings for exhibitions" special_events: Saturday openings for exhibitions
governance: governance:
current_chair: Hilco Bremmer current_chair: Hilco Bremmer
former_chair: Ina ten Wolde former_chair: Ina ten Wolde
secretary: Lineke Lopers-de Vries secretary: Lineke Lopers-de Vries
former_secretary: Coby Tijmens former_secretary: Coby Tijmens
treasurer: Annie van de Berg treasurer: Annie van de Berg
honorary_members: honorary_members:
- name: Jenny Roze-Nijstad - name: Jenny Roze-Nijstad
appointed_date: '2023-04-11' appointed_date: '2023-04-11'
reason: "Years of service in archive, photo commission, and publications" reason: Years of service in archive, photo commission, and publications
- name: Aaltienus Buiter - name: Aaltienus Buiter
appointed_date: '2023-04-11' appointed_date: '2023-04-11'
reason: "Years of service in editorial and photo commission" reason: Years of service in editorial and photo commission
collections: collections:
photo_archive: photo_archive:
total_count: 5000 total_count: 5000
milestone_date: '2024-02-17' milestone_date: '2024-02-17'
description: "5000th photo added to archive (photo number 13353)" description: 5000th photo added to archive (photo number 13353)
photo_commission_members: photo_commission_members:
- Freek Heuvelman (coordinator since 2020) - Freek Heuvelman (coordinator since 2020)
- Klaasje Wever - Klaasje Wever
- Aaltienus Buiter - Aaltienus Buiter
- Jenny Roze - Jenny Roze
- Albert Veld - Albert Veld
- Jan Westerbeek - Jan Westerbeek
digitization_started: '2012' digitization_started: '2012'
original_curator: Jenny Roze original_curator: Jenny Roze
digital_curator: Ina ten Wolde (2012-2020) digital_curator: Ina ten Wolde (2012-2020)
current_curator: Freek Heuvelman (since 2020) current_curator: Freek Heuvelman (since 2020)
publications: publications:
periodical: periodical:
name: "'t Olde Karspel" name: '''t Olde Karspel'
frequency: quarterly frequency: quarterly
description: "Local history magazine distributed to all members" description: Local history magazine distributed to all members
books: books:
- title: "Van neringdoende tot ondernemer" - title: Van neringdoende tot ondernemer
subject: Businesses in Koekange subject: Businesses in Koekange
status: sold_out status: sold_out
- title: "Bedrijvigheid in de Wijk van verleden tot heden" - title: Bedrijvigheid in de Wijk van verleden tot heden
publication_date: '2024-09-28' publication_date: '2024-09-28'
price_eur: 15.00 price_eur: 15.0
copies_printed: 600 copies_printed: 600
authors: authors:
- Femmy Pol - Femmy Pol
- Jan Steenbergen - Jan Steenbergen
- Jan Westerbeek - Jan Westerbeek
description: "History of all businesses in De Wijk over 200 years" description: History of all businesses in De Wijk over 200 years
- title: "Boerderijenboek Koekange" - title: Boerderijenboek Koekange
copies_sold: 800 copies_sold: 800
status: sold_out status: sold_out
- title: "Boerderijenboek De Wijk" - title: Boerderijenboek De Wijk
copies_sold: 600 copies_sold: 600
status: sold_out status: sold_out
calendar: calendar:
title: "Verjaardagskalender" title: Verjaardagskalender
price_eur: 5.00 price_eur: 5.0
description: "Birthday calendar with historical photos" description: Birthday calendar with historical photos
digital_presence: digital_presence:
website: https://historiedewijkkoekange.nl/ website: https://historiedewijkkoekange.nl/
facebook: https://www.facebook.com/historischeverenigingdewijkkoekange facebook: https://www.facebook.com/historischeverenigingdewijkkoekange
beeldbank: https://www.historiedewijkkoekange.nl/cgi-bin/beeldbank.pl beeldbank: https://www.historiedewijkkoekange.nl/cgi-bin/beeldbank.pl
activities: activities:
cultural_evening: cultural_evening:
frequency: annual frequency: annual
venue: Dorpshuis de Wijk venue: Dorpshuis de Wijk
recent_performers: recent_performers:
- name: "DUO 2VOUDT" - name: DUO 2VOUDT
date: '2025-10-17' date: '2025-10-17'
ticket_price: 10.00 ticket_price: 10.0
- name: "De Kakmadammen" - name: De Kakmadammen
date: '2024-10-17' date: '2024-10-17'
- name: "Een en Ander (Erik Knoef & Anita Oldenhave)" - name: Een en Ander (Erik Knoef & Anita Oldenhave)
date: '2023-10-20' date: '2023-10-20'
- name: "Babyboomers Blues (Marga Kool, Jan Veenstra, Egbert Meijers)" - name: Babyboomers Blues (Marga Kool, Jan Veenstra, Egbert Meijers)
date: '2022-10-21' date: '2022-10-21'
exhibitions: exhibitions:
- title: "25 jaar Historische Vereniging de Wijk-Koekange" - title: 25 jaar Historische Vereniging de Wijk-Koekange
dates: "October-December 2022" dates: October-December 2022
- title: "Poëziealbums" - title: Poëziealbums
dates: "February-May 2024" dates: February-May 2024
visitors: 123 visitors: 123
- title: "Klein nostalgisch gereedschap" - title: Klein nostalgisch gereedschap
dates: "February-May 2025" dates: February-May 2025
special_projects: special_projects:
- title: "Memory game with COOP supermarkets" - title: Memory game with COOP supermarkets
dates: "January-March 2025" dates: January-March 2025
description: "36 card sets with old and new locations" description: 36 card sets with old and new locations
- title: "Historical plaatjes spaaractie" - title: Historical plaatjes spaaractie
dates: "September-November 2022" dates: September-November 2022
partner: COOP supermarkets partner: COOP supermarkets
historical_focus: historical_focus:
geographic_area: geographic_area:
- de Wijk - de Wijk
- Koekange - Koekange
- Rogat - Rogat
topics: topics:
- WWII history and memorials - WWII history and memorials
- Local businesses history - Local businesses history
- Agricultural heritage - Agricultural heritage
- Farm buildings (boerderijen) - Farm buildings (boerderijen)
- Dairy factories (zuivelfabrieken) - Dairy factories (zuivelfabrieken)
war_memorials: war_memorials:
- location: Emsweg, Koekange - location: Emsweg, Koekange
subject: Lt. James W. Gilbride (American pilot crashed 1943-11-29) subject: Lt. James W. Gilbride (American pilot crashed 1943-11-29)
unveiled: '2023-04-29' unveiled: '2023-04-29'
- location: Begraafplaats Julianaweg, de Wijk - location: Begraafplaats Julianaweg, de Wijk
subject: Five war victims including Sgt. Latham subject: Five war victims including Sgt. Latham
unveiled: '2025-05-05' unveiled: '2025-05-05'
financial_support: financial_support:
rabo_clubsupport: rabo_clubsupport:
- year: 2025 - year: 2025
amount_eur: null amount_eur: null
- year: 2024 - year: 2024
amount_eur: 837.89 amount_eur: 837.89
- year: 2023 - year: 2023
amount_eur: 904.72 amount_eur: 904.72
purpose: "Smoke detection for heritage room" purpose: Smoke detection for heritage room
- year: 2022 - year: 2022
amount_eur: 801.33 amount_eur: 801.33
founding_statutes: founding_statutes:
date: '1997-10-02' date: '1997-10-02'
goals: goals:
- "Behartigen van historische belangen gemeente de Wijk" - Behartigen van historische belangen gemeente de Wijk
- "Bevorderen van kennis over lokale geschiedenis" - Bevorderen van kennis over lokale geschiedenis
- "Instandhouden en/of weder oprichten van historische monumenten" - Instandhouden en/of weder oprichten van historische monumenten
- "Instandhouden en uitbreiden van bibliotheek" - Instandhouden en uitbreiden van bibliotheek
google_maps_note: "Google Maps search returned incorrect result: \"Landelijke Rijvereniging\
\ Koekange\" \n(equestrian club) instead of the historical society. The correct\
\ location is\nDorpsstraat 65a (under the windmill \"De Wieker Meule\") in de Wijk.\n"
notes: '- Very active historical society with 1250+ members
# Google Maps data note: Previous search returned wrong location (riding club)
google_maps_note: |
Google Maps search returned incorrect result: "Landelijke Rijvereniging Koekange"
(equestrian club) instead of the historical society. The correct location is
Dorpsstraat 65a (under the windmill "De Wieker Meule") in de Wijk.
notes: |
- Very active historical society with 1250+ members
- Located in "Oudheidkamer" under the historic Wieker Meule windmill - Located in "Oudheidkamer" under the historic Wieker Meule windmill
- Extensive photo archive with 5000+ digitized photos - Extensive photo archive with 5000+ digitized photos
- Strong focus on WWII history and war memorials - Strong focus on WWII history and war memorials
- Regular publications including quarterly 't Olde Karspel
- Regular publications including quarterly ''t Olde Karspel
- Active partnership with local COOP supermarkets for heritage projects - Active partnership with local COOP supermarkets for heritage projects
- Covers former municipality of de Wijk including Koekange and Rogat - Covers former municipality of de Wijk including Koekange and Rogat
'
google_maps_status: SUCCESS
google_maps_search_query: De Wieker Meule molen de Wijk Drenthe
google_maps_enrichment:
place_id: ChIJAx262agNyEcRlVzZFCA5Va0
name: Stichting De Wieker Meule
formatted_address: Dorpsstraat 65, 7957 AS De Wijk, Nederland
latitude: 52.672696699999996
longitude: 6.2871961
rating: 5
total_ratings: 2
phone: +31 6 42412769
business_status: OPERATIONAL
google_maps_url: https://maps.google.com/?cid=12489951951533464725&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA
opening_hours:
- 'maandag: Gesloten'
- 'dinsdag: Gesloten'
- 'woensdag: Gesloten'
- 'donderdag: Gesloten'
- 'vrijdag: Gesloten'
- 'zaterdag: 13:0018:00'
- 'zondag: Gesloten'
photos:
- url: https://places.googleapis.com/v1/places/ChIJAx262agNyEcRlVzZFCA5Va0/photos/AWn5SU4kgP1kTx8wwhl9Dq6EC2dpxbeyVz3nCCVqgRX6awSB0ULC0fc9-12T1BUT8fn8jNBoVy5qm4N8cXwe8x9ECmvmijR0WKz2W_y3lFTEVzxxQPSTH70hNwowgBOGu16AKSHCaDMn2EwrfWYgfMLzVSKZlM14N9qPuatZjyhKyzfxB99dWIO1iYHzAQA1pfAil0m3dEyvwsZZTzNqAQtyCB_KLnqFQYzZmwt1lLrHStzJjDMNAs7HVlfax-gDAy4X65fOTJThyxXkT4R8I8Se49dy08-nqgfvBsENcMr7WPl8eIm5olwQbqnbEU70jBp8Za0uBB2BMPOGTlrHtL2OPIBRFSEgSHFCR_DKx2xq0hsroJ5wn-5MlMOwjfWqAyXctGNam1xejMar9I2ZDa471V_FCSgBqhMBgYlPP_MmObbAB1Q/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
attribution: Ruth Wang
- url: https://places.googleapis.com/v1/places/ChIJAx262agNyEcRlVzZFCA5Va0/photos/AWn5SU6Ctpc-icGRwM38d3nqpRU-SlrQmSUxN3jIEVa9jJh_yKDvgPuGb1CP0pHj9WRx1qTMDEUPozZ_FTfyYpH5AWHPp-wDi08d5NQFodRZUN-tBmBnNJD0eI3eoil-hq-4-ArG7jPphL7iHrwruhPE_536CQ2m7WE4IQwIocCN44abJ0oVWaH0BgL8OefVNT3i5AxUmaJ55zIADNR5SnZKX2nldDF1pPZcFCL2jeT0ABFTqsja1YyQDi9NtsXPGz2m9-zizt8tLljzlUNRu5fqDoG7WFpfVuUGo6lysibzJLpfAOeveti0yMJr1h1FcwYsHWoix6JG1xi0OwOgIcp-XDsKE_wDyjsG6Mfd5HwUQzt0ftzZyf37mX25lalQa4fmngBjuotNCvs7lkE1YSBsryGQE2ronBiopS25jICBjVKP0Q/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
attribution: Ruth Wang
- url: https://places.googleapis.com/v1/places/ChIJAx262agNyEcRlVzZFCA5Va0/photos/AWn5SU5ERJV57B5lAIaVO5dAmIbGmxtlTr3S0sqnqYyYycxwwIMa1oxTu1iIWK3FVeejMCdNz4_iZ7gMvio0hkEL-0Ww_S9XmbbOl1u4LnKBm-05J-5O4uDlJLbosVjjZTCKBGhK4aTnAWAaTOElLTkx0nQSPqKAVu93YXrQ7RwGTHD5NUahyY3hrPbCsSvxSNHb3_xXX8Xz8lGAjB_QISGYkl6176PNXhPyF2WHt9r3aHjW55EqfIuv2yIPwKWHUBtg2LYMu-B1t41eLHuUWr6rsAtl0k4KEGKO1FyEFwdEsaWz3DnN9k4-EXYrowgUaPARqmsR5wBj421uboQmX7xDBCjX8i1DdAX8_jV8-O9ov7AmDjwBuODt06kWfVbJ8jiXxRFSo0t0J8-uBrW0fnMGlgm0JAXLzvF0DvgPXXDm8-9OaCpy/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
attribution: Willy Mulder
- url: https://places.googleapis.com/v1/places/ChIJAx262agNyEcRlVzZFCA5Va0/photos/AWn5SU6TELBBIS-r5_t5Du1Maggy_ECYGkjTNFNDsgAAUXbhoaGNHkXRz4LXZQS1AU_XbtsiWWawHHCOnV2Qg5Jsmae3NOpeFbFbsWC7Khi3y1uWg2dsWUB8pQPpZBnrc0rtjVkSP_sPKElI0qleC8J-AcXYt1aYPP-M_J-3BRy0X0ZTKarwfgKzKBLZRg5rKETrET89GBVNJrpjUbUpy9-SB92elP6XlIsWUt7wSnZYPu9vrjVQKtTR6TQi6RQiEM_TzkB7B9-c__gRFAWk9OELxq8qcHK5jZ8XeUbkByKARF3Zaqp5EggOQcx9WdubUgL6AiiPSg7KJpMaSwcSNGuPUvEbw0_HeybLeqKodOZkUVwT709dZHAlO0aejaHUXfB08LHdJ5uvrIZ_MBkSEGwOhuUciYUTd-TJj4LKY-UGJOu2GQ/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
attribution: Ruth Wang
- url: https://places.googleapis.com/v1/places/ChIJAx262agNyEcRlVzZFCA5Va0/photos/AWn5SU6pReGAesAVNBsCjKVL94dTfXNlPHk9cisKgvBDyMR3gZGKvVqHKcwtMv7wFv-lkatpeDWJdKW6VMiaavx92AZiNhRVo7gL3_sS_Zg9XgDC5MwNAPytcaevesF2HxX2AzVLaW_bvMmrL3Sd7j54xMgwbrFb2_45AjJK6EF7202dJxVW4-kutDCP9IZIzq2GrSG27GqSSv-psCaTWMZKwGc1pJBLkUSVSM8RhiZAc6aRZ5hIcrygo74kQ-75SlbtBhYwoq3TiKoidh7lANWuvRqs2s93ngMkp3kha7M60XQt9xo4AOnvx2FWJywKSPbSktZ9cOM7JwJsxfbZlCOkgh3NVEGZwTFMigkfxxsgMUIRndACsr1OMYnEhYh3CwFrefN0wrllx7HkCFomiTRJpP2dFScUriHvfDKknJF-P4_IuUU/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
attribution: O 't Hardt
reviews:
- author: Erwin Boogert
rating: 5
text: Prachtige molen uit 1829. Bezoek het VVV dat hier gevestigd zit voor meer
informatie.
time: 6 jaar geleden
- author: Tereza Kubincova
rating: 5
text: ''
time: in de afgelopen week

View file

@ -8,8 +8,253 @@ original_entry:
- S - S
entry_index: 28 entry_index: 28
processing_timestamp: '2025-11-27T15:00:25.906180+00:00' processing_timestamp: '2025-11-27T15:00:25.906180+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T12:30:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T12:30:00+00:00'
fetch_status: SUCCESS
source_url: https://www.aolddaoln.nl/
organization_details:
full_name: Stichting Aold Daol'n
short_name: Aold Daol'n
type: cultuurhistorische stichting
founded_date: '1980-07-21'
founding_initiator: Gemeentebestuur van Dalen (burgemeester J.I.M. Hoffscholte)
founding_sponsors:
- name: Rabobank
contribution: "Financial support and antique doofpot as first collection item"
- name: Gemeentebestuur Dalen
contribution: "Aquarel painting donation"
donateur_count: 1150
donateur_count_date: '2025'
mission:
- "Het verzamelen van gegevens, voorwerpen en afbeeldingen die verband houden met de geschiedenis van Dalen"
- "Deze onder te brengen en te exposeren in daarvoor bedoelde ruimtes in Dalen en haar buitendorpen"
- "Het verwerven en bevorderen van het in stand houden van gebouwen, terreinen, dorpsgezichten en landschapsdelen"
locations:
museum:
name: Museummolen Jan Pol
type: stellingmolen (tower mill)
built: 1876
street_address: Molenwijk
city: Dalen
municipality: Coevorden
province: Drenthe
country: NL
description: "Historic windmill converted to museum, exploited by Aold Daol'n for 35+ years"
archive_room:
name: Onderzoeks-archiefruimte
venue: De Spinde
city: Dalen
depot:
name: Depot Roezemoes
city: Dalen
contents:
- kleding en textiel
- huishoudelijke voorwerpen
- gebruiksvoorwerpen
- landbouwgereedschappen
geographic_coverage:
former_municipality: Dalen (until 1998-01-01)
current_municipality: Coevorden
villages:
- Dalen
- Wachtum
- Dalerveen
- Stieltjeskanaal
- Dalerpeel
location_description: "Dorp tussen de molens - village between two windmills"
two_windmills:
- name: Jan Pol
type: stellingmolen
built: 1876
status: operational, museum
- name: De Bente
built: 1814
status: operational
governance:
board_size: 12
board_composition:
- area: Dalen
representatives: 9
- area: Wachtum
representatives: 1
- area: Dalerpeel
representatives: 1
- area: Dalerveen/Stieltjeskanaal
representatives: 1
current_board:
- name: Jack Lubberman
role: Voorzitter
location: Dalen
- name: Anna Wiers-Renting
role: Secretaris
location: Dalerveen/Stieltjeskanaal
- name: Annie van den Broek
role: Penningmeester
location: Coevorden
- name: Henk Nijkamp
role: Algemeen Adjunct
location: Dalen
- name: Feddie Zomers
role: Bestuurslid
location: Dalen
- name: Giny Oosterwijk-Haasken
role: Bestuurslid
location: Dalen
- name: Harm Zwiers
role: Bestuurslid
location: Dalen
- name: Herma Klompsma-Rieks
role: Bestuurslid
location: Dalen
- name: Jet Vaartjes-Ranter
role: Bestuurslid
location: Dalen
- name: Lammy Kroeze-Ruinemans
role: Bestuurslid
location: Wachtum
- name: Patrick Vos
role: Bestuurslid
location: Dalerpeel
- name: Sina Lamberts-Boer
role: Bestuurslid
location: Dalen
volunteer_count: 40
board_meetings_per_year: 4
working_groups:
- name: Museummolen en inrichting
- name: Archief (Documentatie, Beeld, Geluid)
- name: Depot (Museumvoorwerpen, Textiel)
- name: Sociale Media (PR, Website, Facebook)
- name: Nieuwsbrief
- name: Monument en landschap
- name: Platform Drentse Musea
- name: Onderhoud/Doeplein
memberships:
- name: Platform Drentse Musea
purpose: "Uitwisselen van ideeën en voorwerpen tussen musea, ondersteuning museumconsulent"
collections:
museum_collection:
location: Museummolen Jan Pol
coverage: "Dalen in de 19de en 20ste eeuw"
includes:
- bodemvondsten vanaf prehistorie
- vuurstenen pijlpunten en vuistbijlen (middensteentijd)
- zadelkweern en kommen (hunebedbouwers)
- offerbijl (grafheuvels)
archive_collection:
location: De Spinde
includes:
- historische foto's
- interviews met ouderen
- bandopnames
- beeldmateriaal
depot_collection:
location: Roezemoes
includes:
- kleding en textiel
- huishoudelijke voorwerpen
- gebruiksvoorwerpen
- landbouwgereedschappen
publications:
newsletter:
name: Nieuwsbrief
frequency: "3x per jaar"
content:
- historische artikelen
- oude foto's
- informatie en activiteiten
distribution: "Free to donateurs"
digital_presence:
website: https://www.aolddaoln.nl/
facebook: https://www.facebook.com/people/Stichting-Aold-Daoln/100069784284414/
email: bestuur@aolddaoln.nl
phone: "+31 638 726 115"
website_redesign: 2025
events_and_activities:
annual_events:
- Open Atelier Dagen
- Molenspel
- Drentse Molendag
- Nationale Molendag
- Verhalenweekend
- Oktober Kindermaand
upcoming_events:
- name: Midwinterhoornblazen
date: '2025-11-30'
- name: Dalen viert 80 jaar (WWII liberation)
date: '2025-04-04'
time: '12:00'
current_projects:
- name: Digitalisering collectieregistratie
url: https://www.aolddaoln.nl/projecten/digitalisering-collectieregistratie/
- name: Herdenkingspaneel vier Canadezen
url: https://www.aolddaoln.nl/projecten/herdenkingspaneel-vier-canadezen/
description: "WWII memorial for 4 Canadian airmen killed in Halifax bomber crash, May 1943"
- name: Restauratie Kazemat Oosterhesselerbrug
url: https://www.aolddaoln.nl/projecten/restauratie-kazemat-oosterhesselerbrug/
historical_focus:
wwii_history:
event: "Halifax bomber JD 113 VR-Z crash"
date: '1943-05-14'
squadron: "419 (Moose) Squadron, Royal Canadian Air Force"
takeoff: "Middleton St. George, Northeast England"
mission: "Bombing raid on Bochum, Germany"
crash_time: "02:45"
crash_location: "Bongvlier (between Reindersdijk, Bosweg, and Drift)"
shot_down_by: "Hauptman Herbert Lütje, Nachtjagdgeschwader NJG1"
victims:
- name: Walter H.S. Buckwell
age: 22
rank: Flight-Sergeant
role: Pilot/Commander
- name: Frederick W. Walkerdine
age: 24
rank: Sergeant
role: Boordwerktuigkundige (flight engineer)
- name: Walter L. Bovaird
rank: Flight-Sergeant
role: Schutter (gunner)
- name: Alfred Hurteau
rank: Flight-Sergeant
role: Schutter (gunner)
survivors:
- name: Russel W. Lowry
role: Navigator
fate: "Parachuted, escaped, returned to Canada after war"
- name: William J.N. Duggan
role: Radiotelegrafist
fate: "Parachuted, escaped, returned to Canada after war"
- name: William M. Reid
role: Bommenrichter (bombardier)
fate: "Parachuted, escaped, returned to Canada after war"
local_history:
oldest_mention: 1276
document: "Oorkonde - Hindricus van Borculo, burggraaf van Coevorden"
dispute: "Between Klooster van Assen and inhabitants of Dalen about sheep grazing"
750_year_celebration: 2026
major_fires:
- year: 1815
description: "Brand verwoeste 7 woonhuizen en 12 schuren in centrum"
# Google Maps enrichment data - NOTE: Shows CLOSED at old address
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJOZw5HVnjt0cReIpQLEDfqRE place_id: ChIJOZw5HVnjt0cReIpQLEDfqRE
name: Stichting Aold Daol'n name: Stichting Aold Daol'n
@ -58,10 +303,34 @@ google_maps_enrichment:
- establishment - establishment
primary_type: point_of_interest primary_type: point_of_interest
business_status: CLOSED_PERMANENTLY business_status: CLOSED_PERMANENTLY
google_maps_url: https://maps.google.com/?cid=1272793836423252600&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA google_maps_url: https://maps.google.com/?cid=1272793836423252600
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.694581199999995,6.780526399999999&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet
icon_background_color: '#7B9EB0'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Stichting Aold Daol'n, Hoofdstraat 139, Dalerveen, Netherlands google_maps_search_query: Stichting Aold Daol'n, Hoofdstraat 139, Dalerveen, Netherlands
# Important note about Google Maps discrepancy
address_discrepancy_note: |
Google Maps shows the organization as "CLOSED_PERMANENTLY" at Vliers 7, Dalen.
However, the organization's website (updated 2025) shows they are very active with:
- 1150 donateurs (members)
- 12 board members and 40 volunteers
- Active museum at Museummolen Jan Pol, Molenwijk, Dalen
- Upcoming events (Midwinterhoornblazen Nov 30, 2025; 80-year liberation April 4, 2025)
- Recent website redesign (March 2025)
The original NDE address (Hoofdstraat 139, Dalerveen) may be an old administrative address.
The museum location is Museummolen Jan Pol at Molenwijk in Dalen.
The archive is in De Spinde, and the depot is in Roezemoes.
CONCLUSION: Organization is OPERATIONAL, Google Maps has outdated information.
notes: |
- Founded 1980 by initiative of municipal government under Mayor Hoffscholte
- Operates Museummolen Jan Pol (1876 windmill) for 35+ years
- 1150 donateurs (members), 12-person board, 40 volunteers
- Strong focus on local history including WWII (1943 Halifax bomber crash)
- Member of Platform Drentse Musea
- Covers former municipality of Dalen (5 villages)
- Preparing for 750-year celebration in 2026 (first mention 1276)
- Newsletter published 3x per year
- Active digitization project for collection registration

View file

@ -9,8 +9,195 @@ original_entry:
- M - M
entry_index: 31 entry_index: 31
processing_timestamp: '2025-11-27T15:00:30.206518+00:00' processing_timestamp: '2025-11-27T15:00:30.206518+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T12:30:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T12:30:00+00:00'
fetch_status: SUCCESS
source_url: https://museumnieuwlande.nl/
organization_details:
full_name: Stichting Onderduikersmuseum de Duikelaar
short_name: Onderduikersmuseum de Duikelaar
also_known_as: Museum Nieuwlande
tagline: "Het dorp dat zweeg!"
motto: "Het dorp dat zweeg heeft veel te vertellen"
founded_date: '2017-05-15'
opened_date: '2018-04-06'
opening_event: "Presentation of Het Geheime Dagboek van Arnold Douwes by NIOD"
opened_by: "Max Léons (onderduiker en verzetsman)"
legal_status:
anbi_status: true
anbi_type: Culturele ANBI
rsin: '857583001'
policy_plan: "Beleidsplan 2023-2025"
policy_plan_url: https://museumnieuwlande.nl/wp-content/uploads/2023/11/20230531-Beleidsplan-2023-2025.pdf
support_foundation:
name: Steunstichting Domus DuMus
purpose: "Support foundation for the museum"
location:
street_address: Julianalaan 3
postal_code: 7918 AH
city: Nieuwlande
municipality: Hoogeveen
province: Drenthe
country: NL
contact:
phone: "06 38 03 87 93"
email: contact@museumnieuwlande.nl
email_finance: financien@museumnieuwlande.nl
mission: |
Stichting Onderduikersmuseum de Duikelaar wil de geschiedenis van Nieuwlande
in materiële en immateriële zin verzamelen, bewaren en doorgeven. De geschiedenis
van Nieuwlande in de jaren '40-'45 is de moeite waard om aan de jongere generatie
door te geven.
historical_significance:
wwii_history:
village: Nieuwlande
role: "Active resistance and shelter for Jewish refugees"
saved_count: "honderden, veelal Joodse vervolgden"
key_figures:
- name: Johannes Post
role: "Drijvende kracht achter het verzet in Nieuwlande"
occupation: "Boer in Nieuwlande"
status: "Nationaal bekende verzetsman"
- name: Arnold Douwes
role: "Verzetsman"
publication: "Het Geheime Dagboek van Arnold Douwes"
- name: Ds. Slomp
alias: "Frits de Zwerver"
role: "Verzet"
yad_vashem:
award_date: '1985-04-11'
award_type: "Collectieve onderscheiding"
awarded_by: "Staat Israël"
significance: |
Een eer die slechts twee plaatsen ter wereld kregen.
Later ook Le Chambon sur Lignon (Frankrijk) onderscheiden.
comparison: "Only two places worldwide received collective Yad Vashem recognition"
other_recipient: "Le Chambon sur Lignon, France"
collections:
main_collection:
name: Collectie Schonewille
origin: "Voormalig museum van Jo Schonewille 'Nieuwlande 1940-1945, een dorp dat zweeg'"
loan_type: "Langdurig bruikleen"
contents:
- foto's
- kranten
- pamfletten
- posters
- boeken
focus:
- "Onderduikgeschiedenis van Nieuwlande"
- "Johannes Post"
- "Arnold Douwes"
- "Ds. Slomp (Frits de Zwerver)"
digital_collection:
url: https://museumnieuwlande.nl/het-museum/digitale-collectie/
opening_hours:
march_to_october:
wednesday_to_saturday: "10:00-17:00"
sundays_and_holidays: "13:00-17:00"
november_december:
saturday: "10:00-17:00"
sundays_and_holidays: "13:00-17:00"
january_february: "Gesloten (closed)"
facilities:
koffiecorner:
name: Koffiecorner
url: https://museumnieuwlande.nl/bezoek/cafe/
museumwinkel:
name: Museumwinkel
url: https://museumnieuwlande.nl/bezoek/winkel/
accessibility: "Rolstoelvriendelijk (wheelchair accessible)"
digital_presence:
website: https://museumnieuwlande.nl/
facebook: https://facebook.com/deDuikelaar
instagram: https://instagram.com/onderduikersmuseum
linkedin: https://www.linkedin.com/company/onderduikersmuseum-de-duikelaar/
languages:
- nl
- en
- de
media:
documentary:
title: "NOS Nieuwlande: Onverzettelijk Onderduikdorp"
broadcaster: NOS
date: '2022-05-04'
presenter: Martijn Bink
url: https://www.npostart.nl/nos-nieuwlande-onverzettelijk-onderduikdorp/04-05-2022/POW_05338533
podcast:
url: https://museumnieuwlande.nl/podcast/
videos:
url: https://museumnieuwlande.nl/het-museum/filmpjes/
activities:
guided_walks:
url: https://museumnieuwlande.nl/activiteiten/wandeling-met-gids/
description: "Wandeling met gids door historische omgeving"
distance: "ca. 6.5 km"
duration: "2 uur 45 minuten"
includes:
- "Schuilhol bezoek (hiding hole visit)"
- "Water bottle provided"
lectures:
url: https://museumnieuwlande.nl/activiteiten/lezingen/
children_morning:
url: https://museumnieuwlande.nl/educatie/kinderochtend/
education:
school_programs:
url: https://museumnieuwlande.nl/educatie/schoolprogrammas/
homework_help:
url: https://museumnieuwlande.nl/werkstuk-of-spreekbeurt/
description: "Werkstuk of Spreekbeurt hulp"
family_visit:
url: https://museumnieuwlande.nl/educatie/gezinsbezoek/
nearby_attractions:
onderduikhol:
name: Onderduikhol
url: https://museumnieuwlande.nl/omgeving/onderduikhol/
description: "Reconstructed WWII hiding hole"
cycling_walking:
url: https://museumnieuwlande.nl/omgeving/fietsen-wandelen/
description: "Fiets- en wandelroutes door historische omgeving"
funding_partners:
- name: EU LEADER
url: https://www.leaderdrenthe.nl/
- name: vfonds
url: https://www.vfonds.nl/
- name: Provincie Drenthe
url: https://www.provincie.drenthe.nl/
- name: ELFPO (European Agricultural Fund for Rural Development)
url: https://agriculture.ec.europa.eu/index_nl
testimonials:
- name: Karel Loohuis
role: "Oud Burgemeester Hoogeveen en voorzitter van het bestuur museum"
quote: "Mooi dat de indrukwekkende collectie van Jo Schonewille is behouden."
- name: Dirk Mulder
role: "Voormalig directeur Herinneringscentrum Kamp Westerbork"
quote: "Hooghalen en Nieuwlande. Hemelsbreed liggen beide Drentse plaatsen ruim 25 km van elkaar verwijderd, maar het contrast is groot."
- name: Geert Hovingh
role: "Auteur Johannes Post, exponent van het verzet"
# Google Maps enrichment data
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJlzsbaa8dyEcRKWrU19CXAO8 place_id: ChIJlzsbaa8dyEcRKWrU19CXAO8
name: Onderduikersmuseum De Duikelaar name: Onderduikersmuseum De Duikelaar
@ -151,53 +338,23 @@ google_maps_enrichment:
Alles netjes verzorgd. En rolstoelvriendelijk.' Alles netjes verzorgd. En rolstoelvriendelijk.'
publish_time: '2025-08-01T12:16:17.559192202Z' publish_time: '2025-08-01T12:16:17.559192202Z'
photo_urls: google_maps_url: https://maps.google.com/?cid=17221931898294790697
- https://places.googleapis.com/v1/places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU4HcqeTh4M9gwteoPCXNn4S-FRDHjd6niGcnAI6ETRT6tVlG20moVO2DnG9sZLAiO7ksAfNQ1jFFtR6HCUnWOtooCqns__Kw7Gjuji9uMb8yyuhDBNgYnaOtAZgsbvbaACMgQzWQsBg3INWGxvplLZzdjHZNaBED6NMQhjEj8FMoqf2YD3i1HLiHDD5xBip6zs2Fq3VXq0neDOvASyvfSYjIcEwznCckLmTUeyJjPlJ0z-DHsP5lxC3_Ll8KKN7H45UA8dX6WO7v-80e_JAaUobkLhljLtFC_ItZI_wZqg05w/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5eJFFZUDZg4QS1IewBT6Wrzlj_noG-XpIfBmcnwoR7sXdeSM-ILah-IA8KOgOXwSGLBsZhqln9vN7PH035sR1gAmAyaIhiLNalcG4fSfbyd7H9QPXADnHKiijirf3Z4mUlC3w7YZGZ6qpLZGHa_0Gm4luiBm2zlpahmJjEGJhJ5wN4ytxG4lu86UO9Xgwxaj0EkkTBguyXwb_69ElaFQMZTEBq7-ybjw4rtcCmThUD2T4jJCSyXn6ZHw18L8_AY1aG8GT7wEkqstdmcYgtDaK6sU5pc9LurYlFklLJg0RSCg/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5bu72PDzFaAt1cqeFJNIiaWrD-mA0daNJyg3cQsTPGU5vXYubuKpe11QLRFjXnmHkIDXSbzCwdRF-yA-OCpHBqClbXluLQ5FN8oiMViuAA7GCWwkWRaaHzNlvgvkvs5IMVPXprWrlZ0aDoF6njOXU9olamIdpMqUIq3nIN5dVMKCOpYx1WHW4B8iFDv50fN0y0f3XKfzPozdnhjw0Bz1gZc7h2s3KlsHkxRazMGgcZGXo08XvfRfPSKCTvGdJcrTghnfFy66h5Wn40b7zGJqJj8eGt5r_RtHWzr0pXoSslvGeId6TJwvLfTsyUQ15Jab3MOburCqsirNZd60B3-3UvU0cixhCd1LXvlNahG2ZX99dwtET8brIhZlG0pkh9vk1J0VVakVtgKwpyOweGwolwONsA8Ql8o-GIKz4RoNDet_U/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU529fiqLcD6ikWEULkZYJEUiPaRz8XCZi2Z0VVYxDu84wWwB-_biCk1WTIcEoxdB7tbp4dmEWJXnMo26XM29FyLhyhTGBhkow-FtEURK0v0DUDpMKwcLOs6LEHDRIs-RGD2sGMvnQS8ksS2CzHwr6_xc1yfjW0UJTLfFb-PWy6RoUvSC9HWBlJieyFun7HcIP8XamT1AdArqCFww47atqweliTod4cyqMMIEqpXWHC6iuFuXpXMv-1p3GurbvcOW-IQg0C58tSo2Qc2MlEiVoG1QeWquClkMmP-ZxU4ypWIgf3FyZQchoiId2xNwDX5VJ-Rf3QaoG0h3ii-91QHocv3N47HNklXVjU04CLdyuJ24tZ5j75yKatoTEvvYYNj1HK4bPDGW6IFME6Mj1UcRxccO0PCwEdcgglvZw0mQ2aD4x6T/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5z6rm0pBdBA-XS1rKJQvz-reYVyqoSebbEFzBRfvAfhGs42QZmlLt85MJQiypbnixjp_EYFCGywcNxj-tjMFfhfflobegjVE3-Z3Xrlur-iFGYkQMuHppELU1mLFfttMOdar2R_O9eZIuvOCjHHetNX1lGVxrxqB0HN3hfFPc95sbFgIjJAm8AZRYwLyCl2xFg3xsG1Ew-QAG8eFkSLNoVBfYyjK07hwoxy9eB3vSKi-kwGBiUExUD6KBgiZLGaGEJBq_5ZPJMETZcO4HEVonLfizXiUWgX41Ta8jmXQuhK1akRaR8ETX45hfjyj2HxW8ye9i5SOUqcnbv5IHli44lC1iLvhG60vSFmkxmWuwifeEIgvJox7aN_mHh2Msod-PWfRfLQoMUpMNY5z0XpvUva5KHQQL7kaS58yyNqkgvrw/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
photos_metadata:
- name: places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU4HcqeTh4M9gwteoPCXNn4S-FRDHjd6niGcnAI6ETRT6tVlG20moVO2DnG9sZLAiO7ksAfNQ1jFFtR6HCUnWOtooCqns__Kw7Gjuji9uMb8yyuhDBNgYnaOtAZgsbvbaACMgQzWQsBg3INWGxvplLZzdjHZNaBED6NMQhjEj8FMoqf2YD3i1HLiHDD5xBip6zs2Fq3VXq0neDOvASyvfSYjIcEwznCckLmTUeyJjPlJ0z-DHsP5lxC3_Ll8KKN7H45UA8dX6WO7v-80e_JAaUobkLhljLtFC_ItZI_wZqg05w
height: 750
width: 750
author_attributions:
- displayName: Onderduikersmuseum De Duikelaar
uri: https://maps.google.com/maps/contrib/108541541339818823051
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjXiC0YxLt_zmR_9xCyJAhXwjgNljLhIGC9xWFZULfnvMmtfcig=s100-p-k-no-mo
- name: places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5eJFFZUDZg4QS1IewBT6Wrzlj_noG-XpIfBmcnwoR7sXdeSM-ILah-IA8KOgOXwSGLBsZhqln9vN7PH035sR1gAmAyaIhiLNalcG4fSfbyd7H9QPXADnHKiijirf3Z4mUlC3w7YZGZ6qpLZGHa_0Gm4luiBm2zlpahmJjEGJhJ5wN4ytxG4lu86UO9Xgwxaj0EkkTBguyXwb_69ElaFQMZTEBq7-ybjw4rtcCmThUD2T4jJCSyXn6ZHw18L8_AY1aG8GT7wEkqstdmcYgtDaK6sU5pc9LurYlFklLJg0RSCg
height: 3159
width: 4800
author_attributions:
- displayName: Onderduikersmuseum De Duikelaar
uri: https://maps.google.com/maps/contrib/108541541339818823051
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjXiC0YxLt_zmR_9xCyJAhXwjgNljLhIGC9xWFZULfnvMmtfcig=s100-p-k-no-mo
- name: places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5bu72PDzFaAt1cqeFJNIiaWrD-mA0daNJyg3cQsTPGU5vXYubuKpe11QLRFjXnmHkIDXSbzCwdRF-yA-OCpHBqClbXluLQ5FN8oiMViuAA7GCWwkWRaaHzNlvgvkvs5IMVPXprWrlZ0aDoF6njOXU9olamIdpMqUIq3nIN5dVMKCOpYx1WHW4B8iFDv50fN0y0f3XKfzPozdnhjw0Bz1gZc7h2s3KlsHkxRazMGgcZGXo08XvfRfPSKCTvGdJcrTghnfFy66h5Wn40b7zGJqJj8eGt5r_RtHWzr0pXoSslvGeId6TJwvLfTsyUQ15Jab3MOburCqsirNZd60B3-3UvU0cixhCd1LXvlNahG2ZX99dwtET8brIhZlG0pkh9vk1J0VVakVtgKwpyOweGwolwONsA8Ql8o-GIKz4RoNDet_U
height: 3024
width: 4032
author_attributions:
- displayName: Johan van Hoek
uri: https://maps.google.com/maps/contrib/115567933940886009629
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjUszbO7xfVNPxQCseF1R3x25eGi1euRorsp3o7N7zKUVZDW7T3o_Q=s100-p-k-no-mo
- name: places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU529fiqLcD6ikWEULkZYJEUiPaRz8XCZi2Z0VVYxDu84wWwB-_biCk1WTIcEoxdB7tbp4dmEWJXnMo26XM29FyLhyhTGBhkow-FtEURK0v0DUDpMKwcLOs6LEHDRIs-RGD2sGMvnQS8ksS2CzHwr6_xc1yfjW0UJTLfFb-PWy6RoUvSC9HWBlJieyFun7HcIP8XamT1AdArqCFww47atqweliTod4cyqMMIEqpXWHC6iuFuXpXMv-1p3GurbvcOW-IQg0C58tSo2Qc2MlEiVoG1QeWquClkMmP-ZxU4ypWIgf3FyZQchoiId2xNwDX5VJ-Rf3QaoG0h3ii-91QHocv3N47HNklXVjU04CLdyuJ24tZ5j75yKatoTEvvYYNj1HK4bPDGW6IFME6Mj1UcRxccO0PCwEdcgglvZw0mQ2aD4x6T
height: 3000
width: 4000
author_attributions:
- displayName: Paul Walgering
uri: https://maps.google.com/maps/contrib/116486074534695666886
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjU_KxEHoL0JFT0GGSw87Wivsp_sSwl0N2GmSlTiEUmVsoolN-gz=s100-p-k-no-mo
- name: places/ChIJlzsbaa8dyEcRKWrU19CXAO8/photos/AWn5SU5z6rm0pBdBA-XS1rKJQvz-reYVyqoSebbEFzBRfvAfhGs42QZmlLt85MJQiypbnixjp_EYFCGywcNxj-tjMFfhfflobegjVE3-Z3Xrlur-iFGYkQMuHppELU1mLFfttMOdar2R_O9eZIuvOCjHHetNX1lGVxrxqB0HN3hfFPc95sbFgIjJAm8AZRYwLyCl2xFg3xsG1Ew-QAG8eFkSLNoVBfYyjK07hwoxy9eB3vSKi-kwGBiUExUD6KBgiZLGaGEJBq_5ZPJMETZcO4HEVonLfizXiUWgX41Ta8jmXQuhK1akRaR8ETX45hfjyj2HxW8ye9i5SOUqcnbv5IHli44lC1iLvhG60vSFmkxmWuwifeEIgvJox7aN_mHh2Msod-PWfRfLQoMUpMNY5z0XpvUva5KHQQL7kaS58yyNqkgvrw
height: 3000
width: 4000
author_attributions:
- displayName: Chanan Kalker
uri: https://maps.google.com/maps/contrib/103660487106469344140
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjVXVLebqiGSeDyO7Uj_XjlDprt33yNoUWWuQHQZBfHbA2Ormxey6Q=s100-p-k-no-mo
google_maps_url: https://maps.google.com/?cid=17221931898294790697&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.696978599999994,6.6123507&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/museum_pinlet
icon_background_color: '#13B5C7'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Stichting Onderduikersmuseum de Duikelaar, Julianalaan 3, google_maps_search_query: Stichting Onderduikersmuseum de Duikelaar, Julianalaan 3,
Nieuwlande, Netherlands Nieuwlande, Netherlands
notes: |
- WWII resistance museum in Nieuwlande, Drenthe
- Commemorates the village's role in hiding Jewish refugees during WWII
- Received rare collective Yad Vashem award in 1985 (only 2 places worldwide)
- Key figures: Johannes Post (resistance leader), Arnold Douwes, Ds. Slomp
- Houses the Schonewille collection (former private museum)
- Cultural ANBI status (RSIN 857583001)
- 4.5 star rating with 193 reviews on Google Maps
- Offers guided walks including visit to reconstructed hiding hole
- Featured in NOS 4 mei documentary (2022)
- Support foundation: Steunstichting Domus DuMus
- Wheelchair accessible
- Multi-language website (NL, EN, DE)
- Strong educational program for schools

View file

@ -9,11 +9,91 @@ original_entry:
- S - S
entry_index: 32 entry_index: 32
processing_timestamp: '2025-11-27T15:00:30.207773+00:00' processing_timestamp: '2025-11-27T15:00:30.207773+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape
enrichment_timestamp: '2025-11-28T15:00:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:00:00+00:00'
fetch_status: SUCCESS
source_url: https://www.oudheidkamerzuidwolde.nl/
organization_details:
full_name: Vereniging Vrienden van de Oudheidkamer Zuidwolde
short_name: Oudheidkamer Zuidwolde
legal_form: vereniging (association)
founded: '1983'
member_count: "500+"
membership_fee: "€15.00/year"
tagline: "Koestert het verleden, breidt kennis uit"
museum:
name: Cultuur-Historisch Museum De Wemme
established: '1988'
website: https://dewemme.nl/
description: "Cultural-historical museum operated by the Oudheidkamer"
location:
street_address: Tolweg 2
postal_code: 7921 JA
city: Zuidwolde
municipality: De Wolden
province: Drenthe
country: NL
contact:
email: info@oudheidkamerzuidwolde.nl
phone: "0528-372276"
website: https://www.oudheidkamerzuidwolde.nl/
publications:
journal:
name: Mandiêlig
meaning: "Gemeenschappelijk bezit (common property)"
first_issue: '1986'
frequency: "3x per jaar (three times per year)"
description: |
Daarmee willen we aangeven dat het verleden van ons allemaal is,
dat het Zuidwolde van nu gemaakt is door de Zuidwoldigers van toen.
archive_url: https://www.oudheidkamerzuidwolde.nl/publicaties/archief-mandielig/
books:
- type: Boerderijenboeken (farmhouse books)
url: https://www.oudheidkamerzuidwolde.nl/publicaties/boeken/
- type: Overige publicaties
url: https://www.oudheidkamerzuidwolde.nl/publicaties/overige/
digital_resources:
beeldbank:
url: https://www.oudheidkamerzuidwolde.nl/cgi-bin/beeldbank.pl
description: "Photo database/image bank"
canon:
name: Canon van Zuidwolde
url: https://www.canonvannederland.nl/nl/drenthe/zuidwolde
description: "Local history canon as part of Canon van Nederland"
historical_context:
first_mention: '1275'
original_name: Suthwalda
description: |
Zuidwolde heeft een lange historie. Voor het begin van de jaartelling
leefden er al mensen in onze omgeving. In 1275 wordt de naam Suthwalda
voor het eerst schriftelijk vermeld.
recent_news:
- title: Boerderijenboek Veeningen (deel 1)
date: '2025-11-15'
- title: praatje bij een plaatje Veeningen
date: '2025-11-13'
membership_benefits:
- "Blad Mandiêlig (3x per jaar)"
- "Twee toegangsbewijzen voor museum De Wemme"
google_maps_status: NOT_FOUND google_maps_status: NOT_FOUND
google_maps_search_query: Stichting Oudheidkamer Zuidwolde, Tolweg 2, Zuidwolde, Netherlands google_maps_search_query: Stichting Oudheidkamer Zuidwolde, Tolweg 2, Zuidwolde, Netherlands
google_maps_search_timestamp: '2025-11-28T09:48:51.210294+00:00' google_maps_search_timestamp: '2025-11-28T09:48:51.210294+00:00'
exa_enrichment: exa_enrichment:
source: exa_web_search source: exa_web_search
fetch_timestamp: '2025-11-28T10:11:05.705430+00:00' fetch_timestamp: '2025-11-28T10:11:05.705430+00:00'
@ -37,3 +117,14 @@ exa_enrichment:
notes: The Oudheidkamer is the heritage society; De Wemme is the museum they operate. notes: The Oudheidkamer is the heritage society; De Wemme is the museum they operate.
exa_enrichment_status: SUCCESS exa_enrichment_status: SUCCESS
exa_enrichment_timestamp: '2025-11-28T10:11:05.707563+00:00' exa_enrichment_timestamp: '2025-11-28T10:11:05.707563+00:00'
notes: |
- Heritage society (Oudheidkamer) founded in 1983 with 500+ members
- Operates Cultuur-Historisch Museum "De Wemme" (since 1988)
- Publishes journal "Mandiêlig" since 1986 (3x/year)
- Part of Canon van Nederland (local history canon for Zuidwolde)
- Maintains Beeldbank (image database) of local historical photos
- Publishes Boerderijenboeken (farmhouse history books)
- Membership: €15/year includes journal + 2 museum tickets
- First written mention of Zuidwolde (Suthwalda): 1275
- Uses ZCBS collection management system

View file

@ -9,8 +9,96 @@ original_entry:
- S - S
entry_index: 34 entry_index: 34
processing_timestamp: '2025-11-27T15:00:32.353825+00:00' processing_timestamp: '2025-11-27T15:00:32.353825+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T15:00:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:00:00+00:00'
fetch_status: SUCCESS
source_url: https://rhg-rolde.nl/
organization_details:
full_name: Rolder Historisch Gezelschap
short_name: RHG
founded: '1970'
mission: |
Het aanmoedigen van de studie naar en het verspreiden van kennis
over de geschiedenis van de oude gemeente Rolde.
legal_status:
anbi_status: true
rsin: '816398549'
policy_plan: "Beleidsplan 2023-2025"
policy_plan_url: https://rhg-rolde.nl/wp-content/uploads/2023/05/20230502-Beleidsplan-RHG-2023-2025.pdf
location:
venue_name: MFC Boerhoorn
floor: eerste verdieping (first floor)
street_address: Zuides 50
postal_code: 9451 KD
city: Rolde
municipality: Aa en Hunze
province: Drenthe
country: NL
contact:
email: secretaris@rhg-rolde.nl
website: https://rhg-rolde.nl/
facebook: https://www.facebook.com/RolderHistorischGezelschap/
opening_hours:
monday: "13:30-16:30 en 19:00-21:00"
thursday: "19:00-21:00"
note: "Tijdens feestdagen gesloten"
publications:
journal:
name: De Kloetschup
url: https://rhg-rolde.nl/kloetschup-2/
description: "Periodiek met historische artikelen over oude gemeente Rolde"
other_publications:
description: "Incidenteel verschijnende publicaties"
bookshop_url: https://rhg-rolde.nl/boekenwinkel/
activities:
- "(Studie)bijeenkomsten"
- "Lezingen"
- "Excursies"
- "Tentoonstellingen"
- "Werk- en studiegroepen"
digital_resources:
beeldbank:
url: https://beeldbank.rhg-rolde.nl/cgi-bin/fotos.pl
description: "Photo database with historical images"
special_projects:
- name: "80 Jaar Vrijheid in Rolde"
url: https://rhg-rolde.nl/80-jaar-vrijheid-in-rolde/
description: "WWII liberation commemoration project"
- name: "Fietsommetje 80 jaar vrijheid"
url: https://rhg-rolde.nl/fietsommetje-80-jaar-vrijheid-in-rolde/
- name: "Begraafplaats Rolde"
url: https://rhg-rolde.nl/begraafplaats-rolde/
description: "Cemetery documentation project"
- name: "Zandverstuiving Rolde"
url: https://rhg-rolde.nl/zandverstuiving-rolde/
funding:
rabo_clubsupport_2025: "€1,019.71"
source: "Rabobank Assen en Noord-Drenthe"
recent_events:
- title: "Lezing Tuinarchitect Louis Le Roy"
date: '2025-11-19'
description: "Joint event with Culturele Vereniging Rolde about eco-architect"
- title: "100 jaar TT in Assen"
date: '2025-06-27'
description: "Article about 1925 TT race in Rolde-Borger-Grolloo triangle"
# Google Maps enrichment data
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJ_b2VtYaNZEERdMCA6641QhE place_id: ChIJ_b2VtYaNZEERdMCA6641QhE
name: Rolder Historisch Gezelschap name: Rolder Historisch Gezelschap
@ -61,31 +149,6 @@ google_maps_enrichment:
business_status: OPERATIONAL business_status: OPERATIONAL
opening_hours: opening_hours:
open_now: false open_now: false
periods:
- open:
day: 1
hour: 13
minute: 30
close:
day: 1
hour: 16
minute: 30
- open:
day: 1
hour: 19
minute: 30
close:
day: 1
hour: 21
minute: 30
- open:
day: 4
hour: 19
minute: 30
close:
day: 4
hour: 21
minute: 30
weekday_text: weekday_text:
- 'maandag: 13:3016:30, 19:3021:30' - 'maandag: 13:3016:30, 19:3021:30'
- 'dinsdag: Gesloten' - 'dinsdag: Gesloten'
@ -96,28 +159,21 @@ google_maps_enrichment:
- 'zondag: Gesloten' - 'zondag: Gesloten'
rating: 5 rating: 5
total_ratings: 1 total_ratings: 1
reviews: google_maps_url: https://maps.google.com/?cid=1243615472499343476
- author_name: Lammert Suichies
author_uri: https://www.google.com/maps/contrib/100700977246210798315/reviews
rating: 5
relative_time_description: 8 jaar geleden
text: null
publish_time: '2017-08-22T16:04:07.378Z'
photo_urls:
- https://places.googleapis.com/v1/places/ChIJ_b2VtYaNZEERdMCA6641QhE/photos/AWn5SU5zAJAfLYarQl7MRxfkU5MDJNdHs_HRmVPYAu7EyCP5jjpXjG1MK3rM-zGjAKss2voyEcZcZa0qDTkWujLkU43GXYwClpk7hzqx6lDA0UWfBTyTCS4dUD81mhzU0Lhubb38QKnD7wbfIf8kZ-pEaciqLhl7I4untLz9QW0Ogkngy_6kD58AlQLrKN7co4Es8tJWgev7l1POBmSLvv__SSa5ahVt4Ms1wRlWY5ImGYdQCigSMfu32xmumo9YGXHhDGbvquSgob7Z2E9fUwH4KufNZZ7w9ZFwt0rCaaHJRCaGnNOpkde9Mv1ppwkLTuLJe99_g1SPOzjMptNpaZL9dOaLC8dCN3vAVUejgKIKZYmEbxan0AvPgrIdlrKLy2xRjBtPIX2qjPuZUOeLujh8zUOHBWPKRO-QPNM9mdADphM/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
photos_metadata:
- name: places/ChIJ_b2VtYaNZEERdMCA6641QhE/photos/AWn5SU5zAJAfLYarQl7MRxfkU5MDJNdHs_HRmVPYAu7EyCP5jjpXjG1MK3rM-zGjAKss2voyEcZcZa0qDTkWujLkU43GXYwClpk7hzqx6lDA0UWfBTyTCS4dUD81mhzU0Lhubb38QKnD7wbfIf8kZ-pEaciqLhl7I4untLz9QW0Ogkngy_6kD58AlQLrKN7co4Es8tJWgev7l1POBmSLvv__SSa5ahVt4Ms1wRlWY5ImGYdQCigSMfu32xmumo9YGXHhDGbvquSgob7Z2E9fUwH4KufNZZ7w9ZFwt0rCaaHJRCaGnNOpkde9Mv1ppwkLTuLJe99_g1SPOzjMptNpaZL9dOaLC8dCN3vAVUejgKIKZYmEbxan0AvPgrIdlrKLy2xRjBtPIX2qjPuZUOeLujh8zUOHBWPKRO-QPNM9mdADphM
height: 4608
width: 3456
author_attributions:
- displayName: willem Verwer
uri: https://maps.google.com/maps/contrib/114714976860800421126
photoUri: https://lh3.googleusercontent.com/a/ACg8ocK_EWY9s_ZgwN49RLGHGhOG7TmvvkhI6mk2Ghzox791sJsWe5Bq=s100-p-k-no-mo
google_maps_url: https://maps.google.com/?cid=1243615472499343476&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.9834022,6.6474021&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet
icon_background_color: '#7B9EB0'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Rolder Historisch Gezelschap, Zuides 50 MFC Boerhoorn eerste google_maps_search_query: Rolder Historisch Gezelschap, Zuides 50 MFC Boerhoorn eerste verdieping, Rolde, Netherlands
verdieping, Rolde, Netherlands
notes: |
- Historical society founded in 1970 for former municipality of Rolde
- ANBI status (RSIN 816398549)
- Located in MFC Boerhoorn community center, first floor
- Publishes "De Kloetschup" journal
- Maintains Beeldbank (image database) at beeldbank.rhg-rolde.nl
- Active in WWII commemoration (80 jaar vrijheid project)
- Received €1,019.71 from Rabo ClubSupport 2025
- Policy plan 2023-2025 available online
- Collaborates with Culturele Vereniging Rolde on events
- Historical connection to first TT race (1925) - route passed through Rolde
- 5-star Google rating (1 review)
- Uses ZCBS collection management system

View file

@ -9,13 +9,78 @@ original_entry:
- S - S
entry_index: 35 entry_index: 35
processing_timestamp: '2025-11-27T15:00:32.354818+00:00' processing_timestamp: '2025-11-27T15:00:32.354818+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T15:00:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:00:00+00:00'
fetch_status: SUCCESS
source_url: https://www.stichtinghistorievanruinen.nl/
organization_details:
full_name: Stichting Historie van Ruinen
short_name: Historie van Ruinen
legal_form: stichting (foundation)
description: |
Collects and preserves the interesting history of Ruinen and surroundings.
Operates the Pasmans Huus museum farmhouse and maintains a growing image bank.
museum:
name: Museumboerderij Pasmans Huus
description: "Historic farmhouse museum with guided tours"
seasonal_hours: "Open May-October (closed winter season)"
location:
street_address: Oosterstraat 16
city: Ruinen
municipality: De Wolden
province: Drenthe
country: NL
contact:
website: https://www.stichtinghistorievanruinen.nl/
facebook: https://www.facebook.com/profile.php?id=100090380318482
digital_resources:
beeldbank:
url: https://collectie.stichtinghistorievanruinen.nl
description: |
Groot aantal foto's uit de voormalige gemeente Ruinen.
Deze collectie wordt voortdurend uitgebreid.
Searchable by street name or family name.
registers:
url: https://www.stichtinghistorievanruinen.nl/index.php/historie-van-ruinen/registers
geographic_scope:
primary: Ruinen
historical_municipality: voormalige gemeente Ruinen (former municipality of Ruinen)
activities:
- "Collecting old photos and historical materials"
- "Maintaining and expanding image bank (Beeldbank)"
- "Operating Pasmans Huus museum with guided tours"
- "Preserving local history and heritage"
recent_activities:
- title: "RTV Drenthe Strunen op de Brink"
date: '2025-12-23'
type: TV broadcast
- title: "Nieuwjaarsvisite"
date: '2026-01-05'
donation:
url: https://www.stichtinghistorievanruinen.nl/index.php/historie-van-ruinen/donateur-worden
call_to_action: "Wij zijn natuurlijk altijd op zoek naar nieuwe donateurs"
# Google Maps enrichment data (Note: Found different organization)
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJbbisYNkTyEcR6LQvXF-820s place_id: ChIJbbisYNkTyEcR6LQvXF-820s
name: Stichting Ruinen 1865 name: Stichting Ruinen 1865
fetch_timestamp: '2025-11-28T09:48:52.989659+00:00' fetch_timestamp: '2025-11-28T09:48:52.989659+00:00'
api_status: OK api_status: OK
note: "Google Maps returned 'Stichting Ruinen 1865' which appears to be a different organization"
coordinates: coordinates:
latitude: 52.7620608 latitude: 52.7620608
longitude: 6.3504644 longitude: 6.3504644
@ -59,11 +124,21 @@ google_maps_enrichment:
- point_of_interest - point_of_interest
- establishment - establishment
business_status: OPERATIONAL business_status: OPERATIONAL
google_maps_url: https://maps.google.com/?cid=5466169690498774248&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA google_maps_url: https://maps.google.com/?cid=5466169690498774248
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.7620608,6.3504644&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet
icon_background_color: '#7B9EB0'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Stichting Historie van Ruinen, Oosterstraat 16, Ruinen, google_maps_search_query: Stichting Historie van Ruinen, Oosterstraat 16, Ruinen, Netherlands
Netherlands google_maps_note: |
The Google Maps result returned "Stichting Ruinen 1865" at a different address.
This appears to be a related but distinct organization.
notes: |
- Local history foundation for former municipality of Ruinen
- Operates Museumboerderij "Pasmans Huus" (museum farmhouse)
- Museum closed during winter season (reopens May)
- Maintains growing Beeldbank (image database) at collectie.stichtinghistorievanruinen.nl
- Actively seeking donations of old photos and historical materials
- Featured on RTV Drenthe "Strunen op de Brink" program
- Uses ZCBS collection management system
- Note: Google Maps returned "Stichting Ruinen 1865" - may be related organization
- Facebook presence active

View file

@ -9,8 +9,103 @@ original_entry:
- S - S
entry_index: 36 entry_index: 36
processing_timestamp: '2025-11-27T15:00:32.355640+00:00' processing_timestamp: '2025-11-27T15:00:32.355640+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T15:00:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:00:00+00:00'
fetch_status: SUCCESS
source_url: https://www.historieruinerwold.nl/
organization_details:
full_name: Stichting Historie van Ruinerwold
short_name: Historie Ruinerwold
legal_form: stichting (foundation)
founded: '1984'
description: |
De Stichting verzamelt sinds 1984 de historische gegevens van de vroegere
gemeente Ruinerwold, en de buurtschap Tweeloo, die tot 1942 deel uitmaakte
van onze gemeente.
geographic_scope:
primary: Ruinerwold
historical_municipality: vroegere gemeente Ruinerwold (former municipality)
includes:
- Ruinerwold
- Broekhuizen
- Tweeloo (buurtschap, part of municipality until 1942)
boundary_note: |
We hanteren de oude gemeentegrens, inclusief Broekhuizen.
Sinds de gemeentelijke herindeling van 1998 valt Broekhuizen nu onder Meppel.
location:
street_address: Dijkhuizen 66
postal_code: 7961 AM
city: Ruinerwold
municipality: De Wolden
province: Drenthe
country: NL
contact:
website: https://www.historieruinerwold.nl/
contact_page: https://www.historieruinerwold.nl/contact/
facebook: https://www.facebook.com/historieruinerwold
publications:
journal:
name: Kwartaalblad
url: https://www.historieruinerwold.nl/periodiek/
frequency: quarterly
other_publications:
url: https://www.historieruinerwold.nl/uitgaves/
description: "Door ons uitgegeven boeken"
digital_resources:
beeldbank:
url: https://www.historieruinerwold.nl/beeldbank/
description: "Heel veel foto's met beschrijving, zoekbaar op straat- of familienaam"
archief:
url: https://www.historieruinerwold.nl/archief/
description: |
200 jaar krantenknipsels over Ruinerwold, veelal uit oude Meppeler Couranten,
veel familieberichten, en alle eerder uitgegeven periodieken doorzoekbaar.
contents:
- "200 jaar krantenknipsels (200 years newspaper clippings)"
- "Oude Meppeler Couranten"
- "Familieberichten (family notices)"
- "Eerder uitgegeven periodieken"
committees:
de_verzamelaars:
url: https://www.historieruinerwold.nl/commissie-onderhoud/
name: De Verzamelaars
other_committees:
url: https://www.historieruinerwold.nl/commissies/
historical_context:
article_url: https://www.historieruinerwold.nl/hoe-ruinerwold-ontstond/
oldest_map: "Oude Kaart Ruinerwold 1645"
activities:
upcoming:
- title: "Nieuwjaarsvisite"
date: '2026-01-05'
venue: "Dorpshuis de Buddingehof"
time: "20:00 uur (zaal open 19:30)"
entertainment: "Duo Een en Ander - Plaat op maat"
admission: "€10,- inclusief consumpties"
description: |
Thomasvaer en Pieternel terugblikken op gebeurtenissen van 2025.
Duo Een en Ander verzorgt muzikaal verzoekplatenprogramma met 140+ nummers.
donation:
url: https://www.historieruinerwold.nl/wordt-donateur/
last_updated: '2025-11-26'
# Google Maps enrichment data
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJN-CFgrASyEcR487uTEHq7MM place_id: ChIJN-CFgrASyEcR487uTEHq7MM
name: Stichting Historie van Ruinerwold name: Stichting Historie van Ruinerwold
@ -62,16 +157,6 @@ google_maps_enrichment:
- establishment - establishment
business_status: OPERATIONAL business_status: OPERATIONAL
opening_hours: opening_hours:
open_now: false
periods:
- open:
day: 3
hour: 9
minute: 0
close:
day: 3
hour: 12
minute: 0
weekday_text: weekday_text:
- 'maandag: Gesloten' - 'maandag: Gesloten'
- 'dinsdag: Gesloten' - 'dinsdag: Gesloten'
@ -80,11 +165,21 @@ google_maps_enrichment:
- 'vrijdag: Gesloten' - 'vrijdag: Gesloten'
- 'zaterdag: Gesloten' - 'zaterdag: Gesloten'
- 'zondag: Gesloten' - 'zondag: Gesloten'
google_maps_url: https://maps.google.com/?cid=14117916498084155107&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA google_maps_url: https://maps.google.com/?cid=14117916498084155107
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.7236247,6.2514695&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet
icon_background_color: '#7B9EB0'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Stichting Historie van Ruinerwold, Dijkhuizen 66, Ruinerwold, google_maps_search_query: Stichting Historie van Ruinerwold, Dijkhuizen 66, Ruinerwold, Netherlands
Netherlands
notes: |
- Local history foundation founded in 1984
- Covers former municipality of Ruinerwold including Broekhuizen and Tweeloo
- Note: Broekhuizen became part of Meppel after 1998 municipal reorganization
- Note: Tweeloo was part of municipality until 1942
- Publishes quarterly journal (Kwartaalblad)
- Maintains extensive archive with 200 years of newspaper clippings from Meppeler Courant
- Beeldbank (image database) searchable by street or family name
- Open Wednesday mornings (09:00-12:00) per Google Maps
- "De Verzamelaars" committee handles collections
- Active community events (Nieuwjaarsvisite with Thomasvaer en Pieternel tradition)
- Facebook page: facebook.com/historieruinerwold
- Uses ZCBS collection management system

View file

@ -9,8 +9,116 @@ original_entry:
- S - S
entry_index: 40 entry_index: 40
processing_timestamp: '2025-11-27T15:00:38.809429+00:00' processing_timestamp: '2025-11-27T15:00:38.809429+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: website_scrape_and_google_maps
enrichment_timestamp: '2025-11-28T15:30:00+00:00'
# Website enrichment data
website_enrichment:
fetch_timestamp: '2025-11-28T15:30:00+00:00'
fetch_status: SUCCESS
source_url: https://mocta.org/
organization_details:
full_name: Museum of Contemporary Tibetan Art (MoCTA)
short_name: MoCTA
parent_organization: Stichting Tibet House Holland
founded: '2017'
founders:
- name: Lama Tashi Norbu
role: Founder, Artist
- name: Leela Eleni Skitsa
role: Co-founder
description: |
The first museum in the world to house and exhibit contemporary Tibetan art.
Through its permanent collection, events, workshops and exhibitions, MoCTA
engages the public with inspirational content rooted in Tibetan culture.
Dedicated to living artists, which is unique in the museum world.
unique_significance:
claim: "First museum in the world for contemporary Tibetan art"
focus: "Living Tibetan artists (not historical artifacts)"
cultural_bridge: "East meets West in art"
location:
venue: Rensenpark
street_address: Hoofdstraat 16C
postal_code: 7811 EP
city: Emmen
province: Drenthe
country: NL
contact:
phone: "+31 6 23479320"
email: info@mocta.org
website: https://mocta.org/
social_media:
instagram: true
facebook: true
pinterest: true
opening_hours:
wednesday_to_sunday: "11:00 - 17:00"
monday_tuesday: "Gesloten (closed)"
collections:
permanent_collection:
description: |
Paintings, sculptures and photographs from Tibetan artisans and
artists with Tibet as subject. Traditional clothing and utensils
from Tibet, sand mandala and spiritual utensils from Tibetan Buddhism.
focus_artists:
- name: Lama Tashi Norbu
role: "Most contemporary art objects by this artist"
artist_origins:
- "Tibetans in diaspora/exile"
- "Tibetan artists from Lhasa, Tibet"
- "Other nationalities with Tibet as subject"
special_features:
- "Wall dedicated to HM the Dalai Lama"
- "Sand mandala"
- "Traditional clothing and utensils"
- "Spiritual utensils from Tibetan Buddhism"
activities:
- "Exhibitions"
- "Events (e.g., Diwali Lichtjesfestival)"
- "Workshops (e.g., Paint your own Buddha)"
- "Tibetan ceremonies"
- "Meditation ceremonies"
- "Refuge in Buddhism ceremonies"
special_offerings:
sacred_skin_art:
name: "Sacred Tibetan Skin Art"
creator: Lama Tashi Norbu
purpose: |
Protection against impurities of ignorance, desire and hatred
(the 'three emerging poisons' in Tibetan Buddhism).
Spiritual protection against diseases, enemies and physical obstacles.
museum_shop:
url: https://mocta.org/shop/
products:
- "Tibetan Buddhist amulets"
- "Statues, varjas, prayer wheels"
- "Jewellery, shawls, wraps from Tibet"
- "Paintings, posters, books"
- "Tibetan prayer flags"
upcoming_events:
- title: "Diwali Lichtjesfestival"
date: '2025-10-26'
time: "11:00 - 19:00"
admission: "€77.00 (includes workshop, food, drinks & festival)"
activities:
- "Tibetan ceremony (11:00)"
- "Workshop: Paint your own Buddha (12:00-16:00)"
- "Diwali Lichtjesfestival (16:00)"
- "Indian food, Tibetan momo's"
- "Light ceremony in Rensenpark water"
# Google Maps enrichment data
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJk5Dtbmjnt0cRMrFJtQaJcsQ place_id: ChIJk5Dtbmjnt0cRMrFJtQaJcsQ
name: Museum of Contemporary Tibetan Art name: Museum of Contemporary Tibetan Art
@ -64,48 +172,6 @@ google_maps_enrichment:
primary_type: museum primary_type: museum
business_status: OPERATIONAL business_status: OPERATIONAL
opening_hours: opening_hours:
open_now: false
periods:
- open:
day: 0
hour: 11
minute: 0
close:
day: 0
hour: 17
minute: 0
- open:
day: 3
hour: 11
minute: 0
close:
day: 3
hour: 17
minute: 0
- open:
day: 4
hour: 11
minute: 0
close:
day: 4
hour: 17
minute: 0
- open:
day: 5
hour: 11
minute: 0
close:
day: 5
hour: 17
minute: 0
- open:
day: 6
hour: 11
minute: 0
close:
day: 6
hour: 17
minute: 0
weekday_text: weekday_text:
- 'maandag: Gesloten' - 'maandag: Gesloten'
- 'dinsdag: Gesloten' - 'dinsdag: Gesloten'
@ -116,98 +182,23 @@ google_maps_enrichment:
- 'zondag: 11:0017:00' - 'zondag: 11:0017:00'
rating: 4.7 rating: 4.7
total_ratings: 41 total_ratings: 41
reviews: google_maps_url: https://maps.google.com/?cid=14155527240683204914
- author_name: Sonjah V.
author_uri: https://www.google.com/maps/contrib/103763409955535446808/reviews
rating: 5
relative_time_description: 6 maanden geleden
text: 'Geheel onverwacht stond ik met een vriend die gebruik maakte van het toilet
voor de balie in het museum. Even later liepen we binnen en ik was overdonderd
door het heerlijke Zen gevoel en al die mooie kunst- en gebruiksvoorwerpen.
We hebben gesproken met een dame over de schilderijen en we werden uitgenodigd
om een meditatie plechtigheid bij te wonen die Lama Tashi uitvoerde.
Een zeer aangename spirituele ervaring.
✨🌞✨'
publish_time: '2025-05-28T22:26:03.503030Z'
- author_name: Toon van de Wetering
author_uri: https://www.google.com/maps/contrib/117380579512453169130/reviews
rating: 5
relative_time_description: 7 maanden geleden
text: Prachtig En uniek museum over Tibetaanse kunst. Prachtige kunstwerken. Uniek
in de wereld.
publish_time: '2025-04-10T15:07:54.222595Z'
- author_name: Harro Wassens
author_uri: https://www.google.com/maps/contrib/102015617176878028578/reviews
rating: 5
relative_time_description: 4 maanden geleden
text: Hele fijne plek om te zijn. Stond er namens de Gemeente Emmen om informatie
te delen over de bomen in het Rensenpark
publish_time: '2025-07-21T17:11:31.530112363Z'
- author_name: Ronald van Tunen
author_uri: https://www.google.com/maps/contrib/111018882428550909971/reviews
rating: 5
relative_time_description: een jaar geleden
text: Interessant museum als je meer over Tibet en boeddhisme wilt weten. Daarnaast
ook mooie kunstwerken v
publish_time: '2024-07-30T11:48:05.896942Z'
- author_name: Ali Zingstra
author_uri: https://www.google.com/maps/contrib/105024507444157190334/reviews
rating: 5
relative_time_description: een jaar geleden
text: 'Een uniek museum, het enige Tibetaanse kunst museum ter wereld, mooi gelegen
in het groen van het Rensenpark in het centrum van Emmen.
Oost ontmoet west in de schilderijen van de stichter van het museum Tashi Norbu,
schilder en monnik. Ook veel Tibetaans erfgoed.'
publish_time: '2024-04-28T20:37:00.503083Z'
photo_urls:
- https://places.googleapis.com/v1/places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU6rxZbq6id8OdFxf05g1Dei1_HK1Wdeh0tSll4OD-CN6SuTa6YB4Bj0O6BNuwwsLv6Fugh6brVDvkb1lVPUQbq_DeMuvhybkPQvnlXbC6MdCLzZ-NyEF_9s7jc1x9NykqI2bNjaxkDTjnbXD1Ocn8NdPjppUvor6ptMEUSNVQhKUh5E8kDYQx_Dzh2FeeZpyL93kEsAjgxDlo91qrx2tJEBbonYwPts8B0Pdcx9HFgHZ5faqFaMBHQFtUBpA9_g7W_dswNzVxVpjXAnbAIowVAcEVQbYnBJ2gZ77rKIke9Xpw/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU4UL9zhXSFP-gXlEpF02wTQgOVac7RgUnpMyKhZaYZTAAMFzWhAIPuhVLrtKY_UfgRIyLFrZhzLyn9HrCVbLKQwlVdR0ucYq5C21q3Yx7xHyi8MU0Mu0oQivQKqabgowPVuv2B6mrb48W783B3KMkDsD2SQpmVKXOAZoanZFv0P67wcXxz2rPmlaTfOjoPNueDx6Rihgo_eRBJa-XcksNDbEAun-BcMUT3SotXNCyzWHkoYzhWBl70snsCbcuS9ZXRgMmLgBhZQ1gQZ3bb3eWbZ2p0JohdZeFOpvtFwbisPnA/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU7TAkLTLIu1hKK7z6KIjlUovPHlR2ouhKjkLtDOEPz_bq__5J8Sb1npVtEKBJsWPiutT5leIOkUUMf0ffl3FwX6WZAyRCS7FVjiJW2LgVaCUOVgSkraWmNBS4oBSBXuSU1RQphpRKjuzX1I5VmahYJkyr2RKtKVtlsDvMZ3HvQAoI3oJwV9BE6tXkeVDpJKPmJSoUhYOORB5wloKUhWeuuAFFTgqzfESHwdat5gZlgxVpemrlqPy9e8q040ZBNW_JwY6aUEjgHdmegSgPcXDh1YqF7RZdDUOtsAngAcCHlERg/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU77xWkf_e2HglpTz3me5nqmvTGvAu_lmcP83ISfPpOobks4I8aqtIuiq3rFCtMt1OkHp0xSc3bVw-Rd3UwaTazYdCoHYq5fYLgnU2D3blNzKPKbaS7FgvdPboTyLtGVEVmgukcDFp8DdPPpsh5PHAw6DZ2MQFjulpZL47M5117biZrXJpVZMARfeRcK_JquvSqGtxudAbzdiDQowJTyrUOpvd1QWRKcwlV3EdmQSDLv5lFUnP1B3oRMV8Gd7udoc-ed2iU152xrIjDhoofRTVChbQ6CnZokYz0I0ITgRvpGNOB3jwWxjWda-Pk8Ickp38URPeYtgZIUsCrSh0vsTxBVvitk1F9YenMljGTPZVxJHCHehPEsd-GNRQ7wpQMnxoAmJqkLE0VFa33bBB7yKfMR8inXu9WEj6E3B5tv-BpMbg/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
- https://places.googleapis.com/v1/places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU5BM7bH0ZFGBoro3BNlVDbafIJIEKAa_IO3dWiVu6mlen2t9yMsEqSTYS2IdGzqCOo0-uTmx1EeAAw-lxFCLaZW2Cb4AkmOpog8MrbB0kdM7v6d-ilZu5_c9lkY7c30E8CNmA-VFuzZs7gnafYPeErwPCpv0faSIXMObikYOPtvL0a-Jo1YAmL6tUXrUZ0OXGpmA2ZtEddFhaUL4wSSqWmr3kAe8FHL7UrwZobXLEZUOmxjFJhmX6pYG_pcE3eEBauVqPjJbvFqZy0Jg7lhJ7mM2pLUpb9D7tnPrPfJTtKP6a1-_MgX7ESnrYnsfKUkTAlxFb6ifLnFDHKiaIIeQq4kMy2lTKvb_c5-UWVf3oqdiX-wJjt2BW8dQqCEtZ0ecC0emyMbBbi3mFOAO5eqBZ8KA2_ijEzt_9jeJw0ruAGHHg/media?maxWidthPx=800&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
photos_metadata:
- name: places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU6rxZbq6id8OdFxf05g1Dei1_HK1Wdeh0tSll4OD-CN6SuTa6YB4Bj0O6BNuwwsLv6Fugh6brVDvkb1lVPUQbq_DeMuvhybkPQvnlXbC6MdCLzZ-NyEF_9s7jc1x9NykqI2bNjaxkDTjnbXD1Ocn8NdPjppUvor6ptMEUSNVQhKUh5E8kDYQx_Dzh2FeeZpyL93kEsAjgxDlo91qrx2tJEBbonYwPts8B0Pdcx9HFgHZ5faqFaMBHQFtUBpA9_g7W_dswNzVxVpjXAnbAIowVAcEVQbYnBJ2gZ77rKIke9Xpw
height: 2992
width: 2992
author_attributions:
- displayName: Museum of Contemporary Tibetan Art
uri: https://maps.google.com/maps/contrib/105215307947503479131
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjVtJmrGnqwdQJma0gfkkAezJQicQh2KGWlxtWCqLUhWKnR8QKc=s100-p-k-no-mo
- name: places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU4UL9zhXSFP-gXlEpF02wTQgOVac7RgUnpMyKhZaYZTAAMFzWhAIPuhVLrtKY_UfgRIyLFrZhzLyn9HrCVbLKQwlVdR0ucYq5C21q3Yx7xHyi8MU0Mu0oQivQKqabgowPVuv2B6mrb48W783B3KMkDsD2SQpmVKXOAZoanZFv0P67wcXxz2rPmlaTfOjoPNueDx6Rihgo_eRBJa-XcksNDbEAun-BcMUT3SotXNCyzWHkoYzhWBl70snsCbcuS9ZXRgMmLgBhZQ1gQZ3bb3eWbZ2p0JohdZeFOpvtFwbisPnA
height: 2992
width: 2992
author_attributions:
- displayName: Museum of Contemporary Tibetan Art
uri: https://maps.google.com/maps/contrib/105215307947503479131
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjVtJmrGnqwdQJma0gfkkAezJQicQh2KGWlxtWCqLUhWKnR8QKc=s100-p-k-no-mo
- name: places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU7TAkLTLIu1hKK7z6KIjlUovPHlR2ouhKjkLtDOEPz_bq__5J8Sb1npVtEKBJsWPiutT5leIOkUUMf0ffl3FwX6WZAyRCS7FVjiJW2LgVaCUOVgSkraWmNBS4oBSBXuSU1RQphpRKjuzX1I5VmahYJkyr2RKtKVtlsDvMZ3HvQAoI3oJwV9BE6tXkeVDpJKPmJSoUhYOORB5wloKUhWeuuAFFTgqzfESHwdat5gZlgxVpemrlqPy9e8q040ZBNW_JwY6aUEjgHdmegSgPcXDh1YqF7RZdDUOtsAngAcCHlERg
height: 4512
width: 3000
author_attributions:
- displayName: Museum of Contemporary Tibetan Art
uri: https://maps.google.com/maps/contrib/105215307947503479131
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjVtJmrGnqwdQJma0gfkkAezJQicQh2KGWlxtWCqLUhWKnR8QKc=s100-p-k-no-mo
- name: places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU77xWkf_e2HglpTz3me5nqmvTGvAu_lmcP83ISfPpOobks4I8aqtIuiq3rFCtMt1OkHp0xSc3bVw-Rd3UwaTazYdCoHYq5fYLgnU2D3blNzKPKbaS7FgvdPboTyLtGVEVmgukcDFp8DdPPpsh5PHAw6DZ2MQFjulpZL47M5117biZrXJpVZMARfeRcK_JquvSqGtxudAbzdiDQowJTyrUOpvd1QWRKcwlV3EdmQSDLv5lFUnP1B3oRMV8Gd7udoc-ed2iU152xrIjDhoofRTVChbQ6CnZokYz0I0ITgRvpGNOB3jwWxjWda-Pk8Ickp38URPeYtgZIUsCrSh0vsTxBVvitk1F9YenMljGTPZVxJHCHehPEsd-GNRQ7wpQMnxoAmJqkLE0VFa33bBB7yKfMR8inXu9WEj6E3B5tv-BpMbg
height: 3024
width: 4032
author_attributions:
- displayName: Ali Zingstra
uri: https://maps.google.com/maps/contrib/105024507444157190334
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjW8Kbk4rsdxqakKVLsyYds5fNs0uWhajcugsOb0AZczchXYesE60w=s100-p-k-no-mo
- name: places/ChIJk5Dtbmjnt0cRMrFJtQaJcsQ/photos/AWn5SU5BM7bH0ZFGBoro3BNlVDbafIJIEKAa_IO3dWiVu6mlen2t9yMsEqSTYS2IdGzqCOo0-uTmx1EeAAw-lxFCLaZW2Cb4AkmOpog8MrbB0kdM7v6d-ilZu5_c9lkY7c30E8CNmA-VFuzZs7gnafYPeErwPCpv0faSIXMObikYOPtvL0a-Jo1YAmL6tUXrUZ0OXGpmA2ZtEddFhaUL4wSSqWmr3kAe8FHL7UrwZobXLEZUOmxjFJhmX6pYG_pcE3eEBauVqPjJbvFqZy0Jg7lhJ7mM2pLUpb9D7tnPrPfJTtKP6a1-_MgX7ESnrYnsfKUkTAlxFb6ifLnFDHKiaIIeQq4kMy2lTKvb_c5-UWVf3oqdiX-wJjt2BW8dQqCEtZ0ecC0emyMbBbi3mFOAO5eqBZ8KA2_ijEzt_9jeJw0ruAGHHg
height: 563
width: 750
author_attributions:
- displayName: Sonjah V.
uri: https://maps.google.com/maps/contrib/103763409955535446808
photoUri: https://lh3.googleusercontent.com/a-/ALV-UjUpIpMiR_BUglcsX4OhpNTihP3rrFjOgNHG9FGzVuUGdvGvun8=s100-p-k-no-mo
google_maps_url: https://maps.google.com/?cid=14155527240683204914&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA
street_view_url: https://maps.googleapis.com/maps/api/streetview?size=600x400&location=52.784836399999996,6.8978823&key=AIzaSyAHuazNth9ZvfRFYk5-v49CwXwhABH8Ri0
icon_mask_uri: https://maps.gstatic.com/mapfiles/place_api/icons/v2/museum_pinlet
icon_background_color: '#13B5C7'
utc_offset_minutes: 60
google_maps_status: SUCCESS google_maps_status: SUCCESS
google_maps_search_query: Stichting Tibet House Holland, Hoofdstraat 16C, Emmen, Netherlands google_maps_search_query: Stichting Tibet House Holland, Hoofdstraat 16C, Emmen, Netherlands
notes: |
- FIRST museum in the world for contemporary Tibetan art (founded 2017)
- Founded by Lama Tashi Norbu (monk and painter) and Leela Eleni Skitsa
- Unique focus on LIVING Tibetan artists (not historical artifacts)
- Located in Rensenpark, Emmen city center
- Registered in Museumregister (museum_register: ja)
- 4.7 star rating with 41 reviews on Google Maps
- Features wall dedicated to HM the Dalai Lama
- Houses sand mandala and traditional Tibetan artifacts
- Offers meditation ceremonies and Buddhist refuge ceremonies
- Active events program (Diwali festival, workshops)
- Collection includes art by Tibetans in diaspora and exile
- Museum shop with Buddhist amulets, prayer flags, etc.
- Note: Despite type "S" in original, this is clearly a museum (M)
- Accepts Museumkaart

View file

@ -10,8 +10,94 @@ original_entry:
- S - S
entry_index: 41 entry_index: 41
processing_timestamp: '2025-11-27T15:00:38.811546+00:00' processing_timestamp: '2025-11-27T15:00:38.811546+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T10:30:00+00:00'
enriched_data:
name_nl: Asser Historische Vereniging
name_en: Assen Historical Association
alternative_names:
- AHV
institution_type: COLLECTING_SOCIETY
institution_subtype: historische vereniging
description_nl: >-
De Asser Historische Vereniging (AHV) is een historische vereniging die zich
inzet voor de geschiedenis van Assen en omgeving. De vereniging beheert een
uitgebreide fotocollectie met historische beelden van de stad, verzorgt
stadswandelingen via het VVV-kantoor, en publiceert het Asser Historisch
Tijdschrift (AHT). De vereniging organiseert regelmatig ledenavonden,
excursies, inloopmiddagen en exposities, en biedt films en fotopresentaties
over de lokale historie. Het kantoor is gevestigd aan de Groningerstraat 94.
description_en: >-
The Asser Historische Vereniging (Assen Historical Association) is dedicated
to preserving and promoting the history of Assen and surrounding areas. The
association maintains an extensive photo collection of historical city images,
organizes guided city walks via the VVV tourist office, and publishes the
Asser Historisch Tijdschrift (AHT) journal. Regular activities include member
evenings, excursions, open afternoons, exhibitions, films and photo presentations.
founding_year: null
legal_form: vereniging
legal_status:
anbi: true
locations:
- type: headquarters
city: Assen
street_address: Groningerstraat 94
postal_code: '9401 CK'
province: Drenthe
country: NL
coordinates:
latitude: 52.9988683
longitude: 6.5659154
contact:
website: https://ahvassen.nl/
email: contact@ahvassen.nl
phone: null
opening_hours:
- day: wednesday
hours: '10:00-12:00, 13:00-16:00'
- day: friday
hours: '13:00-16:00'
collections:
- name: Fotocollectie Assen
type: photographs
description: Historische foto's van Assen en omgeving
digitized: true
publications:
- name: Asser Historisch Tijdschrift (AHT)
type: journal
frequency: periodic
activities:
- type: guided_tours
name: Stadswandelingen
description: Stadswandelingen met gids via VVV kantoor
- type: member_evenings
name: Ledenavonden
- type: excursions
name: Excursies
- type: open_afternoons
name: Inloopmiddagen
- type: exhibitions
name: Exposities
- type: films
name: Films over Asser historie
- type: photo_presentations
name: Fotopresentaties
digital_presence:
geheugen_van_drenthe: true
collection_system: Vitec Memorix
facebook: true
geographic_scope:
- Assen
- buurtschappen (Anreep, Schieven, Baggelhuizen, Loon, Peelo, Pittelo, Witten, Zeijerveld)
thematic_focus:
- local history
- city history
- photography
- monuments (gemeentelijke en rijksmonumenten)
community_support:
rabo_clubsupport_2025: true
accessibility_notes: Trappen en geen lift, gratis parkeren
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA
name: Asser Historische Vereniging name: Asser Historische Vereniging

View file

@ -10,8 +10,93 @@ original_entry:
- S - S
entry_index: 42 entry_index: 42
processing_timestamp: '2025-11-27T15:00:38.813171+00:00' processing_timestamp: '2025-11-27T15:00:38.813171+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T10:35:00+00:00'
enriched_data:
name_nl: Drentse Historische Vereniging
name_en: Drenthe Historical Association
alternative_names:
- DHV
- Vereniging voor Geschiedenis en Genealogie
institution_type: COLLECTING_SOCIETY
institution_subtype: historische vereniging / genealogische vereniging
description_nl: >-
De Drentse Historische Vereniging (DHV) is de provinciale vereniging voor
geschiedenis en genealogie in Drenthe. De vereniging publiceert het tijdschrift
'Waardeel' (Drents Historisch Tijdschrift), het jaarlijkse Genealogisch Jaarboek,
en de Drentse (Nieuwe) Volksalmanak - een jaarboek voor geschiedenis en archeologie.
Jaarlijks wordt de DHV-prijs uitgereikt voor bijzondere bijdragen aan de Drentse
geschiedenis. De vereniging organiseert activiteiten, excursies en lezingen voor
leden en geïnteresseerden in het Drentse verleden.
description_en: >-
The Drentse Historische Vereniging (DHV - Drenthe Historical Association) is the
provincial society for history and genealogy in Drenthe. The association publishes
'Waardeel' (Drents Historisch Tijdschrift), the annual Genealogisch Jaarboek
(Genealogical Yearbook), and the Drentse (Nieuwe) Volksalmanak - an annual for
history and archaeology. The annual DHV prize recognizes outstanding contributions
to Drenthe's history. Activities include lectures, excursions, and events.
founding_year: null
legal_form: vereniging
locations:
- type: headquarters
city: Assen
street_address: Brink 4
postal_code: '9401 HS'
province: Drenthe
country: NL
contact:
website: https://drentsehistorischevereniging.nl/
email: info@drentsehistorischevereniging.nl
publications:
- name: Waardeel
type: journal
description: Drents Historisch Tijdschrift
frequency: periodic
- name: Genealogisch Jaarboek
type: yearbook
description: Jaarboek met genealogische onderzoeken en artikelen
frequency: annual
- name: Drentse Volksalmanak / Nieuwe Drentse Volksalmanak
type: yearbook
description: Jaarboek voor geschiedenis en archeologie
frequency: annual
awards:
- name: DHV-prijs
description: >-
Jaarlijkse prijs voor bijzondere bijdragen aan de Drentse geschiedenis.
Marcel Zantingh won de DHV-prijs 2024.
frequency: annual
activities:
- type: publications
name: Tijdschriften en jaarboeken
- type: prize
name: DHV-prijs uitreiking
- type: excursions
name: Excursies
- type: lectures
name: Lezingen
digital_presence:
geheugen_van_drenthe: true
collection_system: Vitec Memorix
members_portal: true
geographic_scope:
- Province of Drenthe (provinciaal bereik)
thematic_focus:
- provincial history
- genealogy
- archaeology
- numismatics (munten en penningen)
- local history research
recent_topics:
- Munten en penningen in Drents Museum
- Sporen van slavernij
- Ontwerp Drentsche Hoofdvaart
- Stedelijk Museum Coevorden
google_maps_note: >-
Google Maps search returned Asser Historische Vereniging (Groningerstraat 94)
instead of DHV at Brink 4. These are separate organizations sharing membership
in Geheugen van Drenthe network.
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA
name: Asser Historische Vereniging name: Asser Historische Vereniging

View file

@ -10,8 +10,113 @@ original_entry:
- S - S
entry_index: 43 entry_index: 43
processing_timestamp: '2025-11-27T15:00:38.815215+00:00' processing_timestamp: '2025-11-27T15:00:38.815215+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T10:40:00+00:00'
enriched_data:
name_nl: Historische Vereniging der Gemeente Gasselte
name_en: Historical Association of Gasselte Municipality
alternative_names:
- Op't Spoor
institution_type: COLLECTING_SOCIETY
institution_subtype: historische vereniging
description_nl: >-
De Historische Vereniging der Gemeente Gasselte, opgericht op 3 april 1992,
heeft als werkgebied de gehele voormalige gemeente Gasselte en houdt zich bezig
met de historie van de eigen woonomgeving. De vereniging doet onderzoek naar
plaatselijke geschiedenis en bevordert belangstelling voor en kennis van de
geschiedenis en het historisch erfgoed. Dit wordt bereikt door lezingen,
exposities en excursies. De vereniging beheert een uitgebreid archief met
documenten, krantenknipsels en foto's, een historische bibliotheek, en sinds
januari 2015 een digitale afdeling. Activiteiten omvatten het maandelijkse
Historisch Café in MFC de SPIL en de Verhalenbrink voor het delen van verhalen.
description_en: >-
The Historical Association of the former Municipality of Gasselte, founded
April 3, 1992, covers the entire former Gasselte municipality area. The
association researches local history and promotes interest in and knowledge
of historical heritage. Activities include lectures, exhibitions, and excursions.
The association manages an extensive archive with documents, newspaper clippings,
and photos, a historical library, and since January 2015 a digital department.
Monthly 'Historisch Café' meetings are held at MFC de SPIL community center.
founding_year: 1992
founding_date: '1992-04-03'
legal_form: vereniging
locations:
- type: visitor_address
city: Gasselternijveen
street_address: Scheepvaartlaan 41
province: Drenthe
municipality: Aa en Hunze
country: NL
- type: google_maps_location
city: Gasselternijveen
street_address: Ceresstraat 6
postal_code: '9514 CA'
province: Drenthe
country: NL
coordinates:
latitude: 52.9866667
longitude: 6.8472222
note: Google Maps found location at Ceresstraat 6
contact:
website: https://archief-optspoor.nl/
website_alt: https://www.archief-optspoor.nl/
email: optspoorredactie@gmail.com
phone: '+31 599 512 886'
opening_hours:
- day: tuesday
hours: '13:00-16:00'
collections:
- name: Documentenarchief
type: documents
description: Uitgebreid archief met historische documenten
- name: Krantenknipsels
type: newspaper_clippings
description: Verzameling krantenknipsels over lokale geschiedenis
- name: Fotocollectie
type: photographs
description: Historische foto's van de regio
digitized: true
- name: Historische Bibliotheek
type: library
description: Bibliotheek met historische publicaties
- name: Digitale Afdeling
type: digital_archive
description: Digitale collectie sinds januari 2015
activities:
- type: historisch_cafe
name: Historisch Café
location: MFC de SPIL
frequency: monthly
description: Maandelijkse bijeenkomst met thema's zoals scheepvaart, lokale verhalen
- type: lectures
name: Lezingen
- type: exhibitions
name: Exposities
- type: excursions
name: Excursies
- type: story_sharing
name: Verhalenbrink
description: Platform voor het delen van lokale verhalen
digital_presence:
geheugen_van_drenthe: true
collection_system: Vitec Memorix
persburo_melissen_archive: >-
Drents Archief ontving fotoarchief van Persburo Melissen met meer dan
500.000 persfoto's - relevant voor regionale geschiedenis
geographic_scope:
- voormalige gemeente Gasselte
- Gasselternijveen
- Gasselte
- regio Oostermoer
thematic_focus:
- local history
- photography
- oral history (Verhalenbrink)
- maritime history (scheepvaart thema)
google_place_types:
- museum
- tourist_attraction
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJE2NbsIXZt0cRYzBOCFM_wZ4 place_id: ChIJE2NbsIXZt0cRYzBOCFM_wZ4
name: Historische Vereniging der Gemeente Gasselte name: Historische Vereniging der Gemeente Gasselte

View file

@ -16,8 +16,124 @@ original_entry:
- L - L
entry_index: 46 entry_index: 46
processing_timestamp: '2025-11-27T15:00:43.125381+00:00' processing_timestamp: '2025-11-27T15:00:43.125381+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T10:45:00+00:00'
enriched_data:
name_nl: Stichting Studie- en Documentatiecentrum Urk
name_en: Urk Study and Documentation Center Foundation
alternative_names:
- Documentatiecentrum Urk
- DocUrk
institution_type: RESEARCH_CENTER
institution_subtype: documentatiecentrum
description_nl: >-
Het Documentatiecentrum Urk is een overkoepelend orgaan voor de digitale
ontsluiting van archieven over Urk. De website biedt een zoekpagina waar
documenten en fotomateriaal te vinden is over Urk in de breedste zin van het
woord. De website staat open voor digitale archieven van stichtingen, verenigingen
en particulieren. Het centrum biedt mogelijkheden om archiefmateriaal te laten
scannen, waarbij het beheer van het digitale archief bij de toeleveraar blijft.
Het centrum is gevestigd in het Cultuur-eus Tromp de Vries, ontstaan uit de
erfenis van wijlen Tromp en Willie de Vries (stichting Zegen en Zorg).
description_en: >-
The Urk Documentation Center is an umbrella organization for digital access
to archives about Urk. The website provides a search page for documents and
photo materials about Urk in the broadest sense. The platform is open to digital
archives from foundations, associations, and private individuals. The center
offers scanning services while archive management remains with the contributor.
Located in Cultuur-eus Tromp de Vries, established through the legacy of the
late Tromp and Willie de Vries (Zegen en Zorg foundation).
legal_form: stichting
legal_status:
anbi: true
locations:
- type: headquarters
city: Urk
street_address: Wijk 2 76
postal_code: '8321 ET'
province: Flevoland
country: NL
coordinates:
latitude: 52.6616569
longitude: 5.5966027
building_name: Cultuur-eus Tromp de Vries
contact:
website: https://www.documentatiecentrumurk.nl/
website_alt: http://www.docurk.nl/
email: info@docurk.nl
phone: '+31 527 769 067'
contact_person: Anneke van Urk
contact_phone: '06-28910044'
collections:
- name: Fotoserie Oud Urk - Huizen en Gebouwen
type: photographs
description: Historische foto's van huizen en gebouwen op Urk
digitized: true
- name: Fotoserie Oud Urk - Personen
type: photographs
description: Historische foto's van personen
digitized: true
- name: Fotoserie Oud Urk - Havens en Schepen
type: photographs
description: Historische foto's van havens en schepen
digitized: true
- name: Fotoserie Klederdracht
type: photographs
description: Foto's van traditionele Urker klederdracht
digitized: true
- name: Mariap van Urk
type: literature
description: Verhalen en gedichten van Mariap van Urk
digitized: true
- name: Christelijk Urker Visserskoor Crescendo
type: documents
description: Plakboeken van koor Crescendo
digitized: true
- name: De Kleine Courant
type: newspapers
description: De Kleine Courant uit Het Urkerland
digitized: true
- name: De Huwelijksboot
type: newspapers
description: Rubriek HUWELIJKSBOOT uit Het Urkerland
digitized: true
- name: Bibliotheek collectie
type: library
description: Bibliotheek met lokale publicaties
partner_organizations:
- name: Stichting Urker Taol
description: >-
Stichting voor behoud van de Urker taal. Doet onderzoek, verzorgt uitgaven,
lezingen en lessen in de Urker Taol. Ook heemkundelessen.
contact: kjromkes@hotmail.com
role: vaste gebruiker Cultuur-eus
- name: Comité Urker Vesper
role: vaste gebruiker Cultuur-eus
building_info:
name: Cultuur-eus Tromp de Vries
description: >-
Cultureel centrum ontstaan uit erfenis van Tromp en Willie de Vries,
ondergebracht in stichting Zegen en Zorg. Beschikbaar voor culturele
doeleinden, cursussen, vergaderingen. Beamer met camera en geluid beschikbaar.
rental_available: true
funders:
- VSB Fonds
- Coöperatiefonds Rabobank
digital_presence:
platform_type: aggregation_portal
open_for_contributions: true
scanning_services: true
geographic_scope:
- Urk
- voormalig eiland Urk
thematic_focus:
- local history
- fishing community heritage
- traditional clothing (klederdracht)
- Urker language (Urker Taol)
- maritime heritage
- religious heritage (visserskoor, vesper)
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJvYV6TJ-EyEcRrWXvCIaJ55U place_id: ChIJvYV6TJ-EyEcRrWXvCIaJ55U
name: Cultuur-Eus Tromp De Vries name: Cultuur-Eus Tromp De Vries

View file

@ -8,8 +8,87 @@ original_entry:
- O - O
entry_index: 53 entry_index: 53
processing_timestamp: '2025-11-27T15:00:56.115219+00:00' processing_timestamp: '2025-11-27T15:00:56.115219+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T11:00:00+00:00'
enriched_data:
name_nl: Provinciaal Archeologisch Depot Flevoland
name_en: Provincial Archaeological Depot Flevoland
alternative_names:
- PADF
institution_type: OFFICIAL_INSTITUTION
institution_subtype: provinciaal archeologisch depot
description_nl: >-
Het Provinciaal Archeologisch Depot Flevoland (PADF) beheert en behoudt alle
archeologische bodemvondsten die in de provincie Flevoland bij archeologisch
onderzoek worden gedaan. De provincie Flevoland is eigenaar van de vondsten.
De collectie bevat voorwerpen variërend van prehistorische werktuigen tot
voorwerpen uit de Nieuwe Tijd en de Tweede Wereldoorlog, ontdekt bij het
droogvallen van Flevoland. Het depot is ondergebracht in Museum Batavialand
en is op afspraak toegankelijk voor wetenschappers, studenten en culturele
instellingen voor onderzoek en bruikleen.
description_en: >-
The Provincial Archaeological Depot Flevoland (PADF) manages and preserves all
archaeological finds discovered during excavations in Flevoland province. The
collection includes prehistoric tools to modern era and WWII artifacts,
discovered during the draining of Flevoland. The depot is housed within Museum
Batavialand and is accessible by appointment for researchers and institutions.
legal_form: null
parent_organization:
name: Museum Batavialand
relationship: housed within
locations:
- type: headquarters
city: Lelystad
street_address: Oostvaardersdijk 01-13
province: Flevoland
country: NL
note: Located at Museum Batavialand
contact:
website: https://www.batavialand.nl/kennis-en-collecties/provinciaal-archeologisch-depot-flevoland/
email: depotflevoland@batavialand.nl
studiecentrum_email: studiecentrum@batavialand.nl
services:
- type: deponering
name: Deponering archeologische vondsten
description: Bewaring van archeologische vondsten en documentatie van opgravingen
submission_portal: ArcheoDepot DBS
- type: research_access
name: Onderzoekstoegang
description: Toegang voor wetenschappers, studenten en instellingen
by_appointment: true
- type: loans
name: Bruiklenen
description: Objecten in bruikleen voor musea en instellingen
- type: find_reporting
name: Vondstmeldingen
description: Melding van archeologische vondsten in Flevoland
archeo_hotspot:
days:
- wednesday: '13:00-16:00'
- friday: '11:00-12:00, 13:00-16:00'
collections:
- name: Archeologische bodemvondsten Flevoland
type: archaeology
description: >-
Unieke collectie van prehistorische werktuigen tot voorwerpen uit de
Nieuwe Tijd en WWII, gevonden bij het droogvallen van Flevoland
owner: Provincie Flevoland
growing: true
digital_presence:
collectie_nederland: true
portal: ArcheoDepot DBS (Depot Beheer Systeem)
related_depots:
- name: Museaal Depot
email: kim.mulder@batavialand.nl
- name: Nationaal Scheepsarcheologisch Depot (NSD)
email: nsd@batavialand.nl
geographic_scope:
- Province of Flevoland
google_maps_note: >-
Google Maps returned "Provinciaal depot voor archeologie Noord-Holland | Huis
van Hilde" in Castricum. This is a DIFFERENT organization (Noord-Holland depot).
The correct PADF is located at Museum Batavialand in Lelystad.
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJNSF04278xUcRirXV6AxYbzg place_id: ChIJNSF04278xUcRirXV6AxYbzg
name: Provinciaal depot voor archeologie Noord-Holland | Huis van Hilde name: Provinciaal depot voor archeologie Noord-Holland | Huis van Hilde

View file

@ -9,8 +9,108 @@ original_entry:
- S - S
entry_index: 57 entry_index: 57
processing_timestamp: '2025-11-27T15:01:02.548408+00:00' processing_timestamp: '2025-11-27T15:01:02.548408+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T11:05:00+00:00'
enriched_data:
name_nl: Stichting Historisch Dronten
name_en: Dronten Historical Foundation
alternative_names:
- Stichting Geschiedschrijving Dronten
- Stichting Geschiedschrijving in de Gemeente Dronten
institution_type: COLLECTING_SOCIETY
institution_subtype: historische stichting
description_nl: >-
Stichting Historisch Dronten bewaart en tekent de geschiedenis van de gemeente
Dronten op voor het nageslacht. Leden van de interviewgroep spreken met mensen
die een rol in de geschiedenis van Dronten hebben gespeeld. Elk jaar brengt de
stichting een boek uit over de historie van Dronten. Donateurs ontvangen gratis
de jaarlijkse publicatie, vier nieuwsbrieven per jaar, uitnodigingen voor
lezingen en filmavonden, en kunnen deelnemen aan excursies. In het verleden
stond de stichting bekend als Stichting Geschiedschrijving Dronten.
description_en: >-
Stichting Historisch Dronten preserves and documents the history of Dronten
municipality for future generations. Interview group members speak with people
who played a role in Dronten's history. The foundation publishes an annual book
on local history. Donors receive free publications, newsletters, and invitations
to lectures, film evenings, and excursions.
legal_form: stichting
locations:
- type: headquarters
city: Dronten
street_address: De Aar 65
postal_code: '8253 PN'
province: Flevoland
country: NL
contact:
website: https://www.historischdronten.nl/
phone: '06 53 716 866'
membership:
donation_fee: 20.00
currency: EUR
benefits:
- Gratis boek naar keuze
- Jaarboek
- 4 nieuwsbrieven per jaar
- Uitnodigingen lezingen en filmavonden
- Excursies
gift_voucher_available: true
publications:
- name: Historisch Dronten (jaarboek)
type: yearbook
frequency: annual
note: Nieuw historisch tijdschrift gelanceerd op donateursavond 24 november
- name: Canon van Dronten
type: book
description: Van Swifterbantcultuur tot Hanzelijn
- name: Dronter Ditjes & Datjes in 65 verhalen
type: book
description: Feiten uit de geschiedenis van Biddinghuizen, Dronten, Ketelhaven
- name: In Beweging
type: book
description: Over sporters en sportverenigingen in Biddinghuizen, Dronten en Swifterbant
activities:
- type: oral_history
name: Interviewgroep
description: Interviews met mensen die rol speelden in Drontense geschiedenis
- type: lectures
name: Lezingen
- type: film_evenings
name: Filmavonden
- type: excursions
name: Excursies
- type: donor_evenings
name: Donateursavonden
awards:
- name: Willem Baarsen Prijs
awarded_by: Erfgoedvereniging Heemschut Flevoland
description: Prijs voor erfgoedbehoud
digital_presence:
collection_system: ZCBS
beeldbank: true
photo_archive: true
video_archive: true
geographic_scope:
- gemeente Dronten
- Biddinghuizen
- Dronten (kern)
- Swifterbant
- Ketelhaven
thematic_focus:
- oral history
- local history
- agriculture (agrarisch leven)
- sports history
recent_events:
- name: "Manifestatie 'Agrarisch leven in Dronten'"
type: themed_afternoon
status: very successful
- name: Donateursavond 2025
date: '2024-11-24'
google_maps_note: >-
Google Maps shows "Stichting Geschiedschrijving in de Gemeente Dronten" at
De Schalm 12 with status CLOSED_PERMANENTLY. The organization is still active
at De Aar 65 under the name Stichting Historisch Dronten.
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJRZxkLBgrxkcR4ZQtUm7jfdA place_id: ChIJRZxkLBgrxkcR4ZQtUm7jfdA
name: Stichting Geschiedschrijving in de Gemeente Dronten name: Stichting Geschiedschrijving in de Gemeente Dronten

View file

@ -9,8 +9,53 @@ original_entry:
- S - S
entry_index: 58 entry_index: 58
processing_timestamp: '2025-11-27T15:01:02.570736+00:00' processing_timestamp: '2025-11-27T15:01:02.570736+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T11:10:00+00:00'
enriched_data:
name_nl: Vrienden van Urk
name_en: Friends of Urk
institution_type: COLLECTING_SOCIETY
institution_subtype: historische vereniging
description_nl: >-
Vrienden van Urk is een historische vereniging die zich inzet voor het behoud
en de documentatie van de geschiedenis en cultuur van Urk. De vereniging
publiceert regelmatig uitgaven met verhalen en anekdotes over Urk, waaronder
artikelen over bijzondere reizen zoals de Canada reis. De vereniging is
gevestigd in het historische centrum van Urk (Wijk 2).
description_en: >-
Vrienden van Urk (Friends of Urk) is a historical association dedicated to
preserving and documenting the history and culture of Urk. The association
publishes periodic editions with stories and anecdotes about Urk.
legal_form: vereniging
locations:
- type: headquarters
city: Urk
street_address: Wijk 2 2
postal_code: '8321 EP'
province: Flevoland
country: NL
coordinates:
latitude: 52.6614796
longitude: 5.5959875
contact:
website: https://vriendenvanurk.nl/
publications:
- name: Vrienden van Urk uitgave
type: periodical
description: Regelmatige uitgaven met anekdotes en verhalen over Urk
digital_presence:
collection_system: ZCBS
geographic_scope:
- Urk
- voormalig eiland Urk
thematic_focus:
- local history
- Urker culture
- personal stories and anecdotes
google_maps_rating: 5.0
google_maps_reviews: 1
website_fetch_note: Website returned empty content - limited enrichment possible
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJv_iKUZ-EyEcRx8FAdvzdhDk place_id: ChIJv_iKUZ-EyEcRx8FAdvzdhDk
name: Vrienden Van Urk name: Vrienden Van Urk

View file

@ -8,8 +8,110 @@ original_entry:
- label: Stichting Musea Noardeast Fryslân - label: Stichting Musea Noardeast Fryslân
entry_index: 67 entry_index: 67
processing_timestamp: '2025-11-27T15:11:37.840187+00:00' processing_timestamp: '2025-11-27T15:11:37.840187+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T11:15:00+00:00'
enriched_data:
name_nl: Stichting Musea Noardeast Fryslân
name_en: Foundation Museums Northeast Friesland
institution_type: OFFICIAL_INSTITUTION
institution_subtype: museumstichting / koepelorganisatie
description_nl: >-
Stichting Musea Noardeast Fryslân is de bestuurlijke koepelorganisatie voor
meerdere erfgoedinstellingen in Noordoost Friesland. De stichting is per
1 januari 2014 ontstaan door fusie van de besturen van Museum het Admiraliteitshuis
in Dokkum en Museum 't Fiskershúske in Moddergat. De stichting is verantwoordelijk
voor: Museum Dokkum, Museum 't Fiskershúske, draaiorgel De Grenaet, Sjees,
reddingsboot L.A. Buma, De Aak WL19, Garnalenfabriek Moddergat en het Toeristisch
Informatie Punt (TIP) Dokkum.
description_en: >-
Foundation Museums Northeast Friesland is the umbrella organization for
multiple heritage institutions in Northeast Friesland. Founded January 1, 2014
through merger of Museum Admiraliteitshuis (Dokkum) and Museum 't Fiskershúske
(Moddergat). Manages: Museum Dokkum, Museum 't Fiskershúske, barrel organ
De Grenaet, Sjees, lifeboat L.A. Buma, De Aak WL19, Garnalenfabriek Moddergat,
and Tourist Information Point (TIP) Dokkum.
founding_year: 2014
founding_date: '2014-01-01'
legal_form: stichting
legal_status:
anbi: true
rsin: NL002796624B01
kvk: '41000513'
locations:
- type: headquarters
city: Dokkum
street_address: Diepswal 27
postal_code: '9101 LA'
province: Friesland
municipality: Noardeast-Fryslân
country: NL
- type: branch
name: Museum 't Fiskershúske
city: Moddergat
street_address: Fiskerspaad 4
postal_code: '9142 VN'
province: Friesland
country: NL
contact:
website: https://www.museumdokkum.nl/stichting-musea-noardeast-fryslan/
email: info@museumdokkum.nl
phone: '0519-293134'
governance:
board_size: 8
chairman: Dhr. G. Heeringa
treasurer: Dhr. J. van de Pol
subsidizer: Gemeente Noardeast-Fryslân
managed_institutions:
- name: Museum Dokkum
type: museum
location: Dokkum
- name: Museum 't Fiskershúske
type: museum
location: Moddergat
- name: De Grenaet
type: barrel_organ
description: Draaiorgel
- name: Sjees
type: vehicle
description: Historisch rijtuig
- name: L.A. Buma
type: lifeboat
description: Reddingsboot
- name: De Aak WL19
type: ship
description: Wierumer Aak
- name: Garnalenfabriek Moddergat
type: heritage_site
description: Historische garnalenfabriek
- name: TIP Dokkum
type: tourist_information
location: Dokkum
fusion_history:
date: '2014-01-01'
merged_organizations:
- Museum het Admiraliteitshuis (Dokkum)
- Museum 't Fiskershúske (Moddergat)
rationale: Efficiëntere samenwerking, bundeling van krachten, één gesprekspartner voor gemeente
activities:
- type: exhibitions
name: Tentoonstellingen
- type: guided_tours
name: Stadswandelingen
- type: boat_tours
name: Rondvaarten
- type: education
name: Educatie
geographic_scope:
- Noardeast-Fryslân
- Dokkum
- Moddergat
- Paesens
thematic_focus:
- maritime heritage
- fishing culture
- regional history
- Frisian heritage
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY
name: Museum 't Fiskershúske name: Museum 't Fiskershúske

View file

@ -16,8 +16,150 @@ original_entry:
- O - O
entry_index: 68 entry_index: 68
processing_timestamp: '2025-11-27T15:11:37.842486+00:00' processing_timestamp: '2025-11-27T15:11:37.842486+00:00'
enrichment_status: skipped enrichment_status: enriched
skip_reason: no_wikidata_id enrichment_source: web_research
enrichment_timestamp: '2025-11-28T11:20:00+00:00'
enriched_data:
name_nl: Museum 't Fiskershúske
name_en: The Fisherman's House Museum
alternative_names:
- "'t Fiskershúske"
- Museum Moddergat
institution_type: MUSEUM
institution_subtype: openluchtmuseum / streekmuseum
description_nl: >-
Museum 't Fiskershúske is een bijzonder openluchtmuseum in het beschermde
dorpsgezicht van Moddergat, direct aan de Waddenzee. Het museum houdt de
herinneringen aan de verdwenen kustvisserij en visserscultuur levend. De
collectie toont voorwerpen over de oude kustvisserij en het leven van de
bewoners van het dubbeldorp Paesens-Moddergat. De ramp van Moddergat (1883),
waarbij 83 vissers omkwamen, vormt een centraal thema. De tentoongestelde
voorwerpen zijn te bezichtigen in vier historische vissershuisjes.
description_en: >-
Museum 't Fiskershúske is a unique open-air museum in the protected village
of Moddergat, directly on the Wadden Sea. The museum preserves memories of
the lost coastal fishing industry and fishing culture. The collection shows
objects about traditional coastal fishing and life in the twin village of
Paesens-Moddergat. The Moddergat disaster (1883), in which 83 fishermen
perished, is a central theme. Exhibits are displayed in four historic fishermen's
cottages.
parent_organization:
name: Stichting Musea Noardeast Fryslân
kvk: '41000513'
legal_form: stichting
legal_status:
anbi: true
rsin: NL002796624B01
kvk: '41000513'
museum_register: true
locations:
- type: visitor_address
city: Moddergat
street_address: Fiskerspaad 4-8a
postal_code: '9142 VN'
province: Friesland
municipality: Noardeast-Fryslân
country: NL
coordinates:
latitude: 53.404904
longitude: 6.0759372
setting: Protected village character (beschermd dorpsgezicht)
contact:
website: https://www.museummoddergat.nl/
email: info@museummoddergat.nl
phone: '0519-589454'
staff:
- name: Hans Groeneweg
role: Directeur-conservator
email: dhgroeneweg@museummoddergat.nl
- name: Jacob Bosma
role: PR en Educatie
email: jjbosma@museummoddergat.nl
- name: Tjitske Douma
role: Publieksmedewerker
- name: Taeke Kooistra
role: Publieksmedewerker en administratie
opening_hours:
regular_season:
period: tot 31 oktober
hours: maandag t/m zaterdag 10:00-17:00
november:
hours: maandag t/m vrijdag 10:00-16:00, zaterdag 12:00-16:00
kerstvakantie_2025:
period: 20 december 2025 t/m 3 januari 2026
hours: 12:00-16:00
closed: zondagen, 25 december, 31 december, 1 januari
exhibitions:
- name: Wisselexpositie
type: temporary
- name: "'t Fiskershúske"
type: permanent
description: Historisch vissershuisje
- name: Dijk van een verhaal
type: permanent
- name: De L.A. Buma
type: permanent
description: Reddingsboot
- name: Klaske's Húske
type: permanent
- name: De Aek
type: permanent
description: Wierumer Aak
- name: De Logger
type: permanent
- name: De Blaes / Museumwinkel
type: permanent
collections:
- name: Kustvisserij collectie
type: ethnographic
description: Voorwerpen over oude kustvisserij
- name: Ramp van Moddergat 1883
type: memorial
description: Documentatie over de ramp waarbij 83 vissers omkwamen
- name: Erfskip/visserstruienexpo
type: textiles
description: Traditionele visserstruien
services:
- type: museum_card
accepted: true
- type: wadlopen
name: Wadlooptocht
description: Expeditie over drooggevallen Waddenzee
- type: boat_tours
name: Rondvaart
description: Rondvaarten door grachten van Dokkum
- type: venue_rental
name: Garnalenfabriekje
price_from: 150
currency: EUR
note: 25% energietoeslag
education:
programs: Programma's voor groep 1 t/m groep 8
available: true
accessibility:
wheelchair: possible (smaller electric wheelchairs may have difficulty)
parking: tegenover museum
dogs: not allowed (except service dogs)
digital_presence:
samenwerkingsverband: Digitaal Erfgoed Friesland
collection_system: Atlantis
linked_data: true
museum_register: true
dc4eu_scope: new
geographic_scope:
- Moddergat
- Paesens
- Noardeast-Fryslân
- Waddenzee
thematic_focus:
- coastal fishing heritage
- fishing culture
- Moddergat disaster 1883
- maritime heritage
- Frisian heritage
- traditional clothing (visserstruien)
google_maps_rating: 4.5
google_maps_reviews: 896
google_maps_enrichment: google_maps_enrichment:
place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY
name: Museum 't Fiskershúske name: Museum 't Fiskershúske

View file

@ -8,3 +8,16 @@ entry_index: 766
processing_timestamp: '2025-11-27T16:36:57.523637+00:00' processing_timestamp: '2025-11-27T16:36:57.523637+00:00'
enrichment_status: skipped enrichment_status: skipped
skip_reason: no_wikidata_id skip_reason: no_wikidata_id
google_maps_status: SUCCESS
google_maps_search_query: Stichting Oer-IJ Noord-Holland
google_maps_enrichment:
place_id: ChIJqUWpqx3wxUcRT7TVge8VpUM
name: Stichting Oer-IJ
formatted_address: Breedeweg 33, 1901 RB Castricum, Nederland
latitude: 52.5449554
longitude: 4.6675645
rating: null
total_ratings: null
phone: null
business_status: OPERATIONAL
google_maps_url: https://maps.google.com/?cid=4874326290118063183&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA

View file

@ -1,10 +1,12 @@
{ {
"generated_at": "2025-11-27T23:19:16.576913+00:00", "generated_at": "2025-11-28T12:11:13.370875+00:00",
"total_entries": 1353, "total_entries": 1352,
"summary": { "summary": {
"total_institutions": 1353, "total_institutions": 1352,
"with_coordinates": 712, "with_coordinates": 717,
"with_wikidata": 1094, "with_wikidata": 1103,
"with_google_maps": 1344,
"google_maps_not_found": 0,
"unique_cities": 473, "unique_cities": 473,
"unique_provinces": 12, "unique_provinces": 12,
"institution_types": 14 "institution_types": 14
@ -35,7 +37,7 @@
{ {
"code": "O", "code": "O",
"name": "Official", "name": "Official",
"count": 52, "count": 51,
"percentage": 3.8, "percentage": 3.8,
"color": "#f39c12" "color": "#f39c12"
}, },
@ -196,7 +198,7 @@
"wikidata_types": [ "wikidata_types": [
{ {
"type": "museum", "type": "museum",
"count": 487 "count": 492
}, },
{ {
"type": "historical society", "type": "historical society",
@ -278,43 +280,55 @@
"enrichment_status": [ "enrichment_status": [
{ {
"status": "Success", "status": "Success",
"count": 1094, "count": 1103,
"percentage": 80.9, "percentage": 81.6,
"color": "#2ecc71" "color": "#2ecc71"
}, },
{
"status": "Enriched",
"count": 19,
"percentage": 1.4,
"color": "#9e9e9e"
},
{
"status": "Enriched_via_website",
"count": 2,
"percentage": 0.1,
"color": "#9e9e9e"
},
{ {
"status": "Skipped", "status": "Skipped",
"count": 250, "count": 226,
"percentage": 18.5, "percentage": 16.7,
"color": "#f39c12" "color": "#f39c12"
}, },
{ {
"status": "Error", "status": "Enriched_via_wikidata_and_website",
"count": 9, "count": 2,
"percentage": 0.7, "percentage": 0.1,
"color": "#e74c3c" "color": "#9e9e9e"
} }
], ],
"identifier_coverage": [ "identifier_coverage": [
{ {
"identifier": "Website", "identifier": "Website",
"count": 932, "count": 940,
"percentage": 68.9 "percentage": 69.5
}, },
{ {
"identifier": "Coordinates", "identifier": "Coordinates",
"count": 712, "count": 717,
"percentage": 52.6 "percentage": 53.0
}, },
{ {
"identifier": "Wikipedia NL", "identifier": "Wikipedia NL",
"count": 620, "count": 620,
"percentage": 45.8 "percentage": 45.9
}, },
{ {
"identifier": "Image", "identifier": "Image",
"count": 527, "count": 532,
"percentage": 39.0 "percentage": 39.3
}, },
{ {
"identifier": "ISIL Code", "identifier": "ISIL Code",
@ -322,6 +336,33 @@
"percentage": 5.0 "percentage": 5.0
} }
], ],
"google_maps_coverage": [
{
"feature": "Street View",
"count": 1344,
"percentage": 99.4
},
{
"feature": "Rating",
"count": 1166,
"percentage": 86.2
},
{
"feature": "Reviews",
"count": 1163,
"percentage": 86.0
},
{
"feature": "Photos",
"count": 1155,
"percentage": 85.4
},
{
"feature": "Opening Hours",
"count": 990,
"percentage": 73.2
}
],
"founding_timeline": [ "founding_timeline": [
{ {
"decade": 600, "decade": 600,
@ -899,13 +940,13 @@
"provinces": [ "provinces": [
{ {
"province": "Zuid-Holland", "province": "Zuid-Holland",
"count": 132, "count": 133,
"color": "#bcbd22", "color": "#bcbd22",
"types": { "types": {
"M": { "M": {
"code": "M", "code": "M",
"name": "Museum", "name": "Museum",
"count": 90, "count": 91,
"color": "#e74c3c" "color": "#e74c3c"
}, },
"A": { "A": {
@ -1100,13 +1141,13 @@
}, },
{ {
"province": "Noord-Brabant", "province": "Noord-Brabant",
"count": 75, "count": 78,
"color": "#aec7e8", "color": "#aec7e8",
"types": { "types": {
"M": { "M": {
"code": "M", "code": "M",
"name": "Museum", "name": "Museum",
"count": 57, "count": 60,
"color": "#e74c3c" "color": "#e74c3c"
}, },
"O": { "O": {
@ -1180,7 +1221,7 @@
}, },
{ {
"province": "Friesland", "province": "Friesland",
"count": 56, "count": 57,
"color": "#ff7f0e", "color": "#ff7f0e",
"types": { "types": {
"A": { "A": {
@ -1192,7 +1233,7 @@
"M": { "M": {
"code": "M", "code": "M",
"name": "Museum", "name": "Museum",
"count": 36, "count": 37,
"color": "#e74c3c" "color": "#e74c3c"
}, },
"B": { "B": {

View file

@ -10,11 +10,12 @@
# D - Digital platforms, N - NGOs, T - Taste/smell heritage # D - Digital platforms, N - NGOs, T - Taste/smell heritage
# #
# Sources: # Sources:
# - ISO standards (ISIL, ISNI) # - ISO standards (ISIL, ISNI, LEI)
# - National authority files (GND, LCNAF, BnF, NTA, NDL, 25+ more) # - National authority files (GND, LCNAF, BnF, NTA, NDL, 25+ more)
# - Consortium services (VIAF, ORCID, ROR, FAST) # - Consortium services (VIAF, ORCID, ROR, FAST)
# - Domain-specific identifiers (ULAN, RKD, RISM, CERL) # - Domain-specific identifiers (ULAN, RKD, RISM, CERL)
# - National museum standards (Museumnorm NL, Museofile FR) # - National museum standards (Museumnorm NL, Museofile FR)
# - Legal entity registries (KvK, Companies House, Handelsregister, SIREN, ABN)
# - Web identifiers (Wikidata, OpenStreetMap, GeoNames, DBpedia) # - Web identifiers (Wikidata, OpenStreetMap, GeoNames, DBpedia)
# - Botanical/Zoo registries (BGCI, WAZA, EAZA, AZA) # - Botanical/Zoo registries (BGCI, WAZA, EAZA, AZA)
# - Higher education (WHED, HESA, IPEDS) # - Higher education (WHED, HESA, IPEDS)
@ -27,7 +28,7 @@
# - Religious heritage (WCD, ARDA, JewishGen, DRH) # - Religious heritage (WCD, ARDA, JewishGen, DRH)
# - Culinary heritage (UNESCO Cities of Gastronomy, Slow Food, IGP/PDO) # - Culinary heritage (UNESCO Cities of Gastronomy, Slow Food, IGP/PDO)
# #
# Organization (24 categories): # Organization (25 categories):
# 1. ISO Standards (formal international standards) # 1. ISO Standards (formal international standards)
# 2. Authority Files (national library authority files) # 2. Authority Files (national library authority files)
# 3. Consortium Services (collaborative aggregation services) # 3. Consortium Services (collaborative aggregation services)
@ -41,17 +42,18 @@
# 11. Social Media/Web Presence # 11. Social Media/Web Presence
# 12. Commercial/Discovery Platforms # 12. Commercial/Discovery Platforms
# 13. Dutch-Specific # 13. Dutch-Specific
# 14. Japanese Identifiers # 14. Legal Entity Registries (KvK, Companies House, SIREN, etc.)
# 15. Botanical Gardens/Zoos # 15. Japanese Identifiers
# 16. Higher Education/Research # 16. Botanical Gardens/Zoos
# 17. Numismatic/Philatelic (Collecting) # 17. Higher Education/Research
# 18. Monuments/Heritage Sites # 18. Numismatic/Philatelic (Collecting)
# 19. Intangible Heritage # 19. Monuments/Heritage Sites
# 20. Provenance/Art Registry # 20. Intangible Heritage
# 21. Persistent Identifiers (Digital) # 21. Provenance/Art Registry
# 22. Heritage NGOs # 22. Persistent Identifiers (Digital)
# 23. Religious Heritage # 23. Heritage NGOs
# 24. Gastronomy/Culinary Heritage # 24. Religious Heritage
# 25. Gastronomy/Culinary Heritage
id: https://nde.nl/ontology/hc/enum/IdentifierStandardEnum id: https://nde.nl/ontology/hc/enum/IdentifierStandardEnum
name: identifier-standard-enum name: identifier-standard-enum
@ -96,8 +98,17 @@ enums:
Format: {country-code}-{local-identifier} Format: {country-code}-{local-identifier}
Example: NL-AmRMA (Rijksmuseum Amsterdam) Example: NL-AmRMA (Rijksmuseum Amsterdam)
Scope: Libraries, archives, museums, and related organizations worldwide. Scope: Libraries (L), Archives (A), Museums (M), Research institutes (R),
and related heritage organizations worldwide.
GLAMORCUBESFIXPHDNT types: L, A, M, R, O, G (primary); others as applicable.
Note: Despite "Libraries" in the name, ISIL is widely used for archives,
museums, and research institutions. Many national ISIL agencies register
all heritage custodian types.
Registration Authority: Danish Agency for Culture and Palaces Registration Authority: Danish Agency for Culture and Palaces
National agencies: 60+ countries maintain ISIL registries
Wikidata: Q470458 Wikidata: Q470458
meaning: wd:Q470458 meaning: wd:Q470458
@ -1007,9 +1018,23 @@ enums:
Kamer van Koophandel (Netherlands Chamber of Commerce) number. Kamer van Koophandel (Netherlands Chamber of Commerce) number.
Format: 8-digit numeric Format: 8-digit numeric
Example: 41200896 Example: 41200896 (Rijksmuseum)
Lookup: https://www.kvk.nl/zoeken/?source=all&q={number}
Dutch legal entity registration number. Dutch legal entity registration number for ALL organization types:
- Foundations (stichtingen) - most museums, archives, libraries
- Associations (verenigingen) - heritage societies, collecting clubs
- Corporations (BV, NV) - commercial galleries, auction houses
- Cooperatives (coöperaties)
- Religious organizations (kerkgenootschappen)
- Educational institutions
- NGOs and charities
GLAMORCUBESFIXPHDNT types: ALL except U (Unknown) and some P (Personal).
Nearly every Dutch heritage institution with legal entity status has a KvK number.
Note: Even foreign organizations with Dutch branches may have KvK numbers.
Related: RSIN (fiscal number) is often derived from KvK.
Wikidata: Q1130073 Wikidata: Q1130073
meaning: wd:Q1130073 meaning: wd:Q1130073
@ -1024,7 +1049,114 @@ enums:
meaning: wd:Q18600441 meaning: wd:Q18600441
# ============================================ # ============================================
# 14. JAPANESE IDENTIFIERS # 14. LEGAL ENTITY REGISTRIES (International)
# These apply to ALL organization types with legal entity status
# ============================================
COMPANIES_HOUSE:
description: >-
UK Companies House registration number.
Format: 8 characters (2 letters + 6 digits, or 8 digits)
Example: 01066716 (British Museum Company)
Lookup: https://find-and-update.company-information.service.gov.uk/company/{number}
Registers ALL UK legal entities including:
- Companies limited by guarantee (most museums, galleries)
- Charitable Incorporated Organisations (CIOs)
- Community Interest Companies (CICs)
- Limited companies, PLCs
GLAMORCUBESFIXPHDNT types: ALL with UK legal entity status.
Related: Charity Commission number for registered charities.
Wikidata: Q246597
meaning: wd:Q246597
HANDELSREGISTER:
description: >-
German Commercial Register (Handelsregister) number.
Format: Court code + HRA/HRB + number
Example: HRB 12345 B (Berlin)
Lookup: https://www.handelsregister.de/
Registers German legal entities including:
- GmbH (Gesellschaft mit beschränkter Haftung)
- e.V. (eingetragener Verein) - registered associations
- Stiftungen (foundations)
- AG (Aktiengesellschaft)
GLAMORCUBESFIXPHDNT types: ALL with German legal entity status.
Note: Many German museums are operated by Stiftungen or e.V.
Wikidata: Q707784
meaning: wd:Q707784
SIREN:
description: >-
French SIREN/SIRET business identification number.
Format: SIREN = 9 digits; SIRET = 14 digits (SIREN + NIC)
Example: 180070007 (Bibliothèque nationale de France SIREN)
Lookup: https://annuaire-entreprises.data.gouv.fr/
Registers ALL French legal entities including:
- Établissements publics (public institutions)
- Associations loi 1901
- Fondations
- Sociétés (companies)
GLAMORCUBESFIXPHDNT types: ALL with French legal entity status.
Related: RNA (Répertoire National des Associations) for associations.
Wikidata: Q3493495
meaning: wd:Q3493495
ABN:
description: >-
Australian Business Number.
Format: 11 digits
Example: 84 002 705 224 (Museum of Applied Arts and Sciences)
Lookup: https://abr.business.gov.au/
Registers Australian entities for tax and business purposes including:
- Companies
- Trusts
- Incorporated associations
- Government entities
GLAMORCUBESFIXPHDNT types: ALL with Australian entity status.
Related: ARBN for foreign companies registered in Australia.
Wikidata: Q4651897
meaning: wd:Q4651897
LEI:
description: >-
Legal Entity Identifier (ISO 17442).
Format: 20 alphanumeric characters
Example: 5493001KJTIIGC8Y1R12
Lookup: https://search.gleif.org/
Global standard for legal entity identification in financial transactions.
Managed by GLEIF (Global Legal Entity Identifier Foundation).
Applies to any legal entity worldwide, including:
- Corporations
- Foundations (when involved in financial transactions)
- Government entities
- Non-profits with financial reporting requirements
GLAMORCUBESFIXPHDNT types: ALL with legal entity status engaged in financial transactions.
Wikidata: Q6517749
meaning: wd:Q6517749
# ============================================
# 15. JAPANESE IDENTIFIERS
# ============================================ # ============================================
NACSISCAT: NACSISCAT:
@ -1050,7 +1182,7 @@ enums:
meaning: wd:Q10726338 meaning: wd:Q10726338
# ============================================ # ============================================
# 15. BOTANICAL GARDENS / ZOOS # 16. BOTANICAL GARDENS / ZOOS
# ============================================ # ============================================
BGCI: BGCI:
@ -1107,7 +1239,7 @@ enums:
meaning: wd:Q1376853 meaning: wd:Q1376853
# ============================================ # ============================================
# 16. HIGHER EDUCATION / RESEARCH # 17. HIGHER EDUCATION / RESEARCH
# ============================================ # ============================================
WHED: WHED:
@ -1150,7 +1282,7 @@ enums:
meaning: wd:Q6043461 meaning: wd:Q6043461
# ============================================ # ============================================
# 17. NUMISMATIC / PHILATELIC (COLLECTING) # 18. NUMISMATIC / PHILATELIC (COLLECTING)
# ============================================ # ============================================
ANS_MANTIS: ANS_MANTIS:
@ -1241,7 +1373,7 @@ enums:
meaning: wd:Q923643 meaning: wd:Q923643
# ============================================ # ============================================
# 18. MONUMENTS / HERITAGE SITES # 19. MONUMENTS / HERITAGE SITES
# ============================================ # ============================================
UNESCO_WHC: UNESCO_WHC:
@ -1347,7 +1479,7 @@ enums:
meaning: wd:Q811165 meaning: wd:Q811165
# ============================================ # ============================================
# 19. INTANGIBLE HERITAGE # 20. INTANGIBLE HERITAGE
# ============================================ # ============================================
UNESCO_ICH: UNESCO_ICH:
@ -1377,7 +1509,7 @@ enums:
meaning: wd:Q1362466 meaning: wd:Q1362466
# ============================================ # ============================================
# 20. PROVENANCE / ART REGISTRY # 21. PROVENANCE / ART REGISTRY
# ============================================ # ============================================
ALR: ALR:
@ -1434,7 +1566,7 @@ enums:
meaning: wd:Q109652096 meaning: wd:Q109652096
# ============================================ # ============================================
# 21. PERSISTENT IDENTIFIERS (DIGITAL) # 22. PERSISTENT IDENTIFIERS (DIGITAL)
# ============================================ # ============================================
DOI: DOI:
@ -1508,7 +1640,7 @@ enums:
meaning: wd:Q1061508 meaning: wd:Q1061508
# ============================================ # ============================================
# 22. HERITAGE NGOs # 23. HERITAGE NGOs
# ============================================ # ============================================
ICOMOS: ICOMOS:
@ -1563,7 +1695,7 @@ enums:
meaning: wd:Q17020227 meaning: wd:Q17020227
# ============================================ # ============================================
# 23. RELIGIOUS HERITAGE # 24. RELIGIOUS HERITAGE
# ============================================ # ============================================
WCD: WCD:
@ -1619,7 +1751,7 @@ enums:
meaning: wd:Q106654011 meaning: wd:Q106654011
# ============================================ # ============================================
# 24. GASTRONOMY / CULINARY HERITAGE # 25. GASTRONOMY / CULINARY HERITAGE
# ============================================ # ============================================
UNESCO_CITY_GASTRONOMY: UNESCO_CITY_GASTRONOMY:

View file

@ -1,5 +1,27 @@
import type { UMLDiagram, UMLNode, UMLLink } from './UMLVisualization'; import type { UMLDiagram, UMLNode, UMLLink } from './UMLVisualization';
/**
* Classes to exclude from UML diagrams (technical artifacts with no semantic significance)
*/
const EXCLUDED_CLASSES = new Set([
'Container', // LinkML tree_root for validation only, not part of ontology
]);
/**
* Filter out excluded classes from nodes and links
*/
function filterExcludedClasses(diagram: UMLDiagram): UMLDiagram {
// Filter nodes
const filteredNodes = diagram.nodes.filter(node => !EXCLUDED_CLASSES.has(node.id));
// Filter links that reference excluded classes
const filteredLinks = diagram.links.filter(link =>
!EXCLUDED_CLASSES.has(link.source) && !EXCLUDED_CLASSES.has(link.target)
);
return { nodes: filteredNodes, links: filteredLinks };
}
/** /**
* Parse Mermaid Class Diagram syntax * Parse Mermaid Class Diagram syntax
*/ */
@ -133,7 +155,8 @@ export function parseMermaidClassDiagram(mermaidSource: string): UMLDiagram {
} }
} }
return { nodes, links }; // Filter out excluded classes (e.g., Container)
return filterExcludedClasses({ nodes, links });
} }
/** /**
@ -277,7 +300,8 @@ export function parseMermaidERDiagram(mermaidSource: string): UMLDiagram {
// Debug logging // Debug logging
console.log(`[UMLParser] Raw links: ${rawLinks.length}, Merged links: ${links.length}, Bidirectional: ${links.filter(l => l.bidirectional).length}`); console.log(`[UMLParser] Raw links: ${rawLinks.length}, Merged links: ${links.length}, Bidirectional: ${links.filter(l => l.bidirectional).length}`);
return { nodes, links }; // Filter out excluded classes (e.g., Container)
return filterExcludedClasses({ nodes, links });
} }
/** /**
@ -401,7 +425,8 @@ export function parsePlantUML(plantUMLSource: string): UMLDiagram {
} }
} }
return { nodes, links }; // Filter out excluded classes (e.g., Container)
return filterExcludedClasses({ nodes, links });
} }
/** /**
@ -489,7 +514,8 @@ export function parseGraphVizDOT(dotSource: string): UMLDiagram {
} }
} }
return { nodes, links }; // Filter out excluded classes (e.g., Container)
return filterExcludedClasses({ nodes, links });
} }
/** /**

View file

@ -186,7 +186,25 @@
/* Leaflet Popup Customization */ /* Leaflet Popup Customization */
.map-popup { .map-popup {
max-width: 280px; max-width: 320px;
min-width: 280px;
}
.map-popup .popup-photo {
margin: -14px -14px 10px -14px;
border-radius: 8px 8px 0 0;
overflow: hidden;
}
.map-popup .popup-photo img {
width: 100%;
height: 150px;
object-fit: cover;
display: block;
}
.map-popup .popup-content {
padding: 0;
} }
.map-popup .type-badge { .map-popup .type-badge {
@ -199,6 +217,23 @@
color: white; color: white;
border-radius: 3px; border-radius: 3px;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
margin-right: 0.35rem;
}
.map-popup .status-badge {
display: inline-block;
padding: 0.2rem 0.5rem;
font-size: 0.65rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.03em;
border-radius: 3px;
margin-bottom: 0.5rem;
}
.map-popup .status-badge.closed {
background: #dc2626;
color: white;
} }
.map-popup h3 { .map-popup h3 {
@ -224,20 +259,168 @@
text-overflow: ellipsis; text-overflow: ellipsis;
} }
/* Rating styles */
.popup-rating {
display: flex;
align-items: center;
gap: 0.35rem;
margin-bottom: 0.5rem;
}
.popup-rating .stars {
color: #f59e0b;
font-size: 0.9rem;
letter-spacing: -1px;
}
.popup-rating .rating-value {
font-weight: 600;
color: #1f2937;
font-size: 0.85rem;
}
.popup-rating .rating-count {
color: #6b7280;
font-size: 0.75rem;
}
/* Address and phone */
.popup-address,
.popup-phone {
font-size: 0.8rem !important;
color: #4b5563 !important;
margin-bottom: 0.35rem !important;
}
.popup-phone a {
color: #0a3dfa;
text-decoration: none;
}
.popup-phone a:hover {
text-decoration: underline;
}
/* Opening hours and reviews (collapsible) */
.popup-hours,
.popup-reviews {
font-size: 0.8rem;
margin: 0.5rem 0;
border: 1px solid #e5e7eb;
border-radius: 6px;
overflow: hidden;
}
.popup-hours summary,
.popup-reviews summary {
padding: 0.5rem;
background: #f9fafb;
cursor: pointer;
font-weight: 500;
color: #374151;
list-style: none;
}
.popup-hours summary::-webkit-details-marker,
.popup-reviews summary::-webkit-details-marker {
display: none;
}
.popup-hours summary::before,
.popup-reviews summary::before {
content: '▶ ';
font-size: 0.65rem;
margin-right: 0.35rem;
}
.popup-hours[open] summary::before,
.popup-reviews[open] summary::before {
content: '▼ ';
}
.popup-hours ul {
list-style: none;
margin: 0;
padding: 0.5rem;
background: white;
max-height: 140px;
overflow-y: auto;
}
.popup-hours li {
padding: 0.2rem 0;
color: #4b5563;
font-size: 0.75rem;
border-bottom: 1px solid #f3f4f6;
}
.popup-hours li:last-child {
border-bottom: none;
}
/* Reviews list */
.reviews-list {
padding: 0.5rem;
background: white;
max-height: 180px;
overflow-y: auto;
}
.review {
padding: 0.5rem 0;
border-bottom: 1px solid #f3f4f6;
}
.review:last-child {
border-bottom: none;
}
.review-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.25rem;
}
.review-header strong {
font-size: 0.75rem;
color: #1f2937;
}
.review-rating {
color: #f59e0b;
font-size: 0.7rem;
}
.review-text {
font-size: 0.75rem;
color: #4b5563;
line-height: 1.4;
margin: 0.25rem 0;
}
.review-time {
font-size: 0.65rem;
color: #9ca3af;
}
/* Links section */
.popup-links { .popup-links {
display: flex; display: flex;
gap: 0.75rem; flex-wrap: wrap;
gap: 0.5rem;
margin-top: 0.75rem; margin-top: 0.75rem;
padding-top: 0.5rem; padding-top: 0.5rem;
border-top: 1px solid #e5e7eb; border-top: 1px solid #e5e7eb;
} }
.popup-links a { .popup-links a {
font-size: 0.8rem; font-size: 0.75rem;
color: #0a3dfa; color: #0a3dfa;
text-decoration: none; text-decoration: none;
font-weight: 500; font-weight: 500;
transition: color 0.15s ease; transition: color 0.15s ease;
white-space: nowrap;
} }
.popup-links a:hover { .popup-links a:hover {
@ -353,6 +536,13 @@
.leaflet-popup-content-wrapper { .leaflet-popup-content-wrapper {
border-radius: 8px; border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
padding: 0;
}
.leaflet-popup-content {
margin: 14px;
max-height: 400px;
overflow-y: auto;
} }
.leaflet-popup-tip { .leaflet-popup-tip {

View file

@ -49,6 +49,18 @@ const TYPE_NAMES: Record<string, string> = {
G: 'Gallery', G: 'Gallery',
}; };
interface Review {
author: string;
rating: number;
text: string;
time: string;
}
interface Photo {
url: string;
attribution?: string;
}
interface Institution { interface Institution {
lat: number; lat: number;
lon: number; lon: number;
@ -60,6 +72,17 @@ interface Institution {
website: string; website: string;
wikidata_id: string; wikidata_id: string;
description: string; description: string;
// Google Maps enrichment data
rating?: number;
total_ratings?: number;
phone?: string;
address?: string;
reviews?: Review[];
photos?: Photo[];
street_view_url?: string;
business_status?: string;
google_place_id?: string;
opening_hours?: string[];
} }
// Import the institutions data - this will be loaded from the generated JSON // Import the institutions data - this will be loaded from the generated JSON
@ -73,9 +96,18 @@ export default function NDEMapPage() {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [selectedTypes, setSelectedTypes] = useState<Set<string>>(new Set(Object.keys(TYPE_COLORS))); const [selectedTypes, setSelectedTypes] = useState<Set<string>>(new Set(Object.keys(TYPE_COLORS)));
const [stats, setStats] = useState<{ total: number; byType: Record<string, number> }>({ const [stats, setStats] = useState<{
total: number;
byType: Record<string, number>;
withRatings: number;
withPhotos: number;
withReviews: number;
}>({
total: 0, total: 0,
byType: {}, byType: {},
withRatings: 0,
withPhotos: 0,
withReviews: 0,
}); });
// Load institutions data // Load institutions data
@ -91,10 +123,17 @@ export default function NDEMapPage() {
// Calculate stats // Calculate stats
const byType: Record<string, number> = {}; const byType: Record<string, number> = {};
let withRatings = 0;
let withPhotos = 0;
let withReviews = 0;
data.forEach((inst: Institution) => { data.forEach((inst: Institution) => {
byType[inst.type] = (byType[inst.type] || 0) + 1; byType[inst.type] = (byType[inst.type] || 0) + 1;
if (inst.rating) withRatings++;
if (inst.photos && inst.photos.length > 0) withPhotos++;
if (inst.reviews && inst.reviews.length > 0) withReviews++;
}); });
setStats({ total: data.length, byType }); setStats({ total: data.length, byType, withRatings, withPhotos, withReviews });
setLoading(false); setLoading(false);
} catch (err) { } catch (err) {
@ -153,15 +192,64 @@ export default function NDEMapPage() {
fillOpacity: 0.8, fillOpacity: 0.8,
}); });
// Build star rating display
const renderStars = (rating: number) => {
const fullStars = Math.floor(rating);
const hasHalf = rating % 1 >= 0.5;
let stars = '★'.repeat(fullStars);
if (hasHalf) stars += '½';
return stars;
};
// Get photo URL (first photo if available)
const photoUrl = inst.photos && inst.photos.length > 0 ? inst.photos[0].url : null;
const popupContent = ` const popupContent = `
<div class="map-popup"> <div class="map-popup">
<span class="type-badge" style="background: ${inst.color}">${inst.type_name}</span> ${photoUrl ? `<div class="popup-photo"><img src="${photoUrl}" alt="${inst.name}" loading="lazy" /></div>` : ''}
<h3>${inst.name}</h3> <div class="popup-content">
${inst.city ? `<p><strong>City:</strong> ${inst.city}</p>` : ''} <span class="type-badge" style="background: ${inst.color}">${inst.type_name}</span>
${inst.description ? `<p class="description">${inst.description}</p>` : ''} ${inst.business_status && inst.business_status !== 'OPERATIONAL' ? `<span class="status-badge closed">${inst.business_status.replace('_', ' ')}</span>` : ''}
<div class="popup-links"> <h3>${inst.name}</h3>
${inst.website ? `<a href="${inst.website}" target="_blank" rel="noopener noreferrer">Website</a>` : ''} ${inst.rating ? `
${inst.wikidata_id ? `<a href="https://www.wikidata.org/wiki/${inst.wikidata_id}" target="_blank" rel="noopener noreferrer">Wikidata</a>` : ''} <div class="popup-rating">
<span class="stars">${renderStars(inst.rating)}</span>
<span class="rating-value">${inst.rating}</span>
${inst.total_ratings ? `<span class="rating-count">(${inst.total_ratings.toLocaleString()} reviews)</span>` : ''}
</div>
` : ''}
${inst.address ? `<p class="popup-address">📍 ${inst.address}</p>` : inst.city ? `<p class="popup-address">📍 ${inst.city}</p>` : ''}
${inst.phone ? `<p class="popup-phone">📞 <a href="tel:${inst.phone}">${inst.phone}</a></p>` : ''}
${inst.description ? `<p class="description">${inst.description}</p>` : ''}
${inst.opening_hours && inst.opening_hours.length > 0 ? `
<details class="popup-hours">
<summary>🕐 Opening Hours</summary>
<ul>${inst.opening_hours.map(h => `<li>${h}</li>`).join('')}</ul>
</details>
` : ''}
${inst.reviews && inst.reviews.length > 0 ? `
<details class="popup-reviews">
<summary>💬 Reviews (${inst.reviews.length})</summary>
<div class="reviews-list">
${inst.reviews.slice(0, 3).map(r => `
<div class="review">
<div class="review-header">
<strong>${r.author}</strong>
<span class="review-rating">${'★'.repeat(r.rating)}</span>
</div>
<p class="review-text">${r.text.length > 150 ? r.text.slice(0, 150) + '...' : r.text}</p>
<span class="review-time">${r.time}</span>
</div>
`).join('')}
</div>
</details>
` : ''}
<div class="popup-links">
${inst.website ? `<a href="${inst.website}" target="_blank" rel="noopener noreferrer">🌐 Website</a>` : ''}
${inst.wikidata_id ? `<a href="https://www.wikidata.org/wiki/${inst.wikidata_id}" target="_blank" rel="noopener noreferrer">📚 Wikidata</a>` : ''}
${inst.google_place_id ? `<a href="https://www.google.com/maps/place/?q=place_id:${inst.google_place_id}" target="_blank" rel="noopener noreferrer">🗺️ Google Maps</a>` : ''}
${inst.street_view_url ? `<a href="${inst.street_view_url}" target="_blank" rel="noopener noreferrer">🚶 Street View</a>` : ''}
</div>
</div> </div>
</div> </div>
`; `;
@ -272,13 +360,21 @@ export default function NDEMapPage() {
<dt>Types Shown</dt> <dt>Types Shown</dt>
<dd>{selectedTypes.size} of {Object.keys(stats.byType).length}</dd> <dd>{selectedTypes.size} of {Object.keys(stats.byType).length}</dd>
</dl> </dl>
<h3 style={{ marginTop: '1rem' }}>Google Maps Data</h3>
<dl className="stats-list">
<dt>With Ratings</dt>
<dd>{stats.withRatings.toLocaleString()} ({Math.round(stats.withRatings / stats.total * 100)}%)</dd>
<dt>With Photos</dt>
<dd>{stats.withPhotos.toLocaleString()} ({Math.round(stats.withPhotos / stats.total * 100)}%)</dd>
<dt>With Reviews</dt>
<dd>{stats.withReviews.toLocaleString()} ({Math.round(stats.withReviews / stats.total * 100)}%)</dd>
</dl>
</div> </div>
<div className="legend-section"> <div className="legend-section">
<h3>Data Source</h3> <h3>Data Source</h3>
<p className="data-source-info"> <p className="data-source-info">
Data enriched from Wikidata via the NDE Register Nederland. Data from NDE Register Nederland, enriched with Wikidata and Google Maps data including ratings, reviews, photos, and opening hours.
Coordinates extracted from Wikidata P625 (coordinate location).
</p> </p>
</div> </div>
</aside> </aside>

View file

@ -73,6 +73,12 @@ interface IdentifierCoverage {
percentage: number; percentage: number;
} }
interface GoogleMapsCoverage {
feature: string;
count: number;
percentage: number;
}
interface TimelineData { interface TimelineData {
decade: number; decade: number;
count: number; count: number;
@ -99,6 +105,8 @@ interface StatsData {
total_institutions: number; total_institutions: number;
with_coordinates: number; with_coordinates: number;
with_wikidata: number; with_wikidata: number;
with_google_maps?: number;
google_maps_not_found?: number;
unique_cities: number; unique_cities: number;
unique_provinces?: number; unique_provinces?: number;
institution_types: number; institution_types: number;
@ -109,6 +117,7 @@ interface StatsData {
wikidata_types: WikidataType[]; wikidata_types: WikidataType[];
enrichment_status: EnrichmentStatus[]; enrichment_status: EnrichmentStatus[];
identifier_coverage: IdentifierCoverage[]; identifier_coverage: IdentifierCoverage[];
google_maps_coverage?: GoogleMapsCoverage[];
founding_timeline: TimelineData[]; founding_timeline: TimelineData[];
provinces?: ProvinceData[]; provinces?: ProvinceData[];
}; };
@ -1047,6 +1056,10 @@ export default function NDEStatsPage() {
<div className="card-value">{stats.summary.with_wikidata.toLocaleString()}</div> <div className="card-value">{stats.summary.with_wikidata.toLocaleString()}</div>
<div className="card-label">Enriched Records</div> <div className="card-label">Enriched Records</div>
</div> </div>
<div className="summary-card">
<div className="card-value">{(stats.summary.with_google_maps || 0).toLocaleString()}</div>
<div className="card-label">Google Maps Data</div>
</div>
<div className="summary-card"> <div className="summary-card">
<div className="card-value">{stats.summary.with_coordinates.toLocaleString()}</div> <div className="card-value">{stats.summary.with_coordinates.toLocaleString()}</div>
<div className="card-label">With Coordinates</div> <div className="card-label">With Coordinates</div>
@ -1094,6 +1107,20 @@ export default function NDEStatsPage() {
height={280} height={280}
/> />
{/* Google Maps Coverage */}
{stats.charts.google_maps_coverage && stats.charts.google_maps_coverage.length > 0 && (
<CoverageChart
data={stats.charts.google_maps_coverage.map(d => ({
identifier: d.feature,
count: d.count,
percentage: d.percentage,
}))}
title="Google Maps Coverage"
width={400}
height={280}
/>
)}
{/* Top Cities */} {/* Top Cities */}
<HorizontalBarChart <HorizontalBarChart
data={stats.charts.top_cities.slice(0, 12)} data={stats.charts.top_cities.slice(0, 12)}

View file

@ -10,11 +10,12 @@
# D - Digital platforms, N - NGOs, T - Taste/smell heritage # D - Digital platforms, N - NGOs, T - Taste/smell heritage
# #
# Sources: # Sources:
# - ISO standards (ISIL, ISNI) # - ISO standards (ISIL, ISNI, LEI)
# - National authority files (GND, LCNAF, BnF, NTA, NDL, 25+ more) # - National authority files (GND, LCNAF, BnF, NTA, NDL, 25+ more)
# - Consortium services (VIAF, ORCID, ROR, FAST) # - Consortium services (VIAF, ORCID, ROR, FAST)
# - Domain-specific identifiers (ULAN, RKD, RISM, CERL) # - Domain-specific identifiers (ULAN, RKD, RISM, CERL)
# - National museum standards (Museumnorm NL, Museofile FR) # - National museum standards (Museumnorm NL, Museofile FR)
# - Legal entity registries (KvK, Companies House, Handelsregister, SIREN, ABN)
# - Web identifiers (Wikidata, OpenStreetMap, GeoNames, DBpedia) # - Web identifiers (Wikidata, OpenStreetMap, GeoNames, DBpedia)
# - Botanical/Zoo registries (BGCI, WAZA, EAZA, AZA) # - Botanical/Zoo registries (BGCI, WAZA, EAZA, AZA)
# - Higher education (WHED, HESA, IPEDS) # - Higher education (WHED, HESA, IPEDS)
@ -27,7 +28,7 @@
# - Religious heritage (WCD, ARDA, JewishGen, DRH) # - Religious heritage (WCD, ARDA, JewishGen, DRH)
# - Culinary heritage (UNESCO Cities of Gastronomy, Slow Food, IGP/PDO) # - Culinary heritage (UNESCO Cities of Gastronomy, Slow Food, IGP/PDO)
# #
# Organization (24 categories): # Organization (25 categories):
# 1. ISO Standards (formal international standards) # 1. ISO Standards (formal international standards)
# 2. Authority Files (national library authority files) # 2. Authority Files (national library authority files)
# 3. Consortium Services (collaborative aggregation services) # 3. Consortium Services (collaborative aggregation services)
@ -41,17 +42,18 @@
# 11. Social Media/Web Presence # 11. Social Media/Web Presence
# 12. Commercial/Discovery Platforms # 12. Commercial/Discovery Platforms
# 13. Dutch-Specific # 13. Dutch-Specific
# 14. Japanese Identifiers # 14. Legal Entity Registries (KvK, Companies House, SIREN, etc.)
# 15. Botanical Gardens/Zoos # 15. Japanese Identifiers
# 16. Higher Education/Research # 16. Botanical Gardens/Zoos
# 17. Numismatic/Philatelic (Collecting) # 17. Higher Education/Research
# 18. Monuments/Heritage Sites # 18. Numismatic/Philatelic (Collecting)
# 19. Intangible Heritage # 19. Monuments/Heritage Sites
# 20. Provenance/Art Registry # 20. Intangible Heritage
# 21. Persistent Identifiers (Digital) # 21. Provenance/Art Registry
# 22. Heritage NGOs # 22. Persistent Identifiers (Digital)
# 23. Religious Heritage # 23. Heritage NGOs
# 24. Gastronomy/Culinary Heritage # 24. Religious Heritage
# 25. Gastronomy/Culinary Heritage
id: https://nde.nl/ontology/hc/enum/IdentifierStandardEnum id: https://nde.nl/ontology/hc/enum/IdentifierStandardEnum
name: identifier-standard-enum name: identifier-standard-enum
@ -96,8 +98,17 @@ enums:
Format: {country-code}-{local-identifier} Format: {country-code}-{local-identifier}
Example: NL-AmRMA (Rijksmuseum Amsterdam) Example: NL-AmRMA (Rijksmuseum Amsterdam)
Scope: Libraries, archives, museums, and related organizations worldwide. Scope: Libraries (L), Archives (A), Museums (M), Research institutes (R),
and related heritage organizations worldwide.
GLAMORCUBESFIXPHDNT types: L, A, M, R, O, G (primary); others as applicable.
Note: Despite "Libraries" in the name, ISIL is widely used for archives,
museums, and research institutions. Many national ISIL agencies register
all heritage custodian types.
Registration Authority: Danish Agency for Culture and Palaces Registration Authority: Danish Agency for Culture and Palaces
National agencies: 60+ countries maintain ISIL registries
Wikidata: Q470458 Wikidata: Q470458
meaning: wd:Q470458 meaning: wd:Q470458
@ -1007,9 +1018,23 @@ enums:
Kamer van Koophandel (Netherlands Chamber of Commerce) number. Kamer van Koophandel (Netherlands Chamber of Commerce) number.
Format: 8-digit numeric Format: 8-digit numeric
Example: 41200896 Example: 41200896 (Rijksmuseum)
Lookup: https://www.kvk.nl/zoeken/?source=all&q={number}
Dutch legal entity registration number. Dutch legal entity registration number for ALL organization types:
- Foundations (stichtingen) - most museums, archives, libraries
- Associations (verenigingen) - heritage societies, collecting clubs
- Corporations (BV, NV) - commercial galleries, auction houses
- Cooperatives (coöperaties)
- Religious organizations (kerkgenootschappen)
- Educational institutions
- NGOs and charities
GLAMORCUBESFIXPHDNT types: ALL except U (Unknown) and some P (Personal).
Nearly every Dutch heritage institution with legal entity status has a KvK number.
Note: Even foreign organizations with Dutch branches may have KvK numbers.
Related: RSIN (fiscal number) is often derived from KvK.
Wikidata: Q1130073 Wikidata: Q1130073
meaning: wd:Q1130073 meaning: wd:Q1130073
@ -1024,7 +1049,114 @@ enums:
meaning: wd:Q18600441 meaning: wd:Q18600441
# ============================================ # ============================================
# 14. JAPANESE IDENTIFIERS # 14. LEGAL ENTITY REGISTRIES (International)
# These apply to ALL organization types with legal entity status
# ============================================
COMPANIES_HOUSE:
description: >-
UK Companies House registration number.
Format: 8 characters (2 letters + 6 digits, or 8 digits)
Example: 01066716 (British Museum Company)
Lookup: https://find-and-update.company-information.service.gov.uk/company/{number}
Registers ALL UK legal entities including:
- Companies limited by guarantee (most museums, galleries)
- Charitable Incorporated Organisations (CIOs)
- Community Interest Companies (CICs)
- Limited companies, PLCs
GLAMORCUBESFIXPHDNT types: ALL with UK legal entity status.
Related: Charity Commission number for registered charities.
Wikidata: Q246597
meaning: wd:Q246597
HANDELSREGISTER:
description: >-
German Commercial Register (Handelsregister) number.
Format: Court code + HRA/HRB + number
Example: HRB 12345 B (Berlin)
Lookup: https://www.handelsregister.de/
Registers German legal entities including:
- GmbH (Gesellschaft mit beschränkter Haftung)
- e.V. (eingetragener Verein) - registered associations
- Stiftungen (foundations)
- AG (Aktiengesellschaft)
GLAMORCUBESFIXPHDNT types: ALL with German legal entity status.
Note: Many German museums are operated by Stiftungen or e.V.
Wikidata: Q707784
meaning: wd:Q707784
SIREN:
description: >-
French SIREN/SIRET business identification number.
Format: SIREN = 9 digits; SIRET = 14 digits (SIREN + NIC)
Example: 180070007 (Bibliothèque nationale de France SIREN)
Lookup: https://annuaire-entreprises.data.gouv.fr/
Registers ALL French legal entities including:
- Établissements publics (public institutions)
- Associations loi 1901
- Fondations
- Sociétés (companies)
GLAMORCUBESFIXPHDNT types: ALL with French legal entity status.
Related: RNA (Répertoire National des Associations) for associations.
Wikidata: Q3493495
meaning: wd:Q3493495
ABN:
description: >-
Australian Business Number.
Format: 11 digits
Example: 84 002 705 224 (Museum of Applied Arts and Sciences)
Lookup: https://abr.business.gov.au/
Registers Australian entities for tax and business purposes including:
- Companies
- Trusts
- Incorporated associations
- Government entities
GLAMORCUBESFIXPHDNT types: ALL with Australian entity status.
Related: ARBN for foreign companies registered in Australia.
Wikidata: Q4651897
meaning: wd:Q4651897
LEI:
description: >-
Legal Entity Identifier (ISO 17442).
Format: 20 alphanumeric characters
Example: 5493001KJTIIGC8Y1R12
Lookup: https://search.gleif.org/
Global standard for legal entity identification in financial transactions.
Managed by GLEIF (Global Legal Entity Identifier Foundation).
Applies to any legal entity worldwide, including:
- Corporations
- Foundations (when involved in financial transactions)
- Government entities
- Non-profits with financial reporting requirements
GLAMORCUBESFIXPHDNT types: ALL with legal entity status engaged in financial transactions.
Wikidata: Q6517749
meaning: wd:Q6517749
# ============================================
# 15. JAPANESE IDENTIFIERS
# ============================================ # ============================================
NACSISCAT: NACSISCAT:
@ -1050,7 +1182,7 @@ enums:
meaning: wd:Q10726338 meaning: wd:Q10726338
# ============================================ # ============================================
# 15. BOTANICAL GARDENS / ZOOS # 16. BOTANICAL GARDENS / ZOOS
# ============================================ # ============================================
BGCI: BGCI:
@ -1107,7 +1239,7 @@ enums:
meaning: wd:Q1376853 meaning: wd:Q1376853
# ============================================ # ============================================
# 16. HIGHER EDUCATION / RESEARCH # 17. HIGHER EDUCATION / RESEARCH
# ============================================ # ============================================
WHED: WHED:
@ -1150,7 +1282,7 @@ enums:
meaning: wd:Q6043461 meaning: wd:Q6043461
# ============================================ # ============================================
# 17. NUMISMATIC / PHILATELIC (COLLECTING) # 18. NUMISMATIC / PHILATELIC (COLLECTING)
# ============================================ # ============================================
ANS_MANTIS: ANS_MANTIS:
@ -1241,7 +1373,7 @@ enums:
meaning: wd:Q923643 meaning: wd:Q923643
# ============================================ # ============================================
# 18. MONUMENTS / HERITAGE SITES # 19. MONUMENTS / HERITAGE SITES
# ============================================ # ============================================
UNESCO_WHC: UNESCO_WHC:
@ -1347,7 +1479,7 @@ enums:
meaning: wd:Q811165 meaning: wd:Q811165
# ============================================ # ============================================
# 19. INTANGIBLE HERITAGE # 20. INTANGIBLE HERITAGE
# ============================================ # ============================================
UNESCO_ICH: UNESCO_ICH:
@ -1377,7 +1509,7 @@ enums:
meaning: wd:Q1362466 meaning: wd:Q1362466
# ============================================ # ============================================
# 20. PROVENANCE / ART REGISTRY # 21. PROVENANCE / ART REGISTRY
# ============================================ # ============================================
ALR: ALR:
@ -1434,7 +1566,7 @@ enums:
meaning: wd:Q109652096 meaning: wd:Q109652096
# ============================================ # ============================================
# 21. PERSISTENT IDENTIFIERS (DIGITAL) # 22. PERSISTENT IDENTIFIERS (DIGITAL)
# ============================================ # ============================================
DOI: DOI:
@ -1508,7 +1640,7 @@ enums:
meaning: wd:Q1061508 meaning: wd:Q1061508
# ============================================ # ============================================
# 22. HERITAGE NGOs # 23. HERITAGE NGOs
# ============================================ # ============================================
ICOMOS: ICOMOS:
@ -1563,7 +1695,7 @@ enums:
meaning: wd:Q17020227 meaning: wd:Q17020227
# ============================================ # ============================================
# 23. RELIGIOUS HERITAGE # 24. RELIGIOUS HERITAGE
# ============================================ # ============================================
WCD: WCD:
@ -1619,7 +1751,7 @@ enums:
meaning: wd:Q106654011 meaning: wd:Q106654011
# ============================================ # ============================================
# 24. GASTRONOMY / CULINARY HERITAGE # 25. GASTRONOMY / CULINARY HERITAGE
# ============================================ # ============================================
UNESCO_CITY_GASTRONOMY: UNESCO_CITY_GASTRONOMY:

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,999 @@
classDiagram
%% Heritage Custodian Complete Schema
%% Generated: 2025-11-28T12:52:32.981587
%% Schema: heritage-custodian-observation-reconstruction
%% Version: 0.9.0
%% Excluded classes: Container
class AllocationAgency
AllocationAgency : id uriorcurie
AllocationAgency : name string
AllocationAgency : name_local string
AllocationAgency : abbreviation string
AllocationAgency : geographic_scope string
AllocationAgency : subregion_scope Subregion
AllocationAgency : *allocation_domain AllocationDomainEnum
AllocationAgency : *allocates_for Standard
AllocationAgency : allocation_prefix string
AllocationAgency : parent_registration_authority RegistrationAuthority
class ArchiveOrganizationType
ArchiveOrganizationType : archive_scope string
ArchiveOrganizationType : record_types string
ArchiveOrganizationType : preservation_standards string
ArchiveOrganizationType : finding_aids_format string
ArchiveOrganizationType : access_policy string
ArchiveOrganizationType : appraisal_policy uri
ArchiveOrganizationType : type_id uriorcurie
ArchiveOrganizationType : primary_type string
ArchiveOrganizationType : wikidata_entity string
ArchiveOrganizationType : type_label string
class AuxiliaryDigitalPlatform
AuxiliaryDigitalPlatform : auxiliary_platform_id uriorcurie
AuxiliaryDigitalPlatform : platform_name string
AuxiliaryDigitalPlatform : auxiliary_platform_type AuxiliaryDigitalPlatformTypeEnum
AuxiliaryDigitalPlatform : platform_url uri
AuxiliaryDigitalPlatform : platform_purpose string
AuxiliaryDigitalPlatform : platform_description string
AuxiliaryDigitalPlatform : api_documentation uri
AuxiliaryDigitalPlatform : technology_stack string
AuxiliaryDigitalPlatform : is_auxiliary_of DigitalPlatform
AuxiliaryDigitalPlatform : provides_access_to uriorcurie
class AuxiliaryPlace
AuxiliaryPlace : auxiliary_place_id uriorcurie
AuxiliaryPlace : place_name string
AuxiliaryPlace : auxiliary_place_type AuxiliaryPlaceTypeEnum
AuxiliaryPlace : place_description string
AuxiliaryPlace : street_address string
AuxiliaryPlace : postal_code string
AuxiliaryPlace : city string
AuxiliaryPlace : country Country
AuxiliaryPlace : subregion Subregion
AuxiliaryPlace : settlement Settlement
class BioCustodianType
BioCustodianType : specimen_types string
BioCustodianType : collection_size string
BioCustodianType : living_collections boolean
BioCustodianType : research_programs string
BioCustodianType : public_education string
BioCustodianType : conservation_breeding string
BioCustodianType : type_id uriorcurie
BioCustodianType : primary_type string
BioCustodianType : wikidata_entity string
BioCustodianType : type_label string
class CollectionManagementSystem
CollectionManagementSystem : cms_id uriorcurie
CollectionManagementSystem : cms_product_name string
CollectionManagementSystem : cms_product_version string
CollectionManagementSystem : cms_category string
CollectionManagementSystem : open_source boolean
CollectionManagementSystem : license string
CollectionManagementSystem : vendor_name string
CollectionManagementSystem : vendor_url uri
CollectionManagementSystem : documentation_url uri
CollectionManagementSystem : programming_languages string
class CommercialOrganizationType
CommercialOrganizationType : business_model string
CommercialOrganizationType : collection_purpose string
CommercialOrganizationType : corporate_integration string
CommercialOrganizationType : public_access string
CommercialOrganizationType : heritage_holdings string
CommercialOrganizationType : commercial_activities string
CommercialOrganizationType : type_id uriorcurie
CommercialOrganizationType : primary_type string
CommercialOrganizationType : wikidata_entity string
CommercialOrganizationType : type_label string
class ConfidenceMeasure
ConfidenceMeasure : confidence_value float
ConfidenceMeasure : confidence_method string
class Consortium
Consortium : id uriorcurie
Consortium : organization_name string
Consortium : organization_type EncompassingBodyTypeEnum
Consortium : description string
Consortium : legal_form string
Consortium : founding_date date
Consortium : dissolution_date date
Consortium : member_custodians uriorcurie
Consortium : governance_authority string
Consortium : service_offerings string
class ContributingAgency
ContributingAgency : id uriorcurie
ContributingAgency : *contributor_code string
ContributingAgency : name string
ContributingAgency : name_local string
ContributingAgency : abbreviation string
ContributingAgency : country Country
ContributingAgency : authority_file_name string
ContributingAgency : authority_file_abbreviation string
ContributingAgency : authority_file_url uri
ContributingAgency : *record_format AuthorityRecordFormatEnum
class Cooperative
Cooperative : id uriorcurie
Cooperative : organization_name string
Cooperative : organization_type EncompassingBodyTypeEnum
Cooperative : description string
Cooperative : legal_form string
Cooperative : founding_date date
Cooperative : dissolution_date date
Cooperative : member_custodians uriorcurie
Cooperative : governance_authority string
Cooperative : service_offerings string
class Country
Country : alpha_2 string
Country : alpha_3 string
class Custodian
Custodian : hc_id uriorcurie
Custodian : preferred_label string
Custodian : custodian_type string
Custodian : legal_status string
Custodian : place_designation string
Custodian : digital_platform uriorcurie
Custodian : has_collection uriorcurie
Custodian : organizational_structure string
Custodian : organizational_change_events uriorcurie
Custodian : encompassing_body uriorcurie
<<abstract>> Custodian
class CustodianAppellation
CustodianAppellation : appellation_value string
CustodianAppellation : appellation_language string
CustodianAppellation : appellation_type AppellationTypeEnum
CustodianAppellation : variant_of_name CustodianName
class CustodianCollection
CustodianCollection : id uriorcurie
CustodianCollection : collection_name string
CustodianCollection : collection_description string
CustodianCollection : collection_type string
CustodianCollection : collection_scope string
CustodianCollection : temporal_coverage TimeSpan
CustodianCollection : extent string
CustodianCollection : access_rights string
CustodianCollection : digital_surrogates string
CustodianCollection : digitization_status string
class CustodianIdentifier
CustodianIdentifier : identifier_scheme string
CustodianIdentifier : identifier_value string
CustodianIdentifier : identifies_custodian Custodian
CustodianIdentifier : defined_by_standard Standard
CustodianIdentifier : allocated_by AllocationAgency
CustodianIdentifier : identifier_format_used IdentifierFormat
CustodianIdentifier : canonical_value string
CustodianIdentifier : also_identifies_name CustodianName
CustodianIdentifier : allocation_date datetime
class CustodianLegalStatus
CustodianLegalStatus : refers_to_custodian Custodian
CustodianLegalStatus : *legal_entity_type LegalEntityType
CustodianLegalStatus : *legal_name LegalName
CustodianLegalStatus : legal_form string
CustodianLegalStatus : registration_numbers RegistrationNumber
CustodianLegalStatus : registration_authority RegistrationAuthority
CustodianLegalStatus : primary_register TradeRegister
CustodianLegalStatus : legal_jurisdiction Jurisdiction
CustodianLegalStatus : dissolution_date date
CustodianLegalStatus : temporal_extent TimeSpan
class CustodianName
CustodianName : *emic_name string
CustodianName : name_language string
CustodianName : *standardized_name string
CustodianName : alternative_names CustodianAppellation
CustodianName : *endorsement_source uriorcurie
CustodianName : name_authority string
CustodianName : valid_from datetime
CustodianName : valid_to datetime
CustodianName : name_validity_period TimeSpan
CustodianName : supersedes CustodianName
class CustodianObservation
CustodianObservation : *observed_name string
CustodianObservation : alternative_observed_names string
CustodianObservation : observation_date date
CustodianObservation : observation_source string
CustodianObservation : *source uriorcurie
CustodianObservation : language string
CustodianObservation : observation_context string
CustodianObservation : derived_from_entity CustodianLegalStatus
CustodianObservation : confidence_score float
class CustodianPlace
CustodianPlace : place_name string
CustodianPlace : place_language string
CustodianPlace : place_specificity PlaceSpecificityEnum
CustodianPlace : place_note string
CustodianPlace : country Country
CustodianPlace : subregion Subregion
CustodianPlace : settlement Settlement
CustodianPlace : has_feature_type FeaturePlace
CustodianPlace : auxiliary_places AuxiliaryPlace
CustodianPlace : was_derived_from CustodianObservation
class CustodianType
CustodianType : type_id uriorcurie
CustodianType : primary_type string
CustodianType : wikidata_entity string
CustodianType : type_label string
CustodianType : type_description string
CustodianType : broader_type CustodianType
CustodianType : narrower_types CustodianType
CustodianType : related_types CustodianType
CustodianType : applicable_countries string
CustodianType : created datetime
<<abstract>> CustodianType
class DataLicense
DataLicense : id uriorcurie
DataLicense : name string
DataLicense : abbreviation string
DataLicense : *license_type DataLicenseTypeEnum
DataLicense : *openness_level DataOpennessLevelEnum
DataLicense : *license_url uri
DataLicense : deed_url uri
DataLicense : version string
DataLicense : *allows_commercial_use boolean
DataLicense : *requires_attribution boolean
class DataLicensePolicy
DataLicensePolicy : id uriorcurie
DataLicensePolicy : *policy_name string
DataLicensePolicy : *default_license DataLicense
DataLicensePolicy : service_specific_licenses ServiceLicense
DataLicensePolicy : *openness_stance OpennessStanceEnum
DataLicensePolicy : open_data_principles string
DataLicensePolicy : policy_url uri
DataLicensePolicy : policy_effective_date date
DataLicensePolicy : advocacy_activities string
DataLicensePolicy : description string
class DigitalPlatform
DigitalPlatform : platform_id uriorcurie
DigitalPlatform : platform_name string
DigitalPlatform : platform_type DigitalPlatformType
DigitalPlatform : homepage_web_address uri
DigitalPlatform : collection_web_addresses uri
DigitalPlatform : inventory_web_addresses uri
DigitalPlatform : api_endpoint uri
DigitalPlatform : sparql_endpoint uri
DigitalPlatform : oai_pmh_endpoint uri
DigitalPlatform : programming_languages string
class DigitalPlatformType
DigitalPlatformType : platform_category string
DigitalPlatformType : digital_collections string
DigitalPlatformType : technology_stack string
DigitalPlatformType : data_standards string
DigitalPlatformType : user_services string
DigitalPlatformType : sustainability_model string
DigitalPlatformType : type_id uriorcurie
DigitalPlatformType : primary_type string
DigitalPlatformType : wikidata_entity string
DigitalPlatformType : type_label string
class EducationProviderType
EducationProviderType : education_level string
EducationProviderType : academic_programs string
EducationProviderType : collection_access string
EducationProviderType : teaching_collections string
EducationProviderType : student_services string
EducationProviderType : accreditation string
EducationProviderType : type_id uriorcurie
EducationProviderType : primary_type string
EducationProviderType : wikidata_entity string
EducationProviderType : type_label string
class EncompassingBody
EncompassingBody : id uriorcurie
EncompassingBody : organization_name string
EncompassingBody : organization_type EncompassingBodyTypeEnum
EncompassingBody : description string
EncompassingBody : legal_form string
EncompassingBody : founding_date date
EncompassingBody : dissolution_date date
EncompassingBody : member_custodians uriorcurie
EncompassingBody : governance_authority string
EncompassingBody : service_offerings string
<<abstract>> EncompassingBody
class FeatureCustodianType
FeatureCustodianType : feature_types string
FeatureCustodianType : site_portfolio string
FeatureCustodianType : visitor_services string
FeatureCustodianType : conservation_activities string
FeatureCustodianType : access_management string
FeatureCustodianType : stewardship_model string
FeatureCustodianType : type_id uriorcurie
FeatureCustodianType : primary_type string
FeatureCustodianType : wikidata_entity string
FeatureCustodianType : type_label string
class FeaturePlace
FeaturePlace : feature_type FeatureTypeEnum
FeaturePlace : feature_name string
FeaturePlace : feature_language string
FeaturePlace : feature_description string
FeaturePlace : feature_note string
FeaturePlace : classifies_place uriorcurie
FeaturePlace : was_derived_from CustodianObservation
FeaturePlace : was_generated_by ReconstructionActivity
FeaturePlace : valid_from datetime
FeaturePlace : valid_to datetime
class GalleryType
GalleryType : commercial_operation boolean
GalleryType : artist_representation string
GalleryType : exhibition_focus string
GalleryType : sales_activity boolean
GalleryType : exhibition_model string
GalleryType : commission_rate string
GalleryType : type_id uriorcurie
GalleryType : primary_type string
GalleryType : wikidata_entity string
GalleryType : type_label string
class GovernanceStructure
GovernanceStructure : id uriorcurie
GovernanceStructure : *structure_type string
GovernanceStructure : organizational_units string
GovernanceStructure : governance_body string
GovernanceStructure : description string
class HeritageSocietyType
HeritageSocietyType : society_focus string
HeritageSocietyType : membership_size string
HeritageSocietyType : publication_activities string
HeritageSocietyType : collecting_scope string
HeritageSocietyType : volunteer_programs string
HeritageSocietyType : community_engagement string
HeritageSocietyType : type_id uriorcurie
HeritageSocietyType : primary_type string
HeritageSocietyType : wikidata_entity string
HeritageSocietyType : type_label string
class HolySacredSiteType
HolySacredSiteType : religious_tradition string
HolySacredSiteType : collection_types string
HolySacredSiteType : religious_function string
HolySacredSiteType : access_policy string
HolySacredSiteType : stewardship_responsibility string
HolySacredSiteType : secularization_status string
HolySacredSiteType : type_id uriorcurie
HolySacredSiteType : primary_type string
HolySacredSiteType : wikidata_entity string
HolySacredSiteType : type_label string
class IdentifierFormat
IdentifierFormat : id uriorcurie
IdentifierFormat : *format_name string
IdentifierFormat : *pattern string
IdentifierFormat : *example string
IdentifierFormat : *is_canonical boolean
IdentifierFormat : *is_uri_format boolean
IdentifierFormat : transformation_to_canonical string
class IntangibleHeritageGroupType
IntangibleHeritageGroupType : ich_domain string
IntangibleHeritageGroupType : transmission_methods string
IntangibleHeritageGroupType : practitioner_community string
IntangibleHeritageGroupType : performance_repertoire string
IntangibleHeritageGroupType : cultural_context string
IntangibleHeritageGroupType : safeguarding_measures string
IntangibleHeritageGroupType : type_id uriorcurie
IntangibleHeritageGroupType : primary_type string
IntangibleHeritageGroupType : wikidata_entity string
IntangibleHeritageGroupType : type_label string
class Jurisdiction
Jurisdiction : jurisdiction_id string
Jurisdiction : *jurisdiction_type JurisdictionTypeEnum
Jurisdiction : country Country
Jurisdiction : subregion Subregion
Jurisdiction : settlement Settlement
Jurisdiction : supranational_code string
Jurisdiction : gleif_jurisdiction_code string
Jurisdiction : legal_system_type LegalSystemTypeEnum
Jurisdiction : description string
class LanguageCode
LanguageCode : language_code string
class LegalEntityType
LegalEntityType : id uriorcurie
LegalEntityType : *code string
LegalEntityType : *label string
LegalEntityType : *definition string
LegalEntityType : ontology_mapping uriorcurie
class LegalForm
LegalForm : id uriorcurie
LegalForm : *elf_code string
LegalForm : *country_code Country
LegalForm : *local_name string
LegalForm : transliterated_name string
LegalForm : abbreviation string
LegalForm : *legal_entity_type LegalEntityType
LegalForm : parent_form LegalForm
LegalForm : valid_from datetime
LegalForm : valid_to datetime
class LegalName
LegalName : id uriorcurie
LegalName : *full_name string
LegalName : name_without_type string
LegalName : alphabetical_name string
LegalName : display_name string
LegalName : language string
LegalName : script string
LegalName : temporal_validity string
class LegalResponsibilityCollection
LegalResponsibilityCollection : *responsible_legal_entity CustodianLegalStatus
LegalResponsibilityCollection : *legal_responsibility_basis string
LegalResponsibilityCollection : legal_responsibility_start_date date
LegalResponsibilityCollection : legal_responsibility_end_date date
LegalResponsibilityCollection : id uriorcurie
LegalResponsibilityCollection : collection_name string
LegalResponsibilityCollection : collection_description string
LegalResponsibilityCollection : collection_type string
LegalResponsibilityCollection : collection_scope string
LegalResponsibilityCollection : temporal_coverage TimeSpan
class LegalStatus
LegalStatus : id uriorcurie
LegalStatus : *status_code string
LegalStatus : *status_name string
LegalStatus : description string
LegalStatus : temporal_validity string
LegalStatus : jurisdiction Jurisdiction
class LibraryType
LibraryType : lending_policy string
LibraryType : catalog_system string
LibraryType : special_collections string
LibraryType : membership_required boolean
LibraryType : interlibrary_loan boolean
LibraryType : cataloging_standard string
LibraryType : type_id uriorcurie
LibraryType : primary_type string
LibraryType : wikidata_entity string
LibraryType : type_label string
class MixedCustodianType
MixedCustodianType : constituent_types string
MixedCustodianType : functional_integration string
MixedCustodianType : organizational_structure string
MixedCustodianType : service_portfolio string
MixedCustodianType : facility_design string
MixedCustodianType : user_communities string
MixedCustodianType : type_id uriorcurie
MixedCustodianType : primary_type string
MixedCustodianType : wikidata_entity string
MixedCustodianType : type_label string
class MuseumType
MuseumType : collection_focus string
MuseumType : exhibition_program string
MuseumType : visitor_facilities string
MuseumType : cataloging_standard string
MuseumType : conservation_lab boolean
MuseumType : research_department boolean
MuseumType : type_id uriorcurie
MuseumType : primary_type string
MuseumType : wikidata_entity string
MuseumType : type_label string
class NetworkOrganisation
NetworkOrganisation : id uriorcurie
NetworkOrganisation : organization_name string
NetworkOrganisation : organization_type EncompassingBodyTypeEnum
NetworkOrganisation : description string
NetworkOrganisation : legal_form string
NetworkOrganisation : founding_date date
NetworkOrganisation : dissolution_date date
NetworkOrganisation : member_custodians uriorcurie
NetworkOrganisation : governance_authority string
NetworkOrganisation : service_offerings string
class NonProfitType
NonProfitType : organizational_mission string
NonProfitType : program_activities string
NonProfitType : geographic_scope string
NonProfitType : beneficiary_groups string
NonProfitType : partnership_model string
NonProfitType : impact_measurement string
NonProfitType : type_id uriorcurie
NonProfitType : primary_type string
NonProfitType : wikidata_entity string
NonProfitType : type_label string
class OfficialInstitutionType
OfficialInstitutionType : administrative_level string
OfficialInstitutionType : heritage_mandate string
OfficialInstitutionType : regulatory_authority boolean
OfficialInstitutionType : funding_programs string
OfficialInstitutionType : oversight_jurisdiction string
OfficialInstitutionType : policy_authority string
OfficialInstitutionType : type_id uriorcurie
OfficialInstitutionType : primary_type string
OfficialInstitutionType : wikidata_entity string
OfficialInstitutionType : type_label string
class OrganizationBranch
OrganizationBranch : branch_id uriorcurie
OrganizationBranch : branch_name string
OrganizationBranch : branch_type OrganizationBranchTypeEnum
OrganizationBranch : branch_description string
OrganizationBranch : located_at AuxiliaryPlace
OrganizationBranch : has_operational_unit OrganizationalStructure
OrganizationBranch : is_branch_of uriorcurie
OrganizationBranch : has_sub_branch OrganizationBranch
OrganizationBranch : branch_head string
OrganizationBranch : staff_count integer
class OrganizationalChangeEvent
OrganizationalChangeEvent : id uriorcurie
OrganizationalChangeEvent : *event_type OrganizationalChangeEventTypeEnum
OrganizationalChangeEvent : *event_date date
OrganizationalChangeEvent : *event_description string
OrganizationalChangeEvent : affected_units OrganizationalStructure
OrganizationalChangeEvent : resulting_units OrganizationalStructure
OrganizationalChangeEvent : parent_custodian CustodianLegalStatus
OrganizationalChangeEvent : change_rationale string
OrganizationalChangeEvent : staff_impact string
OrganizationalChangeEvent : documentation_source uri
class OrganizationalStructure
OrganizationalStructure : id uriorcurie
OrganizationalStructure : *unit_name string
OrganizationalStructure : unit_type OrganizationalUnitTypeEnum
OrganizationalStructure : parent_unit OrganizationalStructure
OrganizationalStructure : staff_count integer
OrganizationalStructure : staff_members PersonObservation
OrganizationalStructure : managed_collections CustodianCollection
OrganizationalStructure : located_at AuxiliaryPlace
OrganizationalStructure : contact_point string
OrganizationalStructure : valid_from datetime
class PersonObservation
PersonObservation : id uriorcurie
PersonObservation : person_name string
PersonObservation : staff_role StaffRoleTypeEnum
PersonObservation : role_title string
PersonObservation : unit_affiliation OrganizationalStructure
PersonObservation : role_start_date date
PersonObservation : role_end_date date
PersonObservation : observation_source string
PersonObservation : affected_by_event OrganizationalChangeEvent
PersonObservation : contact_email string
class PersonalCollectionType
PersonalCollectionType : collection_focus string
PersonalCollectionType : collection_size string
PersonalCollectionType : acquisition_history string
PersonalCollectionType : access_restrictions string
PersonalCollectionType : preservation_approach string
PersonalCollectionType : legacy_planning string
PersonalCollectionType : type_id uriorcurie
PersonalCollectionType : primary_type string
PersonalCollectionType : wikidata_entity string
PersonalCollectionType : type_label string
class Project
Project : project_id uriorcurie
Project : project_name string
Project : project_short_name string
Project : project_description string
Project : project_status ProjectStatusEnum
Project : project_url uri
Project : start_date date
Project : end_date date
Project : funding_source string
Project : funding_amount string
class ReconstructionActivity
ReconstructionActivity : id uriorcurie
ReconstructionActivity : activity_type ReconstructionActivityTypeEnum
ReconstructionActivity : method string
ReconstructionActivity : responsible_agent ReconstructionAgent
ReconstructionActivity : temporal_extent TimeSpan
ReconstructionActivity : *used CustodianObservation
ReconstructionActivity : confidence_score float
ReconstructionActivity : justification string
class ReconstructionAgent
ReconstructionAgent : id uriorcurie
ReconstructionAgent : *agent_name string
ReconstructionAgent : agent_type AgentTypeEnum
ReconstructionAgent : affiliation string
ReconstructionAgent : contact string
class RegistrationAuthority
RegistrationAuthority : id uriorcurie
RegistrationAuthority : name string
RegistrationAuthority : name_local string
RegistrationAuthority : abbreviation string
RegistrationAuthority : country Country
RegistrationAuthority : *registry_url uri
RegistrationAuthority : api_url uri
RegistrationAuthority : sparql_endpoint uri
RegistrationAuthority : data_license string
RegistrationAuthority : *governance_type RegistrationAuthorityGovernanceEnum
class RegistrationNumber
RegistrationNumber : id uriorcurie
RegistrationNumber : *number string
RegistrationNumber : *type string
RegistrationNumber : trade_register TradeRegister
RegistrationNumber : temporal_validity string
class ResearchOrganizationType
ResearchOrganizationType : research_focus string
ResearchOrganizationType : publication_output boolean
ResearchOrganizationType : data_repository uri
ResearchOrganizationType : research_infrastructure string
ResearchOrganizationType : academic_affiliation uri
ResearchOrganizationType : research_projects string
ResearchOrganizationType : type_id uriorcurie
ResearchOrganizationType : primary_type string
ResearchOrganizationType : wikidata_entity string
ResearchOrganizationType : type_label string
class ServiceLicense
ServiceLicense : *service_name string
ServiceLicense : service_url uri
ServiceLicense : license string
ServiceLicense : license_notes string
class Settlement
Settlement : geonames_id integer
Settlement : *settlement_name string
Settlement : country Country
Settlement : subregion Subregion
Settlement : latitude float
Settlement : longitude float
class SocialMovement
SocialMovement : id uriorcurie
SocialMovement : organization_name string
SocialMovement : organization_type EncompassingBodyTypeEnum
SocialMovement : description string
SocialMovement : legal_form string
SocialMovement : founding_date date
SocialMovement : dissolution_date date
SocialMovement : member_custodians uriorcurie
SocialMovement : governance_authority string
SocialMovement : service_offerings string
class SourceDocument
SourceDocument : source_uri uriorcurie
SourceDocument : source_type SourceDocumentTypeEnum
SourceDocument : source_date date
SourceDocument : source_creator string
class Standard
Standard : id uriorcurie
Standard : name string
Standard : abbreviation string
Standard : iso_standard_number string
Standard : *defined_by StandardsOrganization
Standard : registration_authority RegistrationAuthority
Standard : geographic_scope string
Standard : *scope_type StandardScopeTypeEnum
Standard : *identifier_domain IdentifierDomainEnum
Standard : formats IdentifierFormat
class StandardsOrganization
StandardsOrganization : id uriorcurie
StandardsOrganization : name string
StandardsOrganization : abbreviation string
StandardsOrganization : organization_type EncompassingBodyTypeEnum
StandardsOrganization : member_countries string
StandardsOrganization : founded_year integer
StandardsOrganization : headquarters_country string
StandardsOrganization : website uri
StandardsOrganization : description string
StandardsOrganization : standards_maintained string
class Subregion
Subregion : iso_3166_2_code string
Subregion : country Country
Subregion : subdivision_name string
class TasteScentHeritageType
TasteScentHeritageType : heritage_practice string
TasteScentHeritageType : sensory_heritage_domain string
TasteScentHeritageType : preservation_methods string
TasteScentHeritageType : traditional_products string
TasteScentHeritageType : knowledge_transmission string
TasteScentHeritageType : community_significance string
TasteScentHeritageType : type_id uriorcurie
TasteScentHeritageType : primary_type string
TasteScentHeritageType : wikidata_entity string
TasteScentHeritageType : type_label string
class TimeSpan
TimeSpan : begin_of_the_begin datetime
TimeSpan : end_of_the_begin datetime
TimeSpan : begin_of_the_end datetime
TimeSpan : end_of_the_end datetime
class TradeRegister
TradeRegister : register_id string
TradeRegister : *register_name string
TradeRegister : register_name_local string
TradeRegister : register_abbreviation string
TradeRegister : *register_type RegisterTypeEnum
TradeRegister : jurisdiction Jurisdiction
TradeRegister : *maintained_by RegistrationAuthority
TradeRegister : gleif_ra_code string
TradeRegister : website uri
TradeRegister : api_endpoint uri
class UmbrellaOrganisation
UmbrellaOrganisation : id uriorcurie
UmbrellaOrganisation : organization_name string
UmbrellaOrganisation : organization_type EncompassingBodyTypeEnum
UmbrellaOrganisation : description string
UmbrellaOrganisation : legal_form string
UmbrellaOrganisation : founding_date date
UmbrellaOrganisation : dissolution_date date
UmbrellaOrganisation : member_custodians uriorcurie
UmbrellaOrganisation : governance_authority string
UmbrellaOrganisation : service_offerings string
class UnspecifiedType
UnspecifiedType : classification_status string
UnspecifiedType : evidence_gaps string
UnspecifiedType : type_hypotheses string
UnspecifiedType : research_attempts string
UnspecifiedType : review_status string
UnspecifiedType : data_quality_flags string
UnspecifiedType : type_id uriorcurie
UnspecifiedType : primary_type string
UnspecifiedType : wikidata_entity string
UnspecifiedType : type_label string
AllocationAgency --> "1..*" Subregion : subregion_scope
AllocationAgency --> "1..*" Standard : allocates_for
AllocationAgency --> "1" RegistrationAuthority : parent_registration_authority
CustodianType <|-- ArchiveOrganizationType : inherits
ArchiveOrganizationType --> "1" CustodianType : broader_type
ArchiveOrganizationType --> "1" CustodianType : narrower_types
ArchiveOrganizationType --> "1" CustodianType : related_types
AuxiliaryDigitalPlatform --> "1" DigitalPlatform : is_auxiliary_of
AuxiliaryDigitalPlatform --> "1" TimeSpan : temporal_extent
AuxiliaryDigitalPlatform --> "1..*" CollectionManagementSystem : powered_by_cms
AuxiliaryDigitalPlatform --> "1" CustodianObservation : was_derived_from
AuxiliaryDigitalPlatform --> "1" ReconstructionActivity : was_generated_by
AuxiliaryDigitalPlatform --> "1" Custodian : refers_to_custodian
AuxiliaryPlace --> "1" Country : country
AuxiliaryPlace --> "1" Subregion : subregion
AuxiliaryPlace --> "1" Settlement : settlement
AuxiliaryPlace --> "1" FeaturePlace : has_feature_type
AuxiliaryPlace --> "1" OrganizationBranch : hosts_branch
AuxiliaryPlace --> "1" DigitalPlatform : is_auxiliary_of
AuxiliaryPlace --> "1" TimeSpan : temporal_extent
AuxiliaryPlace --> "1" CustodianObservation : was_derived_from
AuxiliaryPlace --> "1" ReconstructionActivity : was_generated_by
AuxiliaryPlace --> "1" Custodian : refers_to_custodian
CustodianType <|-- BioCustodianType : inherits
BioCustodianType --> "1" CustodianType : broader_type
BioCustodianType --> "1" CustodianType : narrower_types
BioCustodianType --> "1" CustodianType : related_types
CollectionManagementSystem --> "1" DigitalPlatform : powers_platform
CollectionManagementSystem --> "1" CustodianCollection : manages_collection
CollectionManagementSystem --> "1" Custodian : used_by_custodian
CollectionManagementSystem --> "1" TimeSpan : temporal_extent
CollectionManagementSystem --> "1" CustodianObservation : was_derived_from
CollectionManagementSystem --> "1" ReconstructionActivity : was_generated_by
CollectionManagementSystem --> "1" Custodian : refers_to_custodian
CustodianType <|-- CommercialOrganizationType : inherits
CommercialOrganizationType --> "1" CustodianType : broader_type
CommercialOrganizationType --> "1" CustodianType : narrower_types
CommercialOrganizationType --> "1" CustodianType : related_types
EncompassingBody <|-- Consortium : inherits
Consortium --> "1" DataLicensePolicy : data_license_policy
Consortium --> "1..*" Project : projects
ContributingAgency --> "1" Country : country
ContributingAgency --> "1..*" Standard : contributes_to
ContributingAgency --> "1" AllocationAgency : also_allocation_agency
ContributingAgency --> "1..*" StandardsOrganization : member_of
EncompassingBody <|-- Cooperative : inherits
Cooperative --> "1" DataLicensePolicy : data_license_policy
Cooperative --> "1..*" Project : projects
Custodian --> "1" DataLicensePolicy : data_license_policy
Custodian --> "1..*" Project : participated_in_projects
CustodianAppellation --> "1" CustodianName : variant_of_name
CustodianCollection --> "1" TimeSpan : temporal_coverage
CustodianCollection --> "1..*" CollectionManagementSystem : managed_by_cms
CustodianCollection --> "1" OrganizationalStructure : managing_unit
CustodianCollection --> "1" Custodian : refers_to_custodian
CustodianCollection --> "1" CustodianObservation : was_derived_from
CustodianIdentifier --> "1" Custodian : identifies_custodian
CustodianIdentifier --> "1" Standard : defined_by_standard
CustodianIdentifier --> "1" AllocationAgency : allocated_by
CustodianIdentifier --> "1" IdentifierFormat : identifier_format_used
CustodianIdentifier --> "1" CustodianName : also_identifies_name
CustodianLegalStatus --> "1" Custodian : refers_to_custodian
CustodianLegalStatus --> "1" LegalEntityType : legal_entity_type
CustodianLegalStatus --> "1" LegalName : legal_name
CustodianLegalStatus --> "1..*" RegistrationNumber : registration_numbers
CustodianLegalStatus --> "1" RegistrationAuthority : registration_authority
CustodianLegalStatus --> "1" TradeRegister : primary_register
CustodianLegalStatus --> "1" Jurisdiction : legal_jurisdiction
CustodianLegalStatus --> "1" TimeSpan : temporal_extent
CustodianLegalStatus --> "1" CustodianLegalStatus : parent_custodian
CustodianLegalStatus --> "1" GovernanceStructure : governance_structure
CustodianLegalStatus --> "1" CustodianObservation : was_derived_from
CustodianLegalStatus --> "1" ReconstructionActivity : was_generated_by
CustodianLegalStatus --> "1" CustodianLegalStatus : was_revision_of
CustodianLegalStatus --> "1..*" LegalResponsibilityCollection : collections_under_responsibility
CustodianName --> "1..*" CustodianAppellation : alternative_names
CustodianName --> "1" TimeSpan : name_validity_period
CustodianName --> "1" CustodianName : supersedes
CustodianName --> "1" CustodianName : superseded_by
CustodianName --> "1" CustodianObservation : was_derived_from
CustodianName --> "1" ReconstructionActivity : was_generated_by
CustodianName --> "1" Custodian : refers_to_custodian
CustodianObservation --> "1" CustodianLegalStatus : derived_from_entity
CustodianPlace --> "1" Country : country
CustodianPlace --> "1" Subregion : subregion
CustodianPlace --> "1" Settlement : settlement
CustodianPlace --> "1" FeaturePlace : has_feature_type
CustodianPlace --> "1..*" AuxiliaryPlace : auxiliary_places
CustodianPlace --> "1" CustodianObservation : was_derived_from
CustodianPlace --> "1" ReconstructionActivity : was_generated_by
CustodianPlace --> "1" Custodian : refers_to_custodian
CustodianType --> "1" CustodianType : broader_type
CustodianType --> "1" CustodianType : narrower_types
CustodianType --> "1" CustodianType : related_types
DataLicense --> "1" Jurisdiction : jurisdiction
DataLicensePolicy --> "1" DataLicense : default_license
DataLicensePolicy --> "1..*" ServiceLicense : service_specific_licenses
DigitalPlatform --> "1" DigitalPlatformType : platform_type
DigitalPlatform --> "1..*" CollectionManagementSystem : powered_by_cms
DigitalPlatform --> "1..*" AuxiliaryDigitalPlatform : auxiliary_platforms
DigitalPlatform --> "1" TimeSpan : temporal_extent
DigitalPlatform --> "1" CustodianObservation : was_derived_from
DigitalPlatform --> "1" ReconstructionActivity : was_generated_by
DigitalPlatform --> "1" Custodian : refers_to_custodian
CustodianType <|-- DigitalPlatformType : inherits
DigitalPlatformType --> "1" CustodianType : broader_type
DigitalPlatformType --> "1" CustodianType : narrower_types
DigitalPlatformType --> "1" CustodianType : related_types
CustodianType <|-- EducationProviderType : inherits
EducationProviderType --> "1" CustodianType : broader_type
EducationProviderType --> "1" CustodianType : narrower_types
EducationProviderType --> "1" CustodianType : related_types
EncompassingBody --> "1" DataLicensePolicy : data_license_policy
EncompassingBody --> "1..*" Project : projects
CustodianType <|-- FeatureCustodianType : inherits
FeatureCustodianType --> "1" CustodianType : broader_type
FeatureCustodianType --> "1" CustodianType : narrower_types
FeatureCustodianType --> "1" CustodianType : related_types
FeaturePlace --> "1" CustodianObservation : was_derived_from
FeaturePlace --> "1" ReconstructionActivity : was_generated_by
CustodianType <|-- GalleryType : inherits
GalleryType --> "1" CustodianType : broader_type
GalleryType --> "1" CustodianType : narrower_types
GalleryType --> "1" CustodianType : related_types
CustodianType <|-- HeritageSocietyType : inherits
HeritageSocietyType --> "1" CustodianType : broader_type
HeritageSocietyType --> "1" CustodianType : narrower_types
HeritageSocietyType --> "1" CustodianType : related_types
CustodianType <|-- HolySacredSiteType : inherits
HolySacredSiteType --> "1" CustodianType : broader_type
HolySacredSiteType --> "1" CustodianType : narrower_types
HolySacredSiteType --> "1" CustodianType : related_types
CustodianType <|-- IntangibleHeritageGroupType : inherits
IntangibleHeritageGroupType --> "1" CustodianType : broader_type
IntangibleHeritageGroupType --> "1" CustodianType : narrower_types
IntangibleHeritageGroupType --> "1" CustodianType : related_types
Jurisdiction --> "1" Country : country
Jurisdiction --> "1" Subregion : subregion
Jurisdiction --> "1" Settlement : settlement
LegalForm --> "1" Country : country_code
LegalForm --> "1" LegalEntityType : legal_entity_type
LegalForm --> "1" LegalForm : parent_form
CustodianCollection <|-- LegalResponsibilityCollection : inherits
LegalResponsibilityCollection --> "1" CustodianLegalStatus : responsible_legal_entity
LegalResponsibilityCollection --> "1" TimeSpan : temporal_coverage
LegalResponsibilityCollection --> "1..*" CollectionManagementSystem : managed_by_cms
LegalResponsibilityCollection --> "1" OrganizationalStructure : managing_unit
LegalResponsibilityCollection --> "1" Custodian : refers_to_custodian
LegalResponsibilityCollection --> "1" CustodianObservation : was_derived_from
LegalStatus --> "1" Jurisdiction : jurisdiction
CustodianType <|-- LibraryType : inherits
LibraryType --> "1" CustodianType : broader_type
LibraryType --> "1" CustodianType : narrower_types
LibraryType --> "1" CustodianType : related_types
CustodianType <|-- MixedCustodianType : inherits
MixedCustodianType --> "1" CustodianType : broader_type
MixedCustodianType --> "1" CustodianType : narrower_types
MixedCustodianType --> "1" CustodianType : related_types
CustodianType <|-- MuseumType : inherits
MuseumType --> "1" CustodianType : broader_type
MuseumType --> "1" CustodianType : narrower_types
MuseumType --> "1" CustodianType : related_types
EncompassingBody <|-- NetworkOrganisation : inherits
NetworkOrganisation --> "1" DataLicensePolicy : data_license_policy
NetworkOrganisation --> "1..*" Project : projects
CustodianType <|-- NonProfitType : inherits
NonProfitType --> "1" CustodianType : broader_type
NonProfitType --> "1" CustodianType : narrower_types
NonProfitType --> "1" CustodianType : related_types
CustodianType <|-- OfficialInstitutionType : inherits
OfficialInstitutionType --> "1" CustodianType : broader_type
OfficialInstitutionType --> "1" CustodianType : narrower_types
OfficialInstitutionType --> "1" CustodianType : related_types
OrganizationBranch --> "1" AuxiliaryPlace : located_at
OrganizationBranch --> "1" OrganizationalStructure : has_operational_unit
OrganizationBranch --> "1" OrganizationBranch : has_sub_branch
OrganizationBranch --> "1" TimeSpan : temporal_extent
OrganizationBranch --> "1" CustodianObservation : was_derived_from
OrganizationBranch --> "1" ReconstructionActivity : was_generated_by
OrganizationBranch --> "1" Custodian : refers_to_custodian
OrganizationalChangeEvent --> "1..*" OrganizationalStructure : affected_units
OrganizationalChangeEvent --> "1..*" OrganizationalStructure : resulting_units
OrganizationalChangeEvent --> "1" CustodianLegalStatus : parent_custodian
OrganizationalStructure --> "1" OrganizationalStructure : parent_unit
OrganizationalStructure --> "1..*" PersonObservation : staff_members
OrganizationalStructure --> "1..*" CustodianCollection : managed_collections
OrganizationalStructure --> "1" AuxiliaryPlace : located_at
OrganizationalStructure --> "1" Custodian : refers_to_custodian
PersonObservation --> "1" OrganizationalStructure : unit_affiliation
PersonObservation --> "1" OrganizationalChangeEvent : affected_by_event
CustodianType <|-- PersonalCollectionType : inherits
PersonalCollectionType --> "1" CustodianType : broader_type
PersonalCollectionType --> "1" CustodianType : narrower_types
PersonalCollectionType --> "1" CustodianType : related_types
ReconstructionActivity --> "1" ReconstructionAgent : responsible_agent
ReconstructionActivity --> "1" TimeSpan : temporal_extent
ReconstructionActivity --> "1..*" CustodianObservation : used
RegistrationAuthority --> "1" Country : country
RegistrationAuthority --> "1" RegistrationAuthority : predecessor
RegistrationNumber --> "1" TradeRegister : trade_register
CustodianType <|-- ResearchOrganizationType : inherits
ResearchOrganizationType --> "1" CustodianType : broader_type
ResearchOrganizationType --> "1" CustodianType : narrower_types
ResearchOrganizationType --> "1" CustodianType : related_types
Settlement --> "1" Country : country
Settlement --> "1" Subregion : subregion
EncompassingBody <|-- SocialMovement : inherits
SocialMovement --> "1" DataLicensePolicy : data_license_policy
SocialMovement --> "1..*" Project : projects
Standard --> "1" StandardsOrganization : defined_by
Standard --> "1" RegistrationAuthority : registration_authority
Standard --> "1..*" IdentifierFormat : formats
Standard --> "1" IdentifierFormat : canonical_format
Standard --> "1..*" ContributingAgency : contributing_agencies
Standard --> "1" StandardsOrganization : governance_council
StandardsOrganization --> "1" Country : country
Subregion --> "1" Country : country
CustodianType <|-- TasteScentHeritageType : inherits
TasteScentHeritageType --> "1" CustodianType : broader_type
TasteScentHeritageType --> "1" CustodianType : narrower_types
TasteScentHeritageType --> "1" CustodianType : related_types
TradeRegister --> "1" Jurisdiction : jurisdiction
TradeRegister --> "1" RegistrationAuthority : maintained_by
EncompassingBody <|-- UmbrellaOrganisation : inherits
UmbrellaOrganisation --> "1" DataLicensePolicy : data_license_policy
UmbrellaOrganisation --> "1..*" Project : projects
CustodianType <|-- UnspecifiedType : inherits
UnspecifiedType --> "1" CustodianType : broader_type
UnspecifiedType --> "1" CustodianType : narrower_types
UnspecifiedType --> "1" CustodianType : related_types

View file

@ -4,6 +4,8 @@ Export NDE Enriched Institutions to JSON for Frontend Map
Reads the enriched YAML files and produces a lightweight JSON file Reads the enriched YAML files and produces a lightweight JSON file
suitable for the React/Leaflet map component. suitable for the React/Leaflet map component.
Now includes Google Maps enrichment data (ratings, photos, reviews, opening hours).
""" """
import json import json
@ -73,10 +75,26 @@ def extract_institution_data(entry_data: dict) -> dict | None:
# Get original entry data # Get original entry data
original = entry_data.get('original_entry', {}) original = entry_data.get('original_entry', {})
enrichment = entry_data.get('wikidata_enrichment', {}) enrichment = entry_data.get('wikidata_enrichment', {})
google_maps = entry_data.get('google_maps_enrichment', {})
exa_data = entry_data.get('exa_enrichment', {})
# Skip if no coordinates # Get coordinates - prefer Google Maps (more precise), fall back to Wikidata
coords = enrichment.get('wikidata_coordinates', {}) lat, lon = None, None
if not coords or not coords.get('latitude') or not coords.get('longitude'):
# Try Google Maps coordinates first
google_coords = google_maps.get('coordinates', {})
if google_coords.get('latitude') and google_coords.get('longitude'):
lat = google_coords['latitude']
lon = google_coords['longitude']
else:
# Fall back to Wikidata coordinates
wd_coords = enrichment.get('wikidata_coordinates', {})
if wd_coords.get('latitude') and wd_coords.get('longitude'):
lat = wd_coords['latitude']
lon = wd_coords['longitude']
# Skip if no coordinates from any source
if not lat or not lon:
return None return None
# Get institution type (first one if list) # Get institution type (first one if list)
@ -90,25 +108,44 @@ def extract_institution_data(entry_data: dict) -> dict | None:
'Unknown Institution' 'Unknown Institution'
) )
# Get city # Get city - prefer Google Maps short address
city = original.get('plaatsnaam_bezoekadres', '') city = original.get('plaatsnaam_bezoekadres', '')
# Get description - prefer Dutch, fall back to English # Get description - prefer Dutch, fall back to English, then Exa, then Google editorial
description = ( # Handle various types safely
enrichment.get('wikidata_description_nl') or description = ''
enrichment.get('wikidata_description_en') or if enrichment.get('wikidata_description_nl'):
description = enrichment['wikidata_description_nl']
elif enrichment.get('wikidata_description_en'):
description = enrichment['wikidata_description_en']
elif exa_data.get('description'):
description = exa_data['description']
else:
editorial = google_maps.get('editorial_summary')
if editorial and isinstance(editorial, dict):
description = editorial.get('text', '')
elif isinstance(editorial, str):
description = editorial
# Ensure description is a string
if not isinstance(description, str):
description = ''
# Get website - prefer Google Maps (more current), fall back to Wikidata
website = (
google_maps.get('website') or
enrichment.get('wikidata_official_website') or
original.get('webadres_organisatie') or
'' ''
) )
# Get website
website = enrichment.get('wikidata_official_website', '')
# Get Wikidata ID # Get Wikidata ID
wikidata_id = enrichment.get('wikidata_entity_id', '') wikidata_id = enrichment.get('wikidata_entity_id', '')
return { # Build result with base data
'lat': coords['latitude'], result = {
'lon': coords['longitude'], 'lat': lat,
'lon': lon,
'name': name, 'name': name,
'city': city, 'city': city,
'type': inst_type, 'type': inst_type,
@ -118,6 +155,73 @@ def extract_institution_data(entry_data: dict) -> dict | None:
'wikidata_id': wikidata_id, 'wikidata_id': wikidata_id,
'description': description[:200] + '...' if len(description) > 200 else description, 'description': description[:200] + '...' if len(description) > 200 else description,
} }
# Add Google Maps enrichment data if available
if google_maps:
# Rating and reviews count
if google_maps.get('rating'):
result['rating'] = google_maps['rating']
result['total_ratings'] = google_maps.get('total_ratings', 0)
# Phone number
if google_maps.get('phone_international'):
result['phone'] = google_maps['phone_international']
elif google_maps.get('phone_local'):
result['phone'] = google_maps['phone_local']
# Formatted address (more complete than city)
if google_maps.get('formatted_address'):
result['address'] = google_maps['formatted_address']
# Opening hours (weekday text is human readable)
opening_hours = google_maps.get('opening_hours', {})
if opening_hours.get('weekday_text'):
result['opening_hours'] = opening_hours['weekday_text']
result['open_now'] = opening_hours.get('open_now', None)
# Reviews (first 3 for popups)
reviews = google_maps.get('reviews', [])
if reviews:
result['reviews'] = [
{
'author': r.get('author_name', 'Anonymous'),
'rating': r.get('rating', 0),
'text': r.get('text', '')[:300] + '...' if len(r.get('text', '')) > 300 else r.get('text', ''),
'time': r.get('relative_time_description', '')
}
for r in reviews[:3] # Only first 3 for popup
]
# Photos (first 5) - check both possible keys
photos = google_maps.get('photos', [])
photo_urls = google_maps.get('photo_urls', [])
if photo_urls:
# Direct URL format
result['photos'] = [{'url': url, 'attribution': ''} for url in photo_urls[:5]]
elif photos:
# Object format with attribution
result['photos'] = [
{
'url': p.get('url', ''),
'attribution': p.get('attributions', [''])[0] if p.get('attributions') else ''
}
for p in photos[:5]
]
# Street View URL
if google_maps.get('street_view_url'):
result['street_view_url'] = google_maps['street_view_url']
# Business status
if google_maps.get('business_status'):
result['business_status'] = google_maps['business_status']
# Google Place ID for linking
if google_maps.get('place_id'):
result['google_place_id'] = google_maps['place_id']
return result
def main(): def main():
@ -178,6 +282,20 @@ def main():
print(f"\n📊 Distribution by type:") print(f"\n📊 Distribution by type:")
for t, count in sorted(type_counts.items(), key=lambda x: -x[1]): for t, count in sorted(type_counts.items(), key=lambda x: -x[1]):
print(f" {TYPE_NAMES.get(t, t)}: {count}") print(f" {TYPE_NAMES.get(t, t)}: {count}")
# Print Google Maps enrichment stats
with_rating = sum(1 for i in institutions if i.get('rating'))
with_photos = sum(1 for i in institutions if i.get('photos'))
with_reviews = sum(1 for i in institutions if i.get('reviews'))
with_hours = sum(1 for i in institutions if i.get('opening_hours'))
with_street_view = sum(1 for i in institutions if i.get('street_view_url'))
print(f"\n🗺️ Google Maps enrichment coverage:")
print(f" With ratings: {with_rating} ({with_rating*100/len(institutions):.1f}%)")
print(f" With photos: {with_photos} ({with_photos*100/len(institutions):.1f}%)")
print(f" With reviews: {with_reviews} ({with_reviews*100/len(institutions):.1f}%)")
print(f" With opening hours: {with_hours} ({with_hours*100/len(institutions):.1f}%)")
print(f" With Street View: {with_street_view} ({with_street_view*100/len(institutions):.1f}%)")
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -125,6 +125,15 @@ def process_enriched_files(enriched_dir: Path) -> dict:
'has_image': 0, 'has_image': 0,
'has_website': 0, 'has_website': 0,
}, },
'google_maps': {
'has_rating': 0,
'has_photos': 0,
'has_reviews': 0,
'has_opening_hours': 0,
'has_street_view': 0,
'status_success': 0,
'status_not_found': 0,
},
'founding_decades': Counter(), 'founding_decades': Counter(),
} }
@ -199,6 +208,29 @@ def process_enriched_files(enriched_dir: Path) -> dict:
label = inst.get('label_en', inst.get('label_nl', 'Unknown')) label = inst.get('label_en', inst.get('label_nl', 'Unknown'))
stats['wikidata_types'][label] += 1 stats['wikidata_types'][label] += 1
# Google Maps enrichment
google = entry.get('google_maps_enrichment', {})
if google:
# Check API status or presence of place_id
api_status = google.get('api_status', '')
if api_status == 'OK' or google.get('place_id'):
stats['google_maps']['status_success'] += 1
elif api_status == 'NOT_FOUND':
stats['google_maps']['status_not_found'] += 1
if google.get('rating'):
stats['google_maps']['has_rating'] += 1
# Check both 'photos' and 'photo_urls' fields
if google.get('photos') or google.get('photo_urls'):
stats['google_maps']['has_photos'] += 1
if google.get('reviews'):
stats['google_maps']['has_reviews'] += 1
if google.get('opening_hours'):
stats['google_maps']['has_opening_hours'] += 1
# Check for coordinates (lat/lon or coordinates dict)
if google.get('coordinates') or google.get('latitude'):
stats['google_maps']['has_street_view'] += 1 # Approximate: if we have coords, Street View is available
# Founding date / inception # Founding date / inception
inception = enrichment.get('wikidata_inception', {}) inception = enrichment.get('wikidata_inception', {})
if inception and inception.get('time'): if inception and inception.get('time'):
@ -319,6 +351,28 @@ def format_for_d3(stats: dict) -> dict:
'types': type_breakdown, 'types': type_breakdown,
}) })
# Google Maps coverage for bar chart
google_maps_coverage = []
gm_labels = {
'has_rating': 'Rating',
'has_photos': 'Photos',
'has_reviews': 'Reviews',
'has_opening_hours': 'Opening Hours',
'has_street_view': 'Street View',
}
for key in ['has_rating', 'has_photos', 'has_reviews', 'has_opening_hours', 'has_street_view']:
count = stats['google_maps'].get(key, 0)
google_maps_coverage.append({
'feature': gm_labels.get(key, key),
'count': count,
'percentage': round(count / total * 100, 1) if total > 0 else 0,
})
google_maps_coverage.sort(key=lambda x: -x['count'])
# Google Maps status for summary
gm_success = stats['google_maps'].get('status_success', 0)
gm_not_found = stats['google_maps'].get('status_not_found', 0)
return { return {
'generated_at': datetime.now(timezone.utc).isoformat(), 'generated_at': datetime.now(timezone.utc).isoformat(),
'total_entries': total, 'total_entries': total,
@ -326,6 +380,8 @@ def format_for_d3(stats: dict) -> dict:
'total_institutions': total, 'total_institutions': total,
'with_coordinates': stats['identifiers']['has_coordinates'], 'with_coordinates': stats['identifiers']['has_coordinates'],
'with_wikidata': stats['enrichment_status'].get('success', 0), 'with_wikidata': stats['enrichment_status'].get('success', 0),
'with_google_maps': gm_success,
'google_maps_not_found': gm_not_found,
'unique_cities': len(stats['cities']), 'unique_cities': len(stats['cities']),
'unique_provinces': len(stats['provinces']), 'unique_provinces': len(stats['provinces']),
'institution_types': len(stats['institution_types']), 'institution_types': len(stats['institution_types']),
@ -337,6 +393,7 @@ def format_for_d3(stats: dict) -> dict:
'wikidata_types': wikidata_types, 'wikidata_types': wikidata_types,
'enrichment_status': enrichment_status, 'enrichment_status': enrichment_status,
'identifier_coverage': identifier_coverage, 'identifier_coverage': identifier_coverage,
'google_maps_coverage': google_maps_coverage,
'founding_timeline': founding_timeline, 'founding_timeline': founding_timeline,
'provinces': province_data, 'provinces': province_data,
} }

View file

@ -12,6 +12,12 @@ import sys
from pathlib import Path from pathlib import Path
from linkml_runtime.utils.schemaview import SchemaView from linkml_runtime.utils.schemaview import SchemaView
# Classes to exclude from diagrams (technical artifacts with no semantic significance)
EXCLUDED_CLASSES = {
"Container", # LinkML tree_root for validation only, not part of ontology
}
def generate_mermaid_from_schemaview(sv: SchemaView) -> str: def generate_mermaid_from_schemaview(sv: SchemaView) -> str:
""" """
Generate Mermaid ER diagram from SchemaView. Generate Mermaid ER diagram from SchemaView.
@ -22,8 +28,11 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str:
lines = ["```mermaid"] lines = ["```mermaid"]
lines.append("erDiagram") lines.append("erDiagram")
# Get all classes except excluded ones
all_classes = [c for c in sv.all_classes() if c not in EXCLUDED_CLASSES]
# Generate entities # Generate entities
for class_name in sv.all_classes(): for class_name in all_classes:
cls = sv.get_class(class_name) cls = sv.get_class(class_name)
lines.append(f"{class_name} {{") lines.append(f"{class_name} {{")
@ -41,7 +50,8 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str:
slot_range = slot.range if slot.range else "string" slot_range = slot.range if slot.range else "string"
# Skip complex types in attribute list (will be shown as relationships) # Skip complex types in attribute list (will be shown as relationships)
if slot_range in sv.all_classes(): # Also skip excluded classes
if slot_range in all_classes or slot_range in EXCLUDED_CLASSES:
continue continue
# Format: type attribute_name # Format: type attribute_name
@ -53,11 +63,11 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str:
lines.append("") lines.append("")
# Generate relationships # Generate relationships
for class_name in sv.all_classes(): for class_name in all_classes:
cls = sv.get_class(class_name) cls = sv.get_class(class_name)
# Inheritance relationships # Inheritance relationships - skip if parent is excluded
if cls.is_a: if cls.is_a and cls.is_a not in EXCLUDED_CLASSES:
# Render inheritance as a relationship in ER diagram # Render inheritance as a relationship in ER diagram
# Using "inherits" label to indicate subclass relationship # Using "inherits" label to indicate subclass relationship
lines.append(f'{class_name} ||--|| {cls.is_a} : "inherits"') lines.append(f'{class_name} ||--|| {cls.is_a} : "inherits"')
@ -67,7 +77,7 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str:
# Use induced_slot to properly merge base slot with slot_usage # Use induced_slot to properly merge base slot with slot_usage
slot = sv.induced_slot(slot_name, class_name) slot = sv.induced_slot(slot_name, class_name)
if slot and slot.range and slot.range in sv.all_classes(): if slot and slot.range and slot.range in all_classes:
# Determine cardinality # Determine cardinality
if slot.multivalued: if slot.multivalued:
if slot.required: if slot.required: