OGC Record reference

OGC API — Records Part 1: Core 1.0 defines discovery metadata and catalog access. A record describes a resource; the JSON encoding is a GeoJSON Feature. OGCRecord implements an in-memory adapter for that document shape, reusing PySTAC facilities. It does not implement service endpoints or search.

Document structure

The adapter's schema reference is recordGeoJSON.yaml.

Member Adapter behavior
id String or integer, excluding booleans. record_id preserves an input integer; PySTAC id is a string. Changing id to a different value changes the serialized identifier.
type Serialized as Feature; record.type instead accesses the resource type under properties.
geometry, bbox Copied on construction; geometry may be None. No geometric validation is performed.
properties Metadata dictionary. Incoming null remains null when empty; adding metadata produces an object.
links PySTAC links; include_self_link=False omits self links on serialization.
time Optional top-level OGC temporal object, separate from STAC datetime properties.
conformsTo conforms_to exposes a live list of conformance URIs, separate from STAC extension declarations.
linkTemplates link_templates exposes a live list of template dictionaries.
Foreign members Preserved in extra_fields; managed field collisions in constructor extras raise ValueError. Assets, collection ID, and STAC extension declarations are serialized when present.

to_dict() and to_record_dict() return copied document metadata. New records do not automatically gain stac_version; a supplied foreign member is preserved. Merely creating or reading a record does not establish OGC conformance.

Reading absent conforms_to or link_templates creates an empty list in extra_fields. These getters reject a value of the wrong container/element type with TypeError. They do not validate URI syntax or template contents. time=None writes a JSON null; remove the time key from extra_fields to omit it entirely.

Common metadata accessors

Both the record and record.record_metadata expose these live properties:

Python name JSON property Value
created, updated Same name Timestamp string, with no automatic datetime conversion.
type, title, description Same name Resource classification and descriptive strings.
keywords keywords List of strings.
themes themes Theme dictionaries with scheme and concepts.
language, languages Same name Language dictionary, or list of dictionaries.
resource_languages resourceLanguages Resource language dictionaries.
external_ids externalIds External identifier dictionaries.
formats formats Format dictionaries.
contacts contacts Contact dictionaries.
license, rights Same name License and rights strings.

Absent accessors return None; setting None deletes a property. Nested dictionaries remain open and are not schema-validated by the accessors. The existing nested typing helpers are static hints, not runtime validators or generated schema models.

Compatibility and validation

matches_object_type() recognizes a Feature with an identifier, geometry key, and object-or-null properties. It is a structural check and also matches some STAC Items. Use OGCRecord.from_dict() explicitly.

validate() requires a supplied validator with validate(document), configured for the OGC OpenAPI 3.0 schemas and references. The adapter delegates validation and propagates errors; it returns its schema URI after success. It does not supply a validator or verify service-level conformance. A generic JSON Schema validator must account for OpenAPI schema semantics, including nullable.

to_stac_item() requires an explicit STAC temporal extent and returns a separate Item. Links and assets are cloned. Validate that Item separately for STAC compliance. Some inherited PySTAC methods assume STAC temporal metadata; test the methods your application uses on timeless records.

See the workflow/experiment guide for OSC usage and the OGC Records overview for the wider standard.