Data Catalog
MicrosoftOfficialPublished by Microsoft
- Skill
- Content generator
- Data and AI
- CC-BY-4.0
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The data-catalog skill provides a standardized procedure for inventorying business entities and their relationships. It utilizes the DS_CATALOG_V1 Markdown contract to ensure that data catalogs are both human-readable and machine-validatable. The workflow emphasizes data integrity by requiring stable identifiers, explicit confidence levels for relationships, and clear separation between semantic facts and narrative descriptions. It is designed to support data science and engineering engagements by providing a reliable, versioned record of data assets, lineage, and privacy classifications without embedding sensitive credentials or duplicating profile data.
What it does
- Defines a structured Markdown and YAML format for data catalogs.
- Requires stable, unique identifiers for all entities and relationships.
- Enforces explicit confidence levels (confirmed, inferred, assumed) for all semantic links.
- Validates catalog structure against a predefined JSON schema.
- Separates metadata and facts from narrative documentation.
- Provides a mechanism for tracking privacy standards and lineage.
When to use it
- When you need to inventory engagement data for a data science or engineering project.
- When recording semantic relationships between business entities for ERD rendering.
- When preparing a durable, versioned data catalog that must be machine-readable.
- When you need to document privacy classifications and lineage in a standardized way.
Advantages
- Ensures consistency across different data catalogs using a strict contract.
- Prevents the accidental leakage of credentials by prohibiting embedded secrets.
- Maintains high data quality by requiring explicit evidence for relationships.
- Supports automated validation to catch errors before review.
- Provides a clear, audit-ready history of data relationships.
Usage examples
- “Create a new data catalog for the customer engagement project.”
- The agent initializes a new Markdown file using the DS_CATALOG_V1 template and guides the user through inventorying entities and defining their relationships.
- “Validate the current data catalog file.”
- The agent executes the validation script to ensure the YAML frontmatter adheres to the DS_CATALOG_V1 schema and reports any structural issues.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/microsoft/data-catalog/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip data-catalog.zip -d .agents/skills
Documentation by Microsoft
Data Catalog Workflow
Goal
Produce a customer-readable Markdown catalog whose YAML frontmatter is a valid DS_CATALOG_V1 machine contract. Preserve uncertainty explicitly so inferred or assumed relationships never appear confirmed.
Flow
Confirm the engagement name and the caller-approved durable output path.
Inventory entities at business grain. Record source access, tier, volume, profile pointer, classification, lineage, and open questions without copying column-level profile data.
Assign every relationship a stable
rel-*identifier. Record endpoints, maximum cardinality, both endpoint minimums, one or more paired join-key fields, confidence, and evidence basis.Reconcile coverage counts with the entity and relationship records.
Render the human-readable sections from the YAML facts, ending with the canonical Data Science and Engineering Coaching disclaimer footer. Narrative can explain facts but cannot redefine them.
Validate the artifact with
scripts/validate_catalog.pybefore treating it as ready for review.
Inputs
Engagement context and a caller-approved output path
Data source inventory and access status
Business entity names, grain, and declared relationships
Existing per-dataset profile paths, when available
Privacy classifications or standards citations produced by the owning privacy workflow
Success criteria
The frontmatter declares exactly
catalog_version: DS_CATALOG_V1and validates againstassets/ds-catalog-v1.schema.json.Entity IDs and relationship IDs are unique and stable. Every endpoint and lineage reference resolves.
Every relationship declares
cardinalityas its maximum multiplicity plusfrom_minimumandto_minimumaszeroorone.Join keys use one string on both sides or paired arrays of equal length, and record field names only without primary-key, foreign-key, or uniqueness roles.
Relationship confidence is one of
confirmed,inferred, orassumed, and every relationship records its basis.Classification uses the
privacy-standardscitation-field names. The catalog does not invent standards identifiers.Column statistics and feature metadata remain behind
profile_refrather than being copied into the catalog.Every customer-facing catalog ends with the canonical Data Science and Engineering Coaching disclaimer footer.
Constraints
Treat catalog enrichment as user-driven. Offer enrichment when a source is missing, but do not change the catalog silently.
Record source locations as paths or connection references, never embedded credentials.
Keep DCAT alignment non-binding. The catalog is native YAML, not RDF, and makes no DCAT conformance claim.
Keep tier recording separate from tier behavior.
data-catalogrecords the tier;dataopsowns what that tier means.Keep rendering separate from semantic authority. Diagram tools consume declared relationships and do not infer new ones.
End every customer-facing catalog with the canonical Data Science and Engineering Coaching disclaimer from the
disclaimer-languageskill.
Stop rules
Stop and request clarification when an entity grain, relationship endpoint, join-key pairing, or endpoint minimum is ambiguous.
Stop and retain
inferredorassumedconfidence when evidence does not supportconfirmed.Stop before a durable write when the caller has not confirmed the destination.
Stop and route privacy interpretation to
privacy-standardsor the Privacy Planner when citation values or DPIA status are unknown.
Package resources
| Resource | Use |
|---|---|
| catalog-contract.md | Read for the authoritative field, identity, multiplicity, and body-generation rules |
| dcat-crosswalk.md | Read when planning a DCAT, DCAT-AP, or catalog-platform export |
| provenance.md | Read for standards selection, licensing, and non-conformance boundaries |
| ds-catalog-v1.md | Copy when starting a new catalog |
| northwind-catalog.md | Read as a complete valid example with scalar and composite join keys |
assets/ds-catalog-v1.schema.json | Use as the structural JSON Schema for parsed frontmatter |
scripts/validate_catalog.py | Execute with uv run python scripts/validate_catalog.py <catalog.md> to validate a catalog |
Attribution
The native contract, workflow, schema, template, examples, and validator are repository-original content licensed CC BY 4.0.
The crosswalk paraphrases selected concepts from W3C DCAT 3, W3C PROV-O, and Frictionless Table Schema v2. Standard names and term identifiers are factual citations, the crosswalk prose and the paired-array join-key contract are independently authored, and no upstream schema, example, table, or substantial excerpt is reproduced. Because no upstream expression is redistributed, the package remains solely CC BY 4.0. See provenance.md.
Files
- ATTRIBUTION.mdAdded by AutoGineer975 B
- LICENSEAdded by AutoGineer16.6 KiB
- SKILL.md6.1 KiB
- assets/ds-catalog-v1.schema.json5.9 KiB
- examples/northwind-catalog.md8.4 KiB
- pyproject.toml698 B
- references/catalog-contract.md11.1 KiB
- references/dcat-crosswalk.md5.4 KiB
- references/provenance.md3.1 KiB
- scripts/validate_catalog.pyScript15.0 KiB
- templates/ds-catalog-v1.md5.3 KiB
- tests/corpus/0_valid_frontmatter90 B
- tests/corpus/1_empty_frontmatter8 B
- tests/corpus/2_unclosed_sequence20 B
- tests/corpus/3_duplicate_key24 B
- tests/corpus/4_no_frontmatter15 B
- tests/corpus/README.md1.2 KiB
- tests/fuzz_harness.pyScript1.2 KiB
- tests/test_validate_catalog.pyScript24.0 KiB
- uv.lock107.7 KiB
references/catalog-contract.md
title: DS_CATALOG_V1 contract description: Authoritative field, identity, compatibility, and narrative rules for the native data catalog contract
Contract identity
DS_CATALOG_V1 is a project-owned YAML-frontmatter contract embedded in a durable Markdown catalog. It is a discovery record, not a publication format or a producer-consumer data contract. It can record incomplete access and uncertain relationships honestly.
The parsed frontmatter is authoritative for machine facts. Narrative sections explain those facts and provide customer context; they do not redefine IDs, endpoints, cardinality, confidence, classifications, or coverage.
Compatibility policy
DS_CATALOG_V1 is the initial schema identity. It is a complete first definition, not a compatibility boundary carried over from an earlier release, so no migration path or legacy acceptance mode exists.
Consumers accept a catalog only when catalog_version is exactly DS_CATALOG_V1. Additive optional fields are compatible. Removing a required field, changing an enum, or changing a field's meaning requires a new contract version.
Unknown fields are rejected so misspellings do not silently become machine facts. Consumers preserve the source artifact and report unsupported versions rather than guessing.
Entity records
Every entity has a stable kebab-case id and a customer-readable name. The ID survives display-name, source-location, profile, and tier changes. Never reuse an ID for another concept.
Required entity concerns are:
Description and grain
Source system, location reference, format, and access confirmation
Recorded tier
Volume estimate, covered period, and update frequency
Optional pointer to a dated per-dataset profile
Classification, standards citations, and optional DPIA reference
Lineage pointers and transformation reference
Open questions
A missing profile_ref is valid. A stale pointer becomes an open question and is not replaced with copied profile content.
Source locations must not embed URI user information or nonempty credential parameters. The validator parses query and semicolon-delimited connection parameters, percent-decodes keys once, and compares case-insensitive names after removing hyphens and underscores. It recognizes generic credential names and AWS and Google signing parameters. Empty credential values contain no embedded secret; credential-like text inside an unrelated parameter value is not treated as a parameter key.
Privacy vocabulary
The classification object uses all five citation-field names published by privacy-standards:
gdpr_articleccpa_sectionnist_pf_categorynistir8062_objectiveowasp_privacy_id
Values are standards references supplied by the owning privacy workflow, or null when no mapping exists. The local operational fields sensitivity, contains_personal_data, data_categories, and dpia_ref support engagement routing; they are not presented as a standard taxonomy.
Relationship identity and join keys
Every relationship has a stable ID matching rel-[a-z0-9-]+. Assign the ID once and retain it when confidence, basis, or key details change. Retire an obsolete relationship by removing it only when retained repository history is sufficient for the engagement's audit needs; never reuse its ID.
from and to resolve entity IDs. cardinality is declared, never inferred by a renderer. confidence states evidence quality:
confirmed: verified by an authoritative source or domain ownerinferred: supported by technical evidence but not yet confirmedassumed: proposed from workshop or design context without technical confirmation
join_keys.from_field and join_keys.to_field each accept either one string or an array. Both sides use the same representation and arrays have equal nonzero length. Array position defines each composite-key pair.
Join keys record the declared field names used to relate two entities. They do not declare primary keys, foreign keys, uniqueness, or any other database constraint role, so consumers render them role-neutrally.
Endpoint multiplicity
cardinality records maximum multiplicity only. from_minimum and to_minimum are required and record the minimum multiplicity of each endpoint using zero or one.
Each endpoint value describes that endpoint's own side of the relationship, matching entity-relationship convention: from_minimum is the minimum number of from entities related to one to entity, and to_minimum is the minimum number of to entities related to one from entity. zero makes that side optional; one makes it mandatory.
The maximum on each side is derived from cardinality:
cardinality | from maximum | to maximum |
|---|---|---|
one-to-one | one | one |
one-to-many | one | many |
many-to-many | many | many |
A renderer combines each endpoint's declared minimum with its derived maximum and never infers optionality. Omitting either field, supplying only one side, or supplying a value outside zero|one is invalid.
Coverage reconciliation
Coverage counts are derived from records:
entities_cataloguedequals the entity count.entities_access_confirmedcounts entities with confirmed access.entities_classifiedcounts entities whosesensitivityis notnoneor whose privacy citation fields contain at least one non-null value.relationships_confirmedandrelationships_inferredcount their matching confidence values. Assumed relationships remain visible but have no separate legacy coverage counter in V1.
The validator rejects mismatched counts.
Human-readable body
After the frontmatter, retain these sections:
Overview and engagement context
Entity summary
Entity relationship diagram or a pointer to it, always accompanied by its text equivalent
Per-entity detail
Coverage summary
Open questions and access gaps
Data Science and Engineering Coaching disclaimer footer
Diagram text equivalent
A rendered diagram is never the only representation of the declared relationships. Every catalog that carries a diagram, or a pointer to one, also carries a relationship table conveying the same facts in text.
The table records one row per declared relationship, with the endpoints, the cardinality, the endpoint minimums, the join keys, and the confidence. Parity runs both ways: every relationship shown in the diagram appears as a row, and every row appears in the diagram.
This keeps the catalog readable when the diagram cannot be seen or rendered, and it keeps the declared model available to readers who consume the document as text.
Attached dataset profiles
A catalog entity describes what something is and how it relates to other things. A dataset profile describes one dataset's columns and their observed shape. The profile is an attachment reachable from the entity through profile_ref, not a competing record. Keep column-level detail in the profile and keep identity, relationships, and lineage in the catalog.
Semantic roles
A column's semantic role is what it does analytically, which is distinct from its storage type. Use exactly these values so downstream consumers can rely on them:
| Role | Meaning |
|---|---|
id | Identifies a record or references another entity |
time | Carries an event or observation timestamp |
metric | A measured quantity suitable for aggregation |
category | A bounded set of discrete values |
text | Free-form text not intended as a category |
boolean | A two-state flag |
derived | Computed from other columns rather than sourced |
unknown | Role not yet established |
A column's role is a claim about meaning, so an unresolved role stays unknown rather than being guessed from its type.
Profile record shape
A profile carries the dataset identity, when it was generated, its source, the sample size the observations rest on, and a record per column:
| Field | Meaning |
|---|---|
name | Column name as it appears in the source |
inferred_type | Storage or parsed type |
semantic_role | One of the roles above |
non_null_count, missing_pct, distinct_count | Completeness and cardinality observations |
example_values | A small illustrative sample, capped at roughly five values |
stats | Type-appropriate summary: range and central tendency for numeric, top values for categorical, span for temporal |
quality_notes | Observed issues and the assumptions made about them |
Alongside the columns, a profile records candidate keys, the primary time column when one exists, columns grouped by role, candidate targets when relevant, and quality flags.
Sample-derived values are provisional
Every observation computed from a sample is provisional and must be labelled as such. A uniqueness observation over a sample suggests a candidate key; it does not establish one. Promote a candidate to a declared key only through the relationship and identity rules above, which require confirmation rather than observation.
Cap illustrative values deliberately. A profile is metadata about a dataset, and a profile carrying enough example rows to reconstruct sensitive content has become a copy of the data rather than a description of it. Apply the same sensitivity classification to a profile that applies to its entity.
Declared objectives
When the engagement has stated analytical intent, record it beside the profile: the objective type, the business questions behind it, the metrics that matter, and what success would look like. Declared intent is what lets a later analysis prioritize; without it, every column looks equally important.
The footer is the canonical Data Science and Engineering Coaching disclaimer published by the disclaimer-language skill. Reproduce it verbatim as the last section of every customer-facing catalog, including the template and the complete example.
Generate tables and diagrams from frontmatter. When narrative and machine facts disagree, correct the narrative or update frontmatter through an explicit enrichment decision.
Requirements and compatibility
Written for: GitHub Copilot, Claude Code
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Claude Code frontmatter, Needs Python
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/hve-core · .github/skills/data-science-engineering/data-catalog · commit f425e94
- Licence
- Creative Commons Attribution 4.0 International (redistribution allowed)
- LICENSE (written by AutoGineer)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Microsoft or Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download data-catalog.zip