From fc72cb18cfa9921084dfef1e7b3a75250c072589 Mon Sep 17 00:00:00 2001 From: Seth Fitzsimmons Date: Mon, 24 Aug 2026 13:39:16 -0700 Subject: [PATCH 01/14] feat(transportation)!: make segment connectors required `connectors` was optional with a `[]` default that its own `min_length=2` constraint rejected. Pydantic does not validate defaults unless `validate_default=True`, so the invalid value was accepted on the way in and refused on the way back out: a segment built without connectors dumped to `connectors: []`, which re-validation rejected. Every segment is physically connected to at least two connectors, and the published data agrees -- across all 350,469,378 segments in release 2026-08-19.0 there is not one null, empty, or single-element `connectors`. So the field becomes required rather than optional-with-a-default, and moves up beside `subtype` in the model's required section. The YAML schema gains `connectors` in its segment `required` list, dropping the matching `default: []` beside `minItems: 2`. Every valid segment example gains a two-connector array, and so does every segment counterexample that was not testing connectors, so each keeps failing only for the defect it names. Both corpora are updated: `reference/` (read by the test suite) and the root `examples/`/`counterexamples/` trees (the docs site symlinks `examples/`). `theme-type-mismatch.json` is left alone -- it declares `theme: buildings` with `type: segment` and never reaches a segment arm. Fixes #669 Signed-off-by: Seth Fitzsimmons --- .../common/names/names-invalid-language.yaml | 5 +++++ .../common/names/names-invalid-variant.yaml | 5 +++++ .../transportation/segment/bad-geometry-type.json | 4 ++++ .../segment/bad-lr-width-missing-items.json | 4 ++++ .../transportation/segment/bad-lr-width.json | 4 ++++ .../transportation/segment/missing-subtype.json | 6 +++++- .../transportation/segment/missing-version.json | 6 +++++- .../segment/property-subtype-mismatch.yaml | 5 +++++ .../transportation/segment/rail/bad-rail-class.json | 6 +++++- .../segment/rail/bad-rail-flags-duplicate-flag.json | 4 ++++ .../segment/rail/bad-rail-flags-invalid-flag.json | 4 ++++ .../transportation/segment/road/bad-road-class.json | 6 +++++- .../segment/road/bad-road-flags-duplicate-flag.json | 4 ++++ .../segment/road/bad-road-flags-invalid-flag.json | 4 ++++ .../road/bad-road-flags-invalid-is_private-flag.json | 4 ++++ .../road/bad-road-flags-invalid-string-value.json | 4 ++++ .../road/bad-road-invalid-temporal-scoping.json | 4 ++++ .../road/bad-road-surface-invalid-rule-value.json | 4 ++++ .../access/bad-access-unsupported-properties.yaml | 5 +++++ .../unsupported-properties.yaml | 5 +++++ .../speed_limits/bad-speed-limits-empty-rule.json | 4 ++++ .../speed_limits/bad-speed-limits-invalid-type.json | 4 ++++ .../names/names-lexically-valid-language-tag.yaml | 5 +++++ examples/common/timestamp/timestamp-leap-second.yaml | 5 +++++ .../docusaurus/access-restriction-01-blanket.yaml | 5 +++++ ...access-restriction-02-private-with-deliveries.yaml | 5 +++++ ...estriction-03-motor-vehicles-destination-only.yaml | 5 +++++ .../docusaurus/access-restriction-04-axle-limit.yaml | 5 +++++ .../transportation/docusaurus/geometric-scoping.yaml | 5 +++++ .../docusaurus/speed-limits-01-simple.yaml | 5 +++++ .../docusaurus/speed-limits-02-directional.yaml | 5 +++++ .../docusaurus/speed-limits-03-variable-max.yaml | 5 +++++ .../docusaurus/subjective-heading-scoping.yaml | 5 +++++ .../docusaurus/subjective-status-scoping.yaml | 5 +++++ .../docusaurus/subjective-usage-purpose-scoping.yaml | 5 +++++ .../subjective-vehicle-attributes-scoping.yaml | 5 +++++ .../transportation/docusaurus/temporal-scoping.yaml | 5 +++++ .../transportation/segment/missing-update-time.json | 6 +++++- .../transportation/segment/rail/rail-freight.yaml | 5 +++++ examples/transportation/segment/rail/rail-tunnel.yaml | 5 +++++ .../road/restrictions/road-restrictions-access.yaml | 5 +++++ .../road-restrictions-prohibited-transitions.yaml | 5 +++++ .../restrictions/road-restrictions-speed-limits.yaml | 5 +++++ .../transportation/segment/road/road-abandoned.yaml | 5 +++++ .../segment/road/road-acesss-restriction.yaml | 5 +++++ examples/transportation/segment/road/road-alley.yaml | 5 +++++ .../transportation/segment/road/road-covered.yaml | 5 +++++ .../transportation/segment/road/road-indoors.yaml | 5 +++++ examples/transportation/segment/road/road-level.yaml | 5 +++++ examples/transportation/segment/road/road-path.yaml | 5 +++++ .../changelog.d/669.breaking.md | 1 + .../overture/schema/transportation/segment/_common.py | 11 ++++++----- .../tests/segment_baseline_schema.json | 8 ++++---- .../common/names/names-invalid-language.yaml | 5 +++++ .../common/names/names-invalid-variant.yaml | 5 +++++ .../transportation/segment/bad-geometry-type.json | 4 ++++ .../segment/bad-lr-width-missing-items.json | 4 ++++ .../transportation/segment/bad-lr-width.json | 4 ++++ .../segment/bad-rail-flags-wrong-subtype.yaml | 5 +++++ .../transportation/segment/missing-subtype.json | 6 +++++- .../transportation/segment/missing-version.json | 6 +++++- .../segment/property-subtype-mismatch.yaml | 5 +++++ .../segment/rail/bad-rail-class-invalid.yaml | 5 +++++ .../transportation/segment/rail/bad-rail-class.json | 6 +++++- .../segment/rail/bad-rail-flags-duplicate-flag.json | 4 ++++ .../segment/rail/bad-rail-flags-invalid-flag.json | 4 ++++ .../segment/road/bad-road-class-invalid.yaml | 5 +++++ .../transportation/segment/road/bad-road-class.json | 6 +++++- .../segment/road/bad-road-flags-duplicate-flag.json | 4 ++++ .../segment/road/bad-road-flags-invalid-flag.json | 4 ++++ .../road/bad-road-flags-invalid-is_private-flag.json | 4 ++++ .../road/bad-road-flags-invalid-string-value.json | 4 ++++ .../road/bad-road-invalid-temporal-scoping.json | 4 ++++ .../road/bad-road-surface-invalid-rule-value.json | 4 ++++ .../access/bad-access-unsupported-properties.yaml | 5 +++++ .../unsupported-properties.yaml | 5 +++++ .../speed_limits/bad-speed-limits-empty-rule.json | 4 ++++ .../speed_limits/bad-speed-limits-invalid-type.json | 4 ++++ .../names/names-lexically-valid-language-tag.yaml | 5 +++++ .../common/timestamp/timestamp-leap-second.yaml | 5 +++++ .../docusaurus/access-restriction-01-blanket.yaml | 5 +++++ ...access-restriction-02-private-with-deliveries.yaml | 5 +++++ ...estriction-03-motor-vehicles-destination-only.yaml | 5 +++++ .../docusaurus/access-restriction-04-axle-limit.yaml | 5 +++++ .../transportation/docusaurus/geometric-scoping.yaml | 5 +++++ .../docusaurus/speed-limits-01-simple.yaml | 5 +++++ .../docusaurus/speed-limits-02-directional.yaml | 5 +++++ .../docusaurus/speed-limits-03-variable-max.yaml | 5 +++++ .../docusaurus/subjective-heading-scoping.yaml | 5 +++++ .../docusaurus/subjective-status-scoping.yaml | 5 +++++ .../docusaurus/subjective-usage-purpose-scoping.yaml | 5 +++++ .../subjective-vehicle-attributes-scoping.yaml | 5 +++++ .../transportation/docusaurus/temporal-scoping.yaml | 5 +++++ .../transportation/segment/missing-update-time.json | 6 +++++- .../transportation/segment/rail/rail-freight.yaml | 5 +++++ .../transportation/segment/rail/rail-tunnel.yaml | 5 +++++ .../road/restrictions/road-restrictions-access.yaml | 5 +++++ .../road-restrictions-prohibited-transitions.yaml | 5 +++++ .../restrictions/road-restrictions-speed-limits.yaml | 5 +++++ .../transportation/segment/road/road-abandoned.yaml | 5 +++++ .../segment/road/road-acesss-restriction.yaml | 5 +++++ .../transportation/segment/road/road-alley.yaml | 5 +++++ .../transportation/segment/road/road-covered.yaml | 5 +++++ .../transportation/segment/road/road-indoors.yaml | 5 +++++ .../transportation/segment/road/road-level.yaml | 5 +++++ .../transportation/segment/road/road-path.yaml | 5 +++++ schema/transportation/segment.yaml | 3 +-- 107 files changed, 501 insertions(+), 21 deletions(-) create mode 100644 packages/overture-schema-theme-transportation/changelog.d/669.breaking.md diff --git a/counterexamples/common/names/names-invalid-language.yaml b/counterexamples/common/names/names-invalid-language.yaml index e3345152d..01a43481a 100644 --- a/counterexamples/common/names/names-invalid-language.yaml +++ b/counterexamples/common/names/names-invalid-language.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Foo common: diff --git a/counterexamples/common/names/names-invalid-variant.yaml b/counterexamples/common/names/names-invalid-variant.yaml index 5949ecd0a..3714a66d8 100644 --- a/counterexamples/common/names/names-invalid-variant.yaml +++ b/counterexamples/common/names/names-invalid-variant.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Bar rules: diff --git a/counterexamples/transportation/segment/bad-geometry-type.json b/counterexamples/transportation/segment/bad-geometry-type.json index 050848739..b6b86fb8a 100644 --- a/counterexamples/transportation/segment/bad-geometry-type.json +++ b/counterexamples/transportation/segment/bad-geometry-type.json @@ -12,6 +12,10 @@ "theme": "transportation", "type": "segment", "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "version": 15 } } diff --git a/counterexamples/transportation/segment/bad-lr-width-missing-items.json b/counterexamples/transportation/segment/bad-lr-width-missing-items.json index 4f66c9fd3..f4daf28d7 100644 --- a/counterexamples/transportation/segment/bad-lr-width-missing-items.json +++ b/counterexamples/transportation/segment/bad-lr-width-missing-items.json @@ -11,6 +11,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "width_rules": [], "ext_expected_errors": [ "minItems: got 0, want 1" diff --git a/counterexamples/transportation/segment/bad-lr-width.json b/counterexamples/transportation/segment/bad-lr-width.json index d09dff370..d6e95cbd5 100644 --- a/counterexamples/transportation/segment/bad-lr-width.json +++ b/counterexamples/transportation/segment/bad-lr-width.json @@ -11,6 +11,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "width_rules": [ { "between" : [0, 0.5], diff --git a/counterexamples/transportation/segment/missing-subtype.json b/counterexamples/transportation/segment/missing-subtype.json index f1e248232..b43a7d684 100644 --- a/counterexamples/transportation/segment/missing-subtype.json +++ b/counterexamples/transportation/segment/missing-subtype.json @@ -11,6 +11,10 @@ ], "theme": "transportation", "type": "segment", - "version": 26 + "version": 26, + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/counterexamples/transportation/segment/missing-version.json b/counterexamples/transportation/segment/missing-version.json index 6c8f16768..0c7c013c3 100644 --- a/counterexamples/transportation/segment/missing-version.json +++ b/counterexamples/transportation/segment/missing-version.json @@ -11,6 +11,10 @@ ], "theme": "transportation", "type": "segment", - "subtype": "water" + "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/counterexamples/transportation/segment/property-subtype-mismatch.yaml b/counterexamples/transportation/segment/property-subtype-mismatch.yaml index 125526b27..cdfd4d64b 100644 --- a/counterexamples/transportation/segment/property-subtype-mismatch.yaml +++ b/counterexamples/transportation/segment/property-subtype-mismatch.yaml @@ -10,6 +10,11 @@ properties: version: 1 # Segment of subtype rail has a road flag (should be disallowed) subtype: rail + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_flags: - values: [is_indoor] ext_expected_errors: diff --git a/counterexamples/transportation/segment/rail/bad-rail-class.json b/counterexamples/transportation/segment/rail/bad-rail-class.json index bfac6b188..3845cc89e 100644 --- a/counterexamples/transportation/segment/rail/bad-rail-class.json +++ b/counterexamples/transportation/segment/rail/bad-rail-class.json @@ -13,6 +13,10 @@ "type": "segment", "version": 18, "subtype": "rail", - "class": "foo" + "class": "foo", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json b/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json index e60cb3dee..fa42d2431 100644 --- a/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json +++ b/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json @@ -14,6 +14,10 @@ "version": 19, "subtype": "rail", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "rail_flags": [ { "values": ["is_freight", "is_freight"] diff --git a/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json b/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json index 6616098c2..64e630ecf 100644 --- a/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json +++ b/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "rail", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "rail_flags": [ { "values": ["foo"] diff --git a/counterexamples/transportation/segment/road/bad-road-class.json b/counterexamples/transportation/segment/road/bad-road-class.json index 99ae8f720..ba7a68842 100644 --- a/counterexamples/transportation/segment/road/bad-road-class.json +++ b/counterexamples/transportation/segment/road/bad-road-class.json @@ -13,6 +13,10 @@ "type": "segment", "version": 18, "subtype": "road", - "class": "foo" + "class": "foo", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json b/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json index 7be03fcca..b4f2178ee 100644 --- a/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json +++ b/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json @@ -14,6 +14,10 @@ "version": 19, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_tunnel", "is_tunnel"] diff --git a/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json b/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json index 52d961a14..1f284a860 100644 --- a/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json +++ b/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["foo"] diff --git a/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json b/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json index f300935e5..021cba366 100644 --- a/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json +++ b/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json @@ -11,6 +11,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_private"] diff --git a/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json b/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json index 3cb0ac37f..147faa3d2 100644 --- a/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json +++ b/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": ["is_tunnel"] } } diff --git a/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json b/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json index 258526782..0abd3d1b3 100644 --- a/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json +++ b/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json @@ -11,6 +11,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_bridge"] diff --git a/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json b/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json index 3c29cd43f..2c929767c 100644 --- a/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json +++ b/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json @@ -11,6 +11,10 @@ "version": 23, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_surface": [ { "value": "hot mess" diff --git a/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml b/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml index eccb7a9e9..b39cdc4bf 100644 --- a/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml +++ b/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml @@ -8,6 +8,11 @@ properties: type: segment subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 access_restrictions: - foo: bar diff --git a/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml b/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml index c96e13923..6936bf1a3 100644 --- a/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml +++ b/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml @@ -8,6 +8,11 @@ properties: type: segment subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 prohibited_transitions: - sequence: diff --git a/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json b/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json index 833e57006..f212c9e38 100644 --- a/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json +++ b/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json @@ -11,6 +11,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "speed_limits": [ {} ], diff --git a/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json b/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json index 02d230881..04f155b0d 100644 --- a/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json +++ b/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json @@ -11,6 +11,10 @@ "version": 0, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "speed_limits": {}, "ext_expected_errors": [ "'/properties/speed_limits' [S#/$defs/propertyContainers/speedLimitsContainer/type]: got object, want array" diff --git a/examples/common/names/names-lexically-valid-language-tag.yaml b/examples/common/names/names-lexically-valid-language-tag.yaml index a20a315ac..dbd74326d 100644 --- a/examples/common/names/names-lexically-valid-language-tag.yaml +++ b/examples/common/names/names-lexically-valid-language-tag.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: foo common: diff --git a/examples/common/timestamp/timestamp-leap-second.yaml b/examples/common/timestamp/timestamp-leap-second.yaml index 14b6d7d7f..0d4465f8f 100644 --- a/examples/common/timestamp/timestamp-leap-second.yaml +++ b/examples/common/timestamp/timestamp-leap-second.yaml @@ -9,4 +9,9 @@ properties: type: segment subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 diff --git a/examples/transportation/docusaurus/access-restriction-01-blanket.yaml b/examples/transportation/docusaurus/access-restriction-01-blanket.yaml index 87cac406a..47133c706 100644 --- a/examples/transportation/docusaurus/access-restriction-01-blanket.yaml +++ b/examples/transportation/docusaurus/access-restriction-01-blanket.yaml @@ -12,5 +12,10 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied diff --git a/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml b/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml index 80a02ad75..aeb0b8c41 100644 --- a/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml +++ b/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml b/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml index a494b2e22..1f20c202e 100644 --- a/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml +++ b/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: { mode: [motor_vehicle] } diff --git a/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml b/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml index 4a176d983..ea78bf00d 100644 --- a/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml +++ b/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: motorway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/examples/transportation/docusaurus/geometric-scoping.yaml b/examples/transportation/docusaurus/geometric-scoping.yaml index 86f5f58d7..d9547e0cc 100644 --- a/examples/transportation/docusaurus/geometric-scoping.yaml +++ b/examples/transportation/docusaurus/geometric-scoping.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - between: [0, 0.15] max_speed: diff --git a/examples/transportation/docusaurus/speed-limits-01-simple.yaml b/examples/transportation/docusaurus/speed-limits-01-simple.yaml index 30bea71ce..e13aa6c74 100644 --- a/examples/transportation/docusaurus/speed-limits-01-simple.yaml +++ b/examples/transportation/docusaurus/speed-limits-01-simple.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: value: 30 diff --git a/examples/transportation/docusaurus/speed-limits-02-directional.yaml b/examples/transportation/docusaurus/speed-limits-02-directional.yaml index 8f30bb69a..eed35c7fc 100644 --- a/examples/transportation/docusaurus/speed-limits-02-directional.yaml +++ b/examples/transportation/docusaurus/speed-limits-02-directional.yaml @@ -12,6 +12,11 @@ properties: version: 2 subtype: road class: secondary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: {value: 70, unit: "mph"} - when: diff --git a/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml b/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml index 0aeca3887..34960bd16 100644 --- a/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml +++ b/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml @@ -14,6 +14,11 @@ properties: version: 1 subtype: road class: motorway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: value: 100 diff --git a/examples/transportation/docusaurus/subjective-heading-scoping.yaml b/examples/transportation/docusaurus/subjective-heading-scoping.yaml index d01d0bf80..3d3c04fdb 100644 --- a/examples/transportation/docusaurus/subjective-heading-scoping.yaml +++ b/examples/transportation/docusaurus/subjective-heading-scoping.yaml @@ -16,6 +16,11 @@ properties: version: 2 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: { heading: backward } diff --git a/examples/transportation/docusaurus/subjective-status-scoping.yaml b/examples/transportation/docusaurus/subjective-status-scoping.yaml index d2f86bdf3..f25bc02e3 100644 --- a/examples/transportation/docusaurus/subjective-status-scoping.yaml +++ b/examples/transportation/docusaurus/subjective-status-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml b/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml index 8cef7b3ba..fe85f2282 100644 --- a/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml +++ b/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml b/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml index 44e4563e0..298849865 100644 --- a/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml +++ b/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/examples/transportation/docusaurus/temporal-scoping.yaml b/examples/transportation/docusaurus/temporal-scoping.yaml index c8a56dd4b..c25681a77 100644 --- a/examples/transportation/docusaurus/temporal-scoping.yaml +++ b/examples/transportation/docusaurus/temporal-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 2 subtype: road class: unknown + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/examples/transportation/segment/missing-update-time.json b/examples/transportation/segment/missing-update-time.json index d564bdbf7..be9a0c584 100644 --- a/examples/transportation/segment/missing-update-time.json +++ b/examples/transportation/segment/missing-update-time.json @@ -11,6 +11,10 @@ "theme": "transportation", "type": "segment", "version": 27, - "subtype": "water" + "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/examples/transportation/segment/rail/rail-freight.yaml b/examples/transportation/segment/rail/rail-freight.yaml index 41bf6f75a..e2b16afd5 100644 --- a/examples/transportation/segment/rail/rail-freight.yaml +++ b/examples/transportation/segment/rail/rail-freight.yaml @@ -12,6 +12,11 @@ properties: version: 3 subtype: rail class: standard_gauge + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Generic Rail Name rail_flags: diff --git a/examples/transportation/segment/rail/rail-tunnel.yaml b/examples/transportation/segment/rail/rail-tunnel.yaml index 6f9df9c3e..943f53d17 100644 --- a/examples/transportation/segment/rail/rail-tunnel.yaml +++ b/examples/transportation/segment/rail/rail-tunnel.yaml @@ -12,6 +12,11 @@ properties: version: 3 subtype: rail class: subway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Generic Rail Name rail_flags: diff --git a/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml b/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml index 9b4c623f2..53f1aa8ab 100644 --- a/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml +++ b/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 2 access_restrictions: - access_type: denied diff --git a/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml b/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml index ea7f8c7c7..be8e2add8 100644 --- a/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml +++ b/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: secondary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 2 prohibited_transitions: - sequence: diff --git a/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml b/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml index ac229da48..0f17269d8 100644 --- a/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml +++ b/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 3 speed_limits: - max_speed: {value: 20, unit: 'km/h'} diff --git a/examples/transportation/segment/road/road-abandoned.yaml b/examples/transportation/segment/road/road-abandoned.yaml index de6b0207f..3882f1922 100644 --- a/examples/transportation/segment/road/road-abandoned.yaml +++ b/examples/transportation/segment/road/road-abandoned.yaml @@ -11,6 +11,11 @@ properties: version: 3 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: gravel road_flags: diff --git a/examples/transportation/segment/road/road-acesss-restriction.yaml b/examples/transportation/segment/road/road-acesss-restriction.yaml index 345ccafaf..aaf55203b 100644 --- a/examples/transportation/segment/road/road-acesss-restriction.yaml +++ b/examples/transportation/segment/road/road-acesss-restriction.yaml @@ -17,6 +17,11 @@ properties: version: 5 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: designated diff --git a/examples/transportation/segment/road/road-alley.yaml b/examples/transportation/segment/road/road-alley.yaml index 84c7ff6d8..118c64b1a 100644 --- a/examples/transportation/segment/road/road-alley.yaml +++ b/examples/transportation/segment/road/road-alley.yaml @@ -10,6 +10,11 @@ properties: version: 5 subtype: road class: service + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 subclass_rules: - value: alley between: [0, 0.5] diff --git a/examples/transportation/segment/road/road-covered.yaml b/examples/transportation/segment/road/road-covered.yaml index 5083fa330..483eb28ce 100644 --- a/examples/transportation/segment/road/road-covered.yaml +++ b/examples/transportation/segment/road/road-covered.yaml @@ -11,6 +11,11 @@ properties: version: 3 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: paved road_flags: diff --git a/examples/transportation/segment/road/road-indoors.yaml b/examples/transportation/segment/road/road-indoors.yaml index 218934cce..74a8767c1 100644 --- a/examples/transportation/segment/road/road-indoors.yaml +++ b/examples/transportation/segment/road/road-indoors.yaml @@ -11,6 +11,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: unknown road_flags: diff --git a/examples/transportation/segment/road/road-level.yaml b/examples/transportation/segment/road/road-level.yaml index c3233db78..af48a1b07 100644 --- a/examples/transportation/segment/road/road-level.yaml +++ b/examples/transportation/segment/road/road-level.yaml @@ -10,6 +10,11 @@ properties: subtype: road version: 2 class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 level_rules: - value: -1 between: [0, 0.5] diff --git a/examples/transportation/segment/road/road-path.yaml b/examples/transportation/segment/road/road-path.yaml index e892f5c4b..8b3b7ffca 100644 --- a/examples/transportation/segment/road/road-path.yaml +++ b/examples/transportation/segment/road/road-path.yaml @@ -10,3 +10,8 @@ properties: version: 5 subtype: road class: path + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 diff --git a/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md b/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md new file mode 100644 index 000000000..0b5ad114d --- /dev/null +++ b/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md @@ -0,0 +1 @@ +Made segment `connectors` a required field. It previously defaulted to an empty list, a value its own `min_length=2` constraint rejected, so a segment without connectors failed re-validation after a dump. Every segment in published Overture data already carries two or more connectors. diff --git a/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py b/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py index 8c21c8317..03c27bbae 100644 --- a/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py +++ b/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py @@ -168,12 +168,9 @@ class TransportationSegment( SegmentSubtype, Field(description="Broad category of transportation segment.") ] - # Optional - - access_restrictions: AccessRules | None = None # Contains the GERS ID and relative position between 0 and 1 of a connector feature along the segment. connectors: Annotated[ - list[ConnectorReference] | None, + list[ConnectorReference], Field( min_length=2, description=textwrap.dedent(""" @@ -184,7 +181,11 @@ class TransportationSegment( """).strip(), ), UniqueItemsConstraint(), - ] = [] + ] + + # Optional + + access_restrictions: AccessRules | None = None level_rules: LevelRules | None = None diff --git a/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json b/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json index d9f38e4f4..3bcceda22 100644 --- a/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json +++ b/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json @@ -630,7 +630,6 @@ "$ref": "#/$defs/RailClass" }, "connectors": { - "default": [], "description": "List of connectors which this segment is physically connected to and their\nrelative location. Each connector is a possible routing decision point,\nmeaning it defines a place along the segment in which there is possibility to\ntransition to other segments which share the same connector.", "items": { "$ref": "#/$defs/ConnectorReference" @@ -700,6 +699,7 @@ "type", "version", "subtype", + "connectors", "class" ], "type": "object" @@ -884,7 +884,6 @@ "$ref": "#/$defs/RoadClass" }, "connectors": { - "default": [], "description": "List of connectors which this segment is physically connected to and their\nrelative location. Each connector is a possible routing decision point,\nmeaning it defines a place along the segment in which there is possibility to\ntransition to other segments which share the same connector.", "items": { "$ref": "#/$defs/ConnectorReference" @@ -1019,6 +1018,7 @@ "type", "version", "subtype", + "connectors", "class" ], "type": "object" @@ -1618,7 +1618,6 @@ "uniqueItems": true }, "connectors": { - "default": [], "description": "List of connectors which this segment is physically connected to and their\nrelative location. Each connector is a possible routing decision point,\nmeaning it defines a place along the segment in which there is possibility to\ntransition to other segments which share the same connector.", "items": { "$ref": "#/$defs/ConnectorReference" @@ -1677,7 +1676,8 @@ "theme", "type", "version", - "subtype" + "subtype", + "connectors" ], "type": "object" }, diff --git a/reference/counterexamples/common/names/names-invalid-language.yaml b/reference/counterexamples/common/names/names-invalid-language.yaml index e3345152d..01a43481a 100644 --- a/reference/counterexamples/common/names/names-invalid-language.yaml +++ b/reference/counterexamples/common/names/names-invalid-language.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Foo common: diff --git a/reference/counterexamples/common/names/names-invalid-variant.yaml b/reference/counterexamples/common/names/names-invalid-variant.yaml index 5949ecd0a..3714a66d8 100644 --- a/reference/counterexamples/common/names/names-invalid-variant.yaml +++ b/reference/counterexamples/common/names/names-invalid-variant.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Bar rules: diff --git a/reference/counterexamples/transportation/segment/bad-geometry-type.json b/reference/counterexamples/transportation/segment/bad-geometry-type.json index 050848739..b6b86fb8a 100644 --- a/reference/counterexamples/transportation/segment/bad-geometry-type.json +++ b/reference/counterexamples/transportation/segment/bad-geometry-type.json @@ -12,6 +12,10 @@ "theme": "transportation", "type": "segment", "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "version": 15 } } diff --git a/reference/counterexamples/transportation/segment/bad-lr-width-missing-items.json b/reference/counterexamples/transportation/segment/bad-lr-width-missing-items.json index 4f66c9fd3..f4daf28d7 100644 --- a/reference/counterexamples/transportation/segment/bad-lr-width-missing-items.json +++ b/reference/counterexamples/transportation/segment/bad-lr-width-missing-items.json @@ -11,6 +11,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "width_rules": [], "ext_expected_errors": [ "minItems: got 0, want 1" diff --git a/reference/counterexamples/transportation/segment/bad-lr-width.json b/reference/counterexamples/transportation/segment/bad-lr-width.json index d09dff370..d6e95cbd5 100644 --- a/reference/counterexamples/transportation/segment/bad-lr-width.json +++ b/reference/counterexamples/transportation/segment/bad-lr-width.json @@ -11,6 +11,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "width_rules": [ { "between" : [0, 0.5], diff --git a/reference/counterexamples/transportation/segment/bad-rail-flags-wrong-subtype.yaml b/reference/counterexamples/transportation/segment/bad-rail-flags-wrong-subtype.yaml index deb23f73f..5655bf27e 100644 --- a/reference/counterexamples/transportation/segment/bad-rail-flags-wrong-subtype.yaml +++ b/reference/counterexamples/transportation/segment/bad-rail-flags-wrong-subtype.yaml @@ -11,6 +11,11 @@ properties: type: segment version: 1 subtype: road # This is road subtype, but we're using rail_flags + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 rail_flags: - values: [is_bridge] ext_expected_errors: diff --git a/reference/counterexamples/transportation/segment/missing-subtype.json b/reference/counterexamples/transportation/segment/missing-subtype.json index f1e248232..b43a7d684 100644 --- a/reference/counterexamples/transportation/segment/missing-subtype.json +++ b/reference/counterexamples/transportation/segment/missing-subtype.json @@ -11,6 +11,10 @@ ], "theme": "transportation", "type": "segment", - "version": 26 + "version": 26, + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/reference/counterexamples/transportation/segment/missing-version.json b/reference/counterexamples/transportation/segment/missing-version.json index 6c8f16768..0c7c013c3 100644 --- a/reference/counterexamples/transportation/segment/missing-version.json +++ b/reference/counterexamples/transportation/segment/missing-version.json @@ -11,6 +11,10 @@ ], "theme": "transportation", "type": "segment", - "subtype": "water" + "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/reference/counterexamples/transportation/segment/property-subtype-mismatch.yaml b/reference/counterexamples/transportation/segment/property-subtype-mismatch.yaml index 125526b27..cdfd4d64b 100644 --- a/reference/counterexamples/transportation/segment/property-subtype-mismatch.yaml +++ b/reference/counterexamples/transportation/segment/property-subtype-mismatch.yaml @@ -10,6 +10,11 @@ properties: version: 1 # Segment of subtype rail has a road flag (should be disallowed) subtype: rail + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_flags: - values: [is_indoor] ext_expected_errors: diff --git a/reference/counterexamples/transportation/segment/rail/bad-rail-class-invalid.yaml b/reference/counterexamples/transportation/segment/rail/bad-rail-class-invalid.yaml index 0c2b90842..5db595932 100644 --- a/reference/counterexamples/transportation/segment/rail/bad-rail-class-invalid.yaml +++ b/reference/counterexamples/transportation/segment/rail/bad-rail-class-invalid.yaml @@ -12,5 +12,10 @@ properties: version: 1 subtype: rail class: invalid_rail_class # This should trigger Pydantic validation error + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 ext_expected_errors: - "value must be one of 'funicular', 'light_rail', 'monorail', 'narrow_gauge', 'standard_gauge', 'subway', 'tram', 'unknown'" diff --git a/reference/counterexamples/transportation/segment/rail/bad-rail-class.json b/reference/counterexamples/transportation/segment/rail/bad-rail-class.json index bfac6b188..3845cc89e 100644 --- a/reference/counterexamples/transportation/segment/rail/bad-rail-class.json +++ b/reference/counterexamples/transportation/segment/rail/bad-rail-class.json @@ -13,6 +13,10 @@ "type": "segment", "version": 18, "subtype": "rail", - "class": "foo" + "class": "foo", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/reference/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json b/reference/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json index cf35ce37b..dc747ba05 100644 --- a/reference/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json +++ b/reference/counterexamples/transportation/segment/rail/bad-rail-flags-duplicate-flag.json @@ -14,6 +14,10 @@ "version": 19, "subtype": "rail", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "rail_flags": [ { "values": ["is_freight", "is_freight"] diff --git a/reference/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json b/reference/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json index 6616098c2..64e630ecf 100644 --- a/reference/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json +++ b/reference/counterexamples/transportation/segment/rail/bad-rail-flags-invalid-flag.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "rail", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "rail_flags": [ { "values": ["foo"] diff --git a/reference/counterexamples/transportation/segment/road/bad-road-class-invalid.yaml b/reference/counterexamples/transportation/segment/road/bad-road-class-invalid.yaml index 99049aeb0..6b8264747 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-class-invalid.yaml +++ b/reference/counterexamples/transportation/segment/road/bad-road-class-invalid.yaml @@ -12,5 +12,10 @@ properties: version: 1 subtype: road class: invalid_road_class # This should trigger Pydantic validation error + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 ext_expected_errors: - "value must be one of 'motorway', 'primary', 'secondary', 'tertiary', 'residential', 'living_street', 'trunk', 'unclassified', 'service', 'pedestrian', 'footway', 'steps', 'path', 'track', 'cycleway', 'bridleway', 'unknown'" diff --git a/reference/counterexamples/transportation/segment/road/bad-road-class.json b/reference/counterexamples/transportation/segment/road/bad-road-class.json index 99ae8f720..ba7a68842 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-class.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-class.json @@ -13,6 +13,10 @@ "type": "segment", "version": 18, "subtype": "road", - "class": "foo" + "class": "foo", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/reference/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json b/reference/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json index 7eaa5190b..b06a8728f 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-flags-duplicate-flag.json @@ -14,6 +14,10 @@ "version": 19, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_tunnel", "is_tunnel"] diff --git a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json index 52d961a14..1f284a860 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-flag.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["foo"] diff --git a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json index f300935e5..021cba366 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-is_private-flag.json @@ -11,6 +11,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_private"] diff --git a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json index 3cb0ac37f..147faa3d2 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-flags-invalid-string-value.json @@ -14,6 +14,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": ["is_tunnel"] } } diff --git a/reference/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json b/reference/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json index 6cf09907b..2ab704492 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-invalid-temporal-scoping.json @@ -11,6 +11,10 @@ "version": 20, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_flags": [ { "values": ["is_bridge"] diff --git a/reference/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json b/reference/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json index 3c29cd43f..2c929767c 100644 --- a/reference/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json +++ b/reference/counterexamples/transportation/segment/road/bad-road-surface-invalid-rule-value.json @@ -11,6 +11,10 @@ "version": 23, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "road_surface": [ { "value": "hot mess" diff --git a/reference/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml b/reference/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml index 6c2dfcaef..32530c113 100644 --- a/reference/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml +++ b/reference/counterexamples/transportation/segment/road/restrictions/access/bad-access-unsupported-properties.yaml @@ -8,6 +8,11 @@ properties: type: segment subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 access_restrictions: - foo: bar diff --git a/reference/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml b/reference/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml index 538ca108a..f4fbff9a6 100644 --- a/reference/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml +++ b/reference/counterexamples/transportation/segment/road/restrictions/prohibited_transitions/unsupported-properties.yaml @@ -8,6 +8,11 @@ properties: type: segment subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 prohibited_transitions: - sequence: diff --git a/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json b/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json index eaf9f1a5b..c6230a1a1 100644 --- a/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json +++ b/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-empty-rule.json @@ -14,6 +14,10 @@ "version": 26, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "speed_limits": [{}], "ext_description": "road segment where road.restrictions.speed_limits contains an empty rule", "ext_expected_errors": [ diff --git a/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json b/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json index 3bffd7da1..457f31b4a 100644 --- a/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json +++ b/reference/counterexamples/transportation/segment/road/restrictions/speed_limits/bad-speed-limits-invalid-type.json @@ -11,6 +11,10 @@ "version": 0, "subtype": "road", "class": "primary", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ], "speed_limits": {}, "ext_expected_errors": [ "got object, want array" diff --git a/reference/examples/common/names/names-lexically-valid-language-tag.yaml b/reference/examples/common/names/names-lexically-valid-language-tag.yaml index a20a315ac..dbd74326d 100644 --- a/reference/examples/common/names/names-lexically-valid-language-tag.yaml +++ b/reference/examples/common/names/names-lexically-valid-language-tag.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: foo common: diff --git a/reference/examples/common/timestamp/timestamp-leap-second.yaml b/reference/examples/common/timestamp/timestamp-leap-second.yaml index 14b6d7d7f..0d4465f8f 100644 --- a/reference/examples/common/timestamp/timestamp-leap-second.yaml +++ b/reference/examples/common/timestamp/timestamp-leap-second.yaml @@ -9,4 +9,9 @@ properties: type: segment subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 1 diff --git a/reference/examples/transportation/docusaurus/access-restriction-01-blanket.yaml b/reference/examples/transportation/docusaurus/access-restriction-01-blanket.yaml index 87cac406a..47133c706 100644 --- a/reference/examples/transportation/docusaurus/access-restriction-01-blanket.yaml +++ b/reference/examples/transportation/docusaurus/access-restriction-01-blanket.yaml @@ -12,5 +12,10 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied diff --git a/reference/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml b/reference/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml index 80a02ad75..aeb0b8c41 100644 --- a/reference/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml +++ b/reference/examples/transportation/docusaurus/access-restriction-02-private-with-deliveries.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/reference/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml b/reference/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml index a494b2e22..1f20c202e 100644 --- a/reference/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml +++ b/reference/examples/transportation/docusaurus/access-restriction-03-motor-vehicles-destination-only.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: { mode: [motor_vehicle] } diff --git a/reference/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml b/reference/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml index 4a176d983..ea78bf00d 100644 --- a/reference/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml +++ b/reference/examples/transportation/docusaurus/access-restriction-04-axle-limit.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: motorway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/reference/examples/transportation/docusaurus/geometric-scoping.yaml b/reference/examples/transportation/docusaurus/geometric-scoping.yaml index 86f5f58d7..d9547e0cc 100644 --- a/reference/examples/transportation/docusaurus/geometric-scoping.yaml +++ b/reference/examples/transportation/docusaurus/geometric-scoping.yaml @@ -10,6 +10,11 @@ properties: version: 1 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - between: [0, 0.15] max_speed: diff --git a/reference/examples/transportation/docusaurus/speed-limits-01-simple.yaml b/reference/examples/transportation/docusaurus/speed-limits-01-simple.yaml index 30bea71ce..e13aa6c74 100644 --- a/reference/examples/transportation/docusaurus/speed-limits-01-simple.yaml +++ b/reference/examples/transportation/docusaurus/speed-limits-01-simple.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: value: 30 diff --git a/reference/examples/transportation/docusaurus/speed-limits-02-directional.yaml b/reference/examples/transportation/docusaurus/speed-limits-02-directional.yaml index 8f30bb69a..eed35c7fc 100644 --- a/reference/examples/transportation/docusaurus/speed-limits-02-directional.yaml +++ b/reference/examples/transportation/docusaurus/speed-limits-02-directional.yaml @@ -12,6 +12,11 @@ properties: version: 2 subtype: road class: secondary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: {value: 70, unit: "mph"} - when: diff --git a/reference/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml b/reference/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml index 0aeca3887..34960bd16 100644 --- a/reference/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml +++ b/reference/examples/transportation/docusaurus/speed-limits-03-variable-max.yaml @@ -14,6 +14,11 @@ properties: version: 1 subtype: road class: motorway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 speed_limits: - max_speed: value: 100 diff --git a/reference/examples/transportation/docusaurus/subjective-heading-scoping.yaml b/reference/examples/transportation/docusaurus/subjective-heading-scoping.yaml index d01d0bf80..3d3c04fdb 100644 --- a/reference/examples/transportation/docusaurus/subjective-heading-scoping.yaml +++ b/reference/examples/transportation/docusaurus/subjective-heading-scoping.yaml @@ -16,6 +16,11 @@ properties: version: 2 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: { heading: backward } diff --git a/reference/examples/transportation/docusaurus/subjective-status-scoping.yaml b/reference/examples/transportation/docusaurus/subjective-status-scoping.yaml index d2f86bdf3..f25bc02e3 100644 --- a/reference/examples/transportation/docusaurus/subjective-status-scoping.yaml +++ b/reference/examples/transportation/docusaurus/subjective-status-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/reference/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml b/reference/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml index 8cef7b3ba..fe85f2282 100644 --- a/reference/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml +++ b/reference/examples/transportation/docusaurus/subjective-usage-purpose-scoping.yaml @@ -12,6 +12,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: allowed diff --git a/reference/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml b/reference/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml index 44e4563e0..298849865 100644 --- a/reference/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml +++ b/reference/examples/transportation/docusaurus/subjective-vehicle-attributes-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 1 subtype: road class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/reference/examples/transportation/docusaurus/temporal-scoping.yaml b/reference/examples/transportation/docusaurus/temporal-scoping.yaml index c8a56dd4b..c25681a77 100644 --- a/reference/examples/transportation/docusaurus/temporal-scoping.yaml +++ b/reference/examples/transportation/docusaurus/temporal-scoping.yaml @@ -13,6 +13,11 @@ properties: version: 2 subtype: road class: unknown + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied when: diff --git a/reference/examples/transportation/segment/missing-update-time.json b/reference/examples/transportation/segment/missing-update-time.json index d564bdbf7..be9a0c584 100644 --- a/reference/examples/transportation/segment/missing-update-time.json +++ b/reference/examples/transportation/segment/missing-update-time.json @@ -11,6 +11,10 @@ "theme": "transportation", "type": "segment", "version": 27, - "subtype": "water" + "subtype": "water", + "connectors": [ + { "connector_id": "fooConnector", "at": 0 }, + { "connector_id": "barConnector", "at": 1 } + ] } } diff --git a/reference/examples/transportation/segment/rail/rail-freight.yaml b/reference/examples/transportation/segment/rail/rail-freight.yaml index 41bf6f75a..e2b16afd5 100644 --- a/reference/examples/transportation/segment/rail/rail-freight.yaml +++ b/reference/examples/transportation/segment/rail/rail-freight.yaml @@ -12,6 +12,11 @@ properties: version: 3 subtype: rail class: standard_gauge + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Generic Rail Name rail_flags: diff --git a/reference/examples/transportation/segment/rail/rail-tunnel.yaml b/reference/examples/transportation/segment/rail/rail-tunnel.yaml index 6f9df9c3e..943f53d17 100644 --- a/reference/examples/transportation/segment/rail/rail-tunnel.yaml +++ b/reference/examples/transportation/segment/rail/rail-tunnel.yaml @@ -12,6 +12,11 @@ properties: version: 3 subtype: rail class: subway + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 names: primary: Generic Rail Name rail_flags: diff --git a/reference/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml b/reference/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml index 9b4c623f2..53f1aa8ab 100644 --- a/reference/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml +++ b/reference/examples/transportation/segment/road/restrictions/road-restrictions-access.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 2 access_restrictions: - access_type: denied diff --git a/reference/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml b/reference/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml index ea7f8c7c7..be8e2add8 100644 --- a/reference/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml +++ b/reference/examples/transportation/segment/road/restrictions/road-restrictions-prohibited-transitions.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: secondary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 2 prohibited_transitions: - sequence: diff --git a/reference/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml b/reference/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml index ac229da48..0f17269d8 100644 --- a/reference/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml +++ b/reference/examples/transportation/segment/road/restrictions/road-restrictions-speed-limits.yaml @@ -9,6 +9,11 @@ properties: type: segment subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 version: 3 speed_limits: - max_speed: {value: 20, unit: 'km/h'} diff --git a/reference/examples/transportation/segment/road/road-abandoned.yaml b/reference/examples/transportation/segment/road/road-abandoned.yaml index de6b0207f..3882f1922 100644 --- a/reference/examples/transportation/segment/road/road-abandoned.yaml +++ b/reference/examples/transportation/segment/road/road-abandoned.yaml @@ -11,6 +11,11 @@ properties: version: 3 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: gravel road_flags: diff --git a/reference/examples/transportation/segment/road/road-acesss-restriction.yaml b/reference/examples/transportation/segment/road/road-acesss-restriction.yaml index 345ccafaf..aaf55203b 100644 --- a/reference/examples/transportation/segment/road/road-acesss-restriction.yaml +++ b/reference/examples/transportation/segment/road/road-acesss-restriction.yaml @@ -17,6 +17,11 @@ properties: version: 5 subtype: road class: primary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 access_restrictions: - access_type: denied - access_type: designated diff --git a/reference/examples/transportation/segment/road/road-alley.yaml b/reference/examples/transportation/segment/road/road-alley.yaml index 84c7ff6d8..118c64b1a 100644 --- a/reference/examples/transportation/segment/road/road-alley.yaml +++ b/reference/examples/transportation/segment/road/road-alley.yaml @@ -10,6 +10,11 @@ properties: version: 5 subtype: road class: service + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 subclass_rules: - value: alley between: [0, 0.5] diff --git a/reference/examples/transportation/segment/road/road-covered.yaml b/reference/examples/transportation/segment/road/road-covered.yaml index 5083fa330..483eb28ce 100644 --- a/reference/examples/transportation/segment/road/road-covered.yaml +++ b/reference/examples/transportation/segment/road/road-covered.yaml @@ -11,6 +11,11 @@ properties: version: 3 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: paved road_flags: diff --git a/reference/examples/transportation/segment/road/road-indoors.yaml b/reference/examples/transportation/segment/road/road-indoors.yaml index 218934cce..74a8767c1 100644 --- a/reference/examples/transportation/segment/road/road-indoors.yaml +++ b/reference/examples/transportation/segment/road/road-indoors.yaml @@ -11,6 +11,11 @@ properties: version: 1 subtype: road class: tertiary + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 road_surface: - value: unknown road_flags: diff --git a/reference/examples/transportation/segment/road/road-level.yaml b/reference/examples/transportation/segment/road/road-level.yaml index c3233db78..af48a1b07 100644 --- a/reference/examples/transportation/segment/road/road-level.yaml +++ b/reference/examples/transportation/segment/road/road-level.yaml @@ -10,6 +10,11 @@ properties: subtype: road version: 2 class: residential + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 level_rules: - value: -1 between: [0, 0.5] diff --git a/reference/examples/transportation/segment/road/road-path.yaml b/reference/examples/transportation/segment/road/road-path.yaml index e892f5c4b..8b3b7ffca 100644 --- a/reference/examples/transportation/segment/road/road-path.yaml +++ b/reference/examples/transportation/segment/road/road-path.yaml @@ -10,3 +10,8 @@ properties: version: 5 subtype: road class: path + connectors: + - connector_id: fooConnector + at: 0 + - connector_id: barConnector + at: 1 diff --git a/schema/transportation/segment.yaml b/schema/transportation/segment.yaml index 4a959a1a6..86e68043d 100644 --- a/schema/transportation/segment.yaml +++ b/schema/transportation/segment.yaml @@ -17,7 +17,7 @@ properties: - "$ref": https://geojson.org/schema/LineString.json properties: unevaluatedProperties: false - required: [subtype] + required: [subtype, connectors] allOf: - title: "Common Segment Properties" properties: @@ -76,7 +76,6 @@ properties: at: { "$ref": "../defs.yaml#/$defs/propertyDefinitions/linearlyReferencedPosition" } uniqueItems: true minItems: 2 - default: [] "$defs": propertyDefinitions: destinationLabelType: From 18da555f0c775be97b8fdf7994d3ff976d8c935a Mon Sep 17 00:00:00 2001 From: Jacob Wasserman Date: Wed, 4 Feb 2026 12:10:52 -0500 Subject: [PATCH 02/14] Remove old categories in favor of the new taxonomy field --- .../src/overture/schema/places/place.py | 32 ------------------- schema/places/place.yaml | 20 ------------ 2 files changed, 52 deletions(-) diff --git a/packages/overture-schema-theme-places/src/overture/schema/places/place.py b/packages/overture-schema-theme-places/src/overture/schema/places/place.py index 6d65b46cf..5ffaf2702 100644 --- a/packages/overture-schema-theme-places/src/overture/schema/places/place.py +++ b/packages/overture-schema-theme-places/src/overture/schema/places/place.py @@ -51,37 +51,6 @@ class OperatingStatus(str, Enum): TEMPORARILY_CLOSED = "temporarily_closed" -@no_extra_fields -class Categories(BaseModel): - """ - Categories a place belongs to. - - Complete list is available on GitHub: https://github.com/OvertureMaps/schema/blob/main/docs/schema/concepts/by-theme/places/overture_categories.csv - """ - - # Required - - primary: Annotated[ - SnakeCaseString, - Field(description="The primary or main category of the place."), - ] - - # Optional - - alternate: Annotated[ - list[SnakeCaseString] | None, - Field( - description=textwrap.dedent(""" - Alternate categories of the place. - - Some places might fit into two categories, e.g., a book store and a coffee shop. In - these cases, the primary category can be augmented with additional categories. - """).strip(), - ), - UniqueItemsConstraint(), - ] = None - - @no_extra_fields class Taxonomy(BaseModel): """ @@ -223,7 +192,6 @@ class Place(OvertureFeature[Literal["places"], Literal["place"]], Named): ), ] = None - categories: Categories | None = None basic_category: Annotated[ SnakeCaseString | None, Field( diff --git a/schema/places/place.yaml b/schema/places/place.yaml index 0ae5351c0..8c4388af1 100644 --- a/schema/places/place.yaml +++ b/schema/places/place.yaml @@ -21,26 +21,6 @@ properties: - "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer - "$ref": ../defs.yaml#/$defs/propertyContainers/namesContainer properties: - categories: - description: | - The categories of the place. Complete list is available on - GitHub: https://github.com/OvertureMaps/schema/blob/main/docs/schema/concepts/by-theme/places/overture_categories.csv - type: object - required: [primary] - properties: - primary: - description: The primary or main category of the place. This can be empty. - "$ref": "./defs.yaml#/$defs/typeDefinitions/category" - alternate: - description: - Alternate categories of the place. Some places might fit into two - categories, e.g. a book store and a coffee shop. In such a case, - the primary category can be augmented with additional applicable - categories. - type: array - items: - "$ref": "./defs.yaml#/$defs/typeDefinitions/category" - uniqueItems: true basic_category: description: >- The basic level category of a place. At present this is a mapping of the categories.primary entry to a new, simplified name. This mapping can be 1:1 or M:1 from the From 5bd5cc66d002240214e42dab1976049bffc1d43b Mon Sep 17 00:00:00 2001 From: Jacob Wasserman Date: Wed, 4 Feb 2026 12:15:41 -0500 Subject: [PATCH 03/14] Update examples/counterexamples to remove categories field --- .../places/bad-address-invalid-property.yaml | 2 -- .../bad-categories-missing-primary.yaml | 16 -------------- .../places/bad-categories-value.yaml | 22 ------------------- counterexamples/places/bad-empty-emails.yaml | 2 -- counterexamples/places/bad-empty-phones.yaml | 2 -- counterexamples/places/bad-empty-socials.yaml | 2 -- .../places/bad-empty-websites.yaml | 2 -- counterexamples/places/bad-geometry.yaml | 2 -- .../places/bad-operating-status.yaml | 2 -- examples/common/timestamp/timestamp-utc.yaml | 2 -- .../places/place-alternate-categories.yaml | 4 ---- ...ace-no-emails-phones-socials-websites.yaml | 2 -- .../places/place-with-basic-category.yaml | 4 ---- .../places/place-with-operating-status.yaml | 2 -- examples/places/place-with-taxonomy.yaml | 5 ----- examples/places/place.yaml | 2 -- examples/places/place2.yaml | 2 -- 17 files changed, 75 deletions(-) delete mode 100644 counterexamples/places/bad-categories-missing-primary.yaml delete mode 100644 counterexamples/places/bad-categories-value.yaml diff --git a/counterexamples/places/bad-address-invalid-property.yaml b/counterexamples/places/bad-address-invalid-property.yaml index c87e018ab..03930d1a4 100644 --- a/counterexamples/places/bad-address-invalid-property.yaml +++ b/counterexamples/places/bad-address-invalid-property.yaml @@ -11,8 +11,6 @@ properties: version: 0 names: primary: Fancy POI with invalid address property (region2) - categories: - primary: some_category addresses: - freeform: "770 Broadway, Floor 8" locality: "New York" diff --git a/counterexamples/places/bad-categories-missing-primary.yaml b/counterexamples/places/bad-categories-missing-primary.yaml deleted file mode 100644 index 9e797e228..000000000 --- a/counterexamples/places/bad-categories-missing-primary.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: overture:places:place:1 -type: Feature -geometry: - type: Point - coordinates: [0, 0] -properties: - ext_expected_errors: ["missing property 'primary'"] - theme: places - type: place - version: 1 - names: - primary: Fancy POI missing primary category property - categories: - alternate: - - some_category diff --git a/counterexamples/places/bad-categories-value.yaml b/counterexamples/places/bad-categories-value.yaml deleted file mode 100644 index 31f853a60..000000000 --- a/counterexamples/places/bad-categories-value.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: counterexample:place:bad-categories-values -type: Feature -geometry: - type: Point - coordinates: [0, 0] -properties: - ext_expected_errors: - - "'foo_' does not match pattern" - - "' bar ' does not match pattern" - - "'BAZ' does not match pattern" - theme: places - type: place - version: 1 - categories: - primary: foo_ - alternate: - - " bar " - - BAZ - confidence: 0.9 - names: - primary: Problematic POI with problematic categories diff --git a/counterexamples/places/bad-empty-emails.yaml b/counterexamples/places/bad-empty-emails.yaml index 765034436..ceadf1bab 100644 --- a/counterexamples/places/bad-empty-emails.yaml +++ b/counterexamples/places/bad-empty-emails.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/counterexamples/places/bad-empty-phones.yaml b/counterexamples/places/bad-empty-phones.yaml index ea48419cc..7e75d3323 100644 --- a/counterexamples/places/bad-empty-phones.yaml +++ b/counterexamples/places/bad-empty-phones.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/counterexamples/places/bad-empty-socials.yaml b/counterexamples/places/bad-empty-socials.yaml index 3f45d54cf..946d122a9 100644 --- a/counterexamples/places/bad-empty-socials.yaml +++ b/counterexamples/places/bad-empty-socials.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/counterexamples/places/bad-empty-websites.yaml b/counterexamples/places/bad-empty-websites.yaml index 0a28806eb..1b3136df5 100644 --- a/counterexamples/places/bad-empty-websites.yaml +++ b/counterexamples/places/bad-empty-websites.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: [] emails: diff --git a/counterexamples/places/bad-geometry.yaml b/counterexamples/places/bad-geometry.yaml index 917eee5a0..6568b028d 100644 --- a/counterexamples/places/bad-geometry.yaml +++ b/counterexamples/places/bad-geometry.yaml @@ -8,5 +8,3 @@ properties: theme: places type: place version: 0 - categories: - primary: a_category diff --git a/counterexamples/places/bad-operating-status.yaml b/counterexamples/places/bad-operating-status.yaml index 83888870a..1de6d12d5 100644 --- a/counterexamples/places/bad-operating-status.yaml +++ b/counterexamples/places/bad-operating-status.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 - https://www.example.com/ emails: diff --git a/examples/common/timestamp/timestamp-utc.yaml b/examples/common/timestamp/timestamp-utc.yaml index 0018b9ba9..cf5f6ed25 100644 --- a/examples/common/timestamp/timestamp-utc.yaml +++ b/examples/common/timestamp/timestamp-utc.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category theme: places type: place version: 1 diff --git a/examples/places/place-alternate-categories.yaml b/examples/places/place-alternate-categories.yaml index 17f771262..660263dd3 100644 --- a/examples/places/place-alternate-categories.yaml +++ b/examples/places/place-alternate-categories.yaml @@ -5,10 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: the1_category_you_want_first - alternate: - - another_category confidence: 0.9 websites: - https://www.example.com diff --git a/examples/places/place-no-emails-phones-socials-websites.yaml b/examples/places/place-no-emails-phones-socials-websites.yaml index e1aafb250..e9ebaad15 100644 --- a/examples/places/place-no-emails-phones-socials-websites.yaml +++ b/examples/places/place-no-emails-phones-socials-websites.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 brand: names: diff --git a/examples/places/place-with-basic-category.yaml b/examples/places/place-with-basic-category.yaml index 37c0667b0..6bc68e1ff 100644 --- a/examples/places/place-with-basic-category.yaml +++ b/examples/places/place-with-basic-category.yaml @@ -6,10 +6,6 @@ geometry: coordinates: [0, 0] properties: basic_category: casual_eatery - categories: - primary: gas_station_sushi - alternate: - - just_for_fun confidence: 0.9 websites: - https://www.example.com diff --git a/examples/places/place-with-operating-status.yaml b/examples/places/place-with-operating-status.yaml index 145b40560..a7ade9b22 100644 --- a/examples/places/place-with-operating-status.yaml +++ b/examples/places/place-with-operating-status.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com/ diff --git a/examples/places/place-with-taxonomy.yaml b/examples/places/place-with-taxonomy.yaml index 450ce0cc3..835b89ae3 100644 --- a/examples/places/place-with-taxonomy.yaml +++ b/examples/places/place-with-taxonomy.yaml @@ -16,11 +16,6 @@ properties: alternates: - gas_station - sushi_restaurant - categories: - primary: gas_station_sushi - alternate: - - gas_station - - sushi_restaurant confidence: 0.85 websites: - https://www.buckysgas.example.com diff --git a/examples/places/place.yaml b/examples/places/place.yaml index cbcbc03e1..d8c92ec36 100644 --- a/examples/places/place.yaml +++ b/examples/places/place.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/examples/places/place2.yaml b/examples/places/place2.yaml index 6a7ac50d9..6e7fe9089 100644 --- a/examples/places/place2.yaml +++ b/examples/places/place2.yaml @@ -16,8 +16,6 @@ properties: names: primary: Example wikidata: Q1000 - categories: - primary: some_category emails: - info@example.com phones: From 86f424f5f518f8a7ff7815d54a6d70e60c359546 Mon Sep 17 00:00:00 2001 From: Jacob Wasserman Date: Wed, 4 Feb 2026 12:57:04 -0500 Subject: [PATCH 04/14] Remove categories references from reference and package tests --- .../tests/test_heterogeneous_collections.py | 2 -- .../src/overture/schema/places/__init__.py | 4 +-- .../tests/place_baseline_schema.json | 31 ------------------- .../places/bad-address-invalid-property.yaml | 2 -- .../bad-categories-missing-primary.yaml | 16 ---------- .../places/bad-categories-value.yaml | 22 ------------- .../places/bad-empty-emails.yaml | 2 -- .../places/bad-empty-phones.yaml | 2 -- .../places/bad-empty-socials.yaml | 2 -- .../places/bad-empty-websites.yaml | 2 -- .../counterexamples/places/bad-geometry.yaml | 2 -- .../places/bad-operating-status.yaml | 2 -- .../common/timestamp/timestamp-utc.yaml | 2 -- .../places/place-alternate-categories.yaml | 4 --- ...ace-no-emails-phones-socials-websites.yaml | 2 -- .../places/place-with-basic-category.yaml | 4 --- .../places/place-with-operating-status.yaml | 2 -- .../examples/places/place-with-taxonomy.yaml | 5 --- reference/examples/places/place.yaml | 2 -- reference/examples/places/place2.yaml | 2 -- 20 files changed, 2 insertions(+), 110 deletions(-) delete mode 100644 reference/counterexamples/places/bad-categories-missing-primary.yaml delete mode 100644 reference/counterexamples/places/bad-categories-value.yaml diff --git a/packages/overture-schema-cli/tests/test_heterogeneous_collections.py b/packages/overture-schema-cli/tests/test_heterogeneous_collections.py index 9c073c25e..5323ad30d 100644 --- a/packages/overture-schema-cli/tests/test_heterogeneous_collections.py +++ b/packages/overture-schema-cli/tests/test_heterogeneous_collections.py @@ -21,7 +21,6 @@ def heterogeneous_collection_json() -> str: geometry_type="Point", coordinates=[0.5, 0.5], operating_status="open", - categories={"primary": "restaurant"}, names={"primary": "Valid Place"}, ) return json.dumps([building, place]) @@ -56,7 +55,6 @@ def heterogeneous_with_missing_fields_json() -> str: type="place", geometry_type="Point", coordinates=[6.5, 6.5], - categories={"primary": "restaurant"}, names={"primary": "Place missing required field"}, ) return json.dumps([building1, building2, building3, place]) diff --git a/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py b/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py index 6f77edc42..1785651b4 100644 --- a/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py +++ b/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py @@ -6,6 +6,6 @@ __path__ = __import__("pkgutil").extend_path(__path__, __name__) -from .place import Address, Brand, Categories, OperatingStatus, Place +from .place import Address, Brand, OperatingStatus, Place -__all__ = ["Address", "Brand", "Categories", "OperatingStatus", "Place"] +__all__ = ["Address", "Brand", "OperatingStatus", "Place"] diff --git a/packages/overture-schema-theme-places/tests/place_baseline_schema.json b/packages/overture-schema-theme-places/tests/place_baseline_schema.json index c7bee7a47..5033fe322 100644 --- a/packages/overture-schema-theme-places/tests/place_baseline_schema.json +++ b/packages/overture-schema-theme-places/tests/place_baseline_schema.json @@ -57,34 +57,6 @@ "title": "Brand", "type": "object" }, - "Categories": { - "additionalProperties": false, - "description": "Categories a place belongs to.\n\nComplete list is available on GitHub: https://github.com/OvertureMaps/schema/blob/main/docs/schema/concepts/by-theme/places/overture_categories.csv", - "properties": { - "alternate": { - "description": "Alternate categories of the place.\n\nSome places might fit into two categories, e.g., a book store and a coffee shop. In\nthese cases, the primary category can be augmented with additional categories.", - "items": { - "description": "Category in snake_case format", - "pattern": "^[a-z0-9]+(_[a-z0-9]+)*$", - "type": "string" - }, - "title": "Alternate", - "type": "array", - "uniqueItems": true - }, - "primary": { - "description": "The primary or main category of the place.", - "pattern": "^[a-z0-9]+(_[a-z0-9]+)*$", - "title": "Primary", - "type": "string" - } - }, - "required": [ - "primary" - ], - "title": "Categories", - "type": "object" - }, "NameRule": { "additionalProperties": false, "description": "A rule that can be evaluated to determine the name in advanced scenarios.\n\nName rules are used for cases where the primary name is not sufficient; the common name is not\nthe right fit for the use case and another variant is needed; or where the name only applies in\ncertain specific circumstances.\n\nExamples might include:\n- An official, alternate, or short name.\n- A name that only applies to part of a linear path like a road segment (geometric range\n scoping).\n- A name that only applies to the left or right side of a linear path like a road segment (side\n scoping).\n- A name that is only accepted by some political perspectives.", @@ -450,9 +422,6 @@ "$ref": "#/$defs/Brand", "description": "The brand associated with the place." }, - "categories": { - "$ref": "#/$defs/Categories" - }, "confidence": { "description": "A score between 0 and 1 indicating how confident we are that the place exists.\n\nA confidence score of 0 indicates that we are certain the place doesn't exist\nanymore and will always be paired with an `operating_status` of\n`\"permanently_closed\"`.\n\nA confidence score of 1 indicates that we are certain the place does exist.\n\nIf there is no value for confidence, it means we don't have enough information on\nwhich to estimate our confidence level.", "maximum": 1.0, diff --git a/reference/counterexamples/places/bad-address-invalid-property.yaml b/reference/counterexamples/places/bad-address-invalid-property.yaml index 12ada7bbe..97814a418 100644 --- a/reference/counterexamples/places/bad-address-invalid-property.yaml +++ b/reference/counterexamples/places/bad-address-invalid-property.yaml @@ -12,8 +12,6 @@ properties: version: 0 names: primary: Fancy POI with invalid address property (region2) - categories: - primary: some_category addresses: - freeform: "770 Broadway, Floor 8" locality: "New York" diff --git a/reference/counterexamples/places/bad-categories-missing-primary.yaml b/reference/counterexamples/places/bad-categories-missing-primary.yaml deleted file mode 100644 index 9e797e228..000000000 --- a/reference/counterexamples/places/bad-categories-missing-primary.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: overture:places:place:1 -type: Feature -geometry: - type: Point - coordinates: [0, 0] -properties: - ext_expected_errors: ["missing property 'primary'"] - theme: places - type: place - version: 1 - names: - primary: Fancy POI missing primary category property - categories: - alternate: - - some_category diff --git a/reference/counterexamples/places/bad-categories-value.yaml b/reference/counterexamples/places/bad-categories-value.yaml deleted file mode 100644 index 31f853a60..000000000 --- a/reference/counterexamples/places/bad-categories-value.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: counterexample:place:bad-categories-values -type: Feature -geometry: - type: Point - coordinates: [0, 0] -properties: - ext_expected_errors: - - "'foo_' does not match pattern" - - "' bar ' does not match pattern" - - "'BAZ' does not match pattern" - theme: places - type: place - version: 1 - categories: - primary: foo_ - alternate: - - " bar " - - BAZ - confidence: 0.9 - names: - primary: Problematic POI with problematic categories diff --git a/reference/counterexamples/places/bad-empty-emails.yaml b/reference/counterexamples/places/bad-empty-emails.yaml index 765034436..ceadf1bab 100644 --- a/reference/counterexamples/places/bad-empty-emails.yaml +++ b/reference/counterexamples/places/bad-empty-emails.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/reference/counterexamples/places/bad-empty-phones.yaml b/reference/counterexamples/places/bad-empty-phones.yaml index ea48419cc..7e75d3323 100644 --- a/reference/counterexamples/places/bad-empty-phones.yaml +++ b/reference/counterexamples/places/bad-empty-phones.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/reference/counterexamples/places/bad-empty-socials.yaml b/reference/counterexamples/places/bad-empty-socials.yaml index 3f45d54cf..946d122a9 100644 --- a/reference/counterexamples/places/bad-empty-socials.yaml +++ b/reference/counterexamples/places/bad-empty-socials.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com diff --git a/reference/counterexamples/places/bad-empty-websites.yaml b/reference/counterexamples/places/bad-empty-websites.yaml index 0a28806eb..1b3136df5 100644 --- a/reference/counterexamples/places/bad-empty-websites.yaml +++ b/reference/counterexamples/places/bad-empty-websites.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: [] emails: diff --git a/reference/counterexamples/places/bad-geometry.yaml b/reference/counterexamples/places/bad-geometry.yaml index 917eee5a0..6568b028d 100644 --- a/reference/counterexamples/places/bad-geometry.yaml +++ b/reference/counterexamples/places/bad-geometry.yaml @@ -8,5 +8,3 @@ properties: theme: places type: place version: 0 - categories: - primary: a_category diff --git a/reference/counterexamples/places/bad-operating-status.yaml b/reference/counterexamples/places/bad-operating-status.yaml index 83888870a..1de6d12d5 100644 --- a/reference/counterexamples/places/bad-operating-status.yaml +++ b/reference/counterexamples/places/bad-operating-status.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 - https://www.example.com/ emails: diff --git a/reference/examples/common/timestamp/timestamp-utc.yaml b/reference/examples/common/timestamp/timestamp-utc.yaml index 0018b9ba9..cf5f6ed25 100644 --- a/reference/examples/common/timestamp/timestamp-utc.yaml +++ b/reference/examples/common/timestamp/timestamp-utc.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category theme: places type: place version: 1 diff --git a/reference/examples/places/place-alternate-categories.yaml b/reference/examples/places/place-alternate-categories.yaml index 0245c65dc..095407105 100644 --- a/reference/examples/places/place-alternate-categories.yaml +++ b/reference/examples/places/place-alternate-categories.yaml @@ -5,10 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: the1_category_you_want_first - alternate: - - another_category confidence: 0.9 websites: - https://www.example.com/ diff --git a/reference/examples/places/place-no-emails-phones-socials-websites.yaml b/reference/examples/places/place-no-emails-phones-socials-websites.yaml index e1aafb250..e9ebaad15 100644 --- a/reference/examples/places/place-no-emails-phones-socials-websites.yaml +++ b/reference/examples/places/place-no-emails-phones-socials-websites.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 brand: names: diff --git a/reference/examples/places/place-with-basic-category.yaml b/reference/examples/places/place-with-basic-category.yaml index ea3fbefcd..fba06fb17 100644 --- a/reference/examples/places/place-with-basic-category.yaml +++ b/reference/examples/places/place-with-basic-category.yaml @@ -6,10 +6,6 @@ geometry: coordinates: [0, 0] properties: basic_category: casual_eatery - categories: - primary: gas_station_sushi - alternate: - - just_for_fun confidence: 0.9 websites: - https://www.example.com/ diff --git a/reference/examples/places/place-with-operating-status.yaml b/reference/examples/places/place-with-operating-status.yaml index 145b40560..a7ade9b22 100644 --- a/reference/examples/places/place-with-operating-status.yaml +++ b/reference/examples/places/place-with-operating-status.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com/ diff --git a/reference/examples/places/place-with-taxonomy.yaml b/reference/examples/places/place-with-taxonomy.yaml index 3dd33b30a..80a2804c5 100644 --- a/reference/examples/places/place-with-taxonomy.yaml +++ b/reference/examples/places/place-with-taxonomy.yaml @@ -16,11 +16,6 @@ properties: alternates: - gas_station - sushi_restaurant - categories: - primary: gas_station_sushi - alternate: - - gas_station - - sushi_restaurant confidence: 0.85 websites: - https://www.buckysgas.example.com/ diff --git a/reference/examples/places/place.yaml b/reference/examples/places/place.yaml index 66dd59e97..a636a034f 100644 --- a/reference/examples/places/place.yaml +++ b/reference/examples/places/place.yaml @@ -5,8 +5,6 @@ geometry: type: Point coordinates: [0, 0] properties: - categories: - primary: some_category confidence: 0.9 websites: - https://www.example.com/ diff --git a/reference/examples/places/place2.yaml b/reference/examples/places/place2.yaml index ac70b11df..0652a9246 100644 --- a/reference/examples/places/place2.yaml +++ b/reference/examples/places/place2.yaml @@ -16,8 +16,6 @@ properties: names: primary: Example wikidata: Q1000 - categories: - primary: some_category emails: - info@example.com phones: From d9666442dbabe219cfac4daad0b2a7d64ac87c75 Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Wed, 26 Aug 2026 15:53:41 -0700 Subject: [PATCH 05/14] remove remaining references to categories in docs and examples Signed-off-by: Connie Sun --- .../places/bad-basic-category.yaml | 2 +- docs/schema/0-Schema.mdx | 2 +- .../schema/concepts/by-theme/places/index.mdx | 49 +- .../by-theme/places/overture_categories.csv | 2118 ----------------- docs/schema/reference/places/place.mdx | 6 +- ...gories.yaml => place-minimal-example.yaml} | 0 ...ries.yaml => place-secondary-example.yaml} | 0 .../src/overture/schema/places/place.py | 6 +- .../tests/place_baseline_schema.json | 2 +- .../places/bad-basic-category.yaml | 2 +- ...gories.yaml => place-minimal-example.yaml} | 0 ...ries.yaml => place-secondary-example.yaml} | 0 schema/places/place.yaml | 7 +- 13 files changed, 19 insertions(+), 2175 deletions(-) delete mode 100644 docs/schema/concepts/by-theme/places/overture_categories.csv rename examples/places/{place-null-categories.yaml => place-minimal-example.yaml} (100%) rename examples/places/{place-alternate-categories.yaml => place-secondary-example.yaml} (100%) rename reference/examples/places/{place-null-categories.yaml => place-minimal-example.yaml} (100%) rename reference/examples/places/{place-alternate-categories.yaml => place-secondary-example.yaml} (100%) diff --git a/counterexamples/places/bad-basic-category.yaml b/counterexamples/places/bad-basic-category.yaml index 7d40970d7..424956d57 100644 --- a/counterexamples/places/bad-basic-category.yaml +++ b/counterexamples/places/bad-basic-category.yaml @@ -1,5 +1,5 @@ --- -id: counterexample:place:bad-categories-values +id: counterexample:place:bad-basic-category-values type: Feature geometry: type: Point diff --git a/docs/schema/0-Schema.mdx b/docs/schema/0-Schema.mdx index 43c0905c2..72c33f082 100644 --- a/docs/schema/0-Schema.mdx +++ b/docs/schema/0-Schema.mdx @@ -56,7 +56,7 @@ In the Overture schema, all features have a unique `id` called a [GERS ID](https Most but not all of the feature types in the Overture schema require data for the `names`, `subtype`, and `class` properties. The `names` property is complex enough to have its own schema, which we describe in detail [here](/schema/concepts/names). ### Properties may be specific to a feature type -Some properties in the Overture schema are only populated with data for specific feature types. For example, the `place` feature type must include data for the `categories` property, as required by the schema. The `division_area` and `address` feature types require the `country` property to be populated with ISO 3166-1 alpha-2 country codes. The `segment` feature type in the transportation theme is the only feature type that includes data for a complex set of properties that describe roads. The [schema concepts](concepts) section of this documentation describes these complexities in detail. +Some properties in the Overture schema are only populated with data for specific feature types. For example, the `place` feature type includes the `taxonomy` property. The `division_area` and `address` feature types require the `country` property to be populated with ISO 3166-1 alpha-2 country codes. The `segment` feature type in the transportation theme is the only feature type that includes data for a complex set of properties that describe roads. The [schema concepts](concepts) section of this documentation describes these complexities in detail. ## Schema conventions diff --git a/docs/schema/concepts/by-theme/places/index.mdx b/docs/schema/concepts/by-theme/places/index.mdx index 5ea8faee4..30a46915a 100644 --- a/docs/schema/concepts/by-theme/places/index.mdx +++ b/docs/schema/concepts/by-theme/places/index.mdx @@ -3,47 +3,6 @@ title: Places schema concepts description: everything you ever wanted to know about the places schema --- -import overture_categories from '!!raw-loader!./overture_categories.csv'; -import CodeBlock from '@theme/CodeBlock'; - -export const PlacesCategories = (args) => { - - var lines = args.places.split('\n'); - lines.shift(); // Remove the first line (the header) - - var categories = {} - - for (const line of lines) { - const parts = line.split(';'); - const category = parts[0].trim(); - if (parts[1] != undefined) { - var hierarchy = parts[1].trim().slice(1, (parts[1].trim().length - 1)).split(','); - if (categories[hierarchy[0]] == undefined){ - categories[hierarchy[0]] = [] - } - if (hierarchy.length>1){ - categories[hierarchy[0]].push(category.padEnd(45, '.') + hierarchy.join(" > ")); - } - } - }; - - var keys = Object.keys(categories).sort() - - return ( -
- {keys.map(cat => { - return( -
{cat} - - {categories[cat].join("\n")} - -
- ) - })} -
- ); -} - ## Overview @@ -57,11 +16,11 @@ The places theme has one feature type: ## Theme concepts -### Categories - -There are more than 2,000 possible category values for Overture Places. Below are the top-level categories, expand each one to see all possible categories and their hierarchies. +### Taxonomy - +Overture Places uses a taxonomy with more than 2,000 possible category values. +Each place can provide a primary category, its hierarchy path, and optional alternate categories. +See the place schema reference for the current taxonomy structure and examples. ## Schema reference diff --git a/docs/schema/concepts/by-theme/places/overture_categories.csv b/docs/schema/concepts/by-theme/places/overture_categories.csv deleted file mode 100644 index 18cc0325f..000000000 --- a/docs/schema/concepts/by-theme/places/overture_categories.csv +++ /dev/null @@ -1,2118 +0,0 @@ -Category code; Overture Taxonomy -eat_and_drink; [eat_and_drink] -restaurant; [eat_and_drink,restaurant] -afghan_restaurant; [eat_and_drink,restaurant,afghan_restaurant] -african_restaurant; [eat_and_drink,restaurant,african_restaurant] -ethiopian_restaurant; [eat_and_drink,restaurant,african_restaurant,ethiopian_restaurant] -senegalese_restaurant; [eat_and_drink,restaurant,african_restaurant,senegalese_restaurant] -south_african_restaurant; [eat_and_drink,restaurant,african_restaurant,south_african_restaurant] -moroccan_restaurant; [eat_and_drink,restaurant,african_restaurant,moroccan_restaurant] -nigerian_restaurant; [eat_and_drink,restaurant,african_restaurant,nigerian_restaurant] -american_restaurant; [eat_and_drink,restaurant,american_restaurant] -arabian_restaurant; [eat_and_drink,restaurant,arabian_restaurant] -belgian_restaurant; [eat_and_drink,restaurant,belgian_restaurant] -latin_american_restaurant; [eat_and_drink,restaurant,latin_american_restaurant] -argentine_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,argentine_restaurant] -belizean_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,belizean_restaurant] -bolivian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,bolivian_restaurant] -brazilian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,brazilian_restaurant] -chilean_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,chilean_restaurant] -colombian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,colombian_restaurant] -costa_rican_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,costa_rican_restaurant] -cuban_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,cuban_restaurant] -ecuadorian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,ecuadorian_restaurant] -guatemalan_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,guatemalan_restaurant] -honduran_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,honduran_restaurant] -mexican_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,mexican_restaurant] -nicaraguan_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,nicaraguan_restaurant] -panamanian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,panamanian_restaurant] -paraguayan_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,paraguayan_restaurant] -peruvian_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,peruvian_restaurant] -puerto_rican_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,puerto_rican_restaurant] -salvadoran_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,salvadoran_restaurant] -texmex_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,texmex_restaurant] -uruguayan_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,uruguayan_restaurant] -venezuelan_restaurant; [eat_and_drink,restaurant,latin_american_restaurant,venezuelan_restaurant] -middle_eastern_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant] -armenian_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,armenian_restaurant] -azerbaijani_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,azerbaijani_restaurant] -egyptian_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,egyptian_restaurant] -georgian_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,georgian_restaurant] -israeli_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,israeli_restaurant] -kofta_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,kofta_restaurant] -kurdish_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,kurdish_restaurant] -lebanese_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,lebanese_restaurant] -persian_iranian_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,persian_iranian_restaurant] -syrian_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,syrian_restaurant] -turkish_restaurant; [eat_and_drink,restaurant,middle_eastern_restaurant,turkish_restaurant] -asian_restaurant; [eat_and_drink,restaurant,asian_restaurant] -asian_fusion_restaurant; [eat_and_drink,restaurant,asian_restaurant,asian_fusion_restaurant] -pan_asian_restaurant; [eat_and_drink,restaurant,asian_restaurant,pan_asian_restaurant] -burmese_restaurant; [eat_and_drink,restaurant,asian_restaurant,burmese_restaurant] -cambodian_restaurant; [eat_and_drink,restaurant,asian_restaurant,cambodian_restaurant] -chinese_restaurant; [eat_and_drink,restaurant,asian_restaurant,chinese_restaurant] -dim_sum_restaurant; [eat_and_drink,restaurant,asian_restaurant,dim_sum_restaurant] -filipino_restaurant; [eat_and_drink,restaurant,asian_restaurant,filipino_restaurant] -indo_chinese_restaurant; [eat_and_drink,restaurant,asian_restaurant,indo_chinese_restaurant] -indonesian_restaurant; [eat_and_drink,restaurant,asian_restaurant,indonesian_restaurant] -japanese_restaurant; [eat_and_drink,restaurant,asian_restaurant,japanese_restaurant] -korean_restaurant; [eat_and_drink,restaurant,asian_restaurant,korean_restaurant] -sushi_restaurant; [eat_and_drink,restaurant,asian_restaurant,sushi_restaurant] -laotian_restaurant; [eat_and_drink,restaurant,asian_restaurant,laotian_restaurant] -malaysian_restaurant; [eat_and_drink,restaurant,asian_restaurant,malaysian_restaurant] -mongolian_restaurant; [eat_and_drink,restaurant,asian_restaurant,mongolian_restaurant] -noodles_restaurant; [eat_and_drink,restaurant,asian_restaurant,noodles_restaurant] -singaporean_restaurant; [eat_and_drink,restaurant,asian_restaurant,singaporean_restaurant] -taiwanese_restaurant; [eat_and_drink,restaurant,asian_restaurant,taiwanese_restaurant] -thai_restaurant; [eat_and_drink,restaurant,asian_restaurant,thai_restaurant] -vietnamese_restaurant; [eat_and_drink,restaurant,asian_restaurant,vietnamese_restaurant] -hong_kong_style_cafe; [eat_and_drink,restaurant,asian_restaurant,hong_kong_style_cafe] -australian_restaurant; [eat_and_drink,restaurant,australian_restaurant] -austrian_restaurant; [eat_and_drink,restaurant,austrian_restaurant] -bangladeshi_restaurant; [eat_and_drink,restaurant,bangladeshi_restaurant] -indian_restaurant; [eat_and_drink,restaurant,indian_restaurant] -basque_restaurant; [eat_and_drink,restaurant,basque_restaurant] -british_restaurant; [eat_and_drink,restaurant,british_restaurant] -eastern_european_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant] -belarusian_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant,belarusian_restaurant] -bulgarian_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant,bulgarian_restaurant] -romanian_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant,romanian_restaurant] -tatar_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant,tatar_restaurant] -ukrainian_restaurant; [eat_and_drink,restaurant,eastern_european_restaurant,ukrainian_restaurant] -french_restaurant; [eat_and_drink,restaurant,french_restaurant] -cajun_and_creole_restaurant; [eat_and_drink,restaurant,cajun_and_creole_restaurant] -canadian_restaurant; [eat_and_drink,restaurant,canadian_restaurant] -caribbean_restaurant; [eat_and_drink,restaurant,caribbean_restaurant] -dominican_restaurant; [eat_and_drink,restaurant,caribbean_restaurant,dominican_restaurant] -haitian_restaurant; [eat_and_drink,restaurant,caribbean_restaurant,haitian_restaurant] -jamaican_restaurant; [eat_and_drink,restaurant,caribbean_restaurant,jamaican_restaurant] -trinidadian_restaurant; [eat_and_drink,restaurant,caribbean_restaurant,trinidadian_restaurant] -german_restaurant; [eat_and_drink,restaurant,german_restaurant] -catalan_restaurant; [eat_and_drink,restaurant,catalan_restaurant] -italian_restaurant; [eat_and_drink,restaurant,italian_restaurant] -czech_restaurant; [eat_and_drink,restaurant,czech_restaurant] -mediterranean_restaurant; [eat_and_drink,restaurant,mediterranean_restaurant] -greek_restaurant; [eat_and_drink,restaurant,mediterranean_restaurant,greek_restaurant] -guamanian_restaurant; [eat_and_drink,restaurant,guamanian_restaurant] -hawaiian_restaurant; [eat_and_drink,restaurant,hawaiian_restaurant] -himalayan_nepalese_restaurant; [eat_and_drink,restaurant,himalayan_nepalese_restaurant] -hungarian_restaurant; [eat_and_drink,restaurant,hungarian_restaurant] -iberian_restaurant; [eat_and_drink,restaurant,iberian_restaurant] -irish_restaurant; [eat_and_drink,restaurant,irish_restaurant] -jewish_restaurant; [eat_and_drink,restaurant,jewish_restaurant] -international_restaurant; [eat_and_drink,restaurant,international_restaurant] -european_restaurant; [eat_and_drink,restaurant,european_restaurant] -oriental_restaurant; [eat_and_drink,restaurant,oriental_restaurant] -pakistani_restaurant; [eat_and_drink,restaurant,pakistani_restaurant] -polish_restaurant; [eat_and_drink,restaurant,polish_restaurant] -polynesian_restaurant; [eat_and_drink,restaurant,polynesian_restaurant] -portuguese_restaurant; [eat_and_drink,restaurant,portuguese_restaurant] -russian_restaurant; [eat_and_drink,restaurant,russian_restaurant] -scandinavian_restaurant; [eat_and_drink,restaurant,scandinavian_restaurant] -danish_restaurant; [eat_and_drink,restaurant,scandinavian_restaurant,danish_restaurant] -norwegian_restaurant; [eat_and_drink,restaurant,scandinavian_restaurant,norwegian_restaurant] -scottish_restaurant; [eat_and_drink,restaurant,scottish_restaurant] -seafood_restaurant; [eat_and_drink,restaurant,seafood_restaurant] -serbo_croatian_restaurant; [eat_and_drink,restaurant,serbo_croatian_restaurant] -slovakian_restaurant; [eat_and_drink,restaurant,slovakian_restaurant] -southern_restaurant; [eat_and_drink,restaurant,southern_restaurant] -spanish_restaurant; [eat_and_drink,restaurant,spanish_restaurant] -sri_lankan_restaurant; [eat_and_drink,restaurant,sri_lankan_restaurant] -swiss_restaurant; [eat_and_drink,restaurant,swiss_restaurant] -uzbek_restaurant; [eat_and_drink,restaurant,uzbek_restaurant] -molecular_gastronomy_restaurant; [eat_and_drink,restaurant,molecular_gastronomy_restaurant] -haute_cuisine_restaurant; [eat_and_drink,restaurant,haute_cuisine_restaurant] -salad_bar; [eat_and_drink,restaurant,salad_bar] -brasserie; [eat_and_drink,restaurant,brasserie] -buffet_restaurant; [eat_and_drink,restaurant,buffet_restaurant] -barbecue_restaurant; [eat_and_drink,restaurant,barbecue_restaurant] -burger_restaurant; [eat_and_drink,restaurant,burger_restaurant] -canteen; [eat_and_drink,restaurant,canteen] -cafeteria; [eat_and_drink,restaurant,cafeteria] -cheesesteak_restaurant; [eat_and_drink,restaurant,cheesesteak_restaurant] -chicken_restaurant; [eat_and_drink,restaurant,chicken_restaurant] -chicken_wings_restaurant; [eat_and_drink,restaurant,chicken_wings_restaurant] -dog_meat_restaurant; [eat_and_drink,restaurant,dog_meat_restaurant] -dumpling_restaurant; [eat_and_drink,restaurant,dumpling_restaurant] -fast_food_restaurant; [eat_and_drink,restaurant,fast_food_restaurant] -fischbrotchen_restaurant; [eat_and_drink,restaurant,fischbrotchen_restaurant] -acai_bowls; [eat_and_drink,restaurant,acai_bowls] -fish_restaurant; [eat_and_drink,restaurant,fish_restaurant] -fish_and_chips_restaurant; [eat_and_drink,restaurant,fish_and_chips_restaurant] -fondue_restaurant; [eat_and_drink,restaurant,fondue_restaurant] -gluten_free_restaurant; [eat_and_drink,restaurant,gluten_free_restaurant] -baozi_restaurant; [eat_and_drink,restaurant,baozi_restaurant] -halal_restaurant; [eat_and_drink,restaurant,halal_restaurant] -bistro; [eat_and_drink,restaurant,bistro] -health_food_restaurant; [eat_and_drink,restaurant,health_food_restaurant] -kosher_restaurant; [eat_and_drink,restaurant,kosher_restaurant] -comfort_food_restaurant; [eat_and_drink,restaurant,comfort_food_restaurant] -meat_restaurant; [eat_and_drink,restaurant,meat_restaurant] -curry_sausage_restaurant; [eat_and_drink,restaurant,curry_sausage_restaurant] -diner; [eat_and_drink,restaurant,diner] -diy_foods_restaurant; [eat_and_drink,restaurant,diy_foods_restaurant] -doner_kebab; [eat_and_drink,restaurant,doner_kebab] -empanadas; [eat_and_drink,restaurant,empanadas] -nasi_restaurant; [eat_and_drink,restaurant,nasi_restaurant] -flatbread_restaurant; [eat_and_drink,restaurant,flatbread_restaurant] -food_court; [eat_and_drink,restaurant,food_court] -gastropub; [eat_and_drink,restaurant,gastropub] -pizza_restaurant; [eat_and_drink,restaurant,pizza_restaurant] -pop_up_restaurant; [eat_and_drink,restaurant,pop_up_restaurant] -poutinerie_restaurant; [eat_and_drink,restaurant,poutinerie_restaurant] -vegan_restaurant; [eat_and_drink,restaurant,vegan_restaurant] -vegetarian_restaurant; [eat_and_drink,restaurant,vegetarian_restaurant] -wok_restaurant; [eat_and_drink,restaurant,wok_restaurant] -wrap_restaurant; [eat_and_drink,restaurant,wrap_restaurant] -piadina_restaurant; [eat_and_drink,restaurant,piadina_restaurant] -poke_restaurant; [eat_and_drink,restaurant,poke_restaurant] -pigs_trotters_restaurant; [eat_and_drink,restaurant,pigs_trotters_restaurant] -potato_restaurant; [eat_and_drink,restaurant,potato_restaurant] -rotisserie_chicken_restaurant; [eat_and_drink,restaurant,rotisserie_chicken_restaurant] -schnitzel_restaurant; [eat_and_drink,restaurant,schnitzel_restaurant] -soul_food; [eat_and_drink,restaurant,soul_food] -steakhouse; [eat_and_drink,restaurant,steakhouse] -supper_club; [eat_and_drink,restaurant,supper_club] -tapas_bar; [eat_and_drink,restaurant,tapas_bar] -venison_restaurant; [eat_and_drink,restaurant,venison_restaurant] -wild_game_meats_restaurant; [eat_and_drink,restaurant,wild_game_meats_restaurant] -falafel_restaurant; [eat_and_drink,restaurant,falafel_restaurant] -taco_restaurant; [eat_and_drink,restaurant,taco_restaurant] -hot_dog_restaurant; [eat_and_drink,restaurant,hot_dog_restaurant] -live_and_raw_food_restaurant; [eat_and_drink,restaurant,live_and_raw_food_restaurant] -soup_restaurant; [eat_and_drink,restaurant,soup_restaurant] -theme_restaurant; [eat_and_drink,restaurant,theme_restaurant] -bar_and_grill_restaurant; [eat_and_drink,restaurant,bar_and_grill_restaurant] -meatball_restaurant; [eat_and_drink,restaurant,meatball_restaurant] -waffle_restaurant; [eat_and_drink,restaurant,waffle_restaurant] -breakfast_and_brunch_restaurant; [eat_and_drink,restaurant,breakfast_and_brunch_restaurant] -pancake_house; [eat_and_drink,restaurant,breakfast_and_brunch_restaurant,pancake_house] -bagel_restaurant; [eat_and_drink,restaurant,breakfast_and_brunch_restaurant,bagel_restaurant] -baguettes; [eat_and_drink,restaurant,breakfast_and_brunch_restaurant,baguettes] -bar; [eat_and_drink,bar] -airport_lounge; [eat_and_drink,bar,airport_lounge] -beach_bar; [eat_and_drink,bar,beach_bar] -beer_bar; [eat_and_drink,bar,beer_bar] -beer_garden; [eat_and_drink,bar,beer_garden] -brewery; [eat_and_drink,bar,brewery] -bubble_tea; [eat_and_drink,bar,bubble_tea] -champagne_bar; [eat_and_drink,bar,champagne_bar] -cidery; [eat_and_drink,bar,cidery] -cigar_bar; [eat_and_drink,bar,cigar_bar] -cocktail_bar; [eat_and_drink,bar,cocktail_bar] -dive_bar; [eat_and_drink,bar,dive_bar] -drive_thru_bar; [eat_and_drink,bar,drive_thru_bar] -gay_bar; [eat_and_drink,bar,gay_bar] -hookah_bar; [eat_and_drink,bar,hookah_bar] -hotel_bar; [eat_and_drink,bar,hotel_bar] -irish_pub; [eat_and_drink,bar,irish_pub] -kombucha; [eat_and_drink,bar,kombucha] -lounge; [eat_and_drink,bar,lounge] -milk_bar; [eat_and_drink,bar,milk_bar] -milkshake_bar; [eat_and_drink,bar,milkshake_bar] -pub; [eat_and_drink,bar,pub] -sake_bar; [eat_and_drink,bar,sake_bar] -speakeasy; [eat_and_drink,bar,speakeasy] -sports_bar; [eat_and_drink,bar,sports_bar] -sugar_shack; [eat_and_drink,bar,sugar_shack] -tabac; [eat_and_drink,bar,tabac] -tiki_bar; [eat_and_drink,bar,tiki_bar] -vermouth_bar; [eat_and_drink,bar,vermouth_bar] -whiskey_bar; [eat_and_drink,bar,whiskey_bar] -wine_bar; [eat_and_drink,bar,wine_bar] -smoothie_juice_bar; [eat_and_drink,bar,smoothie_juice_bar] -piano_bar; [eat_and_drink,bar,piano_bar] -cafe; [eat_and_drink,cafe] -coffee_roastery; [eat_and_drink,cafe,coffee_roastery] -tea_room; [eat_and_drink,cafe,tea_room] -coffee_shop; [eat_and_drink,cafe,coffee_shop] -accommodation; [accommodation] -bed_and_breakfast; [accommodation,bed_and_breakfast] -cabin; [accommodation,cabin] -campground; [accommodation,campground] -cottage; [accommodation,cottage] -guest_house; [accommodation,guest_house] -health_retreats; [accommodation,health_retreats] -holiday_rental_home; [accommodation,holiday_rental_home] -hostel; [accommodation,hostel] -hotel; [accommodation,hotel] -inn; [accommodation,inn] -lodge; [accommodation,lodge] -motel; [accommodation,motel] -mountain_huts; [accommodation,mountain_huts] -resort; [accommodation,resort] -beach_resort; [accommodation,resort,beach_resort] -rv_park; [accommodation,rv_park] -service_apartments; [accommodation,service_apartments] -automotive; [automotive] -automotive_dealer; [automotive,automotive_dealer] -car_buyer; [automotive,car_buyer] -car_dealer; [automotive,automotive_dealer,car_dealer] -commercial_vehicle_dealer; [automotive,automotive_dealer,commercial_vehicle_dealer] -golf_cart_dealer; [automotive,automotive_dealer,golf_cart_dealer] -motorcycle_dealer; [automotive,automotive_dealer,motorcycle_dealer] -motorsport_vehicle_dealer; [automotive,automotive_dealer,motorsport_vehicle_dealer] -recreational_vehicle_dealer; [automotive,automotive_dealer,recreational_vehicle_dealer] -scooter_dealers; [automotive,automotive_dealer,scooter_dealers] -trailer_dealer; [automotive,automotive_dealer,trailer_dealer] -truck_dealer; [automotive,automotive_dealer,truck_dealer] -used_car_dealer; [automotive,automotive_dealer,used_car_dealer] -automotive_services_and_repair; [automotive,automotive_services_and_repair] -auto_body_shop; [automotive,automotive_services_and_repair,auto_body_shop] -auto_customization; [automotive,automotive_services_and_repair,auto_customization] -auto_detailing; [automotive,automotive_services_and_repair,auto_detailing] -auto_electrical_repair; [automotive,automotive_services_and_repair,auto_electrical_repair] -auto_glass_service; [automotive,automotive_services_and_repair,auto_glass_service] -car_window_tinting; [automotive,automotive_services_and_repair,auto_glass_service,car_window_tinting] -auto_restoration_services; [automotive,automotive_services_and_repair,auto_restoration_services] -auto_security; [automotive,automotive_services_and_repair,auto_security] -automobile_registration_service; [automotive,automotive_services_and_repair,automobile_registration_service] -automotive_consultant; [automotive,automotive_services_and_repair,automotive_consultant] -automotive_storage_facility; [automotive,automotive_services_and_repair,automotive_storage_facility] -brake_service_and_repair; [automotive,automotive_services_and_repair,brake_service_and_repair] -car_inspection; [automotive,automotive_services_and_repair,car_inspection] -car_stereo_installation; [automotive,automotive_services_and_repair,car_stereo_installation] -car_wash; [automotive,automotive_services_and_repair,car_wash] -diy_auto_shop; [automotive,automotive_services_and_repair,diy_auto_shop] -emissions_inspection; [automotive,automotive_services_and_repair,emissions_inspection] -engine_repair_service; [automotive,automotive_services_and_repair,engine_repair_service] -exhaust_and_muffler_repair; [automotive,automotive_services_and_repair,exhaust_and_muffler_repair] -hybrid_car_repair; [automotive,automotive_services_and_repair,hybrid_car_repair] -motorcycle_repair; [automotive,automotive_services_and_repair,motorcycle_repair] -motorsport_vehicle_repair; [automotive,automotive_services_and_repair,motorsport_vehicle_repair] -oil_change_station; [automotive,automotive_services_and_repair,oil_change_station] -recreation_vehicle_repair; [automotive,automotive_services_and_repair,recreation_vehicle_repair] -roadside_assistance; [automotive,automotive_services_and_repair,roadside_assistance] -emergency_roadside_service; [automotive,automotive_services_and_repair,roadside_assistance,emergency_roadside_service] -mobile_dent_repair; [automotive,automotive_services_and_repair,roadside_assistance,mobile_dent_repair] -tire_dealer_and_repair; [automotive,automotive_services_and_repair,tire_dealer_and_repair] -transmission_repair; [automotive,automotive_services_and_repair,transmission_repair] -towing_service; [automotive,automotive_services_and_repair,towing_service] -trailer_repair; [automotive,automotive_services_and_repair,trailer_repair] -truck_repair; [automotive,automotive_services_and_repair,truck_repair] -auto_upholstery; [automotive,automotive_services_and_repair,auto_upholstery] -vehicle_wrap; [automotive,automotive_services_and_repair,vehicle_wrap] -vehicle_shipping; [automotive,automotive_services_and_repair,vehicle_shipping] -wheel_and_rim_repair; [automotive,automotive_services_and_repair,wheel_and_rim_repair] -automotive_wheel_polishing_service; [automotive,automotive_services_and_repair,automotive_wheel_polishing_service] -windshield_installation_and_repair; [automotive,automotive_services_and_repair,windshield_installation_and_repair] -automotive_parts_and_accessories; [automotive,automotive_parts_and_accessories] -recreational_vehicle_parts_and_accessories; [automotive,automotive_parts_and_accessories,recreational_vehicle_parts_and_accessories] -car_stereo_store; [automotive,automotive_parts_and_accessories,car_stereo_store] -motorcycle_gear; [automotive,automotive_parts_and_accessories,motorcycle_gear] -motorsports_store; [automotive,automotive_parts_and_accessories,motorsports_store] -interlock_system; [automotive,automotive_parts_and_accessories,interlock_system] -aircraft_dealer; [automotive,aircraft_dealer] -aircraft_repair; [automotive,aircraft_services_and_repair] -aircraft_parts_and_supplies; [automotive,aircraft_parts_and_supplies] -avionics_shop; [automotive,aircraft_parts_and_supplies,avionics_shop] -boat_dealer; [automotive,boat_dealer] -boat_service_and_repair; [automotive,boat_service_and_repair] -boat_parts_and_accessories; [automotive,boat_parts_and_accessories] -gas_station; [automotive,gas_station] -truck_gas_station; [automotive,gas_station,truck_gas_station] -fuel_dock; [automotive,gas_station,fuel_dock] -ev_charging_station; [automotive,electric_vehicle_charging_station] -truck_stop; [automotive,truck_stop] -automobile_leasing; [automotive,automobile_leasing] -automotive_repair; [automotive,automotive_repair] -auto_company; [automotive,auto_company] -motorcycle_manufacturer; [automotive,motorcycle_manufacturer] -arts_and_entertainment; [arts_and_entertainment] -adult_entertainment; [arts_and_entertainment,adult_entertainment] -erotic_massage; [arts_and_entertainment,adult_entertainment,erotic_massage] -strip_club; [arts_and_entertainment,adult_entertainment,strip_club] -striptease_dancer; [arts_and_entertainment,adult_entertainment,striptease_dancer] -arcade; [arts_and_entertainment,arcade] -auditorium; [arts_and_entertainment,auditorium] -bar_crawl; [arts_and_entertainment,bar_crawl] -betting_center; [arts_and_entertainment,betting_center] -bingo_hall; [arts_and_entertainment,bingo_hall] -bookmakers; [arts_and_entertainment,bookmakers] -cabaret; [arts_and_entertainment,cabaret] -carousel; [arts_and_entertainment,carousel] -casino; [arts_and_entertainment,casino] -chamber_of_handicraft; [arts_and_entertainment,chamber_of_handicraft] -choir; [arts_and_entertainment,choir] -circus; [arts_and_entertainment,circus] -club_crawl; [arts_and_entertainment,club_crawl] -comedy_club; [arts_and_entertainment,comedy_club] -topic_concert_venue; [arts_and_entertainment,topic_concert_venue] -country_club; [arts_and_entertainment,country_club] -country_dance_hall; [arts_and_entertainment,country_dance_hall] -dance_club; [arts_and_entertainment,dance_club] -dinner_theater; [arts_and_entertainment,dinner_theater] -eatertainment; [arts_and_entertainment,eatertainment] -escape_rooms; [arts_and_entertainment,escape_rooms] -exhibition_and_trade_center; [arts_and_entertainment,exhibition_and_trade_center] -glass_blowing; [arts_and_entertainment,glass_blowing] -indoor_playcenter; [arts_and_entertainment,indoor_playcenter] -internet_cafe; [arts_and_entertainment,internet_cafe] -jazz_and_blues; [arts_and_entertainment,jazz_and_blues] -karaoke; [arts_and_entertainment,karaoke] -laser_tag; [arts_and_entertainment,laser_tag] -makerspace; [arts_and_entertainment,makerspace] -marching_band; [arts_and_entertainment,marching_band] -music_venue; [arts_and_entertainment,music_venue] -musical_band_orchestras_and_symphonies; [arts_and_entertainment,musical_band_orchestras_and_symphonies] -opera_and_ballet; [arts_and_entertainment,opera_and_ballet] -paint_and_sip; [arts_and_entertainment,paint_and_sip] -paintball; [arts_and_entertainment,paintball] -performing_arts; [arts_and_entertainment,performing_arts] -planetarium; [arts_and_entertainment,planetarium] -rodeo; [arts_and_entertainment,rodeo] -salsa_club; [arts_and_entertainment,salsa_club] -wildlife_sanctuary; [arts_and_entertainment,wildlife_sanctuary] -stadium_arena; [arts_and_entertainment,stadium_arena] -baseball_stadium; [arts_and_entertainment,stadium_arena,baseball_stadium] -basketball_stadium; [arts_and_entertainment,stadium_arena,basketball_stadium] -cricket_ground; [arts_and_entertainment,stadium_arena,cricket_ground] -football_stadium; [arts_and_entertainment,stadium_arena,football_stadium] -hockey_arena; [arts_and_entertainment,stadium_arena,hockey_arena] -rugby_stadium; [arts_and_entertainment,stadium_arena,rugby_stadium] -soccer_stadium; [arts_and_entertainment,stadium_arena,soccer_stadium] -tennis_stadium; [arts_and_entertainment,stadium_arena,tennis_stadium] -track_stadium; [arts_and_entertainment,stadium_arena,track_stadium] -studio_taping; [arts_and_entertainment,studio_taping] -theaters_and_performance_venues; [arts_and_entertainment,theaters_and_performance_venues] -theatre; [arts_and_entertainment,theaters_and_performance_venues,theatre] -ticket_sales; [arts_and_entertainment,ticket_sales] -virtual_reality_center; [arts_and_entertainment,virtual_reality_center] -water_park; [arts_and_entertainment,water_park] -cinema; [arts_and_entertainment,cinema] -drive_in_theater; [arts_and_entertainment,cinema,drive_in_theater] -outdoor_movies; [arts_and_entertainment,cinema,outdoor_movies] -farm; [arts_and_entertainment,farm] -attraction_farm; [arts_and_entertainment,farm,attraction_farm] -orchard; [arts_and_entertainment,farm,orchard] -pick_your_own_farm; [arts_and_entertainment,farm,pick_your_own_farm] -poultry_farm; [arts_and_entertainment,farm,poultry_farm] -ranch; [arts_and_entertainment,farm,ranch] -festival; [arts_and_entertainment,festival] -fair; [arts_and_entertainment,festival,fair] -film_festivals_and_organizations; [arts_and_entertainment,festival,film_festivals_and_organizations] -general_festivals; [arts_and_entertainment,festival,general_festivals] -holiday_market; [arts_and_entertainment,festival,holiday_market] -music_festivals_and_organizations; [arts_and_entertainment,festival,music_festivals_and_organizations] -trade_fair; [arts_and_entertainment,festival,trade_fair] -social_club; [arts_and_entertainment,social_club] -fraternal_organization; [arts_and_entertainment,social_club,fraternal_organization] -veterans_organization; [arts_and_entertainment,social_club,veterans_organization] -supernatural_reading; [arts_and_entertainment,supernatural_reading] -astrologer; [arts_and_entertainment,supernatural_reading,astrologer] -mystic; [arts_and_entertainment,supernatural_reading,mystic] -psychic; [arts_and_entertainment,supernatural_reading,psychic] -psychic_medium; [arts_and_entertainment,supernatural_reading,psychic_medium] -attractions_and_activities; [attractions_and_activities] -amusement_park; [attractions_and_activities,amusement_park] -aquarium; [attractions_and_activities,aquarium] -architecture; [attractions_and_activities,architecture] -art_gallery; [attractions_and_activities,art_gallery] -atv_rentals_and_tours; [attractions_and_activities,atv_rentals_and_tours] -axe_throwing; [attractions_and_activities,axe_throwing] -backpacking_area; [attractions_and_activities,backpacking_area] -beach; [attractions_and_activities,beach] -beach_combing_area; [attractions_and_activities,beach_combing_area] -boat_rental_and_training; [attractions_and_activities,boat_rental_and_training] -boating_places; [attractions_and_activities,boating_places] -bobsledding_field; [attractions_and_activities,bobsledding_field] -botanical_garden; [attractions_and_activities,botanical_garden] -bungee_jumping_center; [attractions_and_activities,bungee_jumping_center] -canyon; [attractions_and_activities,canyon] -castle; [attractions_and_activities,castle] -cave; [attractions_and_activities,cave] -challenge_courses_center; [attractions_and_activities,challenge_courses_center] -cliff_jumping_center; [attractions_and_activities,cliff_jumping_center] -climbing_service; [attractions_and_activities,climbing_service] -crater; [attractions_and_activities,crater] -cultural_center; [attractions_and_activities,cultural_center] -fishing_charter; [attractions_and_activities,fishing_charter] -flyboarding_rental; [attractions_and_activities,flyboarding_rental] -fort; [attractions_and_activities,fort] -fountain; [attractions_and_activities,fountain] -go_kart_track; [attractions_and_activities,go_kart_track] -haunted_house; [attractions_and_activities,haunted_house] -high_gliding_center; [attractions_and_activities,high_gliding_center] -horseback_riding_service; [attractions_and_activities,horseback_riding_service] -hot_air_balloons_tour; [attractions_and_activities,hot_air_balloons_tour] -hot_springs; [attractions_and_activities,hot_springs] -jet_skis_rental; [attractions_and_activities,jet_skis_rental] -kiteboarding_instruction; [attractions_and_activities,kiteboarding_instruction] -lake; [attractions_and_activities,lake] -landmark_and_historical_building; [attractions_and_activities,landmark_and_historical_building] -lighthouse; [attractions_and_activities,lighthouse] -lookout; [attractions_and_activities,lookout] -marina; [attractions_and_activities,marina] -monument; [attractions_and_activities,monument] -mountain_bike_parks; [attractions_and_activities,mountain_bike_parks] -observatory; [attractions_and_activities,observatory] -paddleboard_rental; [attractions_and_activities,paddleboard_rental] -palace; [attractions_and_activities,palace] -parasailing_ride_service; [attractions_and_activities,parasailing_ride_service] -plaza; [attractions_and_activities,plaza] -rafting_kayaking_area; [attractions_and_activities,rafting_kayaking_area] -rock_climbing_spot; [attractions_and_activities,rock_climbing_spot] -ruin; [attractions_and_activities,ruin] -sailing_area; [attractions_and_activities,sailing_area] -sand_dune; [attractions_and_activities,sand_dune] -scavenger_hunts_provider; [attractions_and_activities,scavenger_hunts_provider] -sculpture_statue; [attractions_and_activities,sculpture_statue] -ski_area; [attractions_and_activities,ski_area] -skyline; [attractions_and_activities,skyline] -sledding_rental; [attractions_and_activities,sledding_rental] -snorkeling_equipment_rental; [attractions_and_activities,snorkeling_equipment_rental] -snorkeling; [attractions_and_activities,snorkeling] -snowboarding_center; [attractions_and_activities,snowboarding_center] -stargazing_area; [attractions_and_activities,stargazing_area] -street_art; [attractions_and_activities,street_art] -trail; [attractions_and_activities,trail] -hiking_trail; [attractions_and_activities,trail,hiking_trail] -mountain_bike_trails; [attractions_and_activities,trail,mountain_bike_trails] -waterfall; [attractions_and_activities,waterfall] -surfing; [attractions_and_activities,surfing] -surfboard_rental; [attractions_and_activities,surfing,surfboard_rental] -windsurfing_center; [attractions_and_activities,surfing,windsurfing_center] -ziplining_center; [attractions_and_activities,ziplining_center] -zoo; [attractions_and_activities,zoo] -petting_zoo; [attractions_and_activities,zoo,petting_zoo] -museum; [attractions_and_activities,museum] -art_museum; [attractions_and_activities,museum,art_museum] -asian_art_museum; [attractions_and_activities,museum,art_museum,asian_art_museum] -cartooning_museum; [attractions_and_activities,museum,art_museum,cartooning_museum] -contemporary_art_museum; [attractions_and_activities,museum,art_museum,contemporary_art_museum] -childrens_museum; [attractions_and_activities,museum,childrens_museum] -costume_museum; [attractions_and_activities,museum,art_museum,costume_museum] -decorative_arts_museum; [attractions_and_activities,museum,art_museum,decorative_arts_museum] -design_museum; [attractions_and_activities,museum,art_museum,design_museum] -modern_art_museum; [attractions_and_activities,museum,art_museum,modern_art_museum] -photography_museum; [attractions_and_activities,museum,art_museum,photography_museum] -textile_museum; [attractions_and_activities,museum,art_museum,textile_museum] -history_museum; [attractions_and_activities,museum,history_museum] -civilization_museum; [attractions_and_activities,museum,history_museum,civilization_museum] -community_museum; [attractions_and_activities,museum,history_museum,community_museum] -military_museum; [attractions_and_activities,museum,military_museum] -national_museum; [attractions_and_activities,museum,national_museum] -science_museum; [attractions_and_activities,museum,science_museum] -computer_museum; [attractions_and_activities,museum,science_museum,computer_museum] -state_museum; [attractions_and_activities,museum,state_museum] -aviation_museum; [attractions_and_activities,museum,aviation_museum] -sports_museum; [attractions_and_activities,museum,sports_museum] -park; [attractions_and_activities,park] -dog_park; [attractions_and_activities,park,dog_park] -memorial_park; [attractions_and_activities,park,memorial_park] -national_park; [attractions_and_activities,park,national_park] -state_park; [attractions_and_activities,park,state_park] -active_life; [active_life] -sports_and_recreation_venue; [active_life,sports_and_recreation_venue] -adventure_sports_center; [active_life,sports_and_recreation_venue,adventure_sports_center] -american_football_field; [active_life,sports_and_recreation_venue,american_football_field] -airsoft_fields; [active_life,sports_and_recreation_venue,airsoft_fields] -archery_range; [active_life,sports_and_recreation_venue,archery_range] -atv_recreation_park; [active_life,sports_and_recreation_venue,atv_recreation_park] -badminton_court; [active_life,sports_and_recreation_venue,badminton_court] -baseball_field; [active_life,sports_and_recreation_venue,baseball_field] -basketball_court; [active_life,sports_and_recreation_venue,basketball_court] -batting_cage; [active_life,sports_and_recreation_venue,batting_cage] -beach_volleyball_court; [active_life,sports_and_recreation_venue,beach_volleyball_court] -bicycle_path; [active_life,sports_and_recreation_venue,bicycle_path] -bocce_ball_court; [active_life,sports_and_recreation_venue,bocce_ball_court] -bowling_alley; [active_life,sports_and_recreation_venue,bowling_alley] -bubble_soccer_field; [active_life,sports_and_recreation_venue,bubble_soccer_field] -disc_golf_course; [active_life,sports_and_recreation_venue,disc_golf_course] -flyboarding_center; [active_life,sports_and_recreation_venue,flyboarding_center] -futsal_field; [active_life,sports_and_recreation_venue,futsal_field] -golf_course; [active_life,sports_and_recreation_venue,golf_course] -driving_range; [active_life,sports_and_recreation_venue,golf_course,driving_range] -gym; [active_life,sports_and_recreation_venue,gym] -gymnastics_center; [active_life,sports_and_recreation_venue,gymnastics_center] -handball_court; [active_life,sports_and_recreation_venue,handball_court] -hockey_field; [active_life,sports_and_recreation_venue,hockey_field] -horse_riding; [active_life,sports_and_recreation_venue,horse_riding] -equestrian_facility; [active_life,sports_and_recreation_venue,horse_riding,equestrian_facility] -horse_racing_track; [active_life,sports_and_recreation_venue,horse_riding,horse_racing_track] -skate_park; [active_life,sports_and_recreation_venue,skate_park] -skating_rink; [active_life,sports_and_recreation_venue,skating_rink] -ice_skating_rink; [active_life,sports_and_recreation_venue,skating_rink,ice_skating_rink] -roller_skating_rink; [active_life,sports_and_recreation_venue,skating_rink,roller_skating_rink] -hang_gliding_center; [active_life,sports_and_recreation_venue,hang_gliding_center] -kiteboarding; [active_life,sports_and_recreation_venue,kiteboarding] -miniature_golf_course; [active_life,sports_and_recreation_venue,miniature_golf_course] -paddleboarding_center; [active_life,sports_and_recreation_venue,paddleboarding_center] -playground; [active_life,sports_and_recreation_venue,playground] -pool_billiards; [active_life,sports_and_recreation_venue,pool_billiards] -pool_hall; [active_life,sports_and_recreation_venue,pool_billiards,pool_hall] -racquetball_court; [active_life,sports_and_recreation_venue,racquetball_court] -rock_climbing_gym; [active_life,sports_and_recreation_venue,rock_climbing_gym] -rugby_pitch; [active_life,sports_and_recreation_venue,rugby_pitch] -shooting_range; [active_life,sports_and_recreation_venue,shooting_range] -sky_diving; [active_life,sports_and_recreation_venue,sky_diving] -soccer_field; [active_life,sports_and_recreation_venue,soccer_field] -squash_court; [active_life,sports_and_recreation_venue,squash_court] -swimming_pool; [active_life,sports_and_recreation_venue,swimming_pool] -tennis_court; [active_life,sports_and_recreation_venue,tennis_court] -trampoline_park; [active_life,sports_and_recreation_venue,trampoline_park] -tubing_provider; [active_life,sports_and_recreation_venue,tubing_provider] -volleyball_court; [active_life,sports_and_recreation_venue,volleyball_court] -wildlife_hunting_range; [active_life,sports_and_recreation_venue,wildlife_hunting_range] -zorbing_center; [active_life,sports_and_recreation_venue,zorbing_center] -diving_center; [active_life,sports_and_recreation_venue,diving_center] -free_diving_center; [active_life,sports_and_recreation_venue,diving_center,free_diving_center] -scuba_diving_center; [active_life,sports_and_recreation_venue,diving_center,scuba_diving_center] -race_track; [active_life,sports_and_recreation_venue,race_track] -sports_and_fitness_instruction; [active_life,sports_and_fitness_instruction] -climbing_class; [active_life,sports_and_fitness_instruction,climbing_class] -cycling_classes; [active_life,sports_and_fitness_instruction,cycling_classes] -golf_instructor; [active_life,sports_and_fitness_instruction,golf_instructor] -paddleboarding_lessons; [active_life,sports_and_fitness_instruction,paddleboarding_lessons] -racing_experience; [active_life,sports_and_fitness_instruction,racing_experience] -rock_climbing_instructor; [active_life,sports_and_fitness_instruction,rock_climbing_instructor] -free_diving_instruction; [active_life,sports_and_fitness_instruction,diving_instruction,free_diving_instruction] -scuba_diving_instruction; [active_life,sports_and_fitness_instruction,diving_instruction,scuba_diving_instruction] -aerial_fitness_center; [active_life,sports_and_fitness_instruction,aerial_fitness_center] -barre_classes; [active_life,sports_and_fitness_instruction,barre_classes] -boot_camp; [active_life,sports_and_fitness_instruction,boot_camp] -boxing_class; [active_life,sports_and_fitness_instruction,boxing_class] -boxing_club; [active_life,sports_and_fitness_instruction,boxing_club] -boxing_gym; [active_life,sports_and_fitness_instruction,boxing_gym] -cardio_classes; [active_life,sports_and_fitness_instruction,cardio_classes] -dance_school; [active_life,sports_and_fitness_instruction,dance_school] -ems_training; [active_life,sports_and_fitness_instruction,ems_training] -fitness_trainer; [active_life,sports_and_fitness_instruction,fitness_trainer] -health_consultant; [active_life,sports_and_fitness_instruction,health_consultant] -meditation_center; [active_life,sports_and_fitness_instruction,meditation_center] -pilates_studio; [active_life,sports_and_fitness_instruction,pilates_studio] -qi_gong_studio; [active_life,sports_and_fitness_instruction,qi_gong_studio] -self_defense_classes; [active_life,sports_and_fitness_instruction,self_defense_classes] -ski_and_snowboard_school; [active_life,sports_and_fitness_instruction,ski_and_snowboard_school] -surfing_school; [active_life,sports_and_fitness_instruction,surfing_school] -swimming_instructor; [active_life,sports_and_fitness_instruction,swimming_instructor] -tai_chi_studio; [active_life,sports_and_fitness_instruction,tai_chi_studio] -yoga_instructor; [active_life,sports_and_fitness_instruction,yoga_instructor] -yoga_studio; [active_life,sports_and_fitness_instruction,yoga_studio] -sports_club_and_league; [active_life,sports_club_and_league] -amateur_sports_league; [active_life,sports_club_and_league,amateur_sports_league] -amateur_sports_team; [active_life,sports_club_and_league,amateur_sports_team] -beach_volleyball_club; [active_life,sports_club_and_league,beach_volleyball_club] -esports_league; [active_life,sports_club_and_league,esports_league] -esports_team; [active_life,sports_club_and_league,esports_team] -fencing_club; [active_life,sports_club_and_league,fencing_club] -fishing_club; [active_life,sports_club_and_league,fishing_club] -football_club; [active_life,sports_club_and_league,football_club] -go_kart_club; [active_life,sports_club_and_league,go_kart_club] -gymnastics_club; [active_life,sports_club_and_league,gymnastics_club] -lawn_bowling_club; [active_life,sports_club_and_league,lawn_bowling_club] -nudist_clubs; [active_life,sports_club_and_league,nudist_clubs] -paddle_tennis_club; [active_life,sports_club_and_league,paddle_tennis_club] -professional_sports_league; [active_life,sports_club_and_league,professional_sports_league] -professional_sports_team; [active_life,sports_club_and_league,professional_sports_team] -rowing_club; [active_life,sports_club_and_league,rowing_club] -sailing_club; [active_life,sports_club_and_league,sailing_club] -school_sports_league; [active_life,sports_club_and_league,school_sports_league] -school_sports_team; [active_life,sports_club_and_league,school_sports_team] -soccer_club; [active_life,sports_club_and_league,soccer_club] -surf_lifesaving_club; [active_life,sports_club_and_league,surf_lifesaving_club] -table_tennis_club; [active_life,sports_club_and_league,table_tennis_club] -volleyball_club; [active_life,sports_club_and_league,volleyball_club] -golf_club; [active_life,sports_club_and_league,golf_club] -indoor_golf_center; [active_life,sports_club_and_league,golf_club,indoor_golf_center] -martial_arts_club; [active_life,sports_club_and_league,martial_arts_club] -brazilian_jiu_jitsu_club; [active_life,sports_club_and_league,martial_arts_club,brazilian_jiu_jitsu_club] -chinese_martial_arts_club; [active_life,sports_club_and_league,martial_arts_club,chinese_martial_arts_club] -karate_club; [active_life,sports_club_and_league,martial_arts_club,karate_club] -kickboxing_club; [active_life,sports_club_and_league,martial_arts_club,kickboxing_club] -muay_thai_club; [active_life,sports_club_and_league,martial_arts_club,muay_thai_club] -taekwondo_club; [active_life,sports_club_and_league,martial_arts_club,taekwondo_club] -sports_and_recreation_rental_and_services; [active_life,sports_and_recreation_rental_and_services] -beach_equipment_rentals; [active_life,sports_and_recreation_rental_and_services,beach_equipment_rentals] -bike_rentals; [active_life,sports_and_recreation_rental_and_services,bike_rentals] -canoe_and_kayak_hire_service; [active_life,sports_and_recreation_rental_and_services,boat_hire_service,canoe_and_kayak_hire_service] -scooter_rental; [active_life,sports_and_recreation_rental_and_services,scooter_rental] -sport_equipment_rentals; [active_life,sports_and_recreation_rental_and_services,sport_equipment_rentals] -beauty_and_spa; [beauty_and_spa] -aromatherapy; [beauty_and_spa,aromatherapy] -beauty_salon; [beauty_and_spa,beauty_salon] -acne_treatment; [beauty_and_spa,acne_treatment] -barber; [beauty_and_spa,barber] -eyebrow_service; [beauty_and_spa,eyebrow_service] -eyelash_service; [beauty_and_spa,eyelash_service] -foot_care; [beauty_and_spa,foot_care] -hair_extensions; [beauty_and_spa,hair_extensions] -hair_loss_center; [beauty_and_spa,hair_loss_center] -hair_replacement; [beauty_and_spa,hair_replacement] -health_spa; [beauty_and_spa,health_spa] -makeup_artist; [beauty_and_spa,makeup_artist] -massage; [beauty_and_spa,massage] -nail_salon; [beauty_and_spa,nail_salon] -onsen; [beauty_and_spa,onsen] -permanent_makeup; [beauty_and_spa,permanent_makeup] -tattoo_and_piercing; [beauty_and_spa,tattoo_and_piercing] -piercing; [beauty_and_spa,tattoo_and_piercing,piercing] -tattoo; [beauty_and_spa,tattoo_and_piercing,tattoo] -public_bath_houses; [beauty_and_spa,public_bath_houses] -teeth_whitening; [beauty_and_spa,teeth_whitening] -turkish_baths; [beauty_and_spa,turkish_baths] -hair_removal; [beauty_and_spa,hair_removal] -laser_hair_removal; [beauty_and_spa,hair_removal,laser_hair_removal] -sugaring; [beauty_and_spa,hair_removal,sugaring] -threading_service; [beauty_and_spa,hair_removal,threading_service] -waxing; [beauty_and_spa,hair_removal,waxing] -hair_salon; [beauty_and_spa,hair_salon] -blow_dry_blow_out_service; [beauty_and_spa,hair_salon,blow_dry_blow_out_service] -hair_stylist; [beauty_and_spa,hair_salon,hair_stylist] -kids_hair_salon; [beauty_and_spa,hair_salon,kids_hair_salon] -spas; [beauty_and_spa,spas] -medical_spa; [beauty_and_spa,spas,medical_spa] -day_spa; [beauty_and_spa,spas,day_spa] -skin_care; [beauty_and_spa,skin_care] -esthetician; [beauty_and_spa,skin_care,esthetician] -tanning_salon; [beauty_and_spa,tanning_salon] -spray_tanning; [beauty_and_spa,tanning_salon,spray_tanning] -tanning_bed; [beauty_and_spa,tanning_salon,tanning_bed] -image_consultant; [beauty_and_spa,image_consultant] -education; [education] -adult_education; [education,adult_education] -board_of_education_offices; [education,board_of_education_offices] -campus_building; [education,campus_building] -college_counseling; [education,college_counseling] -college_university; [education,college_university] -architecture_schools; [education,college_university,architecture_schools] -business_schools; [education,college_university,business_schools] -engineering_schools; [education,college_university,engineering_schools] -law_schools; [education,college_university,law_schools] -medical_sciences_schools; [education,college_university,medical_sciences_schools] -dentistry_schools; [education,college_university,medical_sciences_schools,dentistry_schools] -pharmacy_schools; [education,college_university,medical_sciences_schools,pharmacy_schools] -veterinary_schools; [education,college_university,medical_sciences_schools,veterinary_schools] -science_schools; [education,college_university,science_schools] -educational_research_institute; [education,educational_research_institute] -educational_services; [education,educational_services] -archaeological_services; [education,educational_services,archaeological_services] -educational_camp; [education,educational_camp] -private_tutor; [education,private_tutor] -school; [education,school] -charter_school; [education,school,charter_school] -elementary_school; [education,school,elementary_school] -high_school; [education,school,high_school] -middle_school; [education,school,middle_school] -montessori_school; [education,school,montessori_school] -preschool; [education,school,preschool] -private_school; [education,school,private_school] -public_school; [education,school,public_school] -religious_school; [education,school,religious_school] -waldorf_school; [education,school,waldorf_school] -school_district_offices; [education,school_district_offices] -specialty_school; [education,specialty_school] -art_school; [education,specialty_school,art_school] -bartending_school; [education,specialty_school,bartending_school] -cheerleading; [education,specialty_school,cheerleading] -childbirth_education; [education,specialty_school,childbirth_education] -circus_school; [education,specialty_school,circus_school] -computer_coaching; [education,specialty_school,computer_coaching] -cooking_school; [education,specialty_school,cooking_school] -cosmetology_school; [education,specialty_school,cosmetology_school] -cpr_classes; [education,specialty_school,cpr_classes] -drama_school; [education,specialty_school,drama_school] -driving_school; [education,specialty_school,driving_school] -dui_school; [education,specialty_school,dui_school] -firearm_training; [education,specialty_school,firearm_training] -first_aid_class; [education,specialty_school,first_aid_class] -flight_school; [education,specialty_school,flight_school] -food_safety_training; [education,specialty_school,food_safety_training] -language_school; [education,specialty_school,language_school] -massage_school; [education,specialty_school,massage_school] -medical_school; [education,specialty_school,medical_school] -music_school; [education,specialty_school,music_school] -nursing_school; [education,specialty_school,nursing_school] -parenting_classes; [education,specialty_school,parenting_classes] -photography_classes; [education,specialty_school,photography_classes] -speech_training; [education,specialty_school,speech_training] -sports_school; [education,specialty_school,sports_school] -traffic_school; [education,specialty_school,traffic_school] -vocational_and_technical_school; [education,specialty_school,vocational_and_technical_school] -student_union; [education,student_union] -tasting_classes; [education,tasting_classes] -cheese_tasting_classes; [education,tasting_classes,cheese_tasting_classes] -wine_tasting_classes; [education,tasting_classes,wine_tasting_classes] -test_preparation; [education,test_preparation] -tutoring_center; [education,tutoring_center] -civil_examinations_academy; [education,tutoring_center,civil_examinations_academy] -financial_service; [financial_service] -accountant; [financial_service,accountant] -atms; [financial_service,atms] -bank_credit_union; [financial_service,bank_credit_union] -banks; [financial_service,bank_credit_union,banks] -credit_union; [financial_service,bank_credit_union,credit_union] -brokers; [financial_service,brokers] -business_brokers; [financial_service,brokers,business_brokers] -stock_and_bond_brokers; [financial_service,brokers,stock_and_bond_brokers] -business_banking_service; [financial_service,business_banking_service] -business_financing; [financial_service,business_financing] -check_cashing_payday_loans; [financial_service,check_cashing_payday_loans] -coin_dealers; [financial_service,coin_dealers] -collection_agencies; [financial_service,collection_agencies] -credit_and_debt_counseling; [financial_service,credit_and_debt_counseling] -currency_exchange; [financial_service,currency_exchange] -debt_relief_services; [financial_service,debt_relief_services] -financial_advising; [financial_service,financial_advising] -holding_companies; [financial_service,holding_companies] -investment_management_company; [financial_service,investment_management_company] -installment_loans; [financial_service,installment_loans] -mortgage_lender; [financial_service,installment_loans,mortgage_lender] -auto_loan_provider; [financial_service,installment_loans,auto_loan_provider] -insurance_agency; [financial_service,insurance_agency] -auto_insurance; [financial_service,insurance_agency,auto_insurance] -farm_insurance; [financial_service,insurance_agency,farm_insurance] -fidelity_and_surety_bonds; [financial_service,insurance_agency,fidelity_and_surety_bonds] -home_and_rental_insurance; [financial_service,insurance_agency,home_and_rental_insurance] -life_insurance; [financial_service,insurance_agency,life_insurance] -investing; [financial_service,investing] -money_transfer_services; [financial_service,money_transfer_services] -tax_services; [financial_service,tax_services] -trusts; [financial_service,trusts] -private_establishments_and_corporates; [private_establishments_and_corporates] -corporate_entertainment_services; [private_establishments_and_corporates,corporate_entertainment_services] -corporate_gift_supplier; [private_establishments_and_corporates,corporate_gift_supplier] -corporate_office; [private_establishments_and_corporates,corporate_office] -private_equity_firm; [private_establishments_and_corporates,private_equity_firm] -retail; [retail] -food; [retail,food] -back_shop; [retail,food,back_shop] -bagel_shop; [retail,food,bagel_shop] -bakery; [retail,food,bakery] -flatbread; [retail,food,bakery,flatbread] -beer_wine_and_spirits; [retail,food,beer_wine_and_spirits] -box_lunch_supplier; [retail,food,box_lunch_supplier] -patisserie_cake_shop; [retail,food,patisserie_cake_shop] -chimney_cake_shop; [retail,food,patisserie_cake_shop,chimney_cake_shop] -cupcake_shop; [retail,food,patisserie_cake_shop,cupcake_shop] -custom_cakes_shop; [retail,food,patisserie_cake_shop,custom_cakes_shop] -coffee_and_tea_supplies; [retail,food,coffee_and_tea_supplies] -csa_farm; [retail,food,csa_farm] -desserts; [retail,food,desserts] -donuts; [retail,food,donuts] -fishmonger; [retail,food,fishmonger] -food_delivery_service; [retail,food,food_delivery_service] -food_stand; [retail,food,food_stand] -food_truck; [retail,food,food_truck] -friterie; [retail,food,friterie] -health_food_store; [retail,food,health_food_store] -ice_cream_and_frozen_yoghurt; [retail,food,ice_cream_and_frozen_yoghurt] -gelato; [retail,food,ice_cream_and_frozen_yoghurt,gelato] -ice_cream_shop; [retail,food,ice_cream_and_frozen_yoghurt,ice_cream_shop] -frozen_yoghurt_shop; [retail,food,ice_cream_and_frozen_yoghurt,frozen_yoghurt_shop] -shaved_ice_shop; [retail,food,ice_cream_and_frozen_yoghurt,shaved_ice_shop] -shaved_snow_shop; [retail,food,ice_cream_and_frozen_yoghurt,shaved_snow_shop] -imported_food; [retail,food,imported_food] -kiosk; [retail,food,kiosk] -liquor_store; [retail,food,liquor_store] -mulled_wine; [retail,food,mulled_wine] -pie_shop; [retail,food,pie_shop] -pretzels; [retail,food,pretzels] -sandwich_shop; [retail,food,sandwich_shop] -smokehouse; [retail,food,smokehouse] -street_vendor; [retail,food,street_vendor] -pizza_delivery_service; [retail,food,food_delivery_service,pizza_delivery_service] -specialty_foods; [retail,food,specialty_foods] -delicatessen; [retail,food,specialty_foods,delicatessen] -frozen_foods; [retail,food,specialty_foods,frozen_foods] -indian_sweets_shop; [retail,food,specialty_foods,indian_sweets_shop] -macarons; [retail,food,specialty_foods,macarons] -pasta_shop; [retail,food,specialty_foods,pasta_shop] -winery; [retail,food,winery] -wine_tasting_room; [retail,food,winery,wine_tasting_room] -auto_parts_and_supply_store; [retail,auto_parts_and_supply_store] -beverage_store; [retail,beverage_store] -boat_parts_and_supply_store; [retail,boat_parts_and_supply_store] -butcher_shop; [retail,food,butcher_shop] -candy_store; [retail,food,candy_store] -japanese_confectionery_shop; [retail,food,candy_store,japanese_confectionery_shop] -carpet_store; [retail,carpet_store] -cheese_shop; [retail,food,cheese_shop] -chocolatier; [retail,food,chocolatier] -distillery; [retail,distillery] -drugstore; [retail,drugstore] -flooring_store; [retail,flooring_store] -fruits_and_vegetables; [retail,food,fruits_and_vegetables] -health_market; [retail,health_market] -hearing_aid_provider; [retail,hearing_aid_provider] -herb_and_spice_shop; [retail,herb_and_spice_shop] -honey_farm_shop; [retail,honey_farm_shop] -meat_shop; [retail,meat_shop] -olive_oil; [retail,olive_oil] -party_supply; [retail,party_supply] -pharmacy; [retail,pharmacy] -popcorn_shop; [retail,popcorn_shop] -seafood_market; [retail,seafood_market] -water_store; [retail,water_store] -shopping; [retail,shopping] -arts_and_crafts; [retail,shopping,arts_and_crafts] -art_supply_store; [retail,shopping,arts_and_crafts,art_supply_store] -atelier; [retail,shopping,arts_and_crafts,atelier] -cooking_classes; [retail,shopping,arts_and_crafts,cooking_classes] -costume_store; [retail,shopping,arts_and_crafts,costume_store] -craft_shop; [retail,shopping,arts_and_crafts,craft_shop] -embroidery_and_crochet; [retail,shopping,arts_and_crafts,embroidery_and_crochet] -fabric_store; [retail,shopping,arts_and_crafts,fabric_store] -framing_store; [retail,shopping,arts_and_crafts,framing_store] -handicraft_shop; [retail,shopping,arts_and_crafts,handicraft_shop] -paint_your_own_pottery; [retail,shopping,arts_and_crafts,paint_your_own_pottery] -books_mags_music_and_video; [retail,shopping,books_mags_music_and_video] -bookstore; [retail,shopping,books_mags_music_and_video,bookstore] -academic_bookstore; [retail,shopping,books_mags_music_and_video,academic_bookstore] -comic_books_store; [retail,shopping,books_mags_music_and_video,comic_books_store] -music_and_dvd_store; [retail,shopping,books_mags_music_and_video,music_and_dvd_store] -newspaper_and_magazines_store; [retail,shopping,books_mags_music_and_video,newspaper_and_magazines_store] -video_and_video_game_rentals; [retail,shopping,books_mags_music_and_video,video_and_video_game_rentals] -video_game_store; [retail,shopping,books_mags_music_and_video,video_game_store] -vinyl_record_store; [retail,shopping,books_mags_music_and_video,vinyl_record_store] -building_supply_store; [retail,shopping,building_supply_store] -lumber_store; [retail,shopping,building_supply_store,lumber_store] -fashion; [retail,shopping,fashion] -clothing_store; [retail,shopping,fashion,clothing_store] -ceremonial_clothing; [retail,shopping,fashion,clothing_store,ceremonial_clothing] -childrens_clothing_store; [retail,shopping,fashion,clothing_store,childrens_clothing_store] -clothing_rental; [retail,shopping,fashion,clothing_store,clothing_rental] -denim_wear_store; [retail,shopping,fashion,clothing_store,denim_wear_store] -designer_clothing; [retail,shopping,fashion,clothing_store,designer_clothing] -formal_wear_store; [retail,shopping,fashion,clothing_store,formal_wear_store] -fur_clothing; [retail,shopping,fashion,clothing_store,fur_clothing] -lingerie_store; [retail,shopping,fashion,clothing_store,lingerie_store] -maternity_wear; [retail,shopping,fashion,clothing_store,maternity_wear] -mens_clothing_store; [retail,shopping,fashion,clothing_store,mens_clothing_store] -t_shirt_store; [retail,shopping,fashion,clothing_store,t_shirt_store] -custom_t_shirt_store; [retail,shopping,fashion,clothing_store,t_shirt_store] -traditional_clothing; [retail,shopping,fashion,clothing_store,traditional_clothing] -womens_clothing_store; [retail,shopping,fashion,clothing_store,womens_clothing_store] -fashion_accessories_store; [retail,shopping,fashion,fashion_accessories_store] -hat_shop; [retail,shopping,fashion,hat_shop] -leather_goods; [retail,shopping,fashion,leather_goods] -plus_size_clothing; [retail,shopping,fashion,plus_size_clothing] -saree_shop; [retail,shopping,fashion,saree_shop] -sleepwear; [retail,shopping,fashion,sleepwear] -stocking; [retail,shopping,fashion,stocking] -used_vintage_and_consignment; [retail,shopping,fashion,used_vintage_and_consignment] -handbag_stores; [retail,shopping,fashion,fashion_accessories_store,handbag_stores] -shoe_store; [retail,shopping,fashion,shoe_store] -orthopedic_shoe_store; [retail,shopping,fashion,shoe_store,orthopedic_shoe_store] -cosmetic_and_beauty_supplies; [retail,shopping,cosmetic_and_beauty_supplies] -hair_supply_stores; [retail,shopping,cosmetic_and_beauty_supplies,hair_supply_stores] -eyewear_and_optician; [retail,shopping,eyewear_and_optician] -sunglasses_store; [retail,shopping,eyewear_and_optician,sunglasses_store] -farming_equipment_store; [retail,shopping,farming_equipment_store] -forklift_dealer; [retail,shopping,farming_equipment_store,forklift_dealer] -flowers_and_gifts_shop; [retail,shopping,flowers_and_gifts_shop] -florist; [retail,shopping,flowers_and_gifts_shop,florist] -gift_shop; [retail,shopping,flowers_and_gifts_shop,gift_shop] -grocery_store; [retail,shopping,grocery_store] -specialty_grocery_store; [retail,shopping,grocery_store,specialty_grocery_store] -asian_grocery_store; [retail,shopping,grocery_store,asian_grocery_store] -dairy_stores; [retail,shopping,grocery_store,dairy_stores] -ethical_grocery; [retail,shopping,grocery_store,ethical_grocery] -indian_grocery_store; [retail,shopping,grocery_store,indian_grocery_store] -japanese_grocery_store; [retail,shopping,grocery_store,japanese_grocery_store] -korean_grocery_store; [retail,shopping,grocery_store,korean_grocery_store] -kosher_grocery_store; [retail,shopping,grocery_store,kosher_grocery_store] -mexican_grocery_store; [retail,shopping,grocery_store,mexican_grocery_store] -organic_grocery_store; [retail,shopping,grocery_store,organic_grocery_store] -rice_shop; [retail,shopping,grocery_store,rice_shop] -russian_grocery_store; [retail,shopping,grocery_store,russian_grocery_store] -home_and_garden; [retail,shopping,home_and_garden] -hardware_store; [retail,shopping,home_and_garden,hardware_store] -welding_supply_store; [retail,shopping,home_and_garden,hardware_store,welding_supply_store] -appliance_store; [retail,shopping,home_and_garden,appliance_store] -bedding_and_bath_stores; [retail,shopping,home_and_garden,bedding_and_bath_stores] -candle_store; [retail,shopping,home_and_garden,candle_store] -christmas_trees; [retail,shopping,home_and_garden,christmas_trees] -electrical_supply_store; [retail,shopping,home_and_garden,electrical_supply_store] -furniture_accessory_store; [retail,shopping,home_and_garden,furniture_accessory_store] -furniture_store; [retail,shopping,home_and_garden,furniture_store] -grilling_equipment; [retail,shopping,home_and_garden,grilling_equipment] -holiday_decor; [retail,shopping,home_and_garden,holiday_decor] -home_decor; [retail,shopping,home_and_garden,home_decor] -home_goods_store; [retail,shopping,home_and_garden,home_goods_store] -home_improvement_store; [retail,shopping,home_and_garden,home_improvement_store] -hot_tubs_and_pools; [retail,shopping,home_and_garden,hot_tubs_and_pools] -lawn_mower_store; [retail,shopping,home_and_garden,lawn_mower_store] -lighting_store; [retail,shopping,home_and_garden,lighting_store] -linen; [retail,shopping,home_and_garden,linen] -mattress_store; [retail,shopping,home_and_garden,mattress_store] -nursery_and_gardening; [retail,shopping,home_and_garden,nursery_and_gardening] -outdoor_furniture_store; [retail,shopping,home_and_garden,outdoor_furniture_store] -paint_store; [retail,shopping,home_and_garden,paint_store] -playground_equipment_supplier; [retail,shopping,home_and_garden,playground_equipment_supplier] -pumpkin_patch; [retail,shopping,home_and_garden,pumpkin_patch] -rug_store; [retail,shopping,home_and_garden,rug_store] -tableware_supplier; [retail,shopping,home_and_garden,tableware_supplier] -tile_store; [retail,shopping,home_and_garden,tile_store] -wallpaper_store; [retail,shopping,home_and_garden,wallpaper_store] -window_treatment_store; [retail,shopping,home_and_garden,window_treatment_store] -woodworking_supply_store; [retail,shopping,home_and_garden,woodworking_supply_store] -kitchen_and_bath; [retail,shopping,home_and_garden,kitchen_and_bath] -bathroom_fixture_stores; [retail,shopping,home_and_garden,kitchen_and_bath,bathroom_fixture_stores] -kitchen_supply_store; [retail,shopping,home_and_garden,kitchen_and_bath,kitchen_supply_store] -hydroponic_gardening; [retail,shopping,home_and_garden,nursery_and_gardening,hydroponic_gardening] -medical_supply; [retail,shopping,medical_supply] -dental_supply_store; [retail,shopping,medical_supply,dental_supply_store] -hearing_aids; [retail,shopping,medical_supply,hearing_aids] -pet_store; [retail,shopping,pet_store] -bird_shop; [retail,shopping,pet_store,bird_shop] -aquatic_pet_store; [retail,shopping,pet_store,aquatic_pet_store] -reptile_shop; [retail,shopping,pet_store,reptile_shop] -adult_store; [retail,shopping,adult_store] -agricultural_seed_store; [retail,shopping,agricultural_seed_store] -antique_store; [retail,shopping,antique_store] -army_and_navy_store; [retail,shopping,army_and_navy_store] -auction_house; [retail,shopping,auction_house] -car_auction; [retail,shopping,auction_house,car_auction] -baby_gear_and_furniture; [retail,shopping,baby_gear_and_furniture] -battery_store; [retail,shopping,battery_store] -bazaars; [retail,shopping,bazaars] -boutique; [retail,shopping,boutique] -brewing_supply_store; [retail,shopping,brewing_supply_store] -bridal_shop; [retail,shopping,bridal_shop] -cannabis_dispensary; [retail,shopping,cannabis_dispensary] -cards_and_stationery_store; [retail,shopping,cards_and_stationery_store] -computer_store; [retail,shopping,computer_store] -concept_shop; [retail,shopping,concept_shop] -convenience_store; [retail,shopping,convenience_store] -custom_clothing; [retail,shopping,custom_clothing] -customized_merchandise; [retail,shopping,customized_merchandise] -department_store; [retail,shopping,department_store] -discount_store; [retail,shopping,discount_store] -do_it_yourself_store; [retail,shopping,do_it_yourself_store] -drone_store; [retail,shopping,drone_store] -duty_free_shop; [retail,shopping,duty_free_shop] -educational_supply_store; [retail,shopping,educational_supply_store] -electronics; [retail,shopping,electronics] -farmers_market; [retail,shopping,farmers_market] -firework_retailer; [retail,shopping,firework_retailer] -fitness_exercise_equipment; [retail,shopping,fitness_exercise_equipment] -flea_market; [retail,shopping,flea_market] -flower_markets; [retail,shopping,flower_markets] -gemstone_and_mineral; [retail,shopping,gemstone_and_mineral] -gold_buyer; [retail,shopping,gold_buyer] -guitar_store; [retail,shopping,guitar_store] -gun_and_ammo; [retail,shopping,gun_and_ammo] -herbal_shop; [retail,shopping,herbal_shop] -audio_visual_equipment_store; [retail,shopping,audio_visual_equipment_store] -hobby_shop; [retail,shopping,hobby_shop] -home_theater_systems_stores; [retail,shopping,home_theater_systems_stores] -horse_equipment_shop; [retail,shopping,horse_equipment_shop] -international_grocery_store; [retail,shopping,international_grocery_store] -jewelry_store; [retail,shopping,jewelry_store] -knitting_supply; [retail,shopping,knitting_supply] -livestock_feed_and_supply_store; [retail,shopping,livestock_feed_and_supply_store] -luggage_store; [retail,shopping,luggage_store] -market_stall; [retail,shopping,market_stall] -military_surplus_store; [retail,shopping,military_surplus_store] -mobile_phone_accessories; [retail,shopping,mobile_phone_accessories] -mobile_phone_store; [retail,shopping,mobile_phone_store] -musical_instrument_store; [retail,shopping,musical_instrument_store] -night_market; [retail,shopping,night_market] -office_equipment; [retail,shopping,office_equipment] -online_shop; [retail,shopping,online_shop] -outlet_store; [retail,shopping,outlet_store] -packing_supply; [retail,shopping,packing_supply] -pawn_shop; [retail,shopping,pawn_shop] -pen_store; [retail,shopping,pen_store] -perfume_store; [retail,shopping,perfume_store] -personal_shopper; [retail,shopping,personal_shopper] -photography_store_and_services; [retail,shopping,photography_store_and_services] -piano_store; [retail,shopping,piano_store] -pool_and_billiards; [retail,shopping,pool_and_billiards] -pop_up_shop; [retail,shopping,pop_up_shop] -props; [retail,shopping,props] -public_market; [retail,shopping,public_market] -religious_items; [retail,shopping,religious_items] -rental_kiosks; [retail,shopping,rental_kiosks] -safe_store; [retail,shopping,safe_store] -safety_equipment; [retail,shopping,safety_equipment] -shopping_center; [retail,shopping,shopping_center] -shopping_passage; [retail,shopping,shopping_passage] -souvenir_shop; [retail,shopping,souvenir_shop] -spiritual_shop; [retail,shopping,spiritual_shop] -supermarket; [retail,shopping,supermarket] -superstore; [retail,shopping,superstore] -tabletop_games; [retail,shopping,tabletop_games] -thrift_store; [retail,shopping,thrift_store] -tobacco_shop; [retail,shopping,tobacco_shop] -toy_store; [retail,shopping,toy_store] -trophy_shop; [retail,shopping,trophy_shop] -uniform_store; [retail,shopping,uniform_store] -used_bookstore; [retail,shopping,used_bookstore] -e_cigarette_store; [retail,shopping,e_cigarette_store] -vitamins_and_supplements; [retail,shopping,vitamins_and_supplements] -watch_store; [retail,shopping,watch_store] -wholesale_store; [retail,shopping,wholesale_store] -wig_store; [retail,shopping,wig_store] -sporting_goods; [retail,shopping,sporting_goods] -archery_shop; [retail,shopping,sporting_goods,archery_shop] -bicycle_shop; [retail,shopping,sporting_goods,bicycle_shop] -dive_shop; [retail,shopping,sporting_goods,dive_shop] -golf_equipment; [retail,shopping,sporting_goods,golf_equipment] -hockey_equipment; [retail,shopping,sporting_goods,hockey_equipment] -hunting_and_fishing_supplies; [retail,shopping,sporting_goods,hunting_and_fishing_supplies] -outdoor_gear; [retail,shopping,sporting_goods,outdoor_gear] -skate_shop; [retail,shopping,sporting_goods,skate_shop] -ski_and_snowboard_shop; [retail,shopping,sporting_goods,ski_and_snowboard_shop] -sports_wear; [retail,shopping,sporting_goods,sports_wear] -dance_wear; [retail,shopping,sporting_goods,sports_wear,dance_wear] -surf_shop; [retail,shopping,sporting_goods,surf_shop] -swimwear_store; [retail,shopping,sporting_goods,swimwear_store] -tire_shop; [retail,tire_shop] -tire_repair_shop; [retail,tire_shop,tire_repair_shop] -health_and_medical; [health_and_medical] -abuse_and_addiction_treatment; [health_and_medical,abuse_and_addiction_treatment] -alcohol_and_drug_treatment_centers; [health_and_medical,abuse_and_addiction_treatment,alcohol_and_drug_treatment_centers] -crisis_intervention_services; [health_and_medical,abuse_and_addiction_treatment,crisis_intervention_services] -eating_disorder_treatment_centers; [health_and_medical,abuse_and_addiction_treatment,eating_disorder_treatment_centers] -counseling_and_mental_health; [health_and_medical,counseling_and_mental_health] -family_counselor; [health_and_medical,counseling_and_mental_health,family_counselor] -marriage_or_relationship_counselor; [health_and_medical,counseling_and_mental_health,marriage_or_relationship_counselor] -psychoanalyst; [health_and_medical,counseling_and_mental_health,psychoanalyst] -psychologist; [health_and_medical,counseling_and_mental_health,psychologist] -psychotherapist; [health_and_medical,counseling_and_mental_health,psychotherapist] -sex_therapist; [health_and_medical,counseling_and_mental_health,sex_therapist] -sophrologist; [health_and_medical,counseling_and_mental_health,sophrologist] -sports_psychologist; [health_and_medical,counseling_and_mental_health,sports_psychologist] -stress_management_services; [health_and_medical,counseling_and_mental_health,stress_management_services] -suicide_prevention_services; [health_and_medical,counseling_and_mental_health,suicide_prevention_services] -dental_hygienist; [health_and_medical,dental_hygienist] -mobile_clinic; [health_and_medical,dental_hygienist,mobile_clinic] -storefront_clinic; [health_and_medical,dental_hygienist,storefront_clinic] -dentist; [health_and_medical,dentist] -cosmetic_dentist; [health_and_medical,dentist,cosmetic_dentist] -endodontist; [health_and_medical,dentist,endodontist] -general_dentistry; [health_and_medical,dentist,general_dentistry] -oral_surgeon; [health_and_medical,dentist,oral_surgeon] -orthodontist; [health_and_medical,dentist,orthodontist] -pediatric_dentist; [health_and_medical,dentist,pediatric_dentist] -periodontist; [health_and_medical,dentist,periodontist] -diagnostic_services; [health_and_medical,diagnostic_services] -diagnostic_imaging; [health_and_medical,diagnostic_services,diagnostic_imaging] -laboratory_testing; [health_and_medical,diagnostic_services,laboratory_testing] -doctor; [health_and_medical,doctor] -allergist; [health_and_medical,doctor,allergist] -anesthesiologist; [health_and_medical,doctor,anesthesiologist] -audiologist; [health_and_medical,doctor,audiologist] -cardiologist; [health_and_medical,doctor,cardiologist] -cosmetic_surgeon; [health_and_medical,doctor,cosmetic_surgeon] -dermatologist; [health_and_medical,doctor,dermatologist] -ear_nose_and_throat; [health_and_medical,doctor,ear_nose_and_throat] -emergency_medicine; [health_and_medical,doctor,emergency_medicine] -endocrinologist; [health_and_medical,doctor,endocrinologist] -endoscopist; [health_and_medical,doctor,endoscopist] -family_practice; [health_and_medical,doctor,family_practice] -fertility; [health_and_medical,doctor,fertility] -gastroenterologist; [health_and_medical,doctor,gastroenterologist] -geneticist; [health_and_medical,doctor,geneticist] -gerontologist; [health_and_medical,doctor,gerontologist] -hepatologist; [health_and_medical,doctor,hepatologist] -homeopathic_medicine; [health_and_medical,doctor,homeopathic_medicine] -hospitalist; [health_and_medical,doctor,hospitalist] -immunodermatologist; [health_and_medical,doctor,immunodermatologist] -infectious_disease_specialist; [health_and_medical,doctor,infectious_disease_specialist] -naturopathic_holistic; [health_and_medical,doctor,naturopathic_holistic] -nephrologist; [health_and_medical,doctor,nephrologist] -neurologist; [health_and_medical,doctor,neurologist] -neurotologist; [health_and_medical,doctor,neurotologist] -neuropathologist; [health_and_medical,doctor,neuropathologist] -obstetrician_and_gynecologist; [health_and_medical,doctor,obstetrician_and_gynecologist] -oncologist; [health_and_medical,doctor,oncologist] -orthopedist; [health_and_medical,doctor,orthopedist] -osteopathic_physician; [health_and_medical,doctor,osteopathic_physician] -otologist; [health_and_medical,doctor,otologist] -pain_management; [health_and_medical,doctor,pain_management] -pathologist; [health_and_medical,doctor,pathologist] -phlebologist; [health_and_medical,doctor,phlebologist] -physician_assistant; [health_and_medical,doctor,physician_assistant] -plastic_surgeon; [health_and_medical,doctor,plastic_surgeon] -podiatrist; [health_and_medical,doctor,podiatrist] -preventive_medicine; [health_and_medical,doctor,preventive_medicine] -proctologist; [health_and_medical,doctor,proctologist] -pulmonologist; [health_and_medical,doctor,pulmonologist] -radiologist; [health_and_medical,doctor,radiologist] -rheumatologist; [health_and_medical,doctor,rheumatologist] -spine_surgeon; [health_and_medical,doctor,spine_surgeon] -sports_medicine; [health_and_medical,doctor,sports_medicine] -tattoo_removal; [health_and_medical,doctor,tattoo_removal] -toxicologist; [health_and_medical,doctor,toxicologist] -tropical_medicine; [health_and_medical,doctor,tropical_medicine] -undersea_hyperbaric_medicine; [health_and_medical,doctor,undersea_hyperbaric_medicine] -urologist; [health_and_medical,doctor,urologist] -vascular_medicine; [health_and_medical,doctor,vascular_medicine] -geriatric_medicine; [health_and_medical,doctor,geriatric_medicine] -geriatric_psychiatry; [health_and_medical,doctor,geriatric_medicine,geriatric_psychiatry] -abortion_clinic; [health_and_medical,abortion_clinic] -acupuncture; [health_and_medical,acupuncture] -aesthetician; [health_and_medical,aesthetician] -alcohol_and_drug_treatment_center; [health_and_medical,alcohol_and_drug_treatment_center] -alternative_medicine; [health_and_medical,alternative_medicine] -ambulance_and_ems_services; [health_and_medical,ambulance_and_ems_services] -animal_assisted_therapy; [health_and_medical,animal_assisted_therapy] -assisted_living_facility; [health_and_medical,assisted_living_facility] -ayurveda; [health_and_medical,ayurveda] -behavior_analyst; [health_and_medical,behavior_analyst] -blood_and_plasma_donation_center; [health_and_medical,blood_and_plasma_donation_center] -body_contouring; [health_and_medical,body_contouring] -cancer_treatment_center; [health_and_medical,cancer_treatment_center] -cannabis_clinic; [health_and_medical,cannabis_clinic] -cannabis_collective; [health_and_medical,cannabis_collective] -childrens_hospital; [health_and_medical,childrens_hospital] -chiropractor; [health_and_medical,chiropractor] -colonics; [health_and_medical,colonics] -community_health_center; [health_and_medical,community_health_center] -concierge_medicine; [health_and_medical,concierge_medicine] -cryotherapy; [health_and_medical,cryotherapy] -dialysis_clinic; [health_and_medical,dialysis_clinic] -dietitian; [health_and_medical,dietitian] -doula; [health_and_medical,doula] -emergency_room; [health_and_medical,emergency_room] -environmental_medicine; [health_and_medical,environmental_medicine] -eye_care_clinic; [health_and_medical,eye_care_clinic] -float_spa; [health_and_medical,float_spa] -halfway_house; [health_and_medical,halfway_house] -halotherapy; [health_and_medical,halotherapy] -health_and_wellness_club; [health_and_medical,health_and_wellness_club] -health_coach; [health_and_medical,health_coach] -health_department; [health_and_medical,health_department] -health_insurance_office; [health_and_medical,health_insurance_office] -hospice; [health_and_medical,hospice] -hospital; [health_and_medical,hospital] -hydrotherapy; [health_and_medical,hydrotherapy] -hypnosis_hypnotherapy; [health_and_medical,hypnosis_hypnotherapy] -iv_hydration; [health_and_medical,iv_hydration] -lactation_services; [health_and_medical,lactation_services] -laser_eye_surgery_lasik; [health_and_medical,laser_eye_surgery_lasik] -lice_treatment; [health_and_medical,lice_treatment] -massage_therapy; [health_and_medical,massage_therapy] -maternity_centers; [health_and_medical,maternity_centers] -medical_cannabis_referral; [health_and_medical,medical_cannabis_referral] -medical_service_organizations; [health_and_medical,medical_service_organizations] -medical_transportation; [health_and_medical,medical_transportation] -memory_care; [health_and_medical,memory_care] -midwife; [health_and_medical,midwife] -nurse_practitioner; [health_and_medical,nurse_practitioner] -nutritionist; [health_and_medical,nutritionist] -occupational_medicine; [health_and_medical,occupational_medicine] -occupational_therapy; [health_and_medical,occupational_therapy] -optometrist; [health_and_medical,optometrist] -organ_and_tissue_donor_service; [health_and_medical,organ_and_tissue_donor_service] -orthotics; [health_and_medical,orthotics] -oxygen_bar; [health_and_medical,oxygen_bar] -paternity_tests_and_services; [health_and_medical,paternity_tests_and_services] -physical_therapy; [health_and_medical,physical_therapy] -placenta_encapsulation_service; [health_and_medical,placenta_encapsulation_service] -podiatry; [health_and_medical,podiatry] -prenatal_perinatal_care; [health_and_medical,prenatal_perinatal_care] -prosthetics; [health_and_medical,prosthetics] -prosthodontist; [health_and_medical,prosthodontist] -psychomotor_therapist; [health_and_medical,psychomotor_therapist] -public_health_clinic; [health_and_medical,public_health_clinic] -reflexology; [health_and_medical,reflexology] -reiki; [health_and_medical,reiki] -sauna; [health_and_medical,sauna] -skilled_nursing; [health_and_medical,skilled_nursing] -sleep_specialist; [health_and_medical,sleep_specialist] -speech_therapist; [health_and_medical,speech_therapist] -sperm_clinic; [health_and_medical,sperm_clinic] -surgical_center; [health_and_medical,surgical_center] -ultrasound_imaging_center; [health_and_medical,ultrasound_imaging_center] -urgent_care_clinic; [health_and_medical,urgent_care_clinic] -weight_loss_center; [health_and_medical,weight_loss_center] -wellness_program; [health_and_medical,wellness_program] -womens_health_clinic; [health_and_medical,womens_health_clinic] -internal_medicine; [health_and_medical,doctor,internal_medicine] -hematology; [health_and_medical,doctor,internal_medicine,hematology] -medical_center; [health_and_medical,medical_center] -bulk_billing; [health_and_medical,medical_center,bulk_billing] -osteopath; [health_and_medical,medical_center,osteopath] -walk_in_clinic; [health_and_medical,medical_center,walk_in_clinic] -ophthalmologist; [health_and_medical,doctor,ophthalmologist] -retina_specialist; [health_and_medical,doctor,ophthalmologist,retina_specialist] -pediatrician; [health_and_medical,doctor,pediatrician] -pediatric_anesthesiology; [health_and_medical,doctor,pediatrician,pediatric_anesthesiology] -pediatric_cardiology; [health_and_medical,doctor,pediatrician,pediatric_cardiology] -pediatric_endocrinology; [health_and_medical,doctor,pediatrician,pediatric_endocrinology] -pediatric_gastroenterology; [health_and_medical,doctor,pediatrician,pediatric_gastroenterology] -pediatric_infectious_disease; [health_and_medical,doctor,pediatrician,pediatric_infectious_disease] -pediatric_nephrology; [health_and_medical,doctor,pediatrician,pediatric_nephrology] -pediatric_neurology; [health_and_medical,doctor,pediatrician,pediatric_neurology] -pediatric_oncology; [health_and_medical,doctor,pediatrician,pediatric_oncology] -pediatric_orthopedic_surgery; [health_and_medical,doctor,pediatrician,pediatric_orthopedic_surgery] -pediatric_pulmonology; [health_and_medical,doctor,pediatrician,pediatric_pulmonology] -pediatric_radiology; [health_and_medical,doctor,pediatrician,pediatric_radiology] -pediatric_surgery; [health_and_medical,doctor,pediatrician,pediatric_surgery] -personal_care_service; [health_and_medical,personal_care_service] -home_health_care; [health_and_medical,personal_care_service,home_health_care] -psychiatrist; [health_and_medical,doctor,psychiatrist] -child_psychiatrist; [health_and_medical,doctor,psychiatrist,child_psychiatrist] -rehabilitation_center; [health_and_medical,rehabilitation_center] -addiction_rehabilitation_center; [health_and_medical,rehabilitation_center,addiction_rehabilitation_center] -surgeon; [health_and_medical,doctor,surgeon] -cardiovascular_and_thoracic_surgeon; [health_and_medical,doctor,surgeon,cardiovascular_and_thoracic_surgeon] -traditional_chinese_medicine; [health_and_medical,traditional_chinese_medicine] -tui_na; [health_and_medical,traditional_chinese_medicine,tui_na] -pets; [pets] -pet_services; [pets,pet_services] -animal_hospital; [pets,pet_services,animal_hospital] -animal_physical_therapy; [pets,pet_services,animal_physical_therapy] -aquarium_services; [pets,pet_services,aquarium_services] -dog_walkers; [pets,pet_services,dog_walkers] -emergency_pet_hospital; [pets,pet_services,emergency_pet_hospital] -farrier_services; [pets,pet_services,farrier_services] -holistic_animal_care; [pets,pet_services,holistic_animal_care] -pet_breeder; [pets,pet_services,pet_breeder] -pet_cemetery_and_crematorium_services; [pets,pet_services,pet_cemetery_and_crematorium_services] -pet_groomer; [pets,pet_services,pet_groomer] -pet_hospice; [pets,pet_services,pet_hospice] -pet_insurance; [pets,pet_services,pet_insurance] -pet_photography; [pets,pet_services,pet_photography] -pet_sitting; [pets,pet_services,pet_sitting] -pet_transportation; [pets,pet_services,pet_transportation] -pet_waste_removal; [pets,pet_services,pet_waste_removal] -pet_boarding; [pets,pet_services,pet_sitting,pet_boarding] -pet_training; [pets,pet_services,pet_training] -dog_trainer; [pets,pet_services,pet_training,dog_trainer] -horse_trainer; [pets,pet_services,pet_training,horse_trainer] -animal_rescue_service; [pets,animal_rescue_service] -animal_shelter; [pets,animal_shelter] -horse_boarding; [pets,horse_boarding] -pet_adoption; [pets,pet_adoption] -veterinarian; [pets,veterinarian] -business_to_business; [business_to_business] -business; [business_to_business,business] -travel_company; [business_to_business,business,travel_company] -ferry_boat_company; [business_to_business,business,ferry_boat_company] -airline; [business_to_business,business,airline] -food_beverage_service_distribution; [business_to_business,business,food_beverage_service_distribution] -bottled_water_company; [business_to_business,business,bottled_water_company] -tobacco_company; [business_to_business,business,tobacco_company] -clothing_company; [business_to_business,business,clothing_company] -bags_luggage_company; [business_to_business,business,bags_luggage_company] -hotel_supply_service; [business_to_business,business,hotel_supply_service] -commercial_industrial; [business_to_business,commercial_industrial] -inventory_control_service; [business_to_business,commercial_industrial,inventory_control_service] -industrial_company; [business_to_business,commercial_industrial,industrial_company] -automation_services; [business_to_business,commercial_industrial,automation_services] -occupational_safety; [business_to_business,commercial_industrial,occupational_safety] -b2b_agriculture_and_food; [business_to_business,b2b_agriculture_and_food] -agricultural_service; [business_to_business,b2b_agriculture_and_food,agricultural_service] -agricultural_cooperatives; [business_to_business,b2b_agriculture_and_food,agricultural_cooperatives] -agriculture; [business_to_business,b2b_agriculture_and_food,agriculture] -agricultural_engineering_service; [business_to_business,b2b_agriculture_and_food,agricultural_engineering_service] -apiaries_and_beekeepers; [business_to_business,b2b_agriculture_and_food,apiaries_and_beekeepers] -b2b_dairies; [business_to_business,b2b_agriculture_and_food,b2b_dairies] -b2b_food_products; [business_to_business,b2b_agriculture_and_food,b2b_food_products] -fish_farms_and_hatcheries; [business_to_business,b2b_agriculture_and_food,fish_farms_and_hatcheries] -fish_farm; [business_to_business,b2b_agriculture_and_food,fish_farms_and_hatcheries,fish_farm] -livestock_breeder; [business_to_business,b2b_agriculture_and_food,livestock_breeder] -livestock_dealers; [business_to_business,b2b_agriculture_and_food,livestock_dealers] -poultry_farming; [business_to_business,b2b_agriculture_and_food,poultry_farming] -b2b_farming; [business_to_business,b2b_agriculture_and_food,b2b_farming] -b2b_farms; [business_to_business,b2b_agriculture_and_food,b2b_farming,b2b_farms] -pig_farm; [business_to_business,b2b_agriculture_and_food,b2b_farming,b2b_farms,pig_farm] -dairy_farm; [business_to_business,b2b_agriculture_and_food,b2b_farming,b2b_farms,dairy_farm] -urban_farm; [business_to_business,b2b_agriculture_and_food,b2b_farming,b2b_farms,urban_farm] -farming_services; [business_to_business,b2b_agriculture_and_food,b2b_farming,farming_services] -farm_equipment_and_supply; [business_to_business,b2b_agriculture_and_food,b2b_farming,farm_equipment_and_supply] -fertilizer_store; [business_to_business,b2b_agriculture_and_food,b2b_farming,farm_equipment_and_supply,fertilizer_store] -grain_elevators; [business_to_business,b2b_agriculture_and_food,b2b_farming,farm_equipment_and_supply,grain_elevators] -greenhouses; [business_to_business,b2b_agriculture_and_food,b2b_farming,farm_equipment_and_supply,greenhouses] -irrigation_companies; [business_to_business,b2b_agriculture_and_food,b2b_farming,farm_equipment_and_supply,irrigation_companies] -crops_production; [business_to_business,b2b_agriculture_and_food,crops_production] -grain_production; [business_to_business,b2b_agriculture_and_food,crops_production,grain_production] -orchards_production; [business_to_business,b2b_agriculture_and_food,crops_production,orchards_production] -business_manufacturing_and_supply; [business_to_business,business_manufacturing_and_supply] -mattress_manufacturing; [business_to_business,business_manufacturing_and_supply,mattress_manufacturing] -glass_manufacturer; [business_to_business,business_manufacturing_and_supply,glass_manufacturer] -appliance_manufacturer; [business_to_business,business_manufacturing_and_supply,appliance_manufacturer] -aircraft_manufacturer; [business_to_business,business_manufacturing_and_supply,aircraft_manufacturer] -b2b_autos_and_vehicles; [business_to_business,business_manufacturing_and_supply,b2b_autos_and_vehicles] -auto_manufacturers_and_distributors; [business_to_business,business_manufacturing_and_supply,b2b_autos_and_vehicles,auto_manufacturers_and_distributors] -b2b_tires; [business_to_business,business_manufacturing_and_supply,b2b_autos_and_vehicles,b2b_tires] -b2b_furniture_and_housewares; [business_to_business,business_manufacturing_and_supply,b2b_furniture_and_housewares] -furniture_manufacturers; [business_to_business,business_manufacturing_and_supply,b2b_furniture_and_housewares,furniture_manufacturers] -furniture_wholesalers; [business_to_business,business_manufacturing_and_supply,b2b_furniture_and_housewares,furniture_wholesalers] -b2b_machinery_and_tools; [business_to_business,business_manufacturing_and_supply,b2b_machinery_and_tools] -b2b_equipment_maintenance_and_repair; [business_to_business,business_manufacturing_and_supply,b2b_machinery_and_tools,b2b_equipment_maintenance_and_repair] -industrial_equipment; [business_to_business,business_manufacturing_and_supply,b2b_machinery_and_tools,industrial_equipment] -abrasives_supplier; [business_to_business,business_manufacturing_and_supply,abrasives_supplier] -aggregate_supplier; [business_to_business,business_manufacturing_and_supply,aggregate_supplier] -aluminum_supplier; [business_to_business,business_manufacturing_and_supply,aluminum_supplier] -b2b_apparel; [business_to_business,business_manufacturing_and_supply,b2b_apparel] -b2b_electronic_equipment; [business_to_business,business_manufacturing_and_supply,b2b_electronic_equipment] -b2b_hardware; [business_to_business,business_manufacturing_and_supply,b2b_hardware] -b2b_jewelers; [business_to_business,business_manufacturing_and_supply,b2b_jewelers] -b2b_rubber_and_plastics; [business_to_business,business_manufacturing_and_supply,b2b_rubber_and_plastics] -plastic_company; [business_to_business,business_manufacturing_and_supply,b2b_rubber_and_plastics,plastic_company] -plastic_manufacturer; [business_to_business,business_manufacturing_and_supply,b2b_rubber_and_plastics,plastic_manufacturer] -b2b_sporting_and_recreation_goods; [business_to_business,business_manufacturing_and_supply,b2b_sporting_and_recreation_goods] -b2b_textiles; [business_to_business,business_manufacturing_and_supply,b2b_textiles] -battery_inverter_supplier; [business_to_business,business_manufacturing_and_supply,battery_inverter_supplier] -bearing_supplier; [business_to_business,business_manufacturing_and_supply,bearing_supplier] -casting_molding_and_machining; [business_to_business,business_manufacturing_and_supply,casting_molding_and_machining] -cement_supplier; [business_to_business,business_manufacturing_and_supply,cement_supplier] -chemical_plant; [business_to_business,business_manufacturing_and_supply,chemical_plant] -cleaning_products_supplier; [business_to_business,business_manufacturing_and_supply,cleaning_products_supplier] -cosmetic_products_manufacturer; [business_to_business,business_manufacturing_and_supply,cosmetic_products_manufacturer] -drinking_water_dispenser; [business_to_business,business_manufacturing_and_supply,drinking_water_dispenser] -fastener_supplier; [business_to_business,business_manufacturing_and_supply,fastener_supplier] -granite_supplier; [business_to_business,business_manufacturing_and_supply,granite_supplier] -hvac_supplier; [business_to_business,business_manufacturing_and_supply,hvac_supplier] -jewelry_and_watches_manufacturer; [business_to_business,business_manufacturing_and_supply,jewelry_and_watches_manufacturer] -jewelry_manufacturer; [business_to_business,business_manufacturing_and_supply,jewelry_manufacturer] -leather_products_manufacturer; [business_to_business,business_manufacturing_and_supply,leather_products_manufacturer] -lighting_fixture_manufacturers; [business_to_business,business_manufacturing_and_supply,lighting_fixture_manufacturers] -pipe_supplier; [business_to_business,business_manufacturing_and_supply,pipe_supplier] -plastic_fabrication_company; [business_to_business,business_manufacturing_and_supply,plastic_fabrication_company] -plastic_injection_molding_workshop; [business_to_business,business_manufacturing_and_supply,plastic_injection_molding_workshop] -printing_equipment_and_supply; [business_to_business,business_manufacturing_and_supply,printing_equipment_and_supply] -retaining_wall_supplier; [business_to_business,business_manufacturing_and_supply,retaining_wall_supplier] -sand_and_gravel_supplier; [business_to_business,business_manufacturing_and_supply,sand_and_gravel_supplier] -scale_supplier; [business_to_business,business_manufacturing_and_supply,scale_supplier] -seal_and_hanko_dealers; [business_to_business,business_manufacturing_and_supply,seal_and_hanko_dealers] -shoe_factory; [business_to_business,business_manufacturing_and_supply,shoe_factory] -spring_supplier; [business_to_business,business_manufacturing_and_supply,spring_supplier] -stone_supplier; [business_to_business,business_manufacturing_and_supply,stone_supplier] -turnery; [business_to_business,business_manufacturing_and_supply,turnery] -window_supplier; [business_to_business,business_manufacturing_and_supply,window_supplier] -metals; [business_to_business,business_manufacturing_and_supply,metals] -metal_supplier; [business_to_business,business_manufacturing_and_supply,metals,metal_supplier] -metal_plating_service; [business_to_business,business_manufacturing_and_supply,metals,metal_plating_service] -metal_fabricator; [business_to_business,business_manufacturing_and_supply,metals,metal_fabricator] -iron_and_steel_industry; [business_to_business,business_manufacturing_and_supply,metals,metal_fabricator,iron_and_steel_industry] -iron_work; [business_to_business,business_manufacturing_and_supply,metals,metal_fabricator,iron_and_steel_industry,iron_work] -scrap_metals; [business_to_business,business_manufacturing_and_supply,metals,scrap_metals] -sheet_metal; [business_to_business,business_manufacturing_and_supply,metals,sheet_metal] -steel_fabricators; [business_to_business,business_manufacturing_and_supply,metals,steel_fabricators] -mills; [business_to_business,business_manufacturing_and_supply,mills] -cotton_mill; [business_to_business,business_manufacturing_and_supply,mills,cotton_mill] -flour_mill; [business_to_business,business_manufacturing_and_supply,mills,flour_mill] -paper_mill; [business_to_business,business_manufacturing_and_supply,mills,paper_mill] -rice_mill; [business_to_business,business_manufacturing_and_supply,mills,rice_mill] -saw_mill; [business_to_business,business_manufacturing_and_supply,mills,saw_mill] -textile_mill; [business_to_business,business_manufacturing_and_supply,mills,textile_mill] -weaving_mill; [business_to_business,business_manufacturing_and_supply,mills,weaving_mill] -wood_and_pulp; [business_to_business,business_manufacturing_and_supply,wood_and_pulp] -logging_equipment_and_supplies; [business_to_business,business_manufacturing_and_supply,wood_and_pulp,logging_equipment_and_supplies] -logging_services; [business_to_business,business_manufacturing_and_supply,wood_and_pulp,logging_services] -logging_contractor; [business_to_business,business_manufacturing_and_supply,wood_and_pulp,logging_contractor] -b2b_medical_support_services; [business_to_business,b2b_medical_support_services] -biotechnology_company; [business_to_business,b2b_medical_support_services,biotechnology_company] -clinical_laboratories; [business_to_business,b2b_medical_support_services,clinical_laboratories] -dental_laboratories; [business_to_business,b2b_medical_support_services,dental_laboratories] -hospital_equipment_and_supplies; [business_to_business,b2b_medical_support_services,hospital_equipment_and_supplies] -medical_research_and_development; [business_to_business,b2b_medical_support_services,medical_research_and_development] -pharmaceutical_companies; [business_to_business,b2b_medical_support_services,pharmaceutical_companies] -surgical_appliances_and_supplies; [business_to_business,b2b_medical_support_services,surgical_appliances_and_supplies] -b2b_science_and_technology; [business_to_business,b2b_science_and_technology] -b2b_scientific_equipment; [business_to_business,b2b_science_and_technology,b2b_scientific_equipment] -research_institute; [business_to_business,b2b_science_and_technology,research_institute] -scientific_laboratories; [business_to_business,b2b_science_and_technology,scientific_laboratories] -business_advertising; [business_to_business,business_advertising] -business_signage; [business_to_business,business_advertising,business_signage] -direct_mail_advertising; [business_to_business,business_advertising,direct_mail_advertising] -marketing_consultant; [business_to_business,business_advertising,marketing_consultant] -newspaper_advertising; [business_to_business,business_advertising,newspaper_advertising] -outdoor_advertising; [business_to_business,business_advertising,outdoor_advertising] -promotional_products_and_services; [business_to_business,business_advertising,promotional_products_and_services] -publicity_service; [business_to_business,business_advertising,publicity_service] -radio_and_television_commercials; [business_to_business,business_advertising,radio_and_television_commercials] -telemarketing_services; [business_to_business,business_advertising,telemarketing_services] -business_equipment_and_supply; [business_to_business,business_equipment_and_supply] -beauty_product_supplier; [business_to_business,business_equipment_and_supply,beauty_product_supplier] -beverage_supplier; [business_to_business,business_equipment_and_supply,beverage_supplier] -business_office_supplies_and_stationery; [business_to_business,business_equipment_and_supply,business_office_supplies_and_stationery] -electronic_parts_supplier; [business_to_business,business_equipment_and_supply,electronic_parts_supplier] -energy_equipment_and_solution; [business_to_business,business_equipment_and_supply,energy_equipment_and_solution] -hydraulic_equipment_supplier; [business_to_business,business_equipment_and_supply,hydraulic_equipment_supplier] -laboratory_equipment_supplier; [business_to_business,business_equipment_and_supply,laboratory_equipment_supplier] -thread_supplier; [business_to_business,business_equipment_and_supply,thread_supplier] -vending_machine_supplier; [business_to_business,business_equipment_and_supply,vending_machine_supplier] -water_softening_equipment_supplier; [business_to_business,business_equipment_and_supply,water_softening_equipment_supplier] -wholesaler; [business_to_business,business_equipment_and_supply,wholesaler] -wholesale_grocer; [business_to_business,business_equipment_and_supply,wholesaler,wholesale_grocer] -spices_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,fmcg_wholesaler,spices_wholesaler] -computer_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,computer_wholesaler] -electrical_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,electrical_wholesaler] -fabric_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,fabric_wholesaler] -fitness_equipment_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,fitness_equipment_wholesaler] -fmcg_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,fmcg_wholesaler] -footwear_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,footwear_wholesaler] -greengrocer; [business_to_business,business_equipment_and_supply,wholesaler,greengrocer] -industrial_spares_and_products_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,industrial_spares_and_products_wholesaler] -iron_and_steel_store; [business_to_business,business_equipment_and_supply,wholesaler,iron_and_steel_store] -lingerie_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,lingerie_wholesaler] -meat_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,meat_wholesaler] -optical_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,optical_wholesaler] -pharmaceutical_products_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,pharmaceutical_products_wholesaler] -produce_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,produce_wholesaler] -seafood_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,seafood_wholesaler] -tea_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,tea_wholesaler] -threads_and_yarns_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,threads_and_yarns_wholesaler] -tools_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,tools_wholesaler] -wholesale_florist; [business_to_business,business_equipment_and_supply,wholesaler,wholesale_florist] -wine_wholesaler; [business_to_business,business_equipment_and_supply,wholesaler,wine_wholesaler] -restaurant_wholesale; [business_to_business,business_equipment_and_supply,wholesaler,restaurant_wholesale] -restaurant_equipment_and_supply; [business_to_business,business_equipment_and_supply,restaurant_equipment_and_supply] -business_storage_and_transportation; [business_to_business,business_storage_and_transportation] -motor_freight_trucking; [business_to_business,business_storage_and_transportation,motor_freight_trucking] -pipeline_transportation; [business_to_business,business_storage_and_transportation,pipeline_transportation] -railroad_freight; [business_to_business,business_storage_and_transportation,railroad_freight] -b2b_storage_and_warehouses; [business_to_business,business_storage_and_transportation,b2b_storage_and_warehouses] -warehouse_rental_services_and_yards; [business_to_business,business_storage_and_transportation,b2b_storage_and_warehouses,warehouse_rental_services_and_yards] -warehouses; [business_to_business,business_storage_and_transportation,b2b_storage_and_warehouses,warehouses] -freight_and_cargo_service; [business_to_business,business_storage_and_transportation,freight_and_cargo_service] -distribution_services; [business_to_business,business_storage_and_transportation,freight_and_cargo_service,distribution_services] -freight_forwarding_agency; [business_to_business,business_storage_and_transportation,freight_and_cargo_service,freight_forwarding_agency] -trucks_and_industrial_vehicles; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles] -b2b_forklift_dealers; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles,b2b_forklift_dealers] -b2b_tractor_dealers; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles,b2b_tractor_dealers] -b2b_truck_equipment_parts_and_accessories; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles,b2b_truck_equipment_parts_and_accessories] -truck_dealer_for_businesses; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles,truck_dealer_for_businesses] -truck_repair_and_services_for_businesses; [business_to_business,business_storage_and_transportation,trucks_and_industrial_vehicles,truck_repair_and_services_for_businesses] -business_to_business_services; [business_to_business,business_to_business_services] -agricultural_production; [business_to_business,business_to_business_services,agricultural_production] -audio_visual_production_and_design; [business_to_business,business_to_business_services,audio_visual_production_and_design] -boat_builder; [business_to_business,business_to_business_services,boat_builder] -business_records_storage_and_management; [business_to_business,business_to_business_services,business_records_storage_and_management] -coworking_space; [business_to_business,business_to_business_services,coworking_space] -domestic_business_and_trade_organizations; [business_to_business,business_to_business_services,domestic_business_and_trade_organizations] -human_resource_services; [business_to_business,business_to_business_services,human_resource_services] -information_technology_company; [business_to_business,business_to_business_services,information_technology_company] -laser_cutting_service_provider; [business_to_business,business_to_business_services,laser_cutting_service_provider] -telecommunications_company; [business_to_business,business_to_business_services,telecommunications_company] -tower_communication_service; [business_to_business,business_to_business_services,tower_communication_service] -transcription_services; [business_to_business,business_to_business_services,transcription_services] -translating_and_interpreting_services; [business_to_business,business_to_business_services,translating_and_interpreting_services] -consultant_and_general_service; [business_to_business,business_to_business_services,consultant_and_general_service] -food_consultant; [business_to_business,business_to_business_services,consultant_and_general_service,food_consultant] -business_management_services; [business_to_business,business_to_business_services,consultant_and_general_service,business_management_services] -executive_search_consultants; [business_to_business,business_to_business_services,consultant_and_general_service,executive_search_consultants] -manufacturing_and_industrial_consultant; [business_to_business,business_to_business_services,consultant_and_general_service,manufacturing_and_industrial_consultant] -secretarial_services; [business_to_business,business_to_business_services,consultant_and_general_service,secretarial_services] -manufacturers_agents_and_representatives; [business_to_business,business_to_business_services,domestic_business_and_trade_organizations,manufacturers_agents_and_representatives] -environmental_and_ecological_services_for_businesses; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses] -b2b_cleaning_and_waste_management; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,b2b_cleaning_and_waste_management] -water_treatment_equipment_and_services; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,b2b_cleaning_and_waste_management,water_treatment_equipment_and_services] -energy_management_and_conservation_consultants; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,energy_management_and_conservation_consultants] -environmental_conservation_and_ecological_organizations; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,environmental_conservation_and_ecological_organizations] -environmental_renewable_natural_resource; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,environmental_renewable_natural_resource] -forestry_consultants; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,forestry_consultants] -geological_services; [business_to_business,business_to_business_services,environmental_and_ecological_services_for_businesses,geological_services] -food_and_beverage_exporter; [business_to_business,business_to_business_services,international_business_and_trade_services,importer_and_exporter,exporters,food_and_beverage_exporter] -background_check_services; [business_to_business,business_to_business_services,human_resource_services,background_check_services] -international_business_and_trade_services; [business_to_business,business_to_business_services,international_business_and_trade_services] -importer_and_exporter; [business_to_business,business_to_business_services,international_business_and_trade_services,importer_and_exporter] -exporters; [business_to_business,business_to_business_services,international_business_and_trade_services,importer_and_exporter,exporters] -importers; [business_to_business,business_to_business_services,international_business_and_trade_services,importer_and_exporter,importers] -restaurant_management; [business_to_business,business_to_business_services,restaurant_management] -b2b_energy_and_mining; [business_to_business,b2b_energy_and_mining] -mining; [business_to_business,b2b_energy_and_mining,mining] -coal_and_coke; [business_to_business,b2b_energy_and_mining,mining,coal_and_coke] -quarries; [business_to_business,b2b_energy_and_mining,mining,quarries] -oil_and_gas; [business_to_business,b2b_energy_and_mining,oil_and_gas] -b2b_oil_and_gas_extraction_and_services; [business_to_business,b2b_energy_and_mining,oil_and_gas,b2b_oil_and_gas_extraction_and_services] -oil_and_gas_exploration_and_development; [business_to_business,b2b_energy_and_mining,oil_and_gas,oil_and_gas_exploration_and_development] -oil_and_gas_field_equipment_and_services; [business_to_business,b2b_energy_and_mining,oil_and_gas,oil_and_gas_field_equipment_and_services] -oil_refiners; [business_to_business,b2b_energy_and_mining,oil_and_gas,oil_refiners] -power_plants_and_power_plant_service; [business_to_business,b2b_energy_and_mining,power_plants_and_power_plant_service] -public_service_and_government; [public_service_and_government] -energy_company; [public_service_and_government,public_utility_company,energy_company] -electric_utility_provider; [public_service_and_government,public_utility_company,electric_utility_provider] -public_utility_company; [public_service_and_government,public_utility_company] -law_enforcement; [public_service_and_government,law_enforcement] -organization; [public_service_and_government,organization] -agriculture_association; [public_service_and_government,organization,agriculture_association] -environmental_conservation_organization; [public_service_and_government,organization,environmental_conservation_organization] -home_organization; [public_service_and_government,organization,home_organization] -labor_union; [public_service_and_government,organization,labor_union] -non_governmental_association; [public_service_and_government,organization,non_governmental_association] -political_organization; [public_service_and_government,organization,political_organization] -private_association; [public_service_and_government,organization,private_association] -public_and_government_association; [public_service_and_government,organization,public_and_government_association] -social_service_organizations; [public_service_and_government,organization,social_service_organizations] -charity_organization; [public_service_and_government,organization,social_service_organizations,charity_organization] -food_banks; [public_service_and_government,organization,social_service_organizations,food_banks] -foster_care_services; [public_service_and_government,organization,social_service_organizations,foster_care_services] -gay_and_lesbian_services_organization; [public_service_and_government,organization,social_service_organizations,gay_and_lesbian_services_organization] -homeless_shelter; [public_service_and_government,organization,social_service_organizations,homeless_shelter] -housing_authorities; [public_service_and_government,organization,social_service_organizations,housing_authorities] -senior_citizen_services; [public_service_and_government,organization,social_service_organizations,senior_citizen_services] -social_and_human_services; [public_service_and_government,organization,social_service_organizations,social_and_human_services] -social_welfare_center; [public_service_and_government,organization,social_service_organizations,social_welfare_center] -volunteer_association; [public_service_and_government,organization,social_service_organizations,volunteer_association] -child_protection_service; [public_service_and_government,organization,social_service_organizations,child_protection_service] -youth_organizations; [public_service_and_government,organization,social_service_organizations,youth_organizations] -community_services_non_profits; [public_service_and_government,community_services] -disability_services_and_support_organization; [public_service_and_government,community_services,disability_services_and_support_organization] -government_services; [public_service_and_government,government_services] -social_security_services; [public_service_and_government,government_services,social_security_services] -jail_and_prison; [public_service_and_government,jail_and_prison] -juvenile_detention_center; [public_service_and_government,jail_and_prison,juvenile_detention_center] -post_office; [public_service_and_government,post_office] -shipping_collection_services; [public_service_and_government,post_office,shipping_collection_services] -public_toilet; [public_service_and_government,public_toilet] -armed_forces_branch; [public_service_and_government,armed_forces_branch] -central_government_office; [public_service_and_government,central_government_office] -chambers_of_commerce; [public_service_and_government,chambers_of_commerce] -children_hall; [public_service_and_government,children_hall] -civic_center; [public_service_and_government,civic_center] -community_center; [public_service_and_government,community_center] -courthouse; [public_service_and_government,courthouse] -department_of_motor_vehicles; [public_service_and_government,department_of_motor_vehicles] -department_of_social_service; [public_service_and_government,department_of_social_service] -embassy; [public_service_and_government,embassy] -family_service_center; [public_service_and_government,family_service_center] -federal_government_offices; [public_service_and_government,federal_government_offices] -fire_department; [public_service_and_government,fire_department] -immigration_and_naturalization; [public_service_and_government,immigration_and_naturalization] -library; [public_service_and_government,library] -local_and_state_government_offices; [public_service_and_government,local_and_state_government_offices] -low_income_housing; [public_service_and_government,low_income_housing] -national_security_services; [public_service_and_government,national_security_services] -office_of_vital_records; [public_service_and_government,office_of_vital_records] -pension; [public_service_and_government,pension] -police_department; [public_service_and_government,police_department] -political_party_office; [public_service_and_government,political_party_office] -railway_service; [public_service_and_government,railway_service] -registry_office; [public_service_and_government,registry_office] -retirement_home; [public_service_and_government,retirement_home] -scout_hall; [public_service_and_government,scout_hall] -tax_office; [public_service_and_government,tax_office] -town_hall; [public_service_and_government,town_hall] -unemployment_office; [public_service_and_government,unemployment_office] -weather_station; [public_service_and_government,weather_station] -religious_organization; [religious_organization] -church_cathedral; [religious_organization,church_cathedral] -anglican_church; [religious_organization,church_cathedral,anglican_church] -baptist_church; [religious_organization,church_cathedral,baptist_church] -catholic_church; [religious_organization,church_cathedral,catholic_church] -episcopal_church; [religious_organization,church_cathedral,episcopal_church] -evangelical_church; [religious_organization,church_cathedral,evangelical_church] -jehovahs_witness_kingdom_hall; [religious_organization,church_cathedral,jehovahs_witness_kingdom_hall] -pentecostal_church; [religious_organization,church_cathedral,pentecostal_church] -mission; [religious_organization,mission] -buddhist_temple; [religious_organization,buddhist_temple] -convents_and_monasteries; [religious_organization,convents_and_monasteries] -hindu_temple; [religious_organization,hindu_temple] -mosque; [religious_organization,mosque] -religious_destination; [religious_organization,religious_destination] -shinto_shrines; [religious_organization,shinto_shrines] -sikh_temple; [religious_organization,sikh_temple] -synagogue; [religious_organization,synagogue] -temple; [religious_organization,temple] -real_estate; [real_estate] -real_estate_investment; [real_estate,real_estate_investment] -builders; [real_estate,builders] -home_developer; [real_estate,builders,home_developer] -apartments; [real_estate,apartments] -art_space_rental; [real_estate,art_space_rental] -commercial_real_estate; [real_estate,commercial_real_estate] -condominium; [real_estate,condominium] -display_home_center; [real_estate,display_home_center] -estate_liquidation; [real_estate,estate_liquidation] -holiday_park; [real_estate,holiday_park] -home_staging; [real_estate,home_staging] -homeowner_association; [real_estate,homeowner_association] -housing_cooperative; [real_estate,housing_cooperative] -kitchen_incubator; [real_estate,kitchen_incubator] -mobile_home_dealer; [real_estate,mobile_home_dealer] -mobile_home_park; [real_estate,mobile_home_park] -mortgage_broker; [real_estate,mortgage_broker] -property_management; [real_estate,property_management] -shared_office_space; [real_estate,shared_office_space] -university_housing; [real_estate,university_housing] -real_estate_agent; [real_estate,real_estate_agent] -apartment_agent; [real_estate,real_estate_agent,apartment_agent] -real_estate_service; [real_estate,real_estate_service] -escrow_services; [real_estate,real_estate_service,escrow_services] -land_surveying; [real_estate,real_estate_service,land_surveying] -real_estate_photography; [real_estate,real_estate_service,real_estate_photography] -rental_services; [real_estate,real_estate_service,rental_services] -travel; [travel] -airport; [travel,airport] -airport_terminal; [travel,airport,airport_terminal] -balloon_ports; [travel,airport,balloon_ports] -domestic_airports; [travel,airport,domestic_airports] -gliderports; [travel,airport,gliderports] -heliports; [travel,airport,heliports] -major_airports; [travel,airport,major_airports] -seaplane_bases; [travel,airport,seaplane_bases] -ultralight_airports; [travel,airport,ultralight_airports] -travel_services; [travel,travel_services] -passport_and_visa_services; [travel,travel_services,passport_and_visa_services] -visa_agent; [travel,travel_services,passport_and_visa_services,visa_agent] -travel_agents; [travel,travel_services,travel_agents] -sightseeing_tour_agency; [travel,travel_services,travel_agents,sightseeing_tour_agency] -luggage_storage; [travel,travel_services,luggage_storage] -visitor_center; [travel,travel_services,visitor_center] -road_structures_and_services; [travel,road_structures_and_services] -rest_areas; [travel,road_structures_and_services,rest_areas] -toll_stations; [travel,road_structures_and_services,toll_stations] -tours; [travel,tours] -aerial_tours; [travel,tours,aerial_tours] -architectural_tours; [travel,tours,architectural_tours] -art_tours; [travel,tours,art_tours] -beer_tours; [travel,tours,beer_tours] -bike_tours; [travel,tours,bike_tours] -boat_tours; [travel,tours,boat_tours] -bus_tours; [travel,tours,bus_tours] -cannabis_tour; [travel,tours,cannabis_tour] -food_tours; [travel,tours,food_tours] -historical_tours; [travel,tours,historical_tours] -scooter_tours; [travel,tours,scooter_tours] -walking_tours; [travel,tours,walking_tours] -whale_watching_tours; [travel,tours,whale_watching_tours] -wine_tours; [travel,tours,wine_tours] -transportation; [travel,transportation] -trains; [travel,transportation,trains] -train_station; [travel,transportation,trains,train_station] -airlines; [travel,transportation,airlines] -airport_shuttles; [travel,transportation,airport_shuttles] -bicycle_sharing_location; [travel,transportation,bicycle_sharing_location] -bike_parking; [travel,transportation,bike_parking] -bike_sharing; [travel,transportation,bike_sharing] -bus_service; [travel,transportation,bus_service] -bus_station; [travel,transportation,bus_station] -cable_car_service; [travel,transportation,cable_car_service] -car_sharing; [travel,transportation,car_sharing] -coach_bus; [travel,transportation,coach_bus] -ferry_service; [travel,transportation,ferry_service] -light_rail_and_subway_stations; [travel,transportation,light_rail_and_subway_stations] -limo_services; [travel,transportation,limo_services] -metro_station; [travel,transportation,metro_station] -motorcycle_parking; [travel,transportation,motorcycle_parking] -park_and_rides; [travel,transportation,park_and_rides] -parking; [travel,transportation,parking] -pedicab_service; [travel,transportation,pedicab_service] -private_jet_charters; [travel,transportation,private_jet_charters] -public_transportation; [travel,transportation,public_transportation] -ride_sharing; [travel,transportation,ride_sharing] -taxi_rank; [travel,transportation,taxi_rank] -taxi_service; [travel,transportation,taxi_service] -town_car_service; [travel,transportation,town_car_service] -transport_interchange; [travel,transportation,transport_interchange] -water_taxi; [travel,transportation,water_taxi] -agriturismo; [travel,agriturismo] -airline_ticket_agency; [travel,airline_ticket_agency] -bus_ticket_agency; [travel,bus_ticket_agency] -rental_service; [travel,rental_service] -car_rental_agency; [travel,rental_service,car_rental_agency] -motorcycle_rentals; [travel,rental_service,motorcycle_rentals] -rv_rentals; [travel,rental_service,rv_rentals] -trailer_rentals; [travel,rental_service,trailer_rentals] -truck_rentals; [travel,rental_service,truck_rentals] -country_house; [travel,country_house] -houseboat; [travel,houseboat] -railway_ticket_agent; [travel,railway_ticket_agent] -rest_stop; [travel,rest_stop] -ryokan; [travel,ryokan] -self_catering_accommodation; [travel,self_catering_accommodation] -ski_resort; [travel,ski_resort] -vacation_rental_agents; [travel,vacation_rental_agents] -mass_media; [mass_media] -print_media; [mass_media,print_media] -media_critic; [mass_media,media_critic] -movie_critic; [mass_media,media_critic,movie_critic] -music_critic; [mass_media,media_critic,music_critic] -video_game_critic; [mass_media,media_critic,video_game_critic] -media_news_company; [mass_media,media_news_company] -media_agency; [mass_media,media_news_company,media_agency] -radio_station; [mass_media,media_news_company,radio_station] -television_station; [mass_media,media_news_company,television_station] -weather_forecast_services; [mass_media,media_news_company,weather_forecast_services] -animation_studio; [mass_media,media_news_company,animation_studio] -book_magazine_distribution; [mass_media,media_news_company,book_magazine_distribution] -broadcasting_media_production; [mass_media,media_news_company,broadcasting_media_production] -game_publisher; [mass_media,media_news_company,game_publisher] -movie_television_studio; [mass_media,media_news_company,movie_television_studio] -music_production; [mass_media,media_news_company,music_production] -topic_publisher; [mass_media,media_news_company,topic_publisher] -social_media_company; [mass_media,media_news_company,social_media_company] -media_news_website; [mass_media,media_news_website] -media_restoration_service; [mass_media,media_restoration_service] -art_restoration; [mass_media,media_restoration_service,art_restoration] -theatrical_productions; [mass_media,theatrical_productions] -home_service; [home_service] -ceiling_and_roofing_repair_and_service; [home_service,ceiling_and_roofing_repair_and_service] -ceiling_service; [home_service,ceiling_and_roofing_repair_and_service,ceiling_service] -roofing; [home_service,ceiling_and_roofing_repair_and_service,roofing] -chimney_service; [home_service,chimney_service] -chimney_sweep; [home_service,chimney_service,chimney_sweep] -contractor; [home_service,contractor] -altering_and_remodeling_contractor; [home_service,contractor,altering_and_remodeling_contractor] -building_contractor; [home_service,contractor,building_contractor] -flooring_contractors; [home_service,contractor,flooring_contractors] -paving_contractor; [home_service,contractor,paving_contractor] -damage_restoration; [home_service,damage_restoration] -fire_and_water_damage_restoration; [home_service,damage_restoration,fire_and_water_damage_restoration] -artificial_turf; [home_service,artificial_turf] -bathroom_remodeling; [home_service,bathroom_remodeling] -bathtub_and_sink_repairs; [home_service,bathtub_and_sink_repairs] -cabinet_sales_service; [home_service,cabinet_sales_service] -carpenter; [home_service,carpenter] -carpet_cleaning; [home_service,carpet_cleaning] -carpet_installation; [home_service,carpet_installation] -childproofing; [home_service,childproofing] -closet_remodeling; [home_service,closet_remodeling] -countertop_installation; [home_service,countertop_installation] -deck_and_railing_sales_service; [home_service,deck_and_railing_sales_service] -demolition_service; [home_service,demolition_service] -door_sales_service; [home_service,door_sales_service] -drywall_services; [home_service,drywall_services] -electrician; [home_service,electrician] -excavation_service; [home_service,excavation_service] -exterior_design; [home_service,exterior_design] -fence_and_gate_sales_service; [home_service,fence_and_gate_sales_service] -fire_protection_service; [home_service,fire_protection_service] -fireplace_service; [home_service,fireplace_service] -firewood; [home_service,firewood] -foundation_repair; [home_service,foundation_repair] -furniture_assembly; [home_service,furniture_assembly] -garage_door_service; [home_service,garage_door_service] -glass_and_mirror_sales_service; [home_service,glass_and_mirror_sales_service] -grout_service; [home_service,grout_service] -gutter_service; [home_service,gutter_service] -handyman; [home_service,handyman] -holiday_decorating; [home_service,holiday_decorating] -home_automation; [home_service,home_automation] -home_cleaning; [home_service,home_cleaning] -home_energy_auditor; [home_service,home_energy_auditor] -home_inspector; [home_service,home_inspector] -home_network_installation; [home_service,home_network_installation] -home_security; [home_service,home_security] -home_window_tinting; [home_service,home_window_tinting] -house_sitting; [home_service,house_sitting] -hvac_services; [home_service,hvac_services] -insulation_installation; [home_service,insulation_installation] -interior_design; [home_service,interior_design] -irrigation; [home_service,irrigation] -key_and_locksmith; [home_service,key_and_locksmith] -kitchen_remodeling; [home_service,kitchen_remodeling] -lighting_fixtures_and_equipment; [home_service,lighting_fixtures_and_equipment] -masonry_concrete; [home_service,masonry_concrete] -mobile_home_repair; [home_service,mobile_home_repair] -movers; [home_service,movers] -packing_services; [home_service,packing_services] -painting; [home_service,painting] -patio_covers; [home_service,patio_covers] -plasterer; [home_service,plasterer] -pool_and_hot_tub_services; [home_service,pool_and_hot_tub_services] -pool_cleaning; [home_service,pool_cleaning] -pressure_washing; [home_service,pressure_washing] -refinishing_services; [home_service,refinishing_services] -security_systems; [home_service,security_systems] -shades_and_blinds; [home_service,shades_and_blinds] -shutters; [home_service,shutters] -siding; [home_service,siding] -solar_installation; [home_service,solar_installation] -solar_panel_cleaning; [home_service,solar_panel_cleaning] -structural_engineer; [home_service,structural_engineer] -stucco_services; [home_service,stucco_services] -television_service_providers; [home_service,television_service_providers] -tiling; [home_service,tiling] -wallpaper_installers; [home_service,wallpaper_installers] -washer_and_dryer_repair_service; [home_service,washer_and_dryer_repair_service] -water_heater_installation_repair; [home_service,water_heater_installation_repair] -water_purification_services; [home_service,water_purification_services] -waterproofing; [home_service,waterproofing] -window_washing; [home_service,window_washing] -landscaping; [home_service,landscaping] -gardener; [home_service,landscaping,gardener] -landscape_architect; [home_service,landscaping,landscape_architect] -lawn_service; [home_service,landscaping,lawn_service] -tree_services; [home_service,landscaping,tree_services] -plumbing; [home_service,plumbing] -backflow_services; [home_service,plumbing,backflow_services] -windows_installation; [home_service,windows_installation] -skylight_installation; [home_service,windows_installation,skylight_installation] -professional_services; [professional_services] -cleaning_services; [professional_services,cleaning_services] -industrial_cleaning_services; [professional_services,cleaning_services,industrial_cleaning_services] -janitorial_services; [professional_services,cleaning_services,janitorial_services] -office_cleaning; [professional_services,cleaning_services,office_cleaning] -construction_services; [professional_services,construction_services] -blueprinters; [professional_services,construction_services,blueprinters] -construction_management; [professional_services,construction_services,construction_management] -inspection_services; [professional_services,construction_services,inspection_services] -road_contractor; [professional_services,construction_services,road_contractor] -wind_energy; [professional_services,construction_services,wind_energy] -engineering_services; [professional_services,construction_services,engineering_services] -civil_engineers; [professional_services,construction_services,engineering_services,civil_engineers] -instrumentation_engineers; [professional_services,construction_services,engineering_services,instrumentation_engineers] -mechanical_engineers; [professional_services,construction_services,engineering_services,mechanical_engineers] -metal_materials_and_experts; [professional_services,construction_services,metal_materials_and_experts] -blacksmiths; [professional_services,construction_services,metal_materials_and_experts,blacksmiths] -ironworkers; [professional_services,construction_services,metal_materials_and_experts,ironworkers] -welders; [professional_services,construction_services,metal_materials_and_experts,welders] -stone_and_masonry; [professional_services,construction_services,stone_and_masonry] -gravel_professionals; [professional_services,construction_services,stone_and_masonry,gravel_professionals] -lime_professionals; [professional_services,construction_services,stone_and_masonry,lime_professionals] -marble_and_granite_professionals; [professional_services,construction_services,stone_and_masonry,marble_and_granite_professionals] -masonry_contractors; [professional_services,construction_services,stone_and_masonry,masonry_contractors] -lawyer; [professional_services,lawyer] -estate_planning_law; [professional_services,lawyer,estate_planning_law] -wills_trusts_and_probate; [professional_services,lawyer,estate_planning_law,wills_trusts_and_probate] -appellate_practice_lawyers; [professional_services,lawyer,appellate_practice_lawyers] -bankruptcy_law; [professional_services,lawyer,bankruptcy_law] -business_law; [professional_services,lawyer,business_law] -civil_rights_lawyers; [professional_services,lawyer,civil_rights_lawyers] -contract_law; [professional_services,lawyer,contract_law] -criminal_defense_law; [professional_services,lawyer,criminal_defense_law] -disability_law; [professional_services,lawyer,disability_law] -divorce_and_family_law; [professional_services,lawyer,divorce_and_family_law] -dui_law; [professional_services,lawyer,dui_law] -employment_law; [professional_services,lawyer,employment_law] -entertainment_law; [professional_services,lawyer,entertainment_law] -general_litigation; [professional_services,lawyer,general_litigation] -immigration_law; [professional_services,lawyer,immigration_law] -ip_and_internet_law; [professional_services,lawyer,ip_and_internet_law] -medical_law; [professional_services,lawyer,medical_law] -paralegal_services; [professional_services,lawyer,paralegal_services] -personal_injury_law; [professional_services,lawyer,personal_injury_law] -real_estate_law; [professional_services,lawyer,real_estate_law] -social_security_law; [professional_services,lawyer,social_security_law] -tax_law; [professional_services,lawyer,tax_law] -traffic_ticketing_law; [professional_services,lawyer,traffic_ticketing_law] -workers_compensation_law; [professional_services,lawyer,workers_compensation_law] -event_planning; [professional_services,event_planning] -balloon_services; [professional_services,event_planning,balloon_services] -bartender; [professional_services,event_planning,bartender] -boat_charter; [professional_services,event_planning,boat_charter] -caricature; [professional_services,event_planning,caricature] -caterer; [professional_services,event_planning,caterer] -clown; [professional_services,event_planning,clown] -dj_service; [professional_services,event_planning,dj_service] -event_technology_service; [professional_services,event_planning,event_technology_service] -face_painting; [professional_services,event_planning,face_painting] -floral_designer; [professional_services,event_planning,floral_designer] -game_truck_rental; [professional_services,event_planning,game_truck_rental] -golf_cart_rental; [professional_services,event_planning,golf_cart_rental] -henna_artist; [professional_services,event_planning,henna_artist] -kids_recreation_and_party; [professional_services,event_planning,kids_recreation_and_party] -magician; [professional_services,event_planning,magician] -mohel; [professional_services,event_planning,mohel] -musician; [professional_services,event_planning,musician] -officiating_services; [professional_services,event_planning,officiating_services] -party_and_event_planning; [professional_services,event_planning,party_and_event_planning] -party_bike_rental; [professional_services,event_planning,party_bike_rental] -party_bus_rental; [professional_services,event_planning,party_bus_rental] -party_character; [professional_services,event_planning,party_character] -personal_chef; [professional_services,event_planning,personal_chef] -photo_booth_rental; [professional_services,event_planning,photo_booth_rental] -silent_disco; [professional_services,event_planning,silent_disco] -sommelier_service; [professional_services,event_planning,sommelier_service] -team_building_activity; [professional_services,event_planning,team_building_activity] -trivia_host; [professional_services,event_planning,trivia_host] -valet_service; [professional_services,event_planning,valet_service] -venue_and_event_space; [professional_services,event_planning,venue_and_event_space] -videographer; [professional_services,event_planning,videographer] -wedding_chapel; [professional_services,event_planning,wedding_chapel] -wedding_planning; [professional_services,event_planning,wedding_planning] -party_equipment_rental; [professional_services,event_planning,party_equipment_rental] -audiovisual_equipment_rental; [professional_services,event_planning,party_equipment_rental,audiovisual_equipment_rental] -bounce_house_rental; [professional_services,event_planning,party_equipment_rental,bounce_house_rental] -karaoke_rental; [professional_services,event_planning,party_equipment_rental,karaoke_rental] -photographer; [professional_services,event_planning,photographer] -boudoir_photography; [professional_services,event_planning,photographer,boudoir_photography] -event_photography; [professional_services,event_planning,photographer,event_photography] -session_photography; [professional_services,event_planning,photographer,session_photography] -funeral_services_and_cemeteries; [professional_services,funeral_services_and_cemeteries] -cremation_services; [professional_services,funeral_services_and_cemeteries,cremation_services] -mortuary_services; [professional_services,funeral_services_and_cemeteries,mortuary_services] -internet_service_provider; [professional_services,internet_service_provider] -web_hosting_service; [professional_services,internet_service_provider,web_hosting_service] -it_service_and_computer_repair; [professional_services,it_service_and_computer_repair] -data_recovery; [professional_services,it_service_and_computer_repair,data_recovery] -it_consultant; [professional_services,it_service_and_computer_repair,it_consultant] -it_support_and_service; [professional_services,it_service_and_computer_repair,it_support_and_service] -mobile_phone_repair; [professional_services,it_service_and_computer_repair,mobile_phone_repair] -telecommunications; [professional_services,it_service_and_computer_repair,telecommunications] -junk_removal_and_hauling; [professional_services,junk_removal_and_hauling] -dumpster_rentals; [professional_services,junk_removal_and_hauling,dumpster_rentals] -laundry_services; [professional_services,laundry_services] -dry_cleaning; [professional_services,laundry_services,dry_cleaning] -laundromat; [professional_services,laundry_services,laundromat] -legal_services; [professional_services,legal_services] -court_reporter; [professional_services,legal_services,court_reporter] -process_servers; [professional_services,legal_services,process_servers] -musical_instrument_services; [professional_services,musical_instrument_services] -piano_services; [professional_services,musical_instrument_services,piano_services] -vocal_coach; [professional_services,musical_instrument_services,vocal_coach] -3d_printing_service; [professional_services,3d_printing_service] -acoustical_consultant; [professional_services,acoustical_consultant] -adoption_services; [professional_services,adoption_services] -advertising_agency; [professional_services,advertising_agency] -copywriting_service; [professional_services,copywriting_service] -internet_marketing_service; [professional_services,internet_marketing_service] -merchandising_service; [professional_services,merchandising_service] -social_media_agency; [professional_services,social_media_agency] -after_school_program; [professional_services,after_school_program] -bank_equipment_service; [professional_services,bank_equipment_service] -air_duct_cleaning_service; [professional_services,air_duct_cleaning_service] -antenna_service; [professional_services,antenna_service] -appliance_repair_service; [professional_services,appliance_repair_service] -appraisal_services; [professional_services,appraisal_services] -architect; [professional_services,architect] -architectural_designer; [professional_services,architectural_designer] -art_restoration_service; [professional_services,art_restoration_service] -awning_supplier; [professional_services,awning_supplier] -bail_bonds_service; [professional_services,bail_bonds_service] -bike_repair_maintenance; [professional_services,bike_repair_maintenance] -billing_services; [professional_services,billing_services] -bookbinding; [professional_services,bookbinding] -bookkeeper; [professional_services,bookkeeper] -bus_rentals; [professional_services,bus_rentals] -business_consulting; [professional_services,business_consulting] -calligraphy; [professional_services,calligraphy] -car_broker; [professional_services,car_broker] -career_counseling; [professional_services,career_counseling] -carpet_dyeing; [professional_services,carpet_dyeing] -cemeteries; [professional_services,cemeteries] -certification_agency; [professional_services,certification_agency] -child_care_and_day_care; [professional_services,child_care_and_day_care] -day_care_preschool; [professional_services,child_care_and_day_care,day_care_preschool] -clock_repair_service; [professional_services,clock_repair_service] -commercial_printer; [professional_services,commercial_printer] -commercial_refrigeration; [professional_services,commercial_refrigeration] -commissioned_artist; [professional_services,commissioned_artist] -community_book_boxes; [professional_services,community_book_boxes] -community_gardens; [professional_services,community_gardens] -computer_hardware_company; [professional_services,computer_hardware_company] -courier_and_delivery_services; [professional_services,courier_and_delivery_services] -crane_services; [professional_services,crane_services] -customs_broker; [professional_services,customs_broker] -delegated_driver_service; [professional_services,delegated_driver_service] -diamond_dealer; [professional_services,diamond_dealer] -digitizing_services; [professional_services,digitizing_services] -donation_center; [professional_services,donation_center] -duplication_services; [professional_services,duplication_services] -e_commerce_service; [professional_services,e_commerce_service] -editorial_services; [professional_services,editorial_services] -elder_care_planning; [professional_services,elder_care_planning] -electrical_consultant; [professional_services,electrical_consultant] -electronics_repair_shop; [professional_services,electronics_repair_shop] -elevator_service; [professional_services,elevator_service] -emergency_service; [professional_services,emergency_service] -employment_agencies; [professional_services,employment_agencies] -temp_agency; [professional_services,employment_agencies,temp_agency] -engraving; [professional_services,engraving] -environmental_abatement_services; [professional_services,environmental_abatement_services] -environmental_testing; [professional_services,environmental_testing] -farm_equipment_repair_service; [professional_services,farm_equipment_repair_service] -feng_shui; [professional_services,feng_shui] -fingerprinting_service; [professional_services,fingerprinting_service] -food_and_beverage_consultant; [professional_services,food_and_beverage_consultant] -forestry_service; [professional_services,forestry_service] -fortune_telling_service; [professional_services,fortune_telling_service] -furniture_rental_service; [professional_services,furniture_rental_service] -furniture_repair; [professional_services,furniture_repair] -furniture_reupholstery; [professional_services,furniture_reupholstery] -genealogists; [professional_services,genealogists] -generator_installation_repair; [professional_services,generator_installation_repair] -goldsmith; [professional_services,goldsmith] -graphic_designer; [professional_services,graphic_designer] -gunsmith; [professional_services,gunsmith] -hazardous_waste_disposal; [professional_services,hazardous_waste_disposal] -hydraulic_repair_service; [professional_services,hydraulic_repair_service] -hydro_jetting; [professional_services,hydro_jetting] -ice_supplier; [professional_services,ice_supplier] -immigration_assistance_services; [professional_services,immigration_assistance_services] -indoor_landscaping; [professional_services,indoor_landscaping] -jewelry_repair_service; [professional_services,jewelry_repair_service] -junkyard; [professional_services,junkyard] -knife_sharpening; [professional_services,knife_sharpening] -laboratory; [professional_services,laboratory] -lawn_mower_repair_service; [professional_services,lawn_mower_repair_service] -life_coach; [professional_services,life_coach] -lottery_ticket; [professional_services,lottery_ticket] -machine_and_tool_rentals; [professional_services,machine_and_tool_rentals] -machine_shop; [professional_services,machine_shop] -mailbox_center; [professional_services,mailbox_center] -marketing_agency; [professional_services,marketing_agency] -matchmaker; [professional_services,matchmaker] -mediator; [professional_services,mediator] -metal_detector_services; [professional_services,metal_detector_services] -misting_system_services; [professional_services,misting_system_services] -mobility_equipment_services; [professional_services,mobility_equipment_services] -mooring_service; [professional_services,mooring_service] -music_production_services; [professional_services,music_production_services] -nanny_services; [professional_services,nanny_services] -notary_public; [professional_services,notary_public] -package_locker; [professional_services,package_locker] -packaging_contractors_and_service; [professional_services,packaging_contractors_and_service] -patent_law; [professional_services,patent_law] -payroll_services; [professional_services,payroll_services] -personal_assistant; [professional_services,personal_assistant] -pest_control_service; [professional_services,pest_control_service] -powder_coating_service; [professional_services,powder_coating_service] -printing_services; [professional_services,printing_services] -private_investigation; [professional_services,private_investigation] -product_design; [professional_services,product_design] -propane_supplier; [professional_services,propane_supplier] -public_adjuster; [professional_services,public_adjuster] -public_relations; [professional_services,public_relations] -record_label; [professional_services,record_label] -recording_and_rehearsal_studio; [professional_services,recording_and_rehearsal_studio] -recycling_center; [professional_services,recycling_center] -sandblasting_service; [professional_services,sandblasting_service] -screen_printing_t_shirt_printing; [professional_services,screen_printing_t_shirt_printing] -security_services; [professional_services,security_services] -septic_services; [professional_services,septic_services] -shipping_center; [professional_services,shipping_center] -shoe_repair; [professional_services,shoe_repair] -shoe_shining_service; [professional_services,shoe_shining_service] -shredding_services; [professional_services,shredding_services] -sign_making; [professional_services,sign_making] -snow_removal_service; [professional_services,snow_removal_service] -snuggle_service; [professional_services,snuggle_service] -software_development; [professional_services,software_development] -talent_agency; [professional_services,talent_agency] -taxidermist; [professional_services,taxidermist] -telephone_services; [professional_services,telephone_services] -tenant_and_eviction_law; [professional_services,tenant_and_eviction_law] -tent_house_supplier; [professional_services,tent_house_supplier] -translation_services; [professional_services,translation_services] -tv_mounting; [professional_services,tv_mounting] -typing_services; [professional_services,typing_services] -video_film_production; [professional_services,video_film_production] -watch_repair_service; [professional_services,watch_repair_service] -water_delivery; [professional_services,water_delivery] -web_designer; [professional_services,web_designer] -well_drilling; [professional_services,well_drilling] -wildlife_control; [professional_services,wildlife_control] -writing_service; [professional_services,writing_service] -storage_facility; [professional_services,storage_facility] -rv_and_boat_storage_facility; [professional_services,storage_facility,rv_and_boat_storage_facility] -boat_storage_facility; [professional_services,storage_facility,rv_and_boat_storage_facility,boat_storage_facility] -rv_storage_facility; [professional_services,storage_facility,rv_and_boat_storage_facility,rv_storage_facility] -self_storage_facility; [professional_services,storage_facility,self_storage_facility] -sewing_and_alterations; [professional_services,sewing_and_alterations] -gents_tailor; [professional_services,sewing_and_alterations,gents_tailor] -utility_service; [professional_services,utility_service] -electricity_supplier; [professional_services,utility_service,electricity_supplier] -garbage_collection_service; [professional_services,utility_service,garbage_collection_service] -natural_gas_supplier; [professional_services,utility_service,natural_gas_supplier] -public_phones; [professional_services,utility_service,public_phones] -public_restrooms; [professional_services,utility_service,public_restrooms] -water_supplier; [professional_services,utility_service,water_supplier] -structure_and_geography; [structure_and_geography] -bridge; [structure_and_geography,bridge] -canal; [structure_and_geography,canal] -dam; [structure_and_geography,dam] -desert; [structure_and_geography,desert] -forest; [structure_and_geography,forest] -geologic_formation; [structure_and_geography,geologic_formation] -island; [structure_and_geography,island] -mountain; [structure_and_geography,mountain] -natural_hot_springs; [structure_and_geography,natural_hot_springs] -nature_reserve; [structure_and_geography,nature_reserve] -pier; [structure_and_geography,pier] -public_plaza; [structure_and_geography,public_plaza] -quay; [structure_and_geography,quay] -river; [structure_and_geography,river] -skyscraper; [structure_and_geography,skyscraper] -tower; [structure_and_geography,tower] -weir; [structure_and_geography,weir] diff --git a/docs/schema/reference/places/place.mdx b/docs/schema/reference/places/place.mdx index 84e50916a..cc09949d4 100644 --- a/docs/schema/reference/places/place.mdx +++ b/docs/schema/reference/places/place.mdx @@ -9,7 +9,7 @@ import StringifyObject from "@site/src/components/shared-libs/stringifyObject" import yamlLoad from "@site/src/components/yamlLoad" import PlaceSchema from "!!raw-loader!@site/docs/_schema/places/place.yaml"; import PlaceExample from "!!raw-loader!@site/docs/_examples/places/place.yaml"; -import PlaceExampleAlternateCategories from "!!raw-loader!@site/docs/_examples/places/place-alternate-categories.yaml"; +import PlaceExampleWithTaxonomy from "!!raw-loader!@site/docs/_examples/places/place-with-taxonomy.yaml"; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -52,8 +52,8 @@ A place is point of interest in the real world. { JSON.stringify(yamlLoad(PlaceExample), null, 2) } - - { JSON.stringify(yamlLoad(PlaceExampleAlternateCategories), null, 2) } + + { JSON.stringify(yamlLoad(PlaceExampleWithTaxonomy), null, 2) } diff --git a/examples/places/place-null-categories.yaml b/examples/places/place-minimal-example.yaml similarity index 100% rename from examples/places/place-null-categories.yaml rename to examples/places/place-minimal-example.yaml diff --git a/examples/places/place-alternate-categories.yaml b/examples/places/place-secondary-example.yaml similarity index 100% rename from examples/places/place-alternate-categories.yaml rename to examples/places/place-secondary-example.yaml diff --git a/packages/overture-schema-theme-places/src/overture/schema/places/place.py b/packages/overture-schema-theme-places/src/overture/schema/places/place.py index 5ffaf2702..6f5fd2247 100644 --- a/packages/overture-schema-theme-places/src/overture/schema/places/place.py +++ b/packages/overture-schema-theme-places/src/overture/schema/places/place.py @@ -200,7 +200,11 @@ class Place(OvertureFeature[Literal["places"], Literal["place"]], Named): The basic level category of a place. This field classifies places into categories at a level that most people find - intuitive. The full list of possible values it may hold can be found at (TODO). + intuitive. + + It is populated based on the taxonomy hierarchy and is intended to provide a + simplified, human-intuitive label, typically near the middle of the general-to- + specific hierarchy. The basic level category, or simply basic category, is based on a cognitive science model use in taxonomy and ontology development. The idea is to provide the category diff --git a/packages/overture-schema-theme-places/tests/place_baseline_schema.json b/packages/overture-schema-theme-places/tests/place_baseline_schema.json index 5033fe322..b58dad14d 100644 --- a/packages/overture-schema-theme-places/tests/place_baseline_schema.json +++ b/packages/overture-schema-theme-places/tests/place_baseline_schema.json @@ -413,7 +413,7 @@ "type": "array" }, "basic_category": { - "description": "The basic level category of a place.\n\nThis field classifies places into categories at a level that most people find\nintuitive. The full list of possible values it may hold can be found at (TODO).\n\nThe basic level category, or simply basic category, is based on a cognitive science\nmodel use in taxonomy and ontology development. The idea is to provide the category\nname at the level of generality that is preferred by humans in learning and memory\ntasks. This category to be roughly in the middle of the general-to-specific category\nhierarchy.\n\nThe full list of basic level categories is available at https://docs.overturemaps.org/guides/places/", + "description": "The basic level category of a place.\n\nThis field classifies places into categories at a level that most people find\nintuitive.\n\nIt is populated based on the taxonomy hierarchy and is intended to provide a\nsimplified, human-intuitive label, typically near the middle of the general-to-\nspecific hierarchy.\n\nThe basic level category, or simply basic category, is based on a cognitive science\nmodel use in taxonomy and ontology development. The idea is to provide the category\nname at the level of generality that is preferred by humans in learning and memory\ntasks. This category to be roughly in the middle of the general-to-specific category\nhierarchy.\n\nThe full list of basic level categories is available at https://docs.overturemaps.org/guides/places/", "pattern": "^[a-z0-9]+(_[a-z0-9]+)*$", "title": "Basic Category", "type": "string" diff --git a/reference/counterexamples/places/bad-basic-category.yaml b/reference/counterexamples/places/bad-basic-category.yaml index 2158724e8..ff8fdfbcd 100644 --- a/reference/counterexamples/places/bad-basic-category.yaml +++ b/reference/counterexamples/places/bad-basic-category.yaml @@ -1,5 +1,5 @@ --- -id: counterexample:place:bad-categories-values +id: counterexample:place:bad-basic-category-values type: Feature geometry: type: Point diff --git a/reference/examples/places/place-null-categories.yaml b/reference/examples/places/place-minimal-example.yaml similarity index 100% rename from reference/examples/places/place-null-categories.yaml rename to reference/examples/places/place-minimal-example.yaml diff --git a/reference/examples/places/place-alternate-categories.yaml b/reference/examples/places/place-secondary-example.yaml similarity index 100% rename from reference/examples/places/place-alternate-categories.yaml rename to reference/examples/places/place-secondary-example.yaml diff --git a/schema/places/place.yaml b/schema/places/place.yaml index 8c4388af1..6124908ce 100644 --- a/schema/places/place.yaml +++ b/schema/places/place.yaml @@ -23,10 +23,9 @@ properties: properties: basic_category: description: >- - The basic level category of a place. At present this is a mapping of the categories.primary entry to a new, simplified name. This mapping can be 1:1 or M:1 from the - existing categories.primary entry. If the entry is currently empty in categories.primary, this entry will be empty. - This type of categorization is a cognitive science model that is relevant for taxonomy and ontology development that shows the most broadest and general - category name that is most often found in the middle of a general-to-specific hierarchy, with generalization proceeding upward and specialization proceeding downward. + The basic level category of a place. This value is populated based on the taxonomy hierarchy and provides a simplified, intuitive category label. + This categorization follows a cognitive science model used in taxonomy and ontology development, where the preferred label is often found near the middle of + a general-to-specific hierarchy, with generalization proceeding upward and specialization proceeding downward. The full list of basic level categories is available at https://docs.overturemaps.org/guides/places/ type: string "$ref": "./defs.yaml#/$defs/typeDefinitions/category" From f2a06df845ff1a81a042b9e63afe05a94ebc3e4b Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Wed, 26 Aug 2026 16:22:30 -0700 Subject: [PATCH 06/14] add towncrier changelog fragments for categories deprecation Signed-off-by: Connie Sun --- packages/overture-schema-cli/changelog.d/434.misc.md | 1 + .../overture-schema-theme-places/changelog.d/434.breaking.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 packages/overture-schema-cli/changelog.d/434.misc.md create mode 100644 packages/overture-schema-theme-places/changelog.d/434.breaking.md diff --git a/packages/overture-schema-cli/changelog.d/434.misc.md b/packages/overture-schema-cli/changelog.d/434.misc.md new file mode 100644 index 000000000..2292f59cd --- /dev/null +++ b/packages/overture-schema-cli/changelog.d/434.misc.md @@ -0,0 +1 @@ +Updated CLI heterogeneous collection test fixtures to align with the Places schema removal of the deprecated `categories` field. \ No newline at end of file diff --git a/packages/overture-schema-theme-places/changelog.d/434.breaking.md b/packages/overture-schema-theme-places/changelog.d/434.breaking.md new file mode 100644 index 000000000..7b2aa98e7 --- /dev/null +++ b/packages/overture-schema-theme-places/changelog.d/434.breaking.md @@ -0,0 +1 @@ +Removed the deprecated `categories` field from `place` and standardized place categorization on `taxonomy`. \ No newline at end of file From 81a6f46b39fce08a78caad44ed9e820880d08c5b Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Wed, 26 Aug 2026 16:30:06 -0700 Subject: [PATCH 07/14] fix uv lock and remove unnecessary comment for basic category Signed-off-by: Connie Sun --- .../src/overture/schema/places/place.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/overture-schema-theme-places/src/overture/schema/places/place.py b/packages/overture-schema-theme-places/src/overture/schema/places/place.py index 6f5fd2247..361a62b43 100644 --- a/packages/overture-schema-theme-places/src/overture/schema/places/place.py +++ b/packages/overture-schema-theme-places/src/overture/schema/places/place.py @@ -202,10 +202,6 @@ class Place(OvertureFeature[Literal["places"], Literal["place"]], Named): This field classifies places into categories at a level that most people find intuitive. - It is populated based on the taxonomy hierarchy and is intended to provide a - simplified, human-intuitive label, typically near the middle of the general-to- - specific hierarchy. - The basic level category, or simply basic category, is based on a cognitive science model use in taxonomy and ontology development. The idea is to provide the category name at the level of generality that is preferred by humans in learning and memory From 2c092a69916759849c1f7fe6babd5830a65442cb Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Wed, 26 Aug 2026 16:37:11 -0700 Subject: [PATCH 08/14] update baseline snapshot after deleting repetitive comment Signed-off-by: Connie Sun --- .../tests/place_baseline_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/overture-schema-theme-places/tests/place_baseline_schema.json b/packages/overture-schema-theme-places/tests/place_baseline_schema.json index b58dad14d..67b0fff28 100644 --- a/packages/overture-schema-theme-places/tests/place_baseline_schema.json +++ b/packages/overture-schema-theme-places/tests/place_baseline_schema.json @@ -413,7 +413,7 @@ "type": "array" }, "basic_category": { - "description": "The basic level category of a place.\n\nThis field classifies places into categories at a level that most people find\nintuitive.\n\nIt is populated based on the taxonomy hierarchy and is intended to provide a\nsimplified, human-intuitive label, typically near the middle of the general-to-\nspecific hierarchy.\n\nThe basic level category, or simply basic category, is based on a cognitive science\nmodel use in taxonomy and ontology development. The idea is to provide the category\nname at the level of generality that is preferred by humans in learning and memory\ntasks. This category to be roughly in the middle of the general-to-specific category\nhierarchy.\n\nThe full list of basic level categories is available at https://docs.overturemaps.org/guides/places/", + "description": "The basic level category of a place.\n\nThis field classifies places into categories at a level that most people find\nintuitive.\n\nThe basic level category, or simply basic category, is based on a cognitive science\nmodel use in taxonomy and ontology development. The idea is to provide the category\nname at the level of generality that is preferred by humans in learning and memory\ntasks. This category to be roughly in the middle of the general-to-specific category\nhierarchy.\n\nThe full list of basic level categories is available at https://docs.overturemaps.org/guides/places/", "pattern": "^[a-z0-9]+(_[a-z0-9]+)*$", "title": "Basic Category", "type": "string" From f249d72eb182d131e5917812f0846d93a7540c5e Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Thu, 27 Aug 2026 12:28:50 -0700 Subject: [PATCH 09/14] update places pyproject with taxonomy and basic_category, remove categories Signed-off-by: Connie Sun --- packages/overture-schema-theme-places/pyproject.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/overture-schema-theme-places/pyproject.toml b/packages/overture-schema-theme-places/pyproject.toml index 353900714..ac3c7cfc1 100644 --- a/packages/overture-schema-theme-places/pyproject.toml +++ b/packages/overture-schema-theme-places/pyproject.toml @@ -51,6 +51,7 @@ phones = [ "+81977009000" ] operating_status = "open" +basic_category = "hotel" theme = "places" type = "place" @@ -70,8 +71,9 @@ confidence = 0.7337175792507205 [examples.Place.names] primary = "スーパーホテル別府駅前" -[examples.Place.categories] +[examples.Place.taxonomy] primary = "hotel" +hierarchy = ["lodging", "hotel"] [examples.Place.brand] From cf6bbd8420da9b9fa31473b4899d96015016e678 Mon Sep 17 00:00:00 2001 From: Connie Sun Date: Thu, 27 Aug 2026 13:04:09 -0700 Subject: [PATCH 10/14] pr feedback - fix counterexample missing 'websites' and add taxonomy to places init Signed-off-by: Connie Sun --- counterexamples/places/bad-operating-status.yaml | 1 + .../src/overture/schema/places/__init__.py | 4 ++-- reference/counterexamples/places/bad-operating-status.yaml | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/counterexamples/places/bad-operating-status.yaml b/counterexamples/places/bad-operating-status.yaml index 1de6d12d5..462f99a12 100644 --- a/counterexamples/places/bad-operating-status.yaml +++ b/counterexamples/places/bad-operating-status.yaml @@ -6,6 +6,7 @@ geometry: coordinates: [0, 0] properties: confidence: 0.9 + websites: - https://www.example.com/ emails: - info@example.com diff --git a/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py b/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py index 1785651b4..3a8d4f750 100644 --- a/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py +++ b/packages/overture-schema-theme-places/src/overture/schema/places/__init__.py @@ -6,6 +6,6 @@ __path__ = __import__("pkgutil").extend_path(__path__, __name__) -from .place import Address, Brand, OperatingStatus, Place +from .place import Address, Brand, OperatingStatus, Place, Taxonomy -__all__ = ["Address", "Brand", "OperatingStatus", "Place"] +__all__ = ["Address", "Brand", "OperatingStatus", "Place", "Taxonomy"] diff --git a/reference/counterexamples/places/bad-operating-status.yaml b/reference/counterexamples/places/bad-operating-status.yaml index 1de6d12d5..462f99a12 100644 --- a/reference/counterexamples/places/bad-operating-status.yaml +++ b/reference/counterexamples/places/bad-operating-status.yaml @@ -6,6 +6,7 @@ geometry: coordinates: [0, 0] properties: confidence: 0.9 + websites: - https://www.example.com/ emails: - info@example.com From 3ddd556d099a4fcc9a68c0bcbafe4157a6a49352 Mon Sep 17 00:00:00 2001 From: Seth Fitzsimmons Date: Wed, 26 Aug 2026 10:37:57 -0700 Subject: [PATCH 11/14] feat(schema)!: remove the non-null defaults from level, land and water Implements the policy in #695 for three of the four remaining sites: no schema field carries a non-null default, and where a value would come from a default the publisher supplies it in the published data. - `Stacked.level` drops `= 0` and becomes `None`. The absence sentence goes on the field rather than the `Level` NewType, because `Level` is also the type of the required `LevelRule.value`, where absence is impossible. Removing the default also retires the `# type: ignore[assignment]` that existed only to admit it. - `Land.class_`, `Land.subtype`, `Water.class_`, `Water.subtype` become required, matching `Infrastructure` and `LandUse`. No consumer sees a difference. Measured on release 2026-08-19.0, one partition per type: `level = 0` appears in 0 of 1,174,629 land and 0 of 1,985,644 water rows, and `class`/`subtype` are never null in either. Both partitions validate clean against the changed models. `SpeedLimitRule.is_max_speed_variable` is deliberately left out. Its default cannot be removed without stating what absence means, and the data does not settle that: the publisher writes an explicit `false` for closed-world booleans (`building.has_parts` is 0 null / 4,777,998 false) but never for this one (0 false in 1,376,379 rules across three partitions), so absence is an unrecorded value rather than a recorded "no". That call needs a domain owner. Refs #696 Signed-off-by: Seth Fitzsimmons --- .../changelog.d/696.breaking.md | 1 + .../src/overture/schema/common/level.py | 10 +++++++++- .../changelog.d/696.breaking.md | 1 + .../src/overture/schema/base/land.py | 6 ++---- .../src/overture/schema/base/water.py | 15 ++------------- .../tests/infrastructure_baseline_schema.json | 3 +-- .../tests/land_baseline_schema.json | 13 ++++++------- .../tests/land_use_baseline_schema.json | 3 +-- .../tests/water_baseline_schema.json | 13 ++++++------- .../changelog.d/696.breaking.md | 1 + .../tests/building_baseline_schema.json | 3 +-- .../tests/building_part_baseline_schema.json | 3 +-- 12 files changed, 32 insertions(+), 40 deletions(-) create mode 100644 packages/overture-schema-common/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-theme-base/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-theme-buildings/changelog.d/696.breaking.md diff --git a/packages/overture-schema-common/changelog.d/696.breaking.md b/packages/overture-schema-common/changelog.d/696.breaking.md new file mode 100644 index 000000000..d8f651e92 --- /dev/null +++ b/packages/overture-schema-common/changelog.d/696.breaking.md @@ -0,0 +1 @@ +Removed the `level` default of `0`; a feature parsed without a level now yields `None` instead of `0`, and the field description states that absence means visual level. diff --git a/packages/overture-schema-common/src/overture/schema/common/level.py b/packages/overture-schema-common/src/overture/schema/common/level.py index 14ea6f15d..6073302ad 100644 --- a/packages/overture-schema-common/src/overture/schema/common/level.py +++ b/packages/overture-schema-common/src/overture/schema/common/level.py @@ -20,4 +20,12 @@ class Stacked(BaseModel): """Properties defining feature Z-order, i.e., stacking order.""" - level: Level | None = 0 # type: ignore[assignment] + level: Annotated[ + Level | None, + Field( + description=( + "Z-order of the feature where 0 is visual level. A feature " + "without a level is at visual level." + ) + ), + ] = None diff --git a/packages/overture-schema-theme-base/changelog.d/696.breaking.md b/packages/overture-schema-theme-base/changelog.d/696.breaking.md new file mode 100644 index 000000000..d12a80821 --- /dev/null +++ b/packages/overture-schema-theme-base/changelog.d/696.breaking.md @@ -0,0 +1 @@ +Made `class` and `subtype` required on `Land` and `Water`, matching `Infrastructure` and `LandUse`; constructing either without them now raises instead of falling back to `land`/`water`. diff --git a/packages/overture-schema-theme-base/src/overture/schema/base/land.py b/packages/overture-schema-theme-base/src/overture/schema/base/land.py index d3119912e..4001eb075 100644 --- a/packages/overture-schema-theme-base/src/overture/schema/base/land.py +++ b/packages/overture-schema-theme-base/src/overture/schema/base/land.py @@ -139,10 +139,8 @@ class Land( # Required - class_: Annotated[LandClass, Field(default=LandClass.LAND, alias="class")] = ( - LandClass.LAND - ) - subtype: Annotated[LandSubtype, Field(default=LandSubtype.LAND)] = LandSubtype.LAND + class_: Annotated[LandClass, Field(alias="class")] + subtype: LandSubtype # Optional diff --git a/packages/overture-schema-theme-base/src/overture/schema/base/water.py b/packages/overture-schema-theme-base/src/overture/schema/base/water.py index fbf5ab4b9..37978a376 100644 --- a/packages/overture-schema-theme-base/src/overture/schema/base/water.py +++ b/packages/overture-schema-theme-base/src/overture/schema/base/water.py @@ -138,19 +138,8 @@ class Water( # Required - class_: Annotated[ - WaterClass, - Field( - default=WaterClass.WATER, - alias="class", - ), - ] = WaterClass.WATER - subtype: Annotated[ - WaterSubtype, - Field( - default=WaterSubtype.WATER, - ), - ] = WaterSubtype.WATER + class_: Annotated[WaterClass, Field(alias="class")] + subtype: WaterSubtype # Optional diff --git a/packages/overture-schema-theme-base/tests/infrastructure_baseline_schema.json b/packages/overture-schema-theme-base/tests/infrastructure_baseline_schema.json index 1c3336a31..b93b440bb 100644 --- a/packages/overture-schema-theme-base/tests/infrastructure_baseline_schema.json +++ b/packages/overture-schema-theme-base/tests/infrastructure_baseline_schema.json @@ -643,8 +643,7 @@ "type": "number" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", diff --git a/packages/overture-schema-theme-base/tests/land_baseline_schema.json b/packages/overture-schema-theme-base/tests/land_baseline_schema.json index f41908d7c..7ff091acf 100644 --- a/packages/overture-schema-theme-base/tests/land_baseline_schema.json +++ b/packages/overture-schema-theme-base/tests/land_baseline_schema.json @@ -507,8 +507,7 @@ }, "properties": { "class": { - "$ref": "#/$defs/LandClass", - "default": "land" + "$ref": "#/$defs/LandClass" }, "elevation": { "description": "Elevation above sea level of the feature in meters.", @@ -518,8 +517,7 @@ "type": "integer" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", @@ -546,8 +544,7 @@ "uniqueItems": true }, "subtype": { - "$ref": "#/$defs/LandSubtype", - "default": "land" + "$ref": "#/$defs/LandSubtype" }, "surface": { "$ref": "#/$defs/SurfaceMaterial" @@ -579,7 +576,9 @@ "required": [ "theme", "type", - "version" + "version", + "class", + "subtype" ], "type": "object" }, diff --git a/packages/overture-schema-theme-base/tests/land_use_baseline_schema.json b/packages/overture-schema-theme-base/tests/land_use_baseline_schema.json index e85b38189..440b2b9ca 100644 --- a/packages/overture-schema-theme-base/tests/land_use_baseline_schema.json +++ b/packages/overture-schema-theme-base/tests/land_use_baseline_schema.json @@ -595,8 +595,7 @@ "type": "integer" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", diff --git a/packages/overture-schema-theme-base/tests/water_baseline_schema.json b/packages/overture-schema-theme-base/tests/water_baseline_schema.json index 40ca4333b..8434a41bb 100644 --- a/packages/overture-schema-theme-base/tests/water_baseline_schema.json +++ b/packages/overture-schema-theme-base/tests/water_baseline_schema.json @@ -468,8 +468,7 @@ }, "properties": { "class": { - "$ref": "#/$defs/WaterClass", - "default": "water" + "$ref": "#/$defs/WaterClass" }, "is_intermittent": { "description": "Whether the water body exists intermittently, not permanently", @@ -482,8 +481,7 @@ "type": "boolean" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", @@ -510,8 +508,7 @@ "uniqueItems": true }, "subtype": { - "$ref": "#/$defs/WaterSubtype", - "default": "water" + "$ref": "#/$defs/WaterSubtype" }, "theme": { "const": "base", @@ -540,7 +537,9 @@ "required": [ "theme", "type", - "version" + "version", + "class", + "subtype" ], "type": "object" }, diff --git a/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md b/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md new file mode 100644 index 000000000..481c64d60 --- /dev/null +++ b/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md @@ -0,0 +1 @@ +Buildings and building parts parsed without a `level` now yield `None` instead of `0`, following the removal of the `Stacked.level` default. diff --git a/packages/overture-schema-theme-buildings/tests/building_baseline_schema.json b/packages/overture-schema-theme-buildings/tests/building_baseline_schema.json index 1f629b551..2bc134246 100644 --- a/packages/overture-schema-theme-buildings/tests/building_baseline_schema.json +++ b/packages/overture-schema-theme-buildings/tests/building_baseline_schema.json @@ -561,8 +561,7 @@ "type": "boolean" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", diff --git a/packages/overture-schema-theme-buildings/tests/building_part_baseline_schema.json b/packages/overture-schema-theme-buildings/tests/building_part_baseline_schema.json index 6617c368d..f511e30ec 100644 --- a/packages/overture-schema-theme-buildings/tests/building_part_baseline_schema.json +++ b/packages/overture-schema-theme-buildings/tests/building_part_baseline_schema.json @@ -444,8 +444,7 @@ "type": "boolean" }, "level": { - "default": 0, - "description": "Z-order of the feature where 0 is visual level", + "description": "Z-order of the feature where 0 is visual level. A feature without a level is at visual level.", "maximum": 2147483647, "minimum": -2147483648, "title": "Level", From 5a540327b4aac2d837b4532d57b3c17eb89b49a3 Mon Sep 17 00:00:00 2001 From: Seth Fitzsimmons Date: Wed, 26 Aug 2026 10:48:06 -0700 Subject: [PATCH 12/14] feat(schema)!: remove the is_max_speed_variable default Completes the removal begun in the previous commit: `SpeedLimitRule. is_max_speed_variable` drops `= False`. A rule parsed without the flag now yields `None` instead of `False`. The description is left as it stands. What absence means here is a domain question the schema should not answer by inference, and the existing wording does not define the term well enough to extend safely. Both are worth settling, separately, with the transportation folks. Refs #696 Signed-off-by: Seth Fitzsimmons --- .../changelog.d/696.breaking.md | 1 + .../src/overture/schema/transportation/segment/_common.py | 2 +- .../tests/segment_baseline_schema.json | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 packages/overture-schema-theme-transportation/changelog.d/696.breaking.md diff --git a/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md b/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md new file mode 100644 index 000000000..97a56be8d --- /dev/null +++ b/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md @@ -0,0 +1 @@ +Removed the `is_max_speed_variable` default of `False`; a rule parsed without the flag now yields `None` instead of `False`. diff --git a/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py b/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py index 03c27bbae..c922e7d9c 100644 --- a/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py +++ b/packages/overture-schema-theme-transportation/src/overture/schema/transportation/segment/_common.py @@ -322,7 +322,7 @@ class SpeedLimitRule(BaseModel): description="Indicates a variable speed corridor", strict=True, ), - ] = False + ] = None SpeedLimits = NewType( diff --git a/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json b/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json index 3bcceda22..d7473d5ed 100644 --- a/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json +++ b/packages/overture-schema-theme-transportation/tests/segment_baseline_schema.json @@ -1323,7 +1323,6 @@ "type": "array" }, "is_max_speed_variable": { - "default": false, "description": "Indicates a variable speed corridor", "title": "Is Max Speed Variable", "type": "boolean" From 0d9e9fb5bd8a0badb8ac616445ea6b5b5f308b51 Mon Sep 17 00:00:00 2001 From: schapper Date: Wed, 2 Sep 2026 09:53:05 -0700 Subject: [PATCH 13/14] chore(release): Set all packages to 2.0.0 Coordinated 2.0.0 launch of all 13 packages/* for the first public PyPI release. Bumps every package version 0.1.1/1.17.1 -> 2.0.0, raises all intra-repo dependency floors to >=2.0.0 (including overture-schema-validation's previously-bare common/system deps), and folds towncrier changelog.d fragments into per-package CHANGELOG.md. Refreshes uv.lock. The umbrella overture-schema majors purely by cascade: its dependencies overture-schema-theme-places and -transportation carry breaking changes (#434, #669), which forces the umbrella major bump and floor raise per the versioning guardrails. Signed-off-by: schapper --- packages/overture-schema-cli/CHANGELOG.md | 13 +++++++++ .../changelog.d/434.misc.md | 1 - .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/668.bugfix.md | 1 - .../changelog.d/671.misc.md | 1 - packages/overture-schema-cli/pyproject.toml | 6 ++-- packages/overture-schema-codegen/CHANGELOG.md | 17 +++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.bugfix.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/668.bugfix.md | 1 - .../changelog.d/668.docs.md | 1 - .../overture-schema-codegen/pyproject.toml | 8 +++--- packages/overture-schema-common/CHANGELOG.md | 17 +++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/622.misc.md | 1 - .../changelog.d/633.feature.md | 1 - .../changelog.d/668.feature.md | 1 - .../changelog.d/696.breaking.md | 1 - .../overture-schema-common/pyproject.toml | 4 +-- packages/overture-schema-pyspark/CHANGELOG.md | 17 +++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/625.bugfix.md | 1 - .../changelog.d/638.misc.md | 1 - .../changelog.d/659.bugfix.md | 1 - .../changelog.d/661.bugfix.md | 1 - .../changelog.d/668.docs.md | 1 - .../overture-schema-pyspark/pyproject.toml | 4 +-- packages/overture-schema-system/CHANGELOG.md | 11 ++++++++ .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/668.misc.md | 1 - .../changelog.d/671.feature.md | 1 - .../overture-schema-system/pyproject.toml | 2 +- .../CHANGELOG.md | 10 +++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/671.misc.md | 1 - .../pyproject.toml | 6 ++-- .../overture-schema-theme-base/CHANGELOG.md | 14 ++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/671.misc.md | 1 - .../changelog.d/696.breaking.md | 1 - .../overture-schema-theme-base/pyproject.toml | 6 ++-- .../CHANGELOG.md | 18 ++++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/656.feature.md | 1 - .../changelog.d/671.misc.md | 1 - .../changelog.d/696.breaking.md | 1 - .../pyproject.toml | 6 ++-- .../CHANGELOG.md | 10 +++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/671.misc.md | 1 - .../pyproject.toml | 6 ++-- .../overture-schema-theme-places/CHANGELOG.md | 14 ++++++++++ .../changelog.d/434.breaking.md | 1 - .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/671.misc.md | 1 - .../pyproject.toml | 6 ++-- .../CHANGELOG.md | 15 ++++++++++ .../changelog.d/557.misc.md | 1 - .../changelog.d/593.misc.md | 1 - .../changelog.d/618.misc.md | 1 - .../changelog.d/633.misc.md | 1 - .../changelog.d/649.misc.md | 1 - .../changelog.d/669.breaking.md | 1 - .../changelog.d/671.misc.md | 1 - .../changelog.d/696.breaking.md | 1 - .../pyproject.toml | 6 ++-- .../overture-schema-validation/CHANGELOG.md | 10 +++++++ .../changelog.d/618.misc.md | 1 - .../changelog.d/622.misc.md | 1 - .../changelog.d/668.docs.md | 1 - .../overture-schema-validation/pyproject.toml | 6 ++-- packages/overture-schema/CHANGELOG.md | 18 ++++++++++++ .../overture-schema/changelog.d/557.misc.md | 2 -- .../overture-schema/changelog.d/593.misc.md | 1 - .../overture-schema/changelog.d/618.misc.md | 1 - .../overture-schema/changelog.d/622.misc.md | 1 - .../overture-schema/changelog.d/649.misc.md | 1 - .../overture-schema/changelog.d/668.docs.md | 1 - .../changelog.d/671.feature.md | 1 - packages/overture-schema/pyproject.toml | 18 ++++++------ uv.lock | 28 +++++++++---------- 110 files changed, 240 insertions(+), 140 deletions(-) create mode 100644 packages/overture-schema-cli/CHANGELOG.md delete mode 100644 packages/overture-schema-cli/changelog.d/434.misc.md delete mode 100644 packages/overture-schema-cli/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-cli/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-cli/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-cli/changelog.d/668.bugfix.md delete mode 100644 packages/overture-schema-cli/changelog.d/671.misc.md create mode 100644 packages/overture-schema-codegen/CHANGELOG.md delete mode 100644 packages/overture-schema-codegen/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-codegen/changelog.d/593.bugfix.md delete mode 100644 packages/overture-schema-codegen/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-codegen/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-codegen/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-codegen/changelog.d/668.bugfix.md delete mode 100644 packages/overture-schema-codegen/changelog.d/668.docs.md create mode 100644 packages/overture-schema-common/CHANGELOG.md delete mode 100644 packages/overture-schema-common/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-common/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-common/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-common/changelog.d/622.misc.md delete mode 100644 packages/overture-schema-common/changelog.d/633.feature.md delete mode 100644 packages/overture-schema-common/changelog.d/668.feature.md delete mode 100644 packages/overture-schema-common/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-pyspark/CHANGELOG.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/625.bugfix.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/638.misc.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/659.bugfix.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/661.bugfix.md delete mode 100644 packages/overture-schema-pyspark/changelog.d/668.docs.md create mode 100644 packages/overture-schema-system/CHANGELOG.md delete mode 100644 packages/overture-schema-system/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-system/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-system/changelog.d/668.misc.md delete mode 100644 packages/overture-schema-system/changelog.d/671.feature.md create mode 100644 packages/overture-schema-theme-addresses/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-addresses/changelog.d/671.misc.md create mode 100644 packages/overture-schema-theme-base/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/671.misc.md delete mode 100644 packages/overture-schema-theme-base/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-theme-buildings/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/656.feature.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/671.misc.md delete mode 100644 packages/overture-schema-theme-buildings/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-theme-divisions/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-divisions/changelog.d/671.misc.md create mode 100644 packages/overture-schema-theme-places/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/434.breaking.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-places/changelog.d/671.misc.md create mode 100644 packages/overture-schema-theme-transportation/CHANGELOG.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/557.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/593.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/633.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/649.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/669.breaking.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/671.misc.md delete mode 100644 packages/overture-schema-theme-transportation/changelog.d/696.breaking.md create mode 100644 packages/overture-schema-validation/CHANGELOG.md delete mode 100644 packages/overture-schema-validation/changelog.d/618.misc.md delete mode 100644 packages/overture-schema-validation/changelog.d/622.misc.md delete mode 100644 packages/overture-schema-validation/changelog.d/668.docs.md create mode 100644 packages/overture-schema/CHANGELOG.md delete mode 100644 packages/overture-schema/changelog.d/557.misc.md delete mode 100644 packages/overture-schema/changelog.d/593.misc.md delete mode 100644 packages/overture-schema/changelog.d/618.misc.md delete mode 100644 packages/overture-schema/changelog.d/622.misc.md delete mode 100644 packages/overture-schema/changelog.d/649.misc.md delete mode 100644 packages/overture-schema/changelog.d/668.docs.md delete mode 100644 packages/overture-schema/changelog.d/671.feature.md diff --git a/packages/overture-schema-cli/CHANGELOG.md b/packages/overture-schema-cli/CHANGELOG.md new file mode 100644 index 000000000..292bfe559 --- /dev/null +++ b/packages/overture-schema-cli/CHANGELOG.md @@ -0,0 +1,13 @@ +## [2.0.0] - 2026-09-02 + +### Bug Fixes + +- Fixed `--help` example blocks rendering a literal `\b` instead of Click's no-rewrap marker, and replaced the tag-filter examples that cited tags discovery never emitted. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Updated CLI heterogeneous collection test fixtures to align with the Places schema removal of the deprecated `categories` field. ([#434](https://github.com/OvertureMaps/schema/issues/434)) +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Added a test verifying CLI correctly generates the unified JSON Schema. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-cli/changelog.d/434.misc.md b/packages/overture-schema-cli/changelog.d/434.misc.md deleted file mode 100644 index 2292f59cd..000000000 --- a/packages/overture-schema-cli/changelog.d/434.misc.md +++ /dev/null @@ -1 +0,0 @@ -Updated CLI heterogeneous collection test fixtures to align with the Places schema removal of the deprecated `categories` field. \ No newline at end of file diff --git a/packages/overture-schema-cli/changelog.d/557.misc.md b/packages/overture-schema-cli/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-cli/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-cli/changelog.d/593.misc.md b/packages/overture-schema-cli/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-cli/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-cli/changelog.d/618.misc.md b/packages/overture-schema-cli/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-cli/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-cli/changelog.d/668.bugfix.md b/packages/overture-schema-cli/changelog.d/668.bugfix.md deleted file mode 100644 index f3dcd1add..000000000 --- a/packages/overture-schema-cli/changelog.d/668.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fixed `--help` example blocks rendering a literal `\b` instead of Click's no-rewrap marker, and replaced the tag-filter examples that cited tags discovery never emitted. diff --git a/packages/overture-schema-cli/changelog.d/671.misc.md b/packages/overture-schema-cli/changelog.d/671.misc.md deleted file mode 100644 index 5dcd4ec21..000000000 --- a/packages/overture-schema-cli/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Added a test verifying CLI correctly generates the unified JSON Schema. diff --git a/packages/overture-schema-cli/pyproject.toml b/packages/overture-schema-cli/pyproject.toml index 783c5d75c..b0f3329e0 100644 --- a/packages/overture-schema-cli/pyproject.toml +++ b/packages/overture-schema-cli/pyproject.toml @@ -3,8 +3,8 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", "pyyaml>=6.0.2", "click>=8.1", @@ -12,7 +12,7 @@ dependencies = [ "yamlcore>=0.0.4", ] description = "Command-line interface for Overture Maps schema validation and JSON Schema generation" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-cli" readme = "README.md" diff --git a/packages/overture-schema-codegen/CHANGELOG.md b/packages/overture-schema-codegen/CHANGELOG.md new file mode 100644 index 000000000..7f2b22c86 --- /dev/null +++ b/packages/overture-schema-codegen/CHANGELOG.md @@ -0,0 +1,17 @@ +## [2.0.0] - 2026-09-02 + +### Bug Fixes + +- Fixed RootModel entry points producing a spurious `root` column and going undocumented: they are now skipped from PySpark generation and documented as markdown type aliases (a self-referential RootModel now raises a clear error instead of recursing). ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Fixed `overture-codegen list` printing a raw `typing.Annotated[...]` expression for discriminated-union entry points such as `Segment`; entries now list by their entry-point class name. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Documentation + +- Rewrote the README's programmatic-use section against the current `analyze_type()` signature, which returns a `FieldShape` tuple rather than the removed `TypeInfo`/`TypeKind`. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Migrated the build backend to uv_build and stopped emitting `__init__.py` in the generated PySpark trees, making them PEP 420 namespace packages. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Updated scaffold test expectations for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) diff --git a/packages/overture-schema-codegen/changelog.d/557.misc.md b/packages/overture-schema-codegen/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-codegen/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-codegen/changelog.d/593.bugfix.md b/packages/overture-schema-codegen/changelog.d/593.bugfix.md deleted file mode 100644 index 6e922278b..000000000 --- a/packages/overture-schema-codegen/changelog.d/593.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fixed RootModel entry points producing a spurious `root` column and going undocumented: they are now skipped from PySpark generation and documented as markdown type aliases (a self-referential RootModel now raises a clear error instead of recursing). diff --git a/packages/overture-schema-codegen/changelog.d/618.misc.md b/packages/overture-schema-codegen/changelog.d/618.misc.md deleted file mode 100644 index 252629b21..000000000 --- a/packages/overture-schema-codegen/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend to uv_build and stopped emitting `__init__.py` in the generated PySpark trees, making them PEP 420 namespace packages. diff --git a/packages/overture-schema-codegen/changelog.d/633.misc.md b/packages/overture-schema-codegen/changelog.d/633.misc.md deleted file mode 100644 index 4123a1edd..000000000 --- a/packages/overture-schema-codegen/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Updated scaffold test expectations for optional `sources[].dataset`. diff --git a/packages/overture-schema-codegen/changelog.d/649.misc.md b/packages/overture-schema-codegen/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-codegen/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-codegen/changelog.d/668.bugfix.md b/packages/overture-schema-codegen/changelog.d/668.bugfix.md deleted file mode 100644 index d46f6bef7..000000000 --- a/packages/overture-schema-codegen/changelog.d/668.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fixed `overture-codegen list` printing a raw `typing.Annotated[...]` expression for discriminated-union entry points such as `Segment`; entries now list by their entry-point class name. diff --git a/packages/overture-schema-codegen/changelog.d/668.docs.md b/packages/overture-schema-codegen/changelog.d/668.docs.md deleted file mode 100644 index 88e7d94f0..000000000 --- a/packages/overture-schema-codegen/changelog.d/668.docs.md +++ /dev/null @@ -1 +0,0 @@ -Rewrote the README's programmatic-use section against the current `analyze_type()` signature, which returns a `FieldShape` tuple rather than the removed `TypeInfo`/`TypeKind`. diff --git a/packages/overture-schema-codegen/pyproject.toml b/packages/overture-schema-codegen/pyproject.toml index e37bb5bbb..951a8c74e 100644 --- a/packages/overture-schema-codegen/pyproject.toml +++ b/packages/overture-schema-codegen/pyproject.toml @@ -6,14 +6,14 @@ build-backend = "uv_build" dependencies = [ "click>=8.1", "jinja2>=3.0", - "overture-schema-cli>=0.1.1", - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-cli>=2.0.0", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "tomli>=2.0; python_version < '3.11'", "typing-extensions>=4.0", ] description = "Code generator that produces documentation and code from Pydantic models" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-codegen" requires-python = ">=3.10" diff --git a/packages/overture-schema-common/CHANGELOG.md b/packages/overture-schema-common/CHANGELOG.md new file mode 100644 index 000000000..f4b1c562f --- /dev/null +++ b/packages/overture-schema-common/CHANGELOG.md @@ -0,0 +1,17 @@ +## [2.0.0] - 2026-09-02 + +### Breaking Changes + +- Removed the `level` default of `0`; a feature parsed without a level now yields `None` instead of `0`, and the field description states that absence means visual level. ([#696](https://github.com/OvertureMaps/schema/issues/696)) + +### Features + +- Made `sources[].dataset` optional; sources entries no longer require a `dataset` value. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Added an `overture` tag provider that marks every entry point built on `OvertureFeature`, so consumers can select those types by tag instead of importing `OvertureFeature`. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Added `deepdiff` to the development dependency group. ([#622](https://github.com/OvertureMaps/schema/issues/622)) diff --git a/packages/overture-schema-common/changelog.d/557.misc.md b/packages/overture-schema-common/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-common/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-common/changelog.d/593.misc.md b/packages/overture-schema-common/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-common/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-common/changelog.d/618.misc.md b/packages/overture-schema-common/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-common/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-common/changelog.d/622.misc.md b/packages/overture-schema-common/changelog.d/622.misc.md deleted file mode 100644 index e6e2aace4..000000000 --- a/packages/overture-schema-common/changelog.d/622.misc.md +++ /dev/null @@ -1 +0,0 @@ -Added `deepdiff` to the development dependency group. diff --git a/packages/overture-schema-common/changelog.d/633.feature.md b/packages/overture-schema-common/changelog.d/633.feature.md deleted file mode 100644 index e55147bb5..000000000 --- a/packages/overture-schema-common/changelog.d/633.feature.md +++ /dev/null @@ -1 +0,0 @@ -Made `sources[].dataset` optional; sources entries no longer require a `dataset` value. diff --git a/packages/overture-schema-common/changelog.d/668.feature.md b/packages/overture-schema-common/changelog.d/668.feature.md deleted file mode 100644 index 2499fe03d..000000000 --- a/packages/overture-schema-common/changelog.d/668.feature.md +++ /dev/null @@ -1 +0,0 @@ -Added an `overture` tag provider that marks every entry point built on `OvertureFeature`, so consumers can select those types by tag instead of importing `OvertureFeature`. diff --git a/packages/overture-schema-common/changelog.d/696.breaking.md b/packages/overture-schema-common/changelog.d/696.breaking.md deleted file mode 100644 index d8f651e92..000000000 --- a/packages/overture-schema-common/changelog.d/696.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Removed the `level` default of `0`; a feature parsed without a level now yields `None` instead of `0`, and the field description states that absence means visual level. diff --git a/packages/overture-schema-common/pyproject.toml b/packages/overture-schema-common/pyproject.toml index 3eca61aff..801ce77bd 100644 --- a/packages/overture-schema-common/pyproject.toml +++ b/packages/overture-schema-common/pyproject.toml @@ -7,12 +7,12 @@ name = "overture-schema-common" maintainers = [ {name = "Overture Maps Schema Working Group"}, ] -version = "0.1.1" +version = "2.0.0" description = "Common components that are shared across Overture theme schemas" requires-python = ">=3.10" license = "MIT" dependencies = [ - "overture-schema-system>=0.1.1", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", "shapely>=2.1.1", ] diff --git a/packages/overture-schema-pyspark/CHANGELOG.md b/packages/overture-schema-pyspark/CHANGELOG.md new file mode 100644 index 000000000..be4073f89 --- /dev/null +++ b/packages/overture-schema-pyspark/CHANGELOG.md @@ -0,0 +1,17 @@ +## [2.0.0] - 2026-09-02 + +### Bug Fixes + +- Fixed published wheels and sdists shipping without the generated validation expressions, which left an installed `validate_model()` unable to discover any models. ([#625](https://github.com/OvertureMaps/schema/issues/625)) +- Moved `pyspark` from a hard dependency to the `spark` optional extra, so installing `overture-schema-pyspark` no longer resolves `pyspark` on runtimes (Glue, EMR) that already bundle their own. Standalone environments need `pip install overture-schema-pyspark[spark]`. Importing the package without PySpark installed now raises an actionable `ModuleNotFoundError` pointing at that extra, instead of a bare "No module named 'pyspark'". Importing it with a PySpark older than the declared floor raises an `ImportError` naming both versions, so the floor still applies on installs that skip the extra and bring their own PySpark. ([#659](https://github.com/OvertureMaps/schema/issues/659)) +- Fixed the validation registry coming back empty when `overture-schema-pyspark` is loaded from a wheel on `sys.path` (zipimport) rather than installed to a real directory, as happens on AWS Glue via `--extra-py-files`. The generated tree is now read through `importlib.resources`, which resolves a namespace portion inside an archive as well as one on disk. ([#661](https://github.com/OvertureMaps/schema/issues/661)) + +### Documentation + +- Updated the README's S3 examples to a release the bucket still retains, and documented how to read the current release identifier from the STAC catalog. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Migrated the build backend to uv_build and PEP 420; the runtime registry now walks the namespace roots as files so it discovers generated modules that no longer ship `__init__.py`. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Moved expression-generation from the shared prebuild step into the package's own `scripts/prebuild.sh`, run by `release-publish.yaml` before `uv build`. CI-only change: no runtime code, dependencies, or wheel contents affected. ([#638](https://github.com/OvertureMaps/schema/issues/638)) diff --git a/packages/overture-schema-pyspark/changelog.d/557.misc.md b/packages/overture-schema-pyspark/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-pyspark/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-pyspark/changelog.d/618.misc.md b/packages/overture-schema-pyspark/changelog.d/618.misc.md deleted file mode 100644 index 3540365f6..000000000 --- a/packages/overture-schema-pyspark/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend to uv_build and PEP 420; the runtime registry now walks the namespace roots as files so it discovers generated modules that no longer ship `__init__.py`. diff --git a/packages/overture-schema-pyspark/changelog.d/625.bugfix.md b/packages/overture-schema-pyspark/changelog.d/625.bugfix.md deleted file mode 100644 index 67d1c8953..000000000 --- a/packages/overture-schema-pyspark/changelog.d/625.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fixed published wheels and sdists shipping without the generated validation expressions, which left an installed `validate_model()` unable to discover any models. diff --git a/packages/overture-schema-pyspark/changelog.d/638.misc.md b/packages/overture-schema-pyspark/changelog.d/638.misc.md deleted file mode 100644 index 1087c5785..000000000 --- a/packages/overture-schema-pyspark/changelog.d/638.misc.md +++ /dev/null @@ -1 +0,0 @@ -Moved expression-generation from the shared prebuild step into the package's own `scripts/prebuild.sh`, run by `release-publish.yaml` before `uv build`. CI-only change: no runtime code, dependencies, or wheel contents affected. diff --git a/packages/overture-schema-pyspark/changelog.d/659.bugfix.md b/packages/overture-schema-pyspark/changelog.d/659.bugfix.md deleted file mode 100644 index b4d382763..000000000 --- a/packages/overture-schema-pyspark/changelog.d/659.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Moved `pyspark` from a hard dependency to the `spark` optional extra, so installing `overture-schema-pyspark` no longer resolves `pyspark` on runtimes (Glue, EMR) that already bundle their own. Standalone environments need `pip install overture-schema-pyspark[spark]`. Importing the package without PySpark installed now raises an actionable `ModuleNotFoundError` pointing at that extra, instead of a bare "No module named 'pyspark'". Importing it with a PySpark older than the declared floor raises an `ImportError` naming both versions, so the floor still applies on installs that skip the extra and bring their own PySpark. diff --git a/packages/overture-schema-pyspark/changelog.d/661.bugfix.md b/packages/overture-schema-pyspark/changelog.d/661.bugfix.md deleted file mode 100644 index bb378199a..000000000 --- a/packages/overture-schema-pyspark/changelog.d/661.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fixed the validation registry coming back empty when `overture-schema-pyspark` is loaded from a wheel on `sys.path` (zipimport) rather than installed to a real directory, as happens on AWS Glue via `--extra-py-files`. The generated tree is now read through `importlib.resources`, which resolves a namespace portion inside an archive as well as one on disk. diff --git a/packages/overture-schema-pyspark/changelog.d/668.docs.md b/packages/overture-schema-pyspark/changelog.d/668.docs.md deleted file mode 100644 index ce95a6981..000000000 --- a/packages/overture-schema-pyspark/changelog.d/668.docs.md +++ /dev/null @@ -1 +0,0 @@ -Updated the README's S3 examples to a release the bucket still retains, and documented how to read the current release identifier from the STAC catalog. diff --git a/packages/overture-schema-pyspark/pyproject.toml b/packages/overture-schema-pyspark/pyproject.toml index 9999e2705..ec61ea00e 100644 --- a/packages/overture-schema-pyspark/pyproject.toml +++ b/packages/overture-schema-pyspark/pyproject.toml @@ -8,14 +8,14 @@ dependencies = [ # 6.2 is the first release whose `files()` resolves a namespace portion # inside a zip; the stdlib gained the same fix in 3.13. "importlib-resources>=6.2; python_version < '3.13'", - "overture-schema-system>=0.1.1", + "overture-schema-system>=2.0.0", "packaging>=22", ] description = "PySpark validation expressions for Overture Maps data" license = "MIT" name = "overture-schema-pyspark" requires-python = ">=3.10" -version = "0.1.1" +version = "2.0.0" [project.optional-dependencies] spark = ["pyspark>=3.4"] diff --git a/packages/overture-schema-system/CHANGELOG.md b/packages/overture-schema-system/CHANGELOG.md new file mode 100644 index 000000000..acdf2241b --- /dev/null +++ b/packages/overture-schema-system/CHANGELOG.md @@ -0,0 +1,11 @@ +## [2.0.0] - 2026-09-02 + +### Features + +- Ensured the `json_schema()` function includes the JSON Schema dialect (`$schema`). ([#671](https://github.com/OvertureMaps/schema/issues/671)) + +### Miscellaneous + +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Reserved the plain `overture` tag to `overture-schema-common` and documented its provider in the README. ([#668](https://github.com/OvertureMaps/schema/issues/668)) diff --git a/packages/overture-schema-system/changelog.d/593.misc.md b/packages/overture-schema-system/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-system/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-system/changelog.d/618.misc.md b/packages/overture-schema-system/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-system/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-system/changelog.d/668.misc.md b/packages/overture-schema-system/changelog.d/668.misc.md deleted file mode 100644 index b76bcab60..000000000 --- a/packages/overture-schema-system/changelog.d/668.misc.md +++ /dev/null @@ -1 +0,0 @@ -Reserved the plain `overture` tag to `overture-schema-common` and documented its provider in the README. diff --git a/packages/overture-schema-system/changelog.d/671.feature.md b/packages/overture-schema-system/changelog.d/671.feature.md deleted file mode 100644 index 83effda9c..000000000 --- a/packages/overture-schema-system/changelog.d/671.feature.md +++ /dev/null @@ -1 +0,0 @@ -Ensured the `json_schema()` function includes the JSON Schema dialect (`$schema`). diff --git a/packages/overture-schema-system/pyproject.toml b/packages/overture-schema-system/pyproject.toml index 952d299ec..9d327fc9b 100644 --- a/packages/overture-schema-system/pyproject.toml +++ b/packages/overture-schema-system/pyproject.toml @@ -7,7 +7,7 @@ name = "overture-schema-system" maintainers = [ {name = "Overture Maps Schema Working Group"}, ] -version = "0.1.1" +version = "2.0.0" description = "Foundational types at the base of the Overture Maps schema system" readme = "README.md" requires-python = ">=3.10" diff --git a/packages/overture-schema-theme-addresses/CHANGELOG.md b/packages/overture-schema-theme-addresses/CHANGELOG.md new file mode 100644 index 000000000..5f15bb67a --- /dev/null +++ b/packages/overture-schema-theme-addresses/CHANGELOG.md @@ -0,0 +1,10 @@ +## [2.0.0] - 2026-09-02 + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-addresses/changelog.d/557.misc.md b/packages/overture-schema-theme-addresses/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-addresses/changelog.d/593.misc.md b/packages/overture-schema-theme-addresses/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-addresses/changelog.d/618.misc.md b/packages/overture-schema-theme-addresses/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-addresses/changelog.d/633.misc.md b/packages/overture-schema-theme-addresses/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-addresses/changelog.d/649.misc.md b/packages/overture-schema-theme-addresses/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-addresses/changelog.d/671.misc.md b/packages/overture-schema-theme-addresses/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-addresses/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-addresses/pyproject.toml b/packages/overture-schema-theme-addresses/pyproject.toml index 81cc33652..af3632d17 100644 --- a/packages/overture-schema-theme-addresses/pyproject.toml +++ b/packages/overture-schema-theme-addresses/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", ] description = "Overture Maps addresses theme models and structures" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-addresses" readme = "README.md" diff --git a/packages/overture-schema-theme-base/CHANGELOG.md b/packages/overture-schema-theme-base/CHANGELOG.md new file mode 100644 index 000000000..d541ea8fe --- /dev/null +++ b/packages/overture-schema-theme-base/CHANGELOG.md @@ -0,0 +1,14 @@ +## [2.0.0] - 2026-09-02 + +### Breaking Changes + +- Made `class` and `subtype` required on `Land` and `Water`, matching `Infrastructure` and `LandUse`; constructing either without them now raises instead of falling back to `land`/`water`. ([#696](https://github.com/OvertureMaps/schema/issues/696)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-base/changelog.d/557.misc.md b/packages/overture-schema-theme-base/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-base/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-base/changelog.d/593.misc.md b/packages/overture-schema-theme-base/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-base/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-base/changelog.d/618.misc.md b/packages/overture-schema-theme-base/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-base/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-base/changelog.d/633.misc.md b/packages/overture-schema-theme-base/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-base/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-base/changelog.d/649.misc.md b/packages/overture-schema-theme-base/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-base/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-base/changelog.d/671.misc.md b/packages/overture-schema-theme-base/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-base/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-base/changelog.d/696.breaking.md b/packages/overture-schema-theme-base/changelog.d/696.breaking.md deleted file mode 100644 index d12a80821..000000000 --- a/packages/overture-schema-theme-base/changelog.d/696.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Made `class` and `subtype` required on `Land` and `Water`, matching `Infrastructure` and `LandUse`; constructing either without them now raises instead of falling back to `land`/`water`. diff --git a/packages/overture-schema-theme-base/pyproject.toml b/packages/overture-schema-theme-base/pyproject.toml index 2397068fd..60b38438d 100644 --- a/packages/overture-schema-theme-base/pyproject.toml +++ b/packages/overture-schema-theme-base/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", ] description = "Overture Maps base theme shared structures and models (bathymetry, infrastructure, land, land_cover, land_use, water)" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-base" readme = "README.md" diff --git a/packages/overture-schema-theme-buildings/CHANGELOG.md b/packages/overture-schema-theme-buildings/CHANGELOG.md new file mode 100644 index 000000000..0741021a5 --- /dev/null +++ b/packages/overture-schema-theme-buildings/CHANGELOG.md @@ -0,0 +1,18 @@ +## [2.0.0] - 2026-09-02 + +### Breaking Changes + +- Buildings and building parts parsed without a `level` now yield `None` instead of `0`, following the removal of the `Stacked.level` default. ([#696](https://github.com/OvertureMaps/schema/issues/696)) + +### Features + +- Add `shelter` to the building `class` enum so shelter structures (e.g. public transport shelters) can receive a class value. ([#656](https://github.com/OvertureMaps/schema/issues/656)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-buildings/changelog.d/557.misc.md b/packages/overture-schema-theme-buildings/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-buildings/changelog.d/593.misc.md b/packages/overture-schema-theme-buildings/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-buildings/changelog.d/618.misc.md b/packages/overture-schema-theme-buildings/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-buildings/changelog.d/633.misc.md b/packages/overture-schema-theme-buildings/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-buildings/changelog.d/649.misc.md b/packages/overture-schema-theme-buildings/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-buildings/changelog.d/656.feature.md b/packages/overture-schema-theme-buildings/changelog.d/656.feature.md deleted file mode 100644 index 51848fe1c..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/656.feature.md +++ /dev/null @@ -1 +0,0 @@ -Add `shelter` to the building `class` enum so shelter structures (e.g. public transport shelters) can receive a class value. diff --git a/packages/overture-schema-theme-buildings/changelog.d/671.misc.md b/packages/overture-schema-theme-buildings/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md b/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md deleted file mode 100644 index 481c64d60..000000000 --- a/packages/overture-schema-theme-buildings/changelog.d/696.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Buildings and building parts parsed without a `level` now yield `None` instead of `0`, following the removal of the `Stacked.level` default. diff --git a/packages/overture-schema-theme-buildings/pyproject.toml b/packages/overture-schema-theme-buildings/pyproject.toml index f264e7222..77c689a3e 100644 --- a/packages/overture-schema-theme-buildings/pyproject.toml +++ b/packages/overture-schema-theme-buildings/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", ] description = "Overture Maps buildings theme shared structures, building types, and building part types" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-buildings" readme = "README.md" diff --git a/packages/overture-schema-theme-divisions/CHANGELOG.md b/packages/overture-schema-theme-divisions/CHANGELOG.md new file mode 100644 index 000000000..5f15bb67a --- /dev/null +++ b/packages/overture-schema-theme-divisions/CHANGELOG.md @@ -0,0 +1,10 @@ +## [2.0.0] - 2026-09-02 + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-divisions/changelog.d/557.misc.md b/packages/overture-schema-theme-divisions/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-divisions/changelog.d/593.misc.md b/packages/overture-schema-theme-divisions/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-divisions/changelog.d/618.misc.md b/packages/overture-schema-theme-divisions/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-divisions/changelog.d/633.misc.md b/packages/overture-schema-theme-divisions/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-divisions/changelog.d/649.misc.md b/packages/overture-schema-theme-divisions/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-divisions/changelog.d/671.misc.md b/packages/overture-schema-theme-divisions/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-divisions/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-divisions/pyproject.toml b/packages/overture-schema-theme-divisions/pyproject.toml index c189eec58..fbb903cdb 100644 --- a/packages/overture-schema-theme-divisions/pyproject.toml +++ b/packages/overture-schema-theme-divisions/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ { name = "Overture Maps Schema Working Group" }, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", ] description = "Overture Maps divisions theme shared structures, division, division area and division boundary types" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-divisions" readme = "README.md" diff --git a/packages/overture-schema-theme-places/CHANGELOG.md b/packages/overture-schema-theme-places/CHANGELOG.md new file mode 100644 index 000000000..8832cb56d --- /dev/null +++ b/packages/overture-schema-theme-places/CHANGELOG.md @@ -0,0 +1,14 @@ +## [2.0.0] - 2026-09-02 + +### Breaking Changes + +- Removed the deprecated `categories` field from `place` and standardized place categorization on `taxonomy`. ([#434](https://github.com/OvertureMaps/schema/issues/434)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-places/changelog.d/434.breaking.md b/packages/overture-schema-theme-places/changelog.d/434.breaking.md deleted file mode 100644 index 7b2aa98e7..000000000 --- a/packages/overture-schema-theme-places/changelog.d/434.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Removed the deprecated `categories` field from `place` and standardized place categorization on `taxonomy`. \ No newline at end of file diff --git a/packages/overture-schema-theme-places/changelog.d/557.misc.md b/packages/overture-schema-theme-places/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-places/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-places/changelog.d/593.misc.md b/packages/overture-schema-theme-places/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-places/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-places/changelog.d/618.misc.md b/packages/overture-schema-theme-places/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-places/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-places/changelog.d/633.misc.md b/packages/overture-schema-theme-places/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-places/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-places/changelog.d/649.misc.md b/packages/overture-schema-theme-places/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-places/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-places/changelog.d/671.misc.md b/packages/overture-schema-theme-places/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-places/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-places/pyproject.toml b/packages/overture-schema-theme-places/pyproject.toml index ac3c7cfc1..e328a0f3f 100644 --- a/packages/overture-schema-theme-places/pyproject.toml +++ b/packages/overture-schema-theme-places/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic[email]>=2.13.0", ] description = "Overture Maps places theme with place type models" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-places" readme = "README.md" diff --git a/packages/overture-schema-theme-transportation/CHANGELOG.md b/packages/overture-schema-theme-transportation/CHANGELOG.md new file mode 100644 index 000000000..58584971c --- /dev/null +++ b/packages/overture-schema-theme-transportation/CHANGELOG.md @@ -0,0 +1,15 @@ +## [2.0.0] - 2026-09-02 + +### Breaking Changes + +- Made segment `connectors` a required field. It previously defaulted to an empty list, a value its own `min_length=2` constraint rejected, so a segment without connectors failed re-validation after a dump. Every segment in published Overture data already carries two or more connectors. ([#669](https://github.com/OvertureMaps/schema/issues/669)) +- Removed the `is_max_speed_variable` default of `False`; a rule parsed without the flag now yields `None` instead of `False`. ([#696](https://github.com/OvertureMaps/schema/issues/696)) + +### Miscellaneous + +- Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Regenerated baseline schemas for optional `sources[].dataset`. ([#633](https://github.com/OvertureMaps/schema/issues/633)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) +- Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. ([#671](https://github.com/OvertureMaps/schema/issues/671)) diff --git a/packages/overture-schema-theme-transportation/changelog.d/557.misc.md b/packages/overture-schema-theme-transportation/changelog.d/557.misc.md deleted file mode 100644 index 67efb8d14..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/557.misc.md +++ /dev/null @@ -1 +0,0 @@ -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema-theme-transportation/changelog.d/593.misc.md b/packages/overture-schema-theme-transportation/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema-theme-transportation/changelog.d/618.misc.md b/packages/overture-schema-theme-transportation/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-theme-transportation/changelog.d/633.misc.md b/packages/overture-schema-theme-transportation/changelog.d/633.misc.md deleted file mode 100644 index c4c80e187..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/633.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated baseline schemas for optional `sources[].dataset`. diff --git a/packages/overture-schema-theme-transportation/changelog.d/649.misc.md b/packages/overture-schema-theme-transportation/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md b/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md deleted file mode 100644 index 0b5ad114d..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/669.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Made segment `connectors` a required field. It previously defaulted to an empty list, a value its own `min_length=2` constraint rejected, so a segment without connectors failed re-validation after a dump. Every segment in published Overture data already carries two or more connectors. diff --git a/packages/overture-schema-theme-transportation/changelog.d/671.misc.md b/packages/overture-schema-theme-transportation/changelog.d/671.misc.md deleted file mode 100644 index ea7201223..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/671.misc.md +++ /dev/null @@ -1 +0,0 @@ -Regenerated the JSON Schema baseline to include the `$schema` dialect declaration. diff --git a/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md b/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md deleted file mode 100644 index 97a56be8d..000000000 --- a/packages/overture-schema-theme-transportation/changelog.d/696.breaking.md +++ /dev/null @@ -1 +0,0 @@ -Removed the `is_max_speed_variable` default of `False`; a rule parsed without the flag now yields `None` instead of `False`. diff --git a/packages/overture-schema-theme-transportation/pyproject.toml b/packages/overture-schema-theme-transportation/pyproject.toml index f5df37004..2dedea00e 100644 --- a/packages/overture-schema-theme-transportation/pyproject.toml +++ b/packages/overture-schema-theme-transportation/pyproject.toml @@ -3,12 +3,12 @@ maintainers = [ { name = "Overture Maps Schema Working Group" }, ] dependencies = [ - "overture-schema-common>=0.1.1", - "overture-schema-system>=0.1.1", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.13.0", ] description = "Overture Maps transportation theme with shared structures and connector and segment types" -version = "0.1.1" +version = "2.0.0" license = "MIT" name = "overture-schema-theme-transportation" readme = "README.md" diff --git a/packages/overture-schema-validation/CHANGELOG.md b/packages/overture-schema-validation/CHANGELOG.md new file mode 100644 index 000000000..5f4093729 --- /dev/null +++ b/packages/overture-schema-validation/CHANGELOG.md @@ -0,0 +1,10 @@ +## [2.0.0] - 2026-09-02 + +### Documentation + +- Corrected the README's usage examples, which showed `validate_json` accepting the flat tabular shape rather than GeoJSON. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Extracted `validate()` and `validate_json()` into the new `overture-schema-validation` package, off the shared `overture.schema` namespace root. ([#622](https://github.com/OvertureMaps/schema/issues/622)) diff --git a/packages/overture-schema-validation/changelog.d/618.misc.md b/packages/overture-schema-validation/changelog.d/618.misc.md deleted file mode 100644 index d82dab3bd..000000000 --- a/packages/overture-schema-validation/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend from hatchling to uv_build and made `overture.schema` a PEP 420 namespace package. diff --git a/packages/overture-schema-validation/changelog.d/622.misc.md b/packages/overture-schema-validation/changelog.d/622.misc.md deleted file mode 100644 index 53379037c..000000000 --- a/packages/overture-schema-validation/changelog.d/622.misc.md +++ /dev/null @@ -1 +0,0 @@ -Extracted `validate()` and `validate_json()` into the new `overture-schema-validation` package, off the shared `overture.schema` namespace root. diff --git a/packages/overture-schema-validation/changelog.d/668.docs.md b/packages/overture-schema-validation/changelog.d/668.docs.md deleted file mode 100644 index 014c31693..000000000 --- a/packages/overture-schema-validation/changelog.d/668.docs.md +++ /dev/null @@ -1 +0,0 @@ -Corrected the README's usage examples, which showed `validate_json` accepting the flat tabular shape rather than GeoJSON. diff --git a/packages/overture-schema-validation/pyproject.toml b/packages/overture-schema-validation/pyproject.toml index a9fb73727..8bab32f85 100644 --- a/packages/overture-schema-validation/pyproject.toml +++ b/packages/overture-schema-validation/pyproject.toml @@ -7,14 +7,14 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] name = "overture-schema-validation" -version = "0.1.1" +version = "2.0.0" description = "Validation helpers for the union of all discovered Overture models" requires-python = ">=3.10" license = "MIT" readme = "README.md" dependencies = [ - "overture-schema-common", - "overture-schema-system", + "overture-schema-common>=2.0.0", + "overture-schema-system>=2.0.0", "pydantic>=2.12.0", ] diff --git a/packages/overture-schema/CHANGELOG.md b/packages/overture-schema/CHANGELOG.md new file mode 100644 index 000000000..1d9eff08f --- /dev/null +++ b/packages/overture-schema/CHANGELOG.md @@ -0,0 +1,18 @@ +## [2.0.0] - 2026-09-02 + +### Features + +- Each `overture-schema` release now attaches `overture-schema.json`, the unified JSON Schema for the whole official Overture schema. ([#671](https://github.com/OvertureMaps/schema/issues/671)) + +### Documentation + +- Rewrote the README against the real import surface: `overture.schema` is a namespace root, so models import from their theme packages and the utility functions from `overture.schema.validation` and `overture.schema.system`. ([#668](https://github.com/OvertureMaps/schema/issues/668)) + +### Miscellaneous + +- Added per-package release-trigger workflow, towncrier changelog fragments, and a fragment-required CI check. + Declared explicit version floors for workspace dependencies. ([#557](https://github.com/OvertureMaps/schema/issues/557)) +- Raised the minimum pydantic version to 2.13.0. ([#593](https://github.com/OvertureMaps/schema/issues/593)) +- Migrated the build backend to uv_build with an explicit `overture.schema` namespace module root shipping only `py.typed`. ([#618](https://github.com/OvertureMaps/schema/issues/618)) +- Moved `validate()` and `validate_json()` into the new `overture-schema-validation` dependency; the `overture.schema` namespace root is now a bare pkgutil shim. ([#622](https://github.com/OvertureMaps/schema/issues/622)) +- Rename theme packages to improve sorting and grouping characteristics. ([#649](https://github.com/OvertureMaps/schema/issues/649)) diff --git a/packages/overture-schema/changelog.d/557.misc.md b/packages/overture-schema/changelog.d/557.misc.md deleted file mode 100644 index 3dd1286bc..000000000 --- a/packages/overture-schema/changelog.d/557.misc.md +++ /dev/null @@ -1,2 +0,0 @@ -Added per-package release-trigger workflow, towncrier changelog fragments, and a fragment-required CI check. -Declared explicit version floors for workspace dependencies. diff --git a/packages/overture-schema/changelog.d/593.misc.md b/packages/overture-schema/changelog.d/593.misc.md deleted file mode 100644 index 0cf0cb497..000000000 --- a/packages/overture-schema/changelog.d/593.misc.md +++ /dev/null @@ -1 +0,0 @@ -Raised the minimum pydantic version to 2.13.0. diff --git a/packages/overture-schema/changelog.d/618.misc.md b/packages/overture-schema/changelog.d/618.misc.md deleted file mode 100644 index 116ce6b04..000000000 --- a/packages/overture-schema/changelog.d/618.misc.md +++ /dev/null @@ -1 +0,0 @@ -Migrated the build backend to uv_build with an explicit `overture.schema` namespace module root shipping only `py.typed`. diff --git a/packages/overture-schema/changelog.d/622.misc.md b/packages/overture-schema/changelog.d/622.misc.md deleted file mode 100644 index 6f4b755ab..000000000 --- a/packages/overture-schema/changelog.d/622.misc.md +++ /dev/null @@ -1 +0,0 @@ -Moved `validate()` and `validate_json()` into the new `overture-schema-validation` dependency; the `overture.schema` namespace root is now a bare pkgutil shim. diff --git a/packages/overture-schema/changelog.d/649.misc.md b/packages/overture-schema/changelog.d/649.misc.md deleted file mode 100644 index 23fd285d8..000000000 --- a/packages/overture-schema/changelog.d/649.misc.md +++ /dev/null @@ -1 +0,0 @@ -Rename theme packages to improve sorting and grouping characteristics. diff --git a/packages/overture-schema/changelog.d/668.docs.md b/packages/overture-schema/changelog.d/668.docs.md deleted file mode 100644 index d2c7340f6..000000000 --- a/packages/overture-schema/changelog.d/668.docs.md +++ /dev/null @@ -1 +0,0 @@ -Rewrote the README against the real import surface: `overture.schema` is a namespace root, so models import from their theme packages and the utility functions from `overture.schema.validation` and `overture.schema.system`. diff --git a/packages/overture-schema/changelog.d/671.feature.md b/packages/overture-schema/changelog.d/671.feature.md deleted file mode 100644 index 1536a569c..000000000 --- a/packages/overture-schema/changelog.d/671.feature.md +++ /dev/null @@ -1 +0,0 @@ -Each `overture-schema` release now attaches `overture-schema.json`, the unified JSON Schema for the whole official Overture schema. diff --git a/packages/overture-schema/pyproject.toml b/packages/overture-schema/pyproject.toml index 6aa407d42..559881e3d 100644 --- a/packages/overture-schema/pyproject.toml +++ b/packages/overture-schema/pyproject.toml @@ -3,17 +3,17 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-theme-addresses>=0.1.1", - "overture-schema-theme-base>=0.1.1", - "overture-schema-theme-buildings>=0.1.1", - "overture-schema-theme-divisions>=0.1.1", - "overture-schema-theme-places>=0.1.1", - "overture-schema-theme-transportation>=0.1.1", - "overture-schema-validation>=0.1.1", - "overture-schema-cli>=0.1.1", + "overture-schema-theme-addresses>=2.0.0", + "overture-schema-theme-base>=2.0.0", + "overture-schema-theme-buildings>=2.0.0", + "overture-schema-theme-divisions>=2.0.0", + "overture-schema-theme-places>=2.0.0", + "overture-schema-theme-transportation>=2.0.0", + "overture-schema-validation>=2.0.0", + "overture-schema-cli>=2.0.0", ] description = "Complete Overture Maps schema collection with all themes and types" -version = "1.17.1" +version = "2.0.0" license = "MIT" name = "overture-schema" readme = "README.md" diff --git a/uv.lock b/uv.lock index bc1ef559a..8709ae822 100644 --- a/uv.lock +++ b/uv.lock @@ -363,7 +363,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -909,7 +909,7 @@ wheels = [ [[package]] name = "overture-schema" -version = "1.17.1" +version = "2.0.0" source = { editable = "packages/overture-schema" } dependencies = [ { name = "overture-schema-cli" }, @@ -936,7 +936,7 @@ requires-dist = [ [[package]] name = "overture-schema-cli" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-cli" } dependencies = [ { name = "click" }, @@ -975,7 +975,7 @@ dev = [ [[package]] name = "overture-schema-codegen" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-codegen" } dependencies = [ { name = "click" }, @@ -1020,7 +1020,7 @@ test = [ [[package]] name = "overture-schema-common" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-common" } dependencies = [ { name = "overture-schema-system" }, @@ -1053,7 +1053,7 @@ dev = [ [[package]] name = "overture-schema-pyspark" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-pyspark" } dependencies = [ { name = "click" }, @@ -1079,7 +1079,7 @@ provides-extras = ["spark"] [[package]] name = "overture-schema-system" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-system" } dependencies = [ { name = "pydantic" }, @@ -1110,7 +1110,7 @@ dev = [ [[package]] name = "overture-schema-theme-addresses" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-addresses" } dependencies = [ { name = "overture-schema-common" }, @@ -1127,7 +1127,7 @@ requires-dist = [ [[package]] name = "overture-schema-theme-base" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-base" } dependencies = [ { name = "overture-schema-common" }, @@ -1144,7 +1144,7 @@ requires-dist = [ [[package]] name = "overture-schema-theme-buildings" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-buildings" } dependencies = [ { name = "overture-schema-common" }, @@ -1161,7 +1161,7 @@ requires-dist = [ [[package]] name = "overture-schema-theme-divisions" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-divisions" } dependencies = [ { name = "overture-schema-common" }, @@ -1178,7 +1178,7 @@ requires-dist = [ [[package]] name = "overture-schema-theme-places" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-places" } dependencies = [ { name = "overture-schema-common" }, @@ -1195,7 +1195,7 @@ requires-dist = [ [[package]] name = "overture-schema-theme-transportation" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-theme-transportation" } dependencies = [ { name = "overture-schema-common" }, @@ -1212,7 +1212,7 @@ requires-dist = [ [[package]] name = "overture-schema-validation" -version = "0.1.1" +version = "2.0.0" source = { editable = "packages/overture-schema-validation" } dependencies = [ { name = "overture-schema-common" }, From a294c1203dbcdb7e2a85222422f02050c5352ce5 Mon Sep 17 00:00:00 2001 From: Victor Schappert Date: Wed, 2 Sep 2026 12:10:27 -0700 Subject: [PATCH 14/14] Add missing breaking change for `level` in base theme This was a Copilot suggestion on the v2.0.0 release PR, #709. Signed-off-by: Victor Schappert Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Victor Schappert --- packages/overture-schema-theme-base/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/overture-schema-theme-base/CHANGELOG.md b/packages/overture-schema-theme-base/CHANGELOG.md index d541ea8fe..8a2f3302c 100644 --- a/packages/overture-schema-theme-base/CHANGELOG.md +++ b/packages/overture-schema-theme-base/CHANGELOG.md @@ -3,6 +3,7 @@ ### Breaking Changes - Made `class` and `subtype` required on `Land` and `Water`, matching `Infrastructure` and `LandUse`; constructing either without them now raises instead of falling back to `land`/`water`. ([#696](https://github.com/OvertureMaps/schema/issues/696)) +- Base feature models that inherit `Stacked` (`Infrastructure`, `Land`, `LandUse`, and `Water`) now yield `None` instead of `0` when parsed without a `level`. ([#696](https://github.com/OvertureMaps/schema/issues/696)) ### Miscellaneous