From 5cdce584b25c1bf34f17fcc5e9b65d9c5fddcceb Mon Sep 17 00:00:00 2001 From: kempersc Date: Fri, 28 Nov 2025 13:13:23 +0100 Subject: [PATCH] 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. --- .opencode/LINKML_TECHNICAL_CLASSES.md | 218 ++++ AGENTS.md | 46 + data/nde/enriched/entries/0009_unknown.yaml | 83 +- data/nde/enriched/entries/0019_unknown.yaml | 255 ++-- data/nde/enriched/entries/0028_unknown.yaml | 283 +++- data/nde/enriched/entries/0031_unknown.yaml | 255 +++- data/nde/enriched/entries/0032_unknown.yaml | 95 +- data/nde/enriched/entries/0034_unknown.yaml | 158 ++- data/nde/enriched/entries/0035_unknown.yaml | 93 +- data/nde/enriched/entries/0036_unknown.yaml | 133 +- data/nde/enriched/entries/0040_unknown.yaml | 263 ++-- data/nde/enriched/entries/0041_unknown.yaml | 90 +- data/nde/enriched/entries/0042_unknown.yaml | 89 +- data/nde/enriched/entries/0043_unknown.yaml | 109 +- data/nde/enriched/entries/0046_unknown.yaml | 120 +- data/nde/enriched/entries/0053_unknown.yaml | 83 +- data/nde/enriched/entries/0057_unknown.yaml | 104 +- data/nde/enriched/entries/0058_unknown.yaml | 49 +- data/nde/enriched/entries/0067_unknown.yaml | 106 +- data/nde/enriched/entries/0068_unknown.yaml | 146 ++- data/nde/enriched/entries/0766_unknown.yaml | 13 + frontend/public/data/nde_statistics.json | 97 +- .../modules/enums/IdentifierStandardEnum.yaml | 186 ++- frontend/src/components/uml/UMLParser.ts | 34 +- frontend/src/pages/NDEMapPage.css | 196 ++- frontend/src/pages/NDEMapPage.tsx | 118 +- frontend/src/pages/NDEStatsPage.tsx | 27 + .../modules/enums/IdentifierStandardEnum.yaml | 186 ++- ...todian_name_modular_20251128_125238_er.mmd | 1140 +++++++++++++++++ .../complete_schema_20251128_125232.mmd | 999 +++++++++++++++ scripts/export_nde_map_json.py | 146 ++- scripts/export_nde_stats_json.py | 57 + scripts/generate_mermaid_modular.py | 22 +- 33 files changed, 5467 insertions(+), 532 deletions(-) create mode 100644 .opencode/LINKML_TECHNICAL_CLASSES.md create mode 100644 schemas/20251121/uml/mermaid/01_custodian_name_modular_20251128_125238_er.mmd create mode 100644 schemas/20251121/uml/mermaid/complete_schema_20251128_125232.mmd diff --git a/.opencode/LINKML_TECHNICAL_CLASSES.md b/.opencode/LINKML_TECHNICAL_CLASSES.md new file mode 100644 index 0000000000..9f1f68b525 --- /dev/null +++ b/.opencode/LINKML_TECHNICAL_CLASSES.md @@ -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 diff --git a/AGENTS.md b/AGENTS.md index 264ec5a8d8..98c9c966b0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -222,6 +222,52 @@ Mansion: **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 diff --git a/data/nde/enriched/entries/0009_unknown.yaml b/data/nde/enriched/entries/0009_unknown.yaml index 302462d732..b901b34907 100644 --- a/data/nde/enriched/entries/0009_unknown.yaml +++ b/data/nde/enriched/entries/0009_unknown.yaml @@ -11,8 +11,67 @@ original_entry: - S entry_index: 9 processing_timestamp: '2025-11-27T14:59:57.951098+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJhdiM7JAayEcRxJgw-TgSdj8 name: Samenwerkingsorganisatie De Wolden Hoogeveen @@ -65,11 +124,17 @@ google_maps_enrichment: - establishment primary_type: government_office business_status: OPERATIONAL - google_maps_url: https://maps.google.com/?cid=4572862507549497540&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA - 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_url: https://maps.google.com/?cid=4572862507549497540 + google_maps_status: SUCCESS -google_maps_search_query: Samenwerkingsorganisatie De Wolden/Hoogeveen, Raadhuisplein - 1 (Raadhuisstraat 2), Hoogeveen (en Zuidwolde), Netherlands +google_maps_search_query: Samenwerkingsorganisatie De Wolden/Hoogeveen, Raadhuisplein 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 diff --git a/data/nde/enriched/entries/0019_unknown.yaml b/data/nde/enriched/entries/0019_unknown.yaml index 5997ff2757..d09ac3f903 100644 --- a/data/nde/enriched/entries/0019_unknown.yaml +++ b/data/nde/enriched/entries/0019_unknown.yaml @@ -12,13 +12,10 @@ processing_timestamp: '2025-11-27T15:00:13.008461+00:00' enrichment_status: enriched enrichment_source: website_scrape enrichment_timestamp: '2025-11-28T12:00:00+00:00' - -# Website enrichment data website_enrichment: fetch_timestamp: '2025-11-28T12:00:00+00:00' fetch_status: SUCCESS source_url: https://historiedewijkkoekange.nl/ - organization_details: full_name: Historische Vereniging 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 membership_count: 1250 membership_count_date: '2025-10-01' - membership_milestone: "1250 members reached end of 2022" - + membership_milestone: 1250 members reached end of 2022 location: venue_name: Oudheidkamer onder de molen venue_description: Heritage room located under the historic windmill @@ -36,158 +32,193 @@ website_enrichment: province: Drenthe country: NL municipality: De Wolden - opening_hours: - regular: "Fridays 14:00-16:00" - closed_months: "June, July, August" - special_events: "Saturday openings for exhibitions" - + regular: Fridays 14:00-16:00 + closed_months: June, July, August + special_events: Saturday openings for exhibitions governance: current_chair: Hilco Bremmer former_chair: Ina ten Wolde secretary: Lineke Lopers-de Vries former_secretary: Coby Tijmens treasurer: Annie van de Berg - honorary_members: - - name: Jenny Roze-Nijstad - appointed_date: '2023-04-11' - reason: "Years of service in archive, photo commission, and publications" - - name: Aaltienus Buiter - appointed_date: '2023-04-11' - reason: "Years of service in editorial and photo commission" - + - name: Jenny Roze-Nijstad + appointed_date: '2023-04-11' + reason: Years of service in archive, photo commission, and publications + - name: Aaltienus Buiter + appointed_date: '2023-04-11' + reason: Years of service in editorial and photo commission collections: photo_archive: total_count: 5000 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: - - Freek Heuvelman (coordinator since 2020) - - Klaasje Wever - - Aaltienus Buiter - - Jenny Roze - - Albert Veld - - Jan Westerbeek + - Freek Heuvelman (coordinator since 2020) + - Klaasje Wever + - Aaltienus Buiter + - Jenny Roze + - Albert Veld + - Jan Westerbeek digitization_started: '2012' original_curator: Jenny Roze digital_curator: Ina ten Wolde (2012-2020) current_curator: Freek Heuvelman (since 2020) - publications: periodical: - name: "'t Olde Karspel" + name: '''t Olde Karspel' frequency: quarterly - description: "Local history magazine distributed to all members" + description: Local history magazine distributed to all members books: - - title: "Van neringdoende tot ondernemer" - subject: Businesses in Koekange - status: sold_out - - title: "Bedrijvigheid in de Wijk van verleden tot heden" - publication_date: '2024-09-28' - price_eur: 15.00 - copies_printed: 600 - authors: - - Femmy Pol - - Jan Steenbergen - - Jan Westerbeek - description: "History of all businesses in De Wijk over 200 years" - - title: "Boerderijenboek Koekange" - copies_sold: 800 - status: sold_out - - title: "Boerderijenboek De Wijk" - copies_sold: 600 - status: sold_out + - title: Van neringdoende tot ondernemer + subject: Businesses in Koekange + status: sold_out + - title: Bedrijvigheid in de Wijk van verleden tot heden + publication_date: '2024-09-28' + price_eur: 15.0 + copies_printed: 600 + authors: + - Femmy Pol + - Jan Steenbergen + - Jan Westerbeek + description: History of all businesses in De Wijk over 200 years + - title: Boerderijenboek Koekange + copies_sold: 800 + status: sold_out + - title: Boerderijenboek De Wijk + copies_sold: 600 + status: sold_out calendar: - title: "Verjaardagskalender" - price_eur: 5.00 - description: "Birthday calendar with historical photos" - + title: Verjaardagskalender + price_eur: 5.0 + description: Birthday calendar with historical photos digital_presence: website: https://historiedewijkkoekange.nl/ facebook: https://www.facebook.com/historischeverenigingdewijkkoekange beeldbank: https://www.historiedewijkkoekange.nl/cgi-bin/beeldbank.pl - activities: cultural_evening: frequency: annual venue: Dorpshuis de Wijk recent_performers: - - name: "DUO 2VOUDT" - date: '2025-10-17' - ticket_price: 10.00 - - name: "De Kakmadammen" - date: '2024-10-17' - - name: "Een en Ander (Erik Knoef & Anita Oldenhave)" - date: '2023-10-20' - - name: "Babyboomers Blues (Marga Kool, Jan Veenstra, Egbert Meijers)" - date: '2022-10-21' + - name: DUO 2VOUDT + date: '2025-10-17' + ticket_price: 10.0 + - name: De Kakmadammen + date: '2024-10-17' + - name: Een en Ander (Erik Knoef & Anita Oldenhave) + date: '2023-10-20' + - name: Babyboomers Blues (Marga Kool, Jan Veenstra, Egbert Meijers) + date: '2022-10-21' exhibitions: - - title: "25 jaar Historische Vereniging de Wijk-Koekange" - dates: "October-December 2022" - - title: "Poëziealbums" - dates: "February-May 2024" - visitors: 123 - - title: "Klein nostalgisch gereedschap" - dates: "February-May 2025" + - title: 25 jaar Historische Vereniging de Wijk-Koekange + dates: October-December 2022 + - title: Poëziealbums + dates: February-May 2024 + visitors: 123 + - title: Klein nostalgisch gereedschap + dates: February-May 2025 special_projects: - - title: "Memory game with COOP supermarkets" - dates: "January-March 2025" - description: "36 card sets with old and new locations" - - title: "Historical plaatjes spaaractie" - dates: "September-November 2022" - partner: COOP supermarkets - + - title: Memory game with COOP supermarkets + dates: January-March 2025 + description: 36 card sets with old and new locations + - title: Historical plaatjes spaaractie + dates: September-November 2022 + partner: COOP supermarkets historical_focus: geographic_area: - - de Wijk - - Koekange - - Rogat + - de Wijk + - Koekange + - Rogat topics: - - WWII history and memorials - - Local businesses history - - Agricultural heritage - - Farm buildings (boerderijen) - - Dairy factories (zuivelfabrieken) + - WWII history and memorials + - Local businesses history + - Agricultural heritage + - Farm buildings (boerderijen) + - Dairy factories (zuivelfabrieken) war_memorials: - - location: Emsweg, Koekange - subject: Lt. James W. Gilbride (American pilot crashed 1943-11-29) - unveiled: '2023-04-29' - - location: Begraafplaats Julianaweg, de Wijk - subject: Five war victims including Sgt. Latham - unveiled: '2025-05-05' - + - location: Emsweg, Koekange + subject: Lt. James W. Gilbride (American pilot crashed 1943-11-29) + unveiled: '2023-04-29' + - location: Begraafplaats Julianaweg, de Wijk + subject: Five war victims including Sgt. Latham + unveiled: '2025-05-05' financial_support: rabo_clubsupport: - - year: 2025 - amount_eur: null - - year: 2024 - amount_eur: 837.89 - - year: 2023 - amount_eur: 904.72 - purpose: "Smoke detection for heritage room" - - year: 2022 - amount_eur: 801.33 - + - year: 2025 + amount_eur: null + - year: 2024 + amount_eur: 837.89 + - year: 2023 + amount_eur: 904.72 + purpose: Smoke detection for heritage room + - year: 2022 + amount_eur: 801.33 founding_statutes: date: '1997-10-02' goals: - - "Behartigen van historische belangen gemeente de Wijk" - - "Bevorderen van kennis over lokale geschiedenis" - - "Instandhouden en/of weder oprichten van historische monumenten" - - "Instandhouden en uitbreiden van bibliotheek" + - Behartigen van historische belangen gemeente de Wijk + - Bevorderen van kennis over lokale geschiedenis + - Instandhouden en/of weder oprichten van historische monumenten + - 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 + - Extensive photo archive with 5000+ digitized photos + - 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 + - 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:00–18: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 diff --git a/data/nde/enriched/entries/0028_unknown.yaml b/data/nde/enriched/entries/0028_unknown.yaml index 99143fa754..67e052a896 100644 --- a/data/nde/enriched/entries/0028_unknown.yaml +++ b/data/nde/enriched/entries/0028_unknown.yaml @@ -8,8 +8,253 @@ original_entry: - S entry_index: 28 processing_timestamp: '2025-11-27T15:00:25.906180+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJOZw5HVnjt0cReIpQLEDfqRE name: Stichting Aold Daol'n @@ -58,10 +303,34 @@ google_maps_enrichment: - establishment primary_type: point_of_interest business_status: CLOSED_PERMANENTLY - google_maps_url: https://maps.google.com/?cid=1272793836423252600&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA - 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_url: https://maps.google.com/?cid=1272793836423252600 + google_maps_status: SUCCESS 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 diff --git a/data/nde/enriched/entries/0031_unknown.yaml b/data/nde/enriched/entries/0031_unknown.yaml index efbf0544d3..fce33b6330 100644 --- a/data/nde/enriched/entries/0031_unknown.yaml +++ b/data/nde/enriched/entries/0031_unknown.yaml @@ -9,8 +9,195 @@ original_entry: - M entry_index: 31 processing_timestamp: '2025-11-27T15:00:30.206518+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJlzsbaa8dyEcRKWrU19CXAO8 name: Onderduikersmuseum De Duikelaar @@ -151,53 +338,23 @@ google_maps_enrichment: Alles netjes verzorgd. En rolstoelvriendelijk.' publish_time: '2025-08-01T12:16:17.559192202Z' - photo_urls: - - 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_url: https://maps.google.com/?cid=17221931898294790697 + google_maps_status: SUCCESS google_maps_search_query: Stichting Onderduikersmuseum de Duikelaar, Julianalaan 3, 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 diff --git a/data/nde/enriched/entries/0032_unknown.yaml b/data/nde/enriched/entries/0032_unknown.yaml index ad444033c6..dd1425138e 100644 --- a/data/nde/enriched/entries/0032_unknown.yaml +++ b/data/nde/enriched/entries/0032_unknown.yaml @@ -9,11 +9,91 @@ original_entry: - S entry_index: 32 processing_timestamp: '2025-11-27T15:00:30.207773+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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_search_query: Stichting Oudheidkamer Zuidwolde, Tolweg 2, Zuidwolde, Netherlands google_maps_search_timestamp: '2025-11-28T09:48:51.210294+00:00' + exa_enrichment: source: exa_web_search 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. exa_enrichment_status: SUCCESS 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 diff --git a/data/nde/enriched/entries/0034_unknown.yaml b/data/nde/enriched/entries/0034_unknown.yaml index 754b510286..bd87eb1cf1 100644 --- a/data/nde/enriched/entries/0034_unknown.yaml +++ b/data/nde/enriched/entries/0034_unknown.yaml @@ -9,8 +9,96 @@ original_entry: - S entry_index: 34 processing_timestamp: '2025-11-27T15:00:32.353825+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJ_b2VtYaNZEERdMCA6641QhE name: Rolder Historisch Gezelschap @@ -61,31 +149,6 @@ google_maps_enrichment: business_status: OPERATIONAL opening_hours: 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: - 'maandag: 13:30–16:30, 19:30–21:30' - 'dinsdag: Gesloten' @@ -96,28 +159,21 @@ google_maps_enrichment: - 'zondag: Gesloten' rating: 5 total_ratings: 1 - reviews: - - 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_url: https://maps.google.com/?cid=1243615472499343476 + google_maps_status: SUCCESS -google_maps_search_query: Rolder Historisch Gezelschap, Zuides 50 MFC Boerhoorn eerste - verdieping, Rolde, Netherlands +google_maps_search_query: Rolder Historisch Gezelschap, Zuides 50 MFC Boerhoorn eerste 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 diff --git a/data/nde/enriched/entries/0035_unknown.yaml b/data/nde/enriched/entries/0035_unknown.yaml index d32a7d3615..c7f948681a 100644 --- a/data/nde/enriched/entries/0035_unknown.yaml +++ b/data/nde/enriched/entries/0035_unknown.yaml @@ -9,13 +9,78 @@ original_entry: - S entry_index: 35 processing_timestamp: '2025-11-27T15:00:32.354818+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJbbisYNkTyEcR6LQvXF-820s name: Stichting Ruinen 1865 fetch_timestamp: '2025-11-28T09:48:52.989659+00:00' api_status: OK + note: "Google Maps returned 'Stichting Ruinen 1865' which appears to be a different organization" coordinates: latitude: 52.7620608 longitude: 6.3504644 @@ -59,11 +124,21 @@ google_maps_enrichment: - point_of_interest - establishment business_status: OPERATIONAL - google_maps_url: https://maps.google.com/?cid=5466169690498774248&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA - 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_url: https://maps.google.com/?cid=5466169690498774248 + google_maps_status: SUCCESS -google_maps_search_query: Stichting Historie van Ruinen, Oosterstraat 16, Ruinen, - Netherlands +google_maps_search_query: Stichting Historie van Ruinen, Oosterstraat 16, Ruinen, 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 diff --git a/data/nde/enriched/entries/0036_unknown.yaml b/data/nde/enriched/entries/0036_unknown.yaml index 9dcb22e836..db60f917b3 100644 --- a/data/nde/enriched/entries/0036_unknown.yaml +++ b/data/nde/enriched/entries/0036_unknown.yaml @@ -9,8 +9,103 @@ original_entry: - S entry_index: 36 processing_timestamp: '2025-11-27T15:00:32.355640+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJN-CFgrASyEcR487uTEHq7MM name: Stichting Historie van Ruinerwold @@ -62,16 +157,6 @@ google_maps_enrichment: - establishment business_status: OPERATIONAL opening_hours: - open_now: false - periods: - - open: - day: 3 - hour: 9 - minute: 0 - close: - day: 3 - hour: 12 - minute: 0 weekday_text: - 'maandag: Gesloten' - 'dinsdag: Gesloten' @@ -80,11 +165,21 @@ google_maps_enrichment: - 'vrijdag: Gesloten' - 'zaterdag: Gesloten' - 'zondag: Gesloten' - google_maps_url: https://maps.google.com/?cid=14117916498084155107&g_mp=Cidnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLlNlYXJjaFRleHQQAhgEIAA - 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_url: https://maps.google.com/?cid=14117916498084155107 + google_maps_status: SUCCESS -google_maps_search_query: Stichting Historie van Ruinerwold, Dijkhuizen 66, Ruinerwold, - Netherlands +google_maps_search_query: Stichting Historie van Ruinerwold, Dijkhuizen 66, Ruinerwold, 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 diff --git a/data/nde/enriched/entries/0040_unknown.yaml b/data/nde/enriched/entries/0040_unknown.yaml index 6bc331cb72..4a7f6d16da 100644 --- a/data/nde/enriched/entries/0040_unknown.yaml +++ b/data/nde/enriched/entries/0040_unknown.yaml @@ -9,8 +9,116 @@ original_entry: - S entry_index: 40 processing_timestamp: '2025-11-27T15:00:38.809429+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJk5Dtbmjnt0cRMrFJtQaJcsQ name: Museum of Contemporary Tibetan Art @@ -64,48 +172,6 @@ google_maps_enrichment: primary_type: museum business_status: OPERATIONAL 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: - 'maandag: Gesloten' - 'dinsdag: Gesloten' @@ -116,98 +182,23 @@ google_maps_enrichment: - 'zondag: 11:00–17:00' rating: 4.7 total_ratings: 41 - reviews: - - 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. + google_maps_url: https://maps.google.com/?cid=14155527240683204914 - 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_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 diff --git a/data/nde/enriched/entries/0041_unknown.yaml b/data/nde/enriched/entries/0041_unknown.yaml index cba7099bf1..0a921dd849 100644 --- a/data/nde/enriched/entries/0041_unknown.yaml +++ b/data/nde/enriched/entries/0041_unknown.yaml @@ -10,8 +10,94 @@ original_entry: - S entry_index: 41 processing_timestamp: '2025-11-27T15:00:38.811546+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA name: Asser Historische Vereniging diff --git a/data/nde/enriched/entries/0042_unknown.yaml b/data/nde/enriched/entries/0042_unknown.yaml index 9c44fc7cae..d90f424478 100644 --- a/data/nde/enriched/entries/0042_unknown.yaml +++ b/data/nde/enriched/entries/0042_unknown.yaml @@ -10,8 +10,93 @@ original_entry: - S entry_index: 42 processing_timestamp: '2025-11-27T15:00:38.813171+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJh2AQPOAkyEcRzVww3ls_tvA name: Asser Historische Vereniging diff --git a/data/nde/enriched/entries/0043_unknown.yaml b/data/nde/enriched/entries/0043_unknown.yaml index d1f27c41d9..7ded8ce459 100644 --- a/data/nde/enriched/entries/0043_unknown.yaml +++ b/data/nde/enriched/entries/0043_unknown.yaml @@ -10,8 +10,113 @@ original_entry: - S entry_index: 43 processing_timestamp: '2025-11-27T15:00:38.815215+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJE2NbsIXZt0cRYzBOCFM_wZ4 name: Historische Vereniging der Gemeente Gasselte diff --git a/data/nde/enriched/entries/0046_unknown.yaml b/data/nde/enriched/entries/0046_unknown.yaml index aac04f2e52..e2bd1a2f09 100644 --- a/data/nde/enriched/entries/0046_unknown.yaml +++ b/data/nde/enriched/entries/0046_unknown.yaml @@ -16,8 +16,124 @@ original_entry: - L entry_index: 46 processing_timestamp: '2025-11-27T15:00:43.125381+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJvYV6TJ-EyEcRrWXvCIaJ55U name: Cultuur-Eus Tromp De Vries diff --git a/data/nde/enriched/entries/0053_unknown.yaml b/data/nde/enriched/entries/0053_unknown.yaml index e721b7a0a8..de4d56a5ed 100644 --- a/data/nde/enriched/entries/0053_unknown.yaml +++ b/data/nde/enriched/entries/0053_unknown.yaml @@ -8,8 +8,87 @@ original_entry: - O entry_index: 53 processing_timestamp: '2025-11-27T15:00:56.115219+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJNSF04278xUcRirXV6AxYbzg name: Provinciaal depot voor archeologie Noord-Holland | Huis van Hilde diff --git a/data/nde/enriched/entries/0057_unknown.yaml b/data/nde/enriched/entries/0057_unknown.yaml index 496659dc18..a9b3257a4c 100644 --- a/data/nde/enriched/entries/0057_unknown.yaml +++ b/data/nde/enriched/entries/0057_unknown.yaml @@ -9,8 +9,108 @@ original_entry: - S entry_index: 57 processing_timestamp: '2025-11-27T15:01:02.548408+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJRZxkLBgrxkcR4ZQtUm7jfdA name: Stichting Geschiedschrijving in de Gemeente Dronten diff --git a/data/nde/enriched/entries/0058_unknown.yaml b/data/nde/enriched/entries/0058_unknown.yaml index 73d8479b4a..77ff797062 100644 --- a/data/nde/enriched/entries/0058_unknown.yaml +++ b/data/nde/enriched/entries/0058_unknown.yaml @@ -9,8 +9,53 @@ original_entry: - S entry_index: 58 processing_timestamp: '2025-11-27T15:01:02.570736+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJv_iKUZ-EyEcRx8FAdvzdhDk name: Vrienden Van Urk diff --git a/data/nde/enriched/entries/0067_unknown.yaml b/data/nde/enriched/entries/0067_unknown.yaml index 2755f0e49f..68a8baca0e 100644 --- a/data/nde/enriched/entries/0067_unknown.yaml +++ b/data/nde/enriched/entries/0067_unknown.yaml @@ -8,8 +8,110 @@ original_entry: - label: Stichting Musea Noardeast Fryslân entry_index: 67 processing_timestamp: '2025-11-27T15:11:37.840187+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY name: Museum 't Fiskershúske diff --git a/data/nde/enriched/entries/0068_unknown.yaml b/data/nde/enriched/entries/0068_unknown.yaml index 270e2212a0..eee4d9ad7e 100644 --- a/data/nde/enriched/entries/0068_unknown.yaml +++ b/data/nde/enriched/entries/0068_unknown.yaml @@ -16,8 +16,150 @@ original_entry: - O entry_index: 68 processing_timestamp: '2025-11-27T15:11:37.842486+00:00' -enrichment_status: skipped -skip_reason: no_wikidata_id +enrichment_status: enriched +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: place_id: ChIJze2EbFmvyUcR6QvaM4QdnCY name: Museum 't Fiskershúske diff --git a/data/nde/enriched/entries/0766_unknown.yaml b/data/nde/enriched/entries/0766_unknown.yaml index b7346b06ab..b78e30f7d8 100644 --- a/data/nde/enriched/entries/0766_unknown.yaml +++ b/data/nde/enriched/entries/0766_unknown.yaml @@ -8,3 +8,16 @@ entry_index: 766 processing_timestamp: '2025-11-27T16:36:57.523637+00:00' enrichment_status: skipped 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 diff --git a/frontend/public/data/nde_statistics.json b/frontend/public/data/nde_statistics.json index 9ff2111b49..f284d662c0 100644 --- a/frontend/public/data/nde_statistics.json +++ b/frontend/public/data/nde_statistics.json @@ -1,10 +1,12 @@ { - "generated_at": "2025-11-27T23:19:16.576913+00:00", - "total_entries": 1353, + "generated_at": "2025-11-28T12:11:13.370875+00:00", + "total_entries": 1352, "summary": { - "total_institutions": 1353, - "with_coordinates": 712, - "with_wikidata": 1094, + "total_institutions": 1352, + "with_coordinates": 717, + "with_wikidata": 1103, + "with_google_maps": 1344, + "google_maps_not_found": 0, "unique_cities": 473, "unique_provinces": 12, "institution_types": 14 @@ -35,7 +37,7 @@ { "code": "O", "name": "Official", - "count": 52, + "count": 51, "percentage": 3.8, "color": "#f39c12" }, @@ -196,7 +198,7 @@ "wikidata_types": [ { "type": "museum", - "count": 487 + "count": 492 }, { "type": "historical society", @@ -278,43 +280,55 @@ "enrichment_status": [ { "status": "Success", - "count": 1094, - "percentage": 80.9, + "count": 1103, + "percentage": 81.6, "color": "#2ecc71" }, + { + "status": "Enriched", + "count": 19, + "percentage": 1.4, + "color": "#9e9e9e" + }, + { + "status": "Enriched_via_website", + "count": 2, + "percentage": 0.1, + "color": "#9e9e9e" + }, { "status": "Skipped", - "count": 250, - "percentage": 18.5, + "count": 226, + "percentage": 16.7, "color": "#f39c12" }, { - "status": "Error", - "count": 9, - "percentage": 0.7, - "color": "#e74c3c" + "status": "Enriched_via_wikidata_and_website", + "count": 2, + "percentage": 0.1, + "color": "#9e9e9e" } ], "identifier_coverage": [ { "identifier": "Website", - "count": 932, - "percentage": 68.9 + "count": 940, + "percentage": 69.5 }, { "identifier": "Coordinates", - "count": 712, - "percentage": 52.6 + "count": 717, + "percentage": 53.0 }, { "identifier": "Wikipedia NL", "count": 620, - "percentage": 45.8 + "percentage": 45.9 }, { "identifier": "Image", - "count": 527, - "percentage": 39.0 + "count": 532, + "percentage": 39.3 }, { "identifier": "ISIL Code", @@ -322,6 +336,33 @@ "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": [ { "decade": 600, @@ -899,13 +940,13 @@ "provinces": [ { "province": "Zuid-Holland", - "count": 132, + "count": 133, "color": "#bcbd22", "types": { "M": { "code": "M", "name": "Museum", - "count": 90, + "count": 91, "color": "#e74c3c" }, "A": { @@ -1100,13 +1141,13 @@ }, { "province": "Noord-Brabant", - "count": 75, + "count": 78, "color": "#aec7e8", "types": { "M": { "code": "M", "name": "Museum", - "count": 57, + "count": 60, "color": "#e74c3c" }, "O": { @@ -1180,7 +1221,7 @@ }, { "province": "Friesland", - "count": 56, + "count": 57, "color": "#ff7f0e", "types": { "A": { @@ -1192,7 +1233,7 @@ "M": { "code": "M", "name": "Museum", - "count": 36, + "count": 37, "color": "#e74c3c" }, "B": { diff --git a/frontend/public/schemas/20251121/linkml/modules/enums/IdentifierStandardEnum.yaml b/frontend/public/schemas/20251121/linkml/modules/enums/IdentifierStandardEnum.yaml index cd5fd76396..e5d6f283db 100644 --- a/frontend/public/schemas/20251121/linkml/modules/enums/IdentifierStandardEnum.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/enums/IdentifierStandardEnum.yaml @@ -10,11 +10,12 @@ # D - Digital platforms, N - NGOs, T - Taste/smell heritage # # Sources: -# - ISO standards (ISIL, ISNI) +# - ISO standards (ISIL, ISNI, LEI) # - National authority files (GND, LCNAF, BnF, NTA, NDL, 25+ more) # - Consortium services (VIAF, ORCID, ROR, FAST) # - Domain-specific identifiers (ULAN, RKD, RISM, CERL) # - National museum standards (Museumnorm NL, Museofile FR) +# - Legal entity registries (KvK, Companies House, Handelsregister, SIREN, ABN) # - Web identifiers (Wikidata, OpenStreetMap, GeoNames, DBpedia) # - Botanical/Zoo registries (BGCI, WAZA, EAZA, AZA) # - Higher education (WHED, HESA, IPEDS) @@ -27,7 +28,7 @@ # - Religious heritage (WCD, ARDA, JewishGen, DRH) # - Culinary heritage (UNESCO Cities of Gastronomy, Slow Food, IGP/PDO) # -# Organization (24 categories): +# Organization (25 categories): # 1. ISO Standards (formal international standards) # 2. Authority Files (national library authority files) # 3. Consortium Services (collaborative aggregation services) @@ -41,17 +42,18 @@ # 11. Social Media/Web Presence # 12. Commercial/Discovery Platforms # 13. Dutch-Specific -# 14. Japanese Identifiers -# 15. Botanical Gardens/Zoos -# 16. Higher Education/Research -# 17. Numismatic/Philatelic (Collecting) -# 18. Monuments/Heritage Sites -# 19. Intangible Heritage -# 20. Provenance/Art Registry -# 21. Persistent Identifiers (Digital) -# 22. Heritage NGOs -# 23. Religious Heritage -# 24. Gastronomy/Culinary Heritage +# 14. Legal Entity Registries (KvK, Companies House, SIREN, etc.) +# 15. Japanese Identifiers +# 16. Botanical Gardens/Zoos +# 17. Higher Education/Research +# 18. Numismatic/Philatelic (Collecting) +# 19. Monuments/Heritage Sites +# 20. Intangible Heritage +# 21. Provenance/Art Registry +# 22. Persistent Identifiers (Digital) +# 23. Heritage NGOs +# 24. Religious Heritage +# 25. Gastronomy/Culinary Heritage id: https://nde.nl/ontology/hc/enum/IdentifierStandardEnum name: identifier-standard-enum @@ -96,8 +98,17 @@ enums: Format: {country-code}-{local-identifier} 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 + National agencies: 60+ countries maintain ISIL registries Wikidata: Q470458 meaning: wd:Q470458 @@ -1007,9 +1018,23 @@ enums: Kamer van Koophandel (Netherlands Chamber of Commerce) number. 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 meaning: wd:Q1130073 @@ -1024,7 +1049,114 @@ enums: 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: @@ -1050,7 +1182,7 @@ enums: meaning: wd:Q10726338 # ============================================ - # 15. BOTANICAL GARDENS / ZOOS + # 16. BOTANICAL GARDENS / ZOOS # ============================================ BGCI: @@ -1107,7 +1239,7 @@ enums: meaning: wd:Q1376853 # ============================================ - # 16. HIGHER EDUCATION / RESEARCH + # 17. HIGHER EDUCATION / RESEARCH # ============================================ WHED: @@ -1150,7 +1282,7 @@ enums: meaning: wd:Q6043461 # ============================================ - # 17. NUMISMATIC / PHILATELIC (COLLECTING) + # 18. NUMISMATIC / PHILATELIC (COLLECTING) # ============================================ ANS_MANTIS: @@ -1241,7 +1373,7 @@ enums: meaning: wd:Q923643 # ============================================ - # 18. MONUMENTS / HERITAGE SITES + # 19. MONUMENTS / HERITAGE SITES # ============================================ UNESCO_WHC: @@ -1347,7 +1479,7 @@ enums: meaning: wd:Q811165 # ============================================ - # 19. INTANGIBLE HERITAGE + # 20. INTANGIBLE HERITAGE # ============================================ UNESCO_ICH: @@ -1377,7 +1509,7 @@ enums: meaning: wd:Q1362466 # ============================================ - # 20. PROVENANCE / ART REGISTRY + # 21. PROVENANCE / ART REGISTRY # ============================================ ALR: @@ -1434,7 +1566,7 @@ enums: meaning: wd:Q109652096 # ============================================ - # 21. PERSISTENT IDENTIFIERS (DIGITAL) + # 22. PERSISTENT IDENTIFIERS (DIGITAL) # ============================================ DOI: @@ -1508,7 +1640,7 @@ enums: meaning: wd:Q1061508 # ============================================ - # 22. HERITAGE NGOs + # 23. HERITAGE NGOs # ============================================ ICOMOS: @@ -1563,7 +1695,7 @@ enums: meaning: wd:Q17020227 # ============================================ - # 23. RELIGIOUS HERITAGE + # 24. RELIGIOUS HERITAGE # ============================================ WCD: @@ -1619,7 +1751,7 @@ enums: meaning: wd:Q106654011 # ============================================ - # 24. GASTRONOMY / CULINARY HERITAGE + # 25. GASTRONOMY / CULINARY HERITAGE # ============================================ UNESCO_CITY_GASTRONOMY: diff --git a/frontend/src/components/uml/UMLParser.ts b/frontend/src/components/uml/UMLParser.ts index 289eefc698..ea07c81a9d 100644 --- a/frontend/src/components/uml/UMLParser.ts +++ b/frontend/src/components/uml/UMLParser.ts @@ -1,5 +1,27 @@ 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 */ @@ -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 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 }); } /** diff --git a/frontend/src/pages/NDEMapPage.css b/frontend/src/pages/NDEMapPage.css index f80de08ac3..68e409a36c 100644 --- a/frontend/src/pages/NDEMapPage.css +++ b/frontend/src/pages/NDEMapPage.css @@ -186,7 +186,25 @@ /* Leaflet Popup Customization */ .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 { @@ -199,6 +217,23 @@ color: white; border-radius: 3px; 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 { @@ -224,20 +259,168 @@ 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 { display: flex; - gap: 0.75rem; + flex-wrap: wrap; + gap: 0.5rem; margin-top: 0.75rem; padding-top: 0.5rem; border-top: 1px solid #e5e7eb; } .popup-links a { - font-size: 0.8rem; + font-size: 0.75rem; color: #0a3dfa; text-decoration: none; font-weight: 500; transition: color 0.15s ease; + white-space: nowrap; } .popup-links a:hover { @@ -353,6 +536,13 @@ .leaflet-popup-content-wrapper { border-radius: 8px; 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 { diff --git a/frontend/src/pages/NDEMapPage.tsx b/frontend/src/pages/NDEMapPage.tsx index 38dbb69240..14f0af6594 100644 --- a/frontend/src/pages/NDEMapPage.tsx +++ b/frontend/src/pages/NDEMapPage.tsx @@ -49,6 +49,18 @@ const TYPE_NAMES: Record = { G: 'Gallery', }; +interface Review { + author: string; + rating: number; + text: string; + time: string; +} + +interface Photo { + url: string; + attribution?: string; +} + interface Institution { lat: number; lon: number; @@ -60,6 +72,17 @@ interface Institution { website: string; wikidata_id: 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 @@ -73,9 +96,18 @@ export default function NDEMapPage() { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedTypes, setSelectedTypes] = useState>(new Set(Object.keys(TYPE_COLORS))); - const [stats, setStats] = useState<{ total: number; byType: Record }>({ + const [stats, setStats] = useState<{ + total: number; + byType: Record; + withRatings: number; + withPhotos: number; + withReviews: number; + }>({ total: 0, byType: {}, + withRatings: 0, + withPhotos: 0, + withReviews: 0, }); // Load institutions data @@ -91,10 +123,17 @@ export default function NDEMapPage() { // Calculate stats const byType: Record = {}; + let withRatings = 0; + let withPhotos = 0; + let withReviews = 0; + data.forEach((inst: Institution) => { 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); } catch (err) { @@ -153,15 +192,64 @@ export default function NDEMapPage() { 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 = `
- ${inst.type_name} -

