Schema Migration Fixes: - Fix YAML import indentation in ~650 slot files (linkml:types and enum imports) - Rename slot reference: has_or_had_holds_record_set_type → hold_or_held_record_set_type (70+ archive class files, main schema, manifest.json) - Fix ProvenanceBlock.yaml: remove invalid any_of range, use string with multivalued - Fix has_or_had_provenance.yaml: remove nested template_specificity from annotations Validation Status: - 0 errors (was multiple import/reference errors) - 30 warnings (missing descriptions on inline slots, intentional SCREAMING_CASE names) Files changed: ~3,850 (slots, classes, main schema, manifest)
210 lines
6.9 KiB
YAML
210 lines
6.9 KiB
YAML
# AddressComponent - Generic address component class
|
|
# Source-agnostic representation of individual address parts
|
|
# Refactored: 2026-01-12 - Removed Google Maps-specific references per user guidance
|
|
# Rule 38 compliant: All slots imported from modules/slots/
|
|
|
|
id: https://nde.nl/ontology/hc/classes/AddressComponent
|
|
name: AddressComponent
|
|
title: AddressComponent
|
|
|
|
prefixes:
|
|
linkml: https://w3id.org/linkml/
|
|
hc: https://nde.nl/ontology/hc/
|
|
schema: http://schema.org/
|
|
vcard: http://www.w3.org/2006/vcard/ns#
|
|
locn: http://www.w3.org/ns/locn#
|
|
|
|
imports:
|
|
- linkml:types
|
|
# Centralized slots (Rule 38 compliant)
|
|
- ../slots/long_name
|
|
- ../slots/short_name
|
|
- ../slots/component_type
|
|
|
|
default_range: string
|
|
|
|
classes:
|
|
AddressComponent:
|
|
class_uri: hc:AddressComponent
|
|
description: |
|
|
A single component of a structured address.
|
|
|
|
**PURPOSE**:
|
|
|
|
AddressComponent represents one discrete element of an address, such as
|
|
the street number, street name, city, region, or country. This enables:
|
|
- Parsing addresses from various sources into standardized components
|
|
- Normalizing address data from different formats/APIs
|
|
- Supporting multilingual address representations (long_name vs short_name)
|
|
|
|
**COMPONENT STRUCTURE**:
|
|
|
|
Each AddressComponent has:
|
|
- `long_name`: Full form of the value (e.g., "Netherlands", "Noord-Holland")
|
|
- `short_name`: Abbreviated form (e.g., "NL", "NH") - may equal long_name
|
|
- `component_type`: Semantic type(s) of this component (e.g., "country", "locality")
|
|
|
|
**STANDARD COMPONENT TYPES**:
|
|
|
|
| Type | Description | Example long_name | Example short_name |
|
|
|------|-------------|-------------------|-------------------|
|
|
| `street_number` | House/building number | "1", "221B" | same |
|
|
| `route` | Street/road name | "Museumstraat" | same |
|
|
| `locality` | City/town/village | "Amsterdam" | same |
|
|
| `postal_code` | ZIP/postal code | "1071 XX" | same |
|
|
| `subregion` | County/district | "Amsterdam" | same |
|
|
| `region` | State/province | "Noord-Holland" | "NH" |
|
|
| `country` | Country | "Netherlands" | "NL" |
|
|
| `premise` | Building/complex name | "Rijksmuseum" | same |
|
|
| `subpremise` | Unit/floor/suite | "Floor 3" | "3" |
|
|
|
|
**RELATIONSHIP TO Address CLASS**:
|
|
|
|
AddressComponent is used for:
|
|
1. **Parsing workflows**: Breaking down raw address strings into components
|
|
2. **Normalization**: Standardizing addresses from different sources
|
|
3. **Intermediate representation**: Before constructing a full Address object
|
|
|
|
The Address class provides the final, ontology-aligned representation with
|
|
dedicated slots (street_name, locality, region, country_name, etc.).
|
|
|
|
```
|
|
Raw Address Data (any source)
|
|
│
|
|
└── parse → AddressComponent[] # Intermediate representation
|
|
│
|
|
└── normalize → Address # vCard/LOCN aligned
|
|
```
|
|
|
|
**USAGE EXAMPLES**:
|
|
|
|
```yaml
|
|
# Street number component
|
|
- long_name: "1"
|
|
short_name: "1"
|
|
component_type: ["street_number"]
|
|
|
|
# Province with abbreviation
|
|
- long_name: "Noord-Holland"
|
|
short_name: "NH"
|
|
component_type: ["region"]
|
|
|
|
# Country with ISO code
|
|
- long_name: "Netherlands"
|
|
short_name: "NL"
|
|
component_type: ["country"]
|
|
```
|
|
|
|
**SOURCE-AGNOSTIC DESIGN**:
|
|
|
|
This class is designed to work with addresses from ANY source:
|
|
- Website scraping
|
|
- Registry data (ISIL, KvK, etc.)
|
|
- API responses (when normalized)
|
|
- Manual data entry
|
|
- OCR/document extraction
|
|
|
|
API-specific raw data formats are handled by Endpoint classes.
|
|
|
|
close_mappings:
|
|
- locn:AddressRepresentation
|
|
related_mappings:
|
|
- schema:PostalAddress
|
|
- vcard:Address
|
|
|
|
slots:
|
|
- long_name
|
|
- short_name
|
|
- component_type
|
|
|
|
slot_usage:
|
|
long_name:
|
|
range: string
|
|
required: false
|
|
description: Full form of the address component value
|
|
examples:
|
|
- value: "Netherlands"
|
|
description: Country full name
|
|
- value: "Noord-Holland"
|
|
description: Province full name
|
|
- value: "Museumstraat"
|
|
description: Street name
|
|
short_name:
|
|
range: string
|
|
required: false
|
|
description: Abbreviated or short form of the component value (may equal long_name)
|
|
examples:
|
|
- value: "NL"
|
|
description: ISO 3166-1 alpha-2 country code
|
|
- value: "NH"
|
|
description: Province abbreviation
|
|
- value: "Museumstraat"
|
|
description: Same as long_name when no abbreviation exists
|
|
component_type:
|
|
range: string
|
|
multivalued: true
|
|
inlined_as_list: true
|
|
required: false
|
|
description: Semantic type(s) of this address component
|
|
examples:
|
|
- value: ["street_number"]
|
|
description: House/building number
|
|
- value: ["locality"]
|
|
description: City or town
|
|
- value: ["region"]
|
|
description: State or province
|
|
- value: ["country"]
|
|
description: Country
|
|
|
|
comments:
|
|
- Source-agnostic representation of address components
|
|
- Use for parsing/normalization workflows before constructing Address objects
|
|
- Component types follow common geographic hierarchy conventions
|
|
- Multiple types allowed for components that serve multiple roles
|
|
|
|
see_also:
|
|
- https://nde.nl/ontology/hc/classes/Address
|
|
- https://www.w3.org/ns/locn#Address
|
|
|
|
examples:
|
|
- value:
|
|
long_name: "1"
|
|
short_name: "1"
|
|
component_type: ["street_number"]
|
|
description: Street number component
|
|
|
|
- value:
|
|
long_name: "Museumstraat"
|
|
short_name: "Museumstraat"
|
|
component_type: ["route"]
|
|
description: Street name component
|
|
|
|
- value:
|
|
long_name: "Amsterdam"
|
|
short_name: "Amsterdam"
|
|
component_type: ["locality"]
|
|
description: City component
|
|
|
|
- value:
|
|
long_name: "Noord-Holland"
|
|
short_name: "NH"
|
|
component_type: ["region"]
|
|
description: Province component with abbreviation
|
|
|
|
- value:
|
|
long_name: "Netherlands"
|
|
short_name: "NL"
|
|
component_type: ["country"]
|
|
description: Country component with ISO code
|
|
|
|
- value:
|
|
long_name: "1071 XX"
|
|
short_name: "1071 XX"
|
|
component_type: ["postal_code"]
|
|
description: Dutch postal code component
|
|
|
|
annotations:
|
|
specificity_score: 0.35
|
|
specificity_rationale: "Generic address parsing component. Broadly applicable across all address sources and custodian types."
|
|
custodian_types: '["*"]'
|
|
custodian_types_rationale: "Any custodian with address data may use address components during parsing/normalization."
|