Permit Signals — Ontology Crosswalk
Schema: upcoming (extends events-timeline — all permit rows live under event_category='civic' with event_type LIKE 'permit.%')
Target standards: DCAT-US v3.0 (dataset-level), schema.org/GovernmentPermit + schema.org/ConstructionPermit, W3C PROV-DM (permit lifecycle as activity chain)
Authority: Schema.org, W3C, U.S. DOC
Status: FAIR-aligned, schema.org rich-results compatible
Dataset SPDX license: CC-BY-4.0 (research) · proprietary commercial
1. Why this pairing
Permit data is structurally a lifecycle — filed → approved → issued → finaled / revoked / expired. schema.org/ConstructionPermit gives us the consumer-facing semantic surface, GovernmentPermit the more general slot. Because each stage is a separate record in the Events Timeline linked by metadata.related_event_ids, PROV-DM is the right way to express the chain.
2. Dataset-level (DCAT-US v3.0)
| DCAT-US field | Value |
|---|---|
dct:identifier |
urn:axiom:codex:dataset:permit-signals:v1.0.0 |
dct:title |
"Axiom Permit Signals Dataset" |
dct:description |
"Building, demolition, zoning, and construction permits across U.S. jurisdictions with LLM-classified scope extraction, parcel linkage, and developer entity resolution." |
dcat:keyword |
["permits", "construction", "zoning", "parcels", "development-pipeline"] |
dcat:theme |
["http://publications.europa.eu/resource/authority/data-theme/REGI", "...ECON"] |
dct:license |
CC-BY-4.0 (research) |
3. Record-level crosswalk → schema.org/ConstructionPermit
{
"@context": "https://schema.org",
"@type": "ConstructionPermit",
"@id": "urn:axiom:event:3f8a0e12-1b2c-4d5e-9f7a-6d1e2c3b4a5f",
"identifier": [
{"@type": "PropertyValue", "propertyID": "jurisdiction-native", "value": "SF-BP-2026-01234"}
],
"validFrom": "2026-03-14",
"validThrough": "2027-03-14",
"issuedBy": {
"@type": "GovernmentOrganization",
"name": "San Francisco Department of Building Inspection"
},
"validIn": {
"@type": "Place",
"address": {"streetAddress": "2200 N. Broad St", "addressLocality": "Philadelphia", "addressRegion": "PA"}
},
"permitType": "axiom:permit.newConstruction",
"actionStatus": "axiom:permit.approved",
"axiom:declaredValueUSD": 2400000,
"axiom:parcelId": "philadelphia-pa:123-456-789",
"axiom:h3Index": "88283082b9fffff",
"axiom:llmClassified": true,
"axiom:scopeExtract": {
"floors_added": 3,
"units_added": 18,
"demolition_included": false
}
}
3.1 Field-by-field mapping
| Codex field | schema.org | Notes |
|---|---|---|
event_id |
@id |
Links to Events Timeline |
source_ref |
identifier[].value |
Jurisdiction-native permit number |
permit_type |
permitType (axiom-namespaced value) |
Enum — see §4 |
event_type |
actionStatus |
e.g. permit.filed → axiom:permit.filed |
occurred_at |
dateCreated or validFrom by stage |
Stage-dependent |
effective_from |
validFrom |
|
effective_to |
validThrough |
|
issuing_agency |
issuedBy.GovernmentOrganization |
|
jurisdiction_slug |
— | Embedded in issuedBy.name |
address |
validIn.Place.address |
|
parcel_id |
axiom:parcelId |
See JOIN_KEYS §4.6 |
h3_index |
axiom:h3Index |
|
declared_value |
axiom:declaredValueUSD |
|
scope_extract |
axiom:scopeExtract (LLM output) |
Structured JSON |
applicant_entity_urn |
axiom:applicantEntityUrn |
AXC-22 entity resolution |
4. permit_type enum (Codex-namespaced)
schema.org/ConstructionPermit doesn't define a permit-type taxonomy. Codex publishes one under axiom:permit.*:
axiom:permit.newConstructionaxiom:permit.additionaxiom:permit.alterationaxiom:permit.demolitionaxiom:permit.changeOfUseaxiom:permit.zoning(variance, rezoning, special exception)axiom:permit.signageaxiom:permit.mechanical(HVAC, plumbing, electrical)axiom:permit.fireaxiom:permit.other
5. Lifecycle as PROV-DM
Each permit is a cascade in Events Timeline — permit.filed → permit.approved → permit.completed (or the revoked/cancelled branches). The full chain is emitted as a PROV-DM prov:wasInformedBy graph; see events-timeline ontology crosswalk §5.
Typical stage-linked JSON-LD fragment:
{
"@id": "urn:axiom:event:<completed-event-uuid>",
"@type": "prov:Activity",
"prov:type": "permit.completed",
"prov:wasInformedBy": [
{"@id": "urn:axiom:event:<approved-event-uuid>"},
{"@id": "urn:axiom:event:<filed-event-uuid>"}
]
}
6. FAIR compliance
| Principle | Status |
|---|---|
| F | ✅ (schema.org/ConstructionPermit indexed; DCAT-US) |
| A | ✅ (Parquet + JSON-LD; OGC Features API) |
| I | ✅ (schema.org + PROV-DM + DCAT-US aligned) |
| R | ✅ (CC-BY-4.0 research tier, versioned schema) |
7. Deviations
- ConstructionPermit was added to schema.org in 2020 and is not universally indexed. For broader compatibility, Codex additionally emits a
schema.org/GovernmentPermitview with identical fields. - Jurisdiction-native
permit_typevalues vary wildly. Every jurisdiction has its own vocabulary. Codex normalizes to the 10-valueaxiom:permit.*enum (§4); the raw source value is preserved inaxiom:sourcePermitType. - LLM
scope_extractis confidence-rated. Not all permits have narrative scope text; when present, the LLM extraction carries aconfidencefield; consumers should filter on it for analytic use (< 0.7 suggests hand review needed).
8. Changelog
- v1.0 (2026-04-16) — Initial crosswalk. Permit Signals is published as a view over Events Timeline (event_type LIKE 'permit.%') rather than a separate dataset.