${inst.name}

- ${inst.city ? `

City: ${inst.city}

` : ''} - ${inst.description ? `

${inst.description}

` : ''} - `; @@ -272,13 +360,21 @@ export default function NDEMapPage() {
Types Shown
{selectedTypes.size} of {Object.keys(stats.byType).length}
+

Google Maps Data

+
+
With Ratings
+
{stats.withRatings.toLocaleString()} ({Math.round(stats.withRatings / stats.total * 100)}%)
+
With Photos
+
{stats.withPhotos.toLocaleString()} ({Math.round(stats.withPhotos / stats.total * 100)}%)
+
With Reviews
+
{stats.withReviews.toLocaleString()} ({Math.round(stats.withReviews / stats.total * 100)}%)
+

Data Source

- Data enriched from Wikidata via the NDE Register Nederland. - Coordinates extracted from Wikidata P625 (coordinate location). + Data from NDE Register Nederland, enriched with Wikidata and Google Maps data including ratings, reviews, photos, and opening hours.

diff --git a/frontend/src/pages/NDEStatsPage.tsx b/frontend/src/pages/NDEStatsPage.tsx index 00fae305a1..78774bd38b 100644 --- a/frontend/src/pages/NDEStatsPage.tsx +++ b/frontend/src/pages/NDEStatsPage.tsx @@ -73,6 +73,12 @@ interface IdentifierCoverage { percentage: number; } +interface GoogleMapsCoverage { + feature: string; + count: number; + percentage: number; +} + interface TimelineData { decade: number; count: number; @@ -99,6 +105,8 @@ interface StatsData { total_institutions: number; with_coordinates: number; with_wikidata: number; + with_google_maps?: number; + google_maps_not_found?: number; unique_cities: number; unique_provinces?: number; institution_types: number; @@ -109,6 +117,7 @@ interface StatsData { wikidata_types: WikidataType[]; enrichment_status: EnrichmentStatus[]; identifier_coverage: IdentifierCoverage[]; + google_maps_coverage?: GoogleMapsCoverage[]; founding_timeline: TimelineData[]; provinces?: ProvinceData[]; }; @@ -1047,6 +1056,10 @@ export default function NDEStatsPage() {
{stats.summary.with_wikidata.toLocaleString()}
Enriched Records
+
+
{(stats.summary.with_google_maps || 0).toLocaleString()}
+
Google Maps Data
+
{stats.summary.with_coordinates.toLocaleString()}
With Coordinates
@@ -1094,6 +1107,20 @@ export default function NDEStatsPage() { height={280} /> + {/* Google Maps Coverage */} + {stats.charts.google_maps_coverage && stats.charts.google_maps_coverage.length > 0 && ( + ({ + identifier: d.feature, + count: d.count, + percentage: d.percentage, + }))} + title="Google Maps Coverage" + width={400} + height={280} + /> + )} + {/* Top Cities */} - + 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: @@ -1050,7 +1182,7 @@ enums: meaning: wd:Q10726338 # ============================================ - # 15. BOTANICAL GARDENS / ZOOS + # 16. BOTANICAL GARDENS / ZOOS # ============================================ BGCI: @@ -1107,7 +1239,7 @@ enums: meaning: wd:Q1376853 # ============================================ - # 16. HIGHER EDUCATION / RESEARCH + # 17. HIGHER EDUCATION / RESEARCH # ============================================ WHED: @@ -1150,7 +1282,7 @@ enums: meaning: wd:Q6043461 # ============================================ - # 17. NUMISMATIC / PHILATELIC (COLLECTING) + # 18. NUMISMATIC / PHILATELIC (COLLECTING) # ============================================ ANS_MANTIS: @@ -1241,7 +1373,7 @@ enums: meaning: wd:Q923643 # ============================================ - # 18. MONUMENTS / HERITAGE SITES + # 19. MONUMENTS / HERITAGE SITES # ============================================ UNESCO_WHC: @@ -1347,7 +1479,7 @@ enums: meaning: wd:Q811165 # ============================================ - # 19. INTANGIBLE HERITAGE + # 20. INTANGIBLE HERITAGE # ============================================ UNESCO_ICH: @@ -1377,7 +1509,7 @@ enums: meaning: wd:Q1362466 # ============================================ - # 20. PROVENANCE / ART REGISTRY + # 21. PROVENANCE / ART REGISTRY # ============================================ ALR: @@ -1434,7 +1566,7 @@ enums: meaning: wd:Q109652096 # ============================================ - # 21. PERSISTENT IDENTIFIERS (DIGITAL) + # 22. PERSISTENT IDENTIFIERS (DIGITAL) # ============================================ DOI: @@ -1508,7 +1640,7 @@ enums: meaning: wd:Q1061508 # ============================================ - # 22. HERITAGE NGOs + # 23. HERITAGE NGOs # ============================================ ICOMOS: @@ -1563,7 +1695,7 @@ enums: meaning: wd:Q17020227 # ============================================ - # 23. RELIGIOUS HERITAGE + # 24. RELIGIOUS HERITAGE # ============================================ WCD: @@ -1619,7 +1751,7 @@ enums: meaning: wd:Q106654011 # ============================================ - # 24. GASTRONOMY / CULINARY HERITAGE + # 25. GASTRONOMY / CULINARY HERITAGE # ============================================ UNESCO_CITY_GASTRONOMY: diff --git a/schemas/20251121/uml/mermaid/01_custodian_name_modular_20251128_125238_er.mmd b/schemas/20251121/uml/mermaid/01_custodian_name_modular_20251128_125238_er.mmd new file mode 100644 index 0000000000..704d0c4a66 --- /dev/null +++ b/schemas/20251121/uml/mermaid/01_custodian_name_modular_20251128_125238_er.mmd @@ -0,0 +1,1140 @@ +```mermaid +erDiagram +CustodianLegalStatus { + string refers_to_custodian + date dissolution_date + string reconstruction_method +} +CustodianCollection { + string id + string collection_name + string collection_description + stringList collection_type + string collection_scope + string extent + string access_rights + stringList digital_surrogates + string digitization_status + string preservation_level + stringList custody_history + date valid_from + date valid_to +} +DigitalPlatform { + uriorcurie platform_id + string platform_name + uri homepage_web_address + uriList collection_web_addresses + uriList inventory_web_addresses + uri api_endpoint + uri sparql_endpoint + uri oai_pmh_endpoint + stringList programming_languages + string repository_software + boolean iiif_support + boolean linked_data + stringList metadata_standards + string access_restrictions + string preservation_level + string storage_location + date fixity_check_date +} +CustodianIdentifier { + string identifier_scheme + string identifier_value + string defined_by_standard + string allocated_by + string identifier_format_used + string canonical_value + string also_identifies_name + string allocation_date +} +CustodianAppellation { + string appellation_value + string appellation_language + AppellationTypeEnum appellation_type +} +CustodianName { + string emic_name + string name_language + string standardized_name + uriorcurie endorsement_source + string name_authority + date valid_from + date valid_to +} +TimeSpan { + datetime begin_of_the_begin + datetime end_of_the_begin + datetime begin_of_the_end + datetime end_of_the_end +} +ReconstructionAgent { + uriorcurie id + string agent_name + AgentTypeEnum agent_type + string affiliation + string contact +} +CustodianObservation { + date observation_date + string observation_source + string observation_context +} +ReconstructionActivity { + uriorcurie id + ReconstructionActivityTypeEnum activity_type + string method + string justification +} +ConfidenceMeasure { + float confidence_value + string confidence_method +} +Custodian { + uriorcurie hc_id + uriorcurie preferred_label + string custodian_type + uriorcurie legal_status + uriorcurie place_designation + uriorcurieList digital_platform + uriorcurieList has_collection + uriorcurieList organizational_structure + uriorcurieList organizational_change_events + uriorcurieList encompassing_body + uriorcurieList identifiers + datetime created + datetime modified +} +CustodianType { + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + stringList type_label + string type_description + stringList applicable_countries + datetime created + datetime modified +} +ArchiveOrganizationType { + string archive_scope + stringList record_types + stringList preservation_standards + string finding_aids_format + string access_policy + uri appraisal_policy + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +MuseumType { + stringList collection_focus + string exhibition_program + stringList visitor_facilities + string cataloging_standard + boolean conservation_lab + boolean research_department + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +LibraryType { + string lending_policy + string catalog_system + stringList special_collections + boolean membership_required + boolean interlibrary_loan + string cataloging_standard + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +GalleryType { + boolean commercial_operation + stringList artist_representation + string exhibition_focus + boolean sales_activity + string exhibition_model + string commission_rate + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +ResearchOrganizationType { + stringList research_focus + boolean publication_output + uri data_repository + stringList research_infrastructure + uri academic_affiliation + stringList research_projects + uriorcurie type_id + CustodianPrimaryTypeEnum primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +OfficialInstitutionType { + string administrative_level + stringList heritage_mandate + boolean regulatory_authority + stringList funding_programs + string oversight_jurisdiction + string policy_authority + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +BioCustodianType { + stringList specimen_types + string collection_size + boolean living_collections + stringList research_programs + stringList public_education + string conservation_breeding + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +EducationProviderType { + stringList education_level + stringList academic_programs + string collection_access + stringList teaching_collections + stringList student_services + string accreditation + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +HeritageSocietyType { + string society_focus + string membership_size + stringList publication_activities + stringList collecting_scope + stringList volunteer_programs + stringList community_engagement + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +FeatureCustodianType { + stringList feature_types + string site_portfolio + string visitor_services + string conservation_activities + string access_management + string stewardship_model + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +IntangibleHeritageGroupType { + stringList ich_domain + string transmission_methods + string practitioner_community + string performance_repertoire + string cultural_context + string safeguarding_measures + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +PersonalCollectionType { + stringList collection_focus + string collection_size + string acquisition_history + string access_restrictions + string preservation_approach + string legacy_planning + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +HolySacredSiteType { + string religious_tradition + stringList collection_types + string religious_function + string access_policy + string stewardship_responsibility + string secularization_status + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +DigitalPlatformType { + stringList platform_category + string digital_collections + string technology_stack + stringList data_standards + string user_services + string sustainability_model + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +NonProfitType { + string organizational_mission + string program_activities + string geographic_scope + stringList beneficiary_groups + string partnership_model + string impact_measurement + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +TasteScentHeritageType { + string heritage_practice + string sensory_heritage_domain + stringList preservation_methods + stringList traditional_products + string knowledge_transmission + string community_significance + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +CommercialOrganizationType { + string business_model + string collection_purpose + string corporate_integration + string public_access + stringList heritage_holdings + stringList commercial_activities + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +MixedCustodianType { + stringList constituent_types + string functional_integration + string organizational_structure + stringList service_portfolio + string facility_design + stringList user_communities + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +UnspecifiedType { + string classification_status + stringList evidence_gaps + stringList type_hypotheses + stringList research_attempts + string review_status + stringList data_quality_flags + uriorcurie type_id + string primary_type + string wikidata_entity + string type_label + string type_description + string applicable_countries + datetime created + datetime modified +} +CustodianPlace { + string place_name + string place_language + PlaceSpecificityEnum place_specificity + string place_note + date valid_from + date valid_to +} +AuxiliaryPlace { + uriorcurie auxiliary_place_id + string place_name + AuxiliaryPlaceTypeEnum auxiliary_place_type + string place_description + string street_address + string postal_code + string city + float latitude + float longitude + integer geonames_id + date valid_from + date valid_to +} +OrganizationalStructure { + string id + string unit_name + OrganizationalUnitTypeEnum unit_type + integer staff_count + string contact_point + date valid_from + date valid_to +} +OrganizationBranch { + uriorcurie branch_id + string branch_name + OrganizationBranchTypeEnum branch_type + string branch_description + uriorcurie is_branch_of + string branch_head + integer staff_count + string contact_point + date valid_from + date valid_to +} +AuxiliaryDigitalPlatform { + uriorcurie auxiliary_platform_id + string platform_name + AuxiliaryDigitalPlatformTypeEnum auxiliary_platform_type + uri platform_url + string platform_purpose + string platform_description + uri api_documentation + stringList technology_stack + uriorcurieList provides_access_to + string related_project + string funding_source + boolean iiif_support + boolean linked_data + date valid_from + date valid_to + string archival_status + uri archived_at + string preservation_event_type + string fixity_info + boolean cms_detected +} +LegalResponsibilityCollection { + string legal_responsibility_basis + date legal_responsibility_start_date + date legal_responsibility_end_date + uriorcurie id + string collection_name + string collection_description + stringList collection_type + string collection_scope + string extent + string access_rights + stringList digital_surrogates + string digitization_status + string preservation_level + stringList custody_history + string refers_to_custodian + datetime valid_from + datetime valid_to +} +OrganizationalChangeEvent { + uriorcurie id + OrganizationalChangeEventTypeEnum event_type + date event_date + string event_description + string change_rationale + string staff_impact + uri documentation_source + date valid_from + date valid_to +} +PersonObservation { + uriorcurie id + string person_name + StaffRoleTypeEnum staff_role + string role_title + date role_start_date + date role_end_date + string contact_email + stringList expertise_areas + datetime created + datetime modified +} +LanguageCode { + string language_code +} +SourceDocument { + uriorcurie source_uri + SourceDocumentTypeEnum source_type + date source_date + string source_creator +} +LegalEntityType { + uriorcurie id + string code + string label + string definition + uriorcurieList ontology_mapping +} +LegalForm { + uriorcurie id + string elf_code + string local_name + string transliterated_name + string abbreviation + datetime valid_from + datetime valid_to +} +LegalName { + uriorcurie id + string full_name + string name_without_type + string alphabetical_name + string display_name + string language + string script + string temporal_validity +} +RegistrationNumber { + uriorcurie id + string number + string type + string temporal_validity +} +RegistrationAuthority { + uriorcurie id + string name + string name_local + string abbreviation + uri registry_url + uri api_url + uri sparql_endpoint + string data_license + RegistrationAuthorityGovernanceEnum governance_type + integer established_year + string standards_maintained + string allocation_agencies + uri website + string description + string wikidata_id +} +GovernanceStructure { + uriorcurie id + string structure_type + stringList organizational_units + string governance_body + string description +} +LegalStatus { + uriorcurie id + string status_code + string status_name + string description + string temporal_validity +} +Country { + string alpha_2 + string alpha_3 +} +Subregion { + string iso_3166_2_code + string country + string subdivision_name +} +Settlement { + string geonames_id + string settlement_name + string country + string subregion + string latitude + string longitude +} +DataLicensePolicy { + uriorcurie id + string policy_name + OpennessStanceEnum openness_stance + stringList open_data_principles + uri policy_url + date policy_effective_date + stringList advocacy_activities + string description +} +DataLicense { + uriorcurie id + string name + string abbreviation + DataLicenseTypeEnum license_type + DataOpennessLevelEnum openness_level + uri license_url + uri deed_url + string version + boolean allows_commercial_use + boolean requires_attribution + boolean requires_sharealike + boolean allows_derivatives + string steward_organization + string spdx_identifier + string description +} +ServiceLicense { + string service_name + uri service_url + string license + string license_notes +} +Project { + uriorcurie project_id + string project_name + string project_short_name + string project_description + ProjectStatusEnum project_status + uri project_url + date start_date + date end_date + stringList funding_source + string funding_amount + stringList objectives + stringList deliverables + uriorcurie organizing_body + uriorcurieList participating_custodians + uriorcurieList related_projects + uri documentation_url + string contact_email + stringList keywords + uriorcurieList project_identifiers +} +EncompassingBody { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + stringList service_offerings + string membership_criteria + uriorcurieList identifiers + uri website +} +UmbrellaOrganisation { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + stringList service_offerings + string membership_criteria + uriorcurieList identifiers + uri website +} +NetworkOrganisation { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + string service_offerings + string membership_criteria + uriorcurieList identifiers + uri website +} +Consortium { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + string service_offerings + string membership_criteria + uriorcurieList identifiers + uri website +} +Cooperative { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + stringList service_offerings + string membership_criteria + uriorcurieList identifiers + uri website + string data_license_policy +} +SocialMovement { + uriorcurie id + string organization_name + EncompassingBodyTypeEnum organization_type + string description + string legal_form + date founding_date + date dissolution_date + uriorcurieList member_custodians + string governance_authority + string service_offerings + string membership_criteria + uriorcurieList identifiers + uri website + string data_license_policy +} +FeaturePlace { + FeatureTypeEnum feature_type + string feature_name + string feature_language + string feature_description + string feature_note + date valid_from + date valid_to +} +CollectionManagementSystem { + uriorcurie cms_id + string cms_product_name + string cms_product_version + string cms_category + boolean open_source + string license + string vendor_name + uri vendor_url + uri documentation_url + stringList programming_languages + uri repository_url + stringList supported_metadata_standards + boolean iiif_compatible + boolean linked_data_export + boolean api_available + date deployment_date +} +Jurisdiction { + string jurisdiction_id + string jurisdiction_type + string country + string subregion + string settlement + string supranational_code + string gleif_jurisdiction_code + LegalSystemTypeEnum legal_system_type + string description +} +TradeRegister { + string register_id + string register_name + string register_name_local + string register_abbreviation + string register_type + string jurisdiction + string maintained_by + string gleif_ra_code + uri website + uri api_endpoint + string identifier_format + string description +} +StandardsOrganization { + uriorcurie id + string name + string abbreviation + EncompassingBodyTypeEnum organization_type + stringList member_countries + integer founded_year + string headquarters_country + uri website + string description + string standards_maintained + string wikidata_id +} +Standard { + uriorcurie id + string name + string abbreviation + string iso_standard_number + string geographic_scope + StandardScopeTypeEnum scope_type + IdentifierDomainEnum identifier_domain + uri website + string lookup_url_template + integer first_published_year + string current_version + string description + StandardTypeEnum standard_type + GovernanceModelEnum governance_model + string data_license +} +IdentifierFormat { + uriorcurie id + string format_name + string pattern + string example + boolean is_canonical + boolean is_uri_format + string transformation_to_canonical +} +AllocationAgency { + uriorcurie id + string name + string name_local + string abbreviation + string geographic_scope + AllocationDomainEnumList allocation_domain + string allocation_prefix + date allocation_start_date + date allocation_end_date + string is_active + uri website + string contact_email + uri allocation_policy_url + string description +} +ContributingAgency { + uriorcurie id + string contributor_code + string name + string name_local + string abbreviation + string authority_file_name + string authority_file_abbreviation + uri authority_file_url + AuthorityRecordFormatEnum record_format + AuthorityEntityTypeEnumList entity_types_covered + date contribution_start_date + string is_active + boolean governance_representative + uri website + string description + ConsortiumGovernanceRoleEnum governance_role +} + +CustodianLegalStatus ||--|| Custodian : "refers_to_custodian" +CustodianLegalStatus ||--|| LegalEntityType : "legal_entity_type" +CustodianLegalStatus ||--|| LegalName : "legal_name" +CustodianLegalStatus ||--|o LegalForm : "legal_form" +CustodianLegalStatus ||--}o RegistrationNumber : "registration_numbers" +CustodianLegalStatus ||--|o RegistrationAuthority : "registration_authority" +CustodianLegalStatus ||--|o TradeRegister : "primary_register" +CustodianLegalStatus ||--|o Jurisdiction : "legal_jurisdiction" +CustodianLegalStatus ||--|o TimeSpan : "temporal_extent" +CustodianLegalStatus ||--|o CustodianLegalStatus : "parent_custodian" +CustodianLegalStatus ||--|| LegalStatus : "legal_status" +CustodianLegalStatus ||--|o GovernanceStructure : "governance_structure" +CustodianLegalStatus ||--}| CustodianObservation : "was_derived_from" +CustodianLegalStatus ||--|| ReconstructionActivity : "was_generated_by" +CustodianLegalStatus ||--|o CustodianLegalStatus : "was_revision_of" +CustodianLegalStatus ||--}o CustodianIdentifier : "identifiers" +CustodianLegalStatus ||--}o LegalResponsibilityCollection : "collections_under_responsibility" +CustodianCollection ||--|o TimeSpan : "temporal_coverage" +CustodianCollection ||--}o CollectionManagementSystem : "managed_by_cms" +CustodianCollection ||--|o OrganizationalStructure : "managing_unit" +CustodianCollection ||--|| Custodian : "refers_to_custodian" +CustodianCollection ||--}| CustodianObservation : "was_derived_from" +DigitalPlatform ||--}| DigitalPlatformType : "platform_type" +DigitalPlatform ||--}o CollectionManagementSystem : "powered_by_cms" +DigitalPlatform ||--}o AuxiliaryDigitalPlatform : "auxiliary_platforms" +DigitalPlatform ||--|o TimeSpan : "temporal_extent" +DigitalPlatform ||--}o CustodianObservation : "was_derived_from" +DigitalPlatform ||--|o ReconstructionActivity : "was_generated_by" +DigitalPlatform ||--|| Custodian : "refers_to_custodian" +CustodianIdentifier ||--|o Custodian : "identifies_custodian" +CustodianIdentifier ||--|o Standard : "defined_by_standard" +CustodianIdentifier ||--|o AllocationAgency : "allocated_by" +CustodianIdentifier ||--|o IdentifierFormat : "identifier_format_used" +CustodianIdentifier ||--|o CustodianName : "also_identifies_name" +CustodianAppellation ||--|o CustodianName : "variant_of_name" +CustodianName ||--}o CustodianAppellation : "alternative_names" +CustodianName ||--|o TimeSpan : "name_validity_period" +CustodianName ||--|o CustodianName : "supersedes" +CustodianName ||--|o CustodianName : "superseded_by" +CustodianName ||--}| CustodianObservation : "was_derived_from" +CustodianName ||--|o ReconstructionActivity : "was_generated_by" +CustodianName ||--|| Custodian : "refers_to_custodian" +CustodianObservation ||--|| CustodianAppellation : "observed_name" +CustodianObservation ||--}o CustodianAppellation : "alternative_observed_names" +CustodianObservation ||--|| SourceDocument : "source" +CustodianObservation ||--|o LanguageCode : "language" +CustodianObservation ||--|o CustodianLegalStatus : "derived_from_entity" +CustodianObservation ||--|o ConfidenceMeasure : "confidence_score" +ReconstructionActivity ||--|o ReconstructionAgent : "responsible_agent" +ReconstructionActivity ||--|o TimeSpan : "temporal_extent" +ReconstructionActivity ||--}| CustodianObservation : "used" +ReconstructionActivity ||--|o ConfidenceMeasure : "confidence_score" +Custodian ||--|o DataLicensePolicy : "data_license_policy" +Custodian ||--}o Project : "participated_in_projects" +CustodianType ||--|o CustodianType : "broader_type" +CustodianType ||--}o CustodianType : "narrower_types" +CustodianType ||--}o CustodianType : "related_types" +ArchiveOrganizationType ||--|| CustodianType : "inherits" +ArchiveOrganizationType ||--|o ArchiveOrganizationType : "broader_type" +ArchiveOrganizationType ||--}o CustodianType : "narrower_types" +ArchiveOrganizationType ||--}o CustodianType : "related_types" +MuseumType ||--|| CustodianType : "inherits" +MuseumType ||--|o MuseumType : "broader_type" +MuseumType ||--}o CustodianType : "narrower_types" +MuseumType ||--}o CustodianType : "related_types" +LibraryType ||--|| CustodianType : "inherits" +LibraryType ||--|o LibraryType : "broader_type" +LibraryType ||--}o CustodianType : "narrower_types" +LibraryType ||--}o CustodianType : "related_types" +GalleryType ||--|| CustodianType : "inherits" +GalleryType ||--|o GalleryType : "broader_type" +GalleryType ||--}o CustodianType : "narrower_types" +GalleryType ||--}o CustodianType : "related_types" +ResearchOrganizationType ||--|| CustodianType : "inherits" +ResearchOrganizationType ||--|o ResearchOrganizationType : "broader_type" +ResearchOrganizationType ||--}o CustodianType : "narrower_types" +ResearchOrganizationType ||--}o CustodianType : "related_types" +OfficialInstitutionType ||--|| CustodianType : "inherits" +OfficialInstitutionType ||--|o CustodianType : "broader_type" +OfficialInstitutionType ||--}o CustodianType : "narrower_types" +OfficialInstitutionType ||--}o CustodianType : "related_types" +BioCustodianType ||--|| CustodianType : "inherits" +BioCustodianType ||--|o CustodianType : "broader_type" +BioCustodianType ||--}o CustodianType : "narrower_types" +BioCustodianType ||--}o CustodianType : "related_types" +EducationProviderType ||--|| CustodianType : "inherits" +EducationProviderType ||--|o CustodianType : "broader_type" +EducationProviderType ||--}o CustodianType : "narrower_types" +EducationProviderType ||--}o CustodianType : "related_types" +HeritageSocietyType ||--|| CustodianType : "inherits" +HeritageSocietyType ||--|o CustodianType : "broader_type" +HeritageSocietyType ||--}o CustodianType : "narrower_types" +HeritageSocietyType ||--}o CustodianType : "related_types" +FeatureCustodianType ||--|| CustodianType : "inherits" +FeatureCustodianType ||--|o CustodianType : "broader_type" +FeatureCustodianType ||--}o CustodianType : "narrower_types" +FeatureCustodianType ||--}o CustodianType : "related_types" +IntangibleHeritageGroupType ||--|| CustodianType : "inherits" +IntangibleHeritageGroupType ||--|o CustodianType : "broader_type" +IntangibleHeritageGroupType ||--}o CustodianType : "narrower_types" +IntangibleHeritageGroupType ||--}o CustodianType : "related_types" +PersonalCollectionType ||--|| CustodianType : "inherits" +PersonalCollectionType ||--|o CustodianType : "broader_type" +PersonalCollectionType ||--}o CustodianType : "narrower_types" +PersonalCollectionType ||--}o CustodianType : "related_types" +HolySacredSiteType ||--|| CustodianType : "inherits" +HolySacredSiteType ||--|o CustodianType : "broader_type" +HolySacredSiteType ||--}o CustodianType : "narrower_types" +HolySacredSiteType ||--}o CustodianType : "related_types" +DigitalPlatformType ||--|| CustodianType : "inherits" +DigitalPlatformType ||--|o CustodianType : "broader_type" +DigitalPlatformType ||--}o CustodianType : "narrower_types" +DigitalPlatformType ||--}o CustodianType : "related_types" +NonProfitType ||--|| CustodianType : "inherits" +NonProfitType ||--|o CustodianType : "broader_type" +NonProfitType ||--}o CustodianType : "narrower_types" +NonProfitType ||--}o CustodianType : "related_types" +TasteScentHeritageType ||--|| CustodianType : "inherits" +TasteScentHeritageType ||--|o CustodianType : "broader_type" +TasteScentHeritageType ||--}o CustodianType : "narrower_types" +TasteScentHeritageType ||--}o CustodianType : "related_types" +CommercialOrganizationType ||--|| CustodianType : "inherits" +CommercialOrganizationType ||--|o CustodianType : "broader_type" +CommercialOrganizationType ||--}o CustodianType : "narrower_types" +CommercialOrganizationType ||--}o CustodianType : "related_types" +MixedCustodianType ||--|| CustodianType : "inherits" +MixedCustodianType ||--|o CustodianType : "broader_type" +MixedCustodianType ||--}o CustodianType : "narrower_types" +MixedCustodianType ||--}o CustodianType : "related_types" +UnspecifiedType ||--|| CustodianType : "inherits" +UnspecifiedType ||--|o CustodianType : "broader_type" +UnspecifiedType ||--}o CustodianType : "narrower_types" +UnspecifiedType ||--}o CustodianType : "related_types" +CustodianPlace ||--|o Country : "country" +CustodianPlace ||--|o Subregion : "subregion" +CustodianPlace ||--|o Settlement : "settlement" +CustodianPlace ||--|o FeaturePlace : "has_feature_type" +CustodianPlace ||--}o AuxiliaryPlace : "auxiliary_places" +CustodianPlace ||--}| CustodianObservation : "was_derived_from" +CustodianPlace ||--|o ReconstructionActivity : "was_generated_by" +CustodianPlace ||--|| Custodian : "refers_to_custodian" +AuxiliaryPlace ||--|o Country : "country" +AuxiliaryPlace ||--|o Subregion : "subregion" +AuxiliaryPlace ||--|o Settlement : "settlement" +AuxiliaryPlace ||--|o FeaturePlace : "has_feature_type" +AuxiliaryPlace ||--}o OrganizationBranch : "hosts_branch" +AuxiliaryPlace ||--|| CustodianPlace : "is_auxiliary_of" +AuxiliaryPlace ||--|o TimeSpan : "temporal_extent" +AuxiliaryPlace ||--}o CustodianObservation : "was_derived_from" +AuxiliaryPlace ||--|o ReconstructionActivity : "was_generated_by" +AuxiliaryPlace ||--|| Custodian : "refers_to_custodian" +OrganizationalStructure ||--|o OrganizationalStructure : "parent_unit" +OrganizationalStructure ||--}o PersonObservation : "staff_members" +OrganizationalStructure ||--}o CustodianCollection : "managed_collections" +OrganizationalStructure ||--}o AuxiliaryPlace : "located_at" +OrganizationalStructure ||--|| Custodian : "refers_to_custodian" +OrganizationBranch ||--}o AuxiliaryPlace : "located_at" +OrganizationBranch ||--}o OrganizationalStructure : "has_operational_unit" +OrganizationBranch ||--}o OrganizationBranch : "has_sub_branch" +OrganizationBranch ||--|o TimeSpan : "temporal_extent" +OrganizationBranch ||--}o CustodianObservation : "was_derived_from" +OrganizationBranch ||--|o ReconstructionActivity : "was_generated_by" +OrganizationBranch ||--|| Custodian : "refers_to_custodian" +AuxiliaryDigitalPlatform ||--|| DigitalPlatform : "is_auxiliary_of" +AuxiliaryDigitalPlatform ||--|o TimeSpan : "temporal_extent" +AuxiliaryDigitalPlatform ||--}o CollectionManagementSystem : "powered_by_cms" +AuxiliaryDigitalPlatform ||--}o CustodianObservation : "was_derived_from" +AuxiliaryDigitalPlatform ||--|o ReconstructionActivity : "was_generated_by" +AuxiliaryDigitalPlatform ||--|| Custodian : "refers_to_custodian" +LegalResponsibilityCollection ||--|| CustodianCollection : "inherits" +LegalResponsibilityCollection ||--|| CustodianLegalStatus : "responsible_legal_entity" +LegalResponsibilityCollection ||--|o TimeSpan : "temporal_coverage" +LegalResponsibilityCollection ||--}o CollectionManagementSystem : "managed_by_cms" +LegalResponsibilityCollection ||--|o OrganizationalStructure : "managing_unit" +LegalResponsibilityCollection ||--|| Custodian : "refers_to_custodian" +LegalResponsibilityCollection ||--}| CustodianObservation : "was_derived_from" +OrganizationalChangeEvent ||--}o OrganizationalStructure : "affected_units" +OrganizationalChangeEvent ||--}o OrganizationalStructure : "resulting_units" +OrganizationalChangeEvent ||--|| Custodian : "parent_custodian" +PersonObservation ||--|o OrganizationalStructure : "unit_affiliation" +PersonObservation ||--|o SourceDocument : "observation_source" +PersonObservation ||--|o OrganizationalChangeEvent : "affected_by_event" +LegalForm ||--|| Country : "country_code" +LegalForm ||--|| LegalEntityType : "legal_entity_type" +LegalForm ||--|o LegalForm : "parent_form" +LegalName ||--|o TimeSpan : "temporal_validity" +RegistrationNumber ||--|o TradeRegister : "trade_register" +RegistrationNumber ||--|| TimeSpan : "temporal_validity" +RegistrationAuthority ||--|| Country : "country" +RegistrationAuthority ||--|o RegistrationAuthority : "predecessor" +RegistrationAuthority ||--}o Standard : "standards_maintained" +RegistrationAuthority ||--}o AllocationAgency : "allocation_agencies" +LegalStatus ||--|| TimeSpan : "temporal_validity" +LegalStatus ||--|o Jurisdiction : "jurisdiction" +Subregion ||--|| Country : "country" +Settlement ||--|| Country : "country" +Settlement ||--|o Subregion : "subregion" +DataLicensePolicy ||--|| DataLicense : "default_license" +DataLicensePolicy ||--}o ServiceLicense : "service_specific_licenses" +ServiceLicense ||--|| DataLicense : "license" +EncompassingBody ||--|o DataLicensePolicy : "data_license_policy" +EncompassingBody ||--}o Project : "projects" +UmbrellaOrganisation ||--|| EncompassingBody : "inherits" +UmbrellaOrganisation ||--|o DataLicensePolicy : "data_license_policy" +UmbrellaOrganisation ||--}o Project : "projects" +NetworkOrganisation ||--|| EncompassingBody : "inherits" +NetworkOrganisation ||--|o DataLicensePolicy : "data_license_policy" +NetworkOrganisation ||--}o Project : "projects" +Consortium ||--|| EncompassingBody : "inherits" +Consortium ||--|o DataLicensePolicy : "data_license_policy" +Consortium ||--}o Project : "projects" +Cooperative ||--|| EncompassingBody : "inherits" +Cooperative ||--|o DataLicensePolicy : "data_license_policy" +Cooperative ||--}o Project : "projects" +SocialMovement ||--|| EncompassingBody : "inherits" +SocialMovement ||--|| DataLicensePolicy : "data_license_policy" +SocialMovement ||--}o Project : "projects" +FeaturePlace ||--|| CustodianPlace : "classifies_place" +FeaturePlace ||--}| CustodianObservation : "was_derived_from" +FeaturePlace ||--|o ReconstructionActivity : "was_generated_by" +CollectionManagementSystem ||--}o DigitalPlatform : "powers_platform" +CollectionManagementSystem ||--}o CustodianCollection : "manages_collection" +CollectionManagementSystem ||--}o Custodian : "used_by_custodian" +CollectionManagementSystem ||--|o TimeSpan : "temporal_extent" +CollectionManagementSystem ||--}o CustodianObservation : "was_derived_from" +CollectionManagementSystem ||--|o ReconstructionActivity : "was_generated_by" +CollectionManagementSystem ||--|| Custodian : "refers_to_custodian" +Jurisdiction ||--|o Country : "country" +Jurisdiction ||--|o Subregion : "subregion" +Jurisdiction ||--|o Settlement : "settlement" +TradeRegister ||--|| Jurisdiction : "jurisdiction" +TradeRegister ||--|| RegistrationAuthority : "maintained_by" +StandardsOrganization ||--}o Standard : "standards_maintained" +Standard ||--|| StandardsOrganization : "defined_by" +Standard ||--|o RegistrationAuthority : "registration_authority" +Standard ||--}o Country : "geographic_scope" +Standard ||--}o IdentifierFormat : "formats" +Standard ||--|o IdentifierFormat : "canonical_format" +Standard ||--}o ContributingAgency : "contributing_agencies" +Standard ||--|o StandardsOrganization : "governance_council" +AllocationAgency ||--}| Country : "geographic_scope" +AllocationAgency ||--}o Subregion : "subregion_scope" +AllocationAgency ||--}| Standard : "allocates_for" +AllocationAgency ||--|o RegistrationAuthority : "parent_registration_authority" +ContributingAgency ||--|| Country : "country" +ContributingAgency ||--}| Standard : "contributes_to" +ContributingAgency ||--|o AllocationAgency : "also_allocation_agency" +ContributingAgency ||--}o StandardsOrganization : "member_of" + +``` diff --git a/schemas/20251121/uml/mermaid/complete_schema_20251128_125232.mmd b/schemas/20251121/uml/mermaid/complete_schema_20251128_125232.mmd new file mode 100644 index 0000000000..a81f40a605 --- /dev/null +++ b/schemas/20251121/uml/mermaid/complete_schema_20251128_125232.mmd @@ -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 + <> 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 + <> 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 + <> 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 diff --git a/scripts/export_nde_map_json.py b/scripts/export_nde_map_json.py index 6406026141..07874c9a1c 100644 --- a/scripts/export_nde_map_json.py +++ b/scripts/export_nde_map_json.py @@ -4,6 +4,8 @@ Export NDE Enriched Institutions to JSON for Frontend Map Reads the enriched YAML files and produces a lightweight JSON file suitable for the React/Leaflet map component. + +Now includes Google Maps enrichment data (ratings, photos, reviews, opening hours). """ import json @@ -73,10 +75,26 @@ def extract_institution_data(entry_data: dict) -> dict | None: # Get original entry data original = entry_data.get('original_entry', {}) 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 - coords = enrichment.get('wikidata_coordinates', {}) - if not coords or not coords.get('latitude') or not coords.get('longitude'): + # Get coordinates - prefer Google Maps (more precise), fall back to Wikidata + lat, lon = None, None + + # 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 # Get institution type (first one if list) @@ -90,25 +108,44 @@ def extract_institution_data(entry_data: dict) -> dict | None: 'Unknown Institution' ) - # Get city + # Get city - prefer Google Maps short address city = original.get('plaatsnaam_bezoekadres', '') - # Get description - prefer Dutch, fall back to English - description = ( - enrichment.get('wikidata_description_nl') or - enrichment.get('wikidata_description_en') or + # Get description - prefer Dutch, fall back to English, then Exa, then Google editorial + # Handle various types safely + description = '' + 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 wikidata_id = enrichment.get('wikidata_entity_id', '') - return { - 'lat': coords['latitude'], - 'lon': coords['longitude'], + # Build result with base data + result = { + 'lat': lat, + 'lon': lon, 'name': name, 'city': city, 'type': inst_type, @@ -118,6 +155,73 @@ def extract_institution_data(entry_data: dict) -> dict | None: 'wikidata_id': wikidata_id, '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(): @@ -178,6 +282,20 @@ def main(): print(f"\n📊 Distribution by type:") for t, count in sorted(type_counts.items(), key=lambda x: -x[1]): 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__': diff --git a/scripts/export_nde_stats_json.py b/scripts/export_nde_stats_json.py index 8e6da88e11..f8101ece16 100644 --- a/scripts/export_nde_stats_json.py +++ b/scripts/export_nde_stats_json.py @@ -125,6 +125,15 @@ def process_enriched_files(enriched_dir: Path) -> dict: 'has_image': 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(), } @@ -199,6 +208,29 @@ def process_enriched_files(enriched_dir: Path) -> dict: label = inst.get('label_en', inst.get('label_nl', 'Unknown')) 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 inception = enrichment.get('wikidata_inception', {}) if inception and inception.get('time'): @@ -319,6 +351,28 @@ def format_for_d3(stats: dict) -> dict: '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 { 'generated_at': datetime.now(timezone.utc).isoformat(), 'total_entries': total, @@ -326,6 +380,8 @@ def format_for_d3(stats: dict) -> dict: 'total_institutions': total, 'with_coordinates': stats['identifiers']['has_coordinates'], '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_provinces': len(stats['provinces']), 'institution_types': len(stats['institution_types']), @@ -337,6 +393,7 @@ def format_for_d3(stats: dict) -> dict: 'wikidata_types': wikidata_types, 'enrichment_status': enrichment_status, 'identifier_coverage': identifier_coverage, + 'google_maps_coverage': google_maps_coverage, 'founding_timeline': founding_timeline, 'provinces': province_data, } diff --git a/scripts/generate_mermaid_modular.py b/scripts/generate_mermaid_modular.py index 4a8395657f..d58888116f 100755 --- a/scripts/generate_mermaid_modular.py +++ b/scripts/generate_mermaid_modular.py @@ -12,6 +12,12 @@ import sys from pathlib import Path 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: """ Generate Mermaid ER diagram from SchemaView. @@ -22,8 +28,11 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str: lines = ["```mermaid"] 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 - for class_name in sv.all_classes(): + for class_name in all_classes: cls = sv.get_class(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" # 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 # Format: type attribute_name @@ -53,11 +63,11 @@ def generate_mermaid_from_schemaview(sv: SchemaView) -> str: lines.append("") # Generate relationships - for class_name in sv.all_classes(): + for class_name in all_classes: cls = sv.get_class(class_name) - # Inheritance relationships - if cls.is_a: + # Inheritance relationships - skip if parent is excluded + if cls.is_a and cls.is_a not in EXCLUDED_CLASSES: # Render inheritance as a relationship in ER diagram # Using "inherits" label to indicate subclass relationship 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 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 if slot.multivalued: if slot.required: