Skip to Content
DATASchemas

Schemas

Hermes defines canonical schemas for different data domains. Each schema specifies field names, types, constraints, and primary keys — providing a contract that data must satisfy.

Built-in Schemas

economic.observation

Canonical economic indicator observation:

FieldTypeRequiredDescription
entity_idstrYesCountry or entity identifier
datedatetimeYesObservation date
indicatorstrYesIndicator code (e.g., “NY.GDP.MKTP.KD.ZG”)
valuefloatNoIndicator value
unitstrNoUnit of measurement
frequencystrNoData frequency (e.g., “Y”, “M”, “Q”)
sourcestrNoData source

Primary keys: entity_id, date, indicator

financial.observation

Canonical financial metric observation:

FieldTypeRequiredDescription
entity_idstrYesCompany or asset identifier
datedatetimeYesObservation date
metricstrYesMetric name (e.g., “revenue”, “pe_ratio”)
valuefloatNoMetric value
unitstrNoUnit of measurement
periodstrNoFiscal period (e.g., “Q1”, “FY”)
sourcestrNoData source

Primary keys: entity_id, date, metric

market.observation

Canonical market data (OHLCV):

FieldTypeRequiredDescription
symbolstrYesTrading symbol
timestampdatetimeYesCandle timestamp
openfloatNoOpen price
highfloatNoHigh price
lowfloatNoLow price
closefloatNoClose price
volumefloatNoTrading volume
sourcestrNoData source

Primary keys: symbol, timestamp

geopolitical.event

Canonical geopolitical event:

FieldTypeRequiredDescription
event_idstrYesEvent identifier
datedatetimeYesEvent date
event_typestrYesEvent category
actor_1strNoPrimary actor
actor_2strNoSecondary actor
countrystrNoCountry code
goldstein_scalefloatNoGoldstein scale value
sourcestrNoData source

Primary keys: event_id

security.event

Canonical security event:

FieldTypeRequiredDescription
event_idstrYesEvent identifier
datedatetimeYesEvent date
event_typestrYesEvent category
countrystrNoCountry code
severitystrNoSeverity level
descriptionstrNoEvent description
sourcestrNoData source

Primary keys: event_id

entity

Canonical entity (countries, companies, persons):

FieldTypeRequiredDescription
entity_idstrYesEntity identifier
namestrYesEntity name
entity_typestrYesType (country, company, person)
countrystrNoCountry code
identifiersdictNoExternal identifiers
aliaseslistNoAlternative names

Primary keys: entity_id

document

Canonical document/filing:

FieldTypeRequiredDescription
document_idstrYesDocument identifier
titlestrNoDocument title
sourcestrYesData source
datedatetimeNoDocument date
urlstrNoDocument URL
content_typestrNoMIME type
metadatadictNoAdditional metadata

Primary keys: document_id

Schema Base Classes

Schema

from hermes.schemas import Schema, FieldDef schema = Schema( name="my_schema", version="1.0.0", fields=[ FieldDef(name="id", dtype="str", required=True), FieldDef(name="value", dtype="float", nullable=True), ], primary_keys=["id"], description="My custom schema", )

FieldDef

FieldTypeDefaultDescription
namestr(required)Field name
dtypestr(required)Data type
nullableboolTrueWhether null values are allowed
requiredboolFalseWhether the field is required
descriptionstr | NoneNoneHuman-readable description
unitstr | NoneNoneUnit of measurement
constraintsdict{}Additional constraints

Schema Registry

from hermes.schemas import SchemaRegistry registry = SchemaRegistry() registry.register(schema) retrieved = registry.get("my_schema", version="1.0.0") schemas = registry.list_names()

Top-Level API

import hermes as hr result = hr.get_schema("economic.observation") result = hr.register_schema(my_schema) result = hr.compare_schema(schema_a, schema_b) result = hr.migrate(data, from_schema=old, to_schema=new)
Last updated on