Skip to content

Develop harvest for DCAT-US3.0 classes/objects (other than dataset) #6000

Closed
4 of 4 issues completed
Closed

Description

@jbrown-xentity

User Story

In order to harvest DCAT-US3.0 metadata, OMB wants all new types of metadata supported.

Acceptance Criteria

[ACs should be clearly demoable/verifiable whenever possible. Try specifying them using BDD.]

Background

Ideally #5999 is already complete. Validation of datasets is already setup.
This has been broken down into sub-tickets to apply the necessary harvest of the various metadata components into the right areas.

  • service (DataService class): similar to Dataset but somewhat unique, providing information about a data service.
  • series (DataSeries class): similar to Dataset but somewhat unique, providing information about a "collection" of datasets that are related in a series (possibly geographic, or time based such as annual releases, etc).
  • record (CatalogRecord class): list of records related to the catalog.
  • catalog (Catalog class): list of other catalogs embedded in this catalog. Yes it's weird. Don't expect it to be highly utilized, but it does exist.

Security Considerations (required)

None

Sketch

This parent ticket is only concerned with handling data ingestion, ie into the database. Future integration into OpenSearch for searching/filtering and data display will be completed later on an as-needed basis for each metadata class.
Each ticket will consider the following:

Activity

  1. moved this to 📟 Sprint Backlog in data.gov team boardon Jun 18, 2026
  2. moved this from 📟 Sprint Backlog (Top Priority) to Next Sprint Plan in data.gov team boardon Jul 8, 2026
  3. moved this from Next Sprint Plan to 📥 Queue (ready but not in sprint) in data.gov team boardon Jul 8, 2026
  4. rshewitt commented on Jul 28, 2026

    @rshewitt
    Contributor

    the minimum db change we should need in order to persist all of these objects should be as follows.

    • catalog_json would store the entire catalog JSON file fetched from the source (not to be confused with a catalog which can exist within that. more to be discussed on that later)
    • record_type indicates what type of dcatus "object" is being stored. until now, we've only ever done dataset. but with dcatus 3.0 we need to process 4 different ones. our harvest record table is a change log and has, fortunately, been designed in a way which accommodates these new "objects" but we need to label what type of "object" they are in anticipation of further processing (instead of guessing what they are)
    • ix_harvest_record_source_type_identifier_created_success index would need to be updated to accept record_type which means we need to update how we calculate latest_set_of_successful_records to handle record_type. why should a Dataset with the same identifier conflict with a DataService?
    # in harvest job
    dcatus_catalog = Column(JSONB)
    
    # in harvest record
    record_type = Column(
            Enum(
                "catalog_record",
                "dataset",
                "data_series",
                "data_service",
                name="type",
            ),
            index=True,
            nullable=False,
        )
    
    # in harvest record
    Index(
        "ix_harvest_record_source_type_identifier_created_success",
        harvest_source_id,
        record_type,
        identifier,
        date_created.desc(),
        postgresql_where=text("status = 'success'"),
        postgresql_include=["action"],
    )

    Notes

    • the storing of catalog in "dcatus_catalog" could occur at the end where all processed "objects" (e.g. dataset, data_series, catalog_record) are removed from it. basically, the stored catalog would be a shallow copy with all "objects" removed beforehand
  5. moved this from 📥 Queue (up next) to 📟 Sprint Backlog (Top Priority) in data.gov team boardon Jul 29, 2026
  6. jbrown-xentity commented on Aug 14, 2026

    @jbrown-xentity
    ContributorAuthor

    Before closing this want to re-run complete example in dev and verify working as expected.

  7. moved this from 📟 Sprint Backlog (Top Priority) to 🏗 In Progress in data.gov team boardon Aug 14, 2026
  8. SueValente commented on Aug 17, 2026

    @SueValente
    Contributor

    @jbrown-xentity are you verifying this or is @Aguiardavidm planning to do it?

  9. jbrown-xentity commented on Aug 17, 2026

    @jbrown-xentity
    ContributorAuthor

    @SueValente I got this one...

  10. jbrown-xentity commented on Aug 17, 2026

    @jbrown-xentity
    ContributorAuthor

    We have the following example... https://github.com/GSA/dcat-us/blob/835115bbd131959d91a8a4766031d9a08de974ca/jsonschema/examples/Catalog/good/complete_example.json
    I would expect there to be 6 harvest records total.
    See latest job on the dev harvest source. 5 updated, 1 added, total of 6. I believe this is complete.

  11. moved this from 🏗 In Progress to ✔ Done in data.gov team boardon Aug 17, 2026
  12. moved this from ✔ Done to 🗄 Closed in data.gov team boardon Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

DCAT-US3Tickets related to DCAT-US3 release and support.

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions