Thank you for your interest in contributing to OpenMetadata Standards! This document provides guidelines for contributing to this project.
We are committed to providing a welcoming and inclusive environment. Please be respectful and professional in all interactions.
If you find a bug, inconsistency, or have a suggestion:
- Check if the issue already exists in GitHub Issues
- If not, create a new issue with:
- Clear title and description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Schema version information
- Example data (if applicable)
For significant schema changes:
- Open a discussion first in GitHub Discussions or Slack
- Create a proposal outlining:
- Problem being solved
- Proposed solution
- Impact on existing schemas
- Backward compatibility considerations
- Migration path (if breaking change)
- Wait for feedback from maintainers and community
- Implement after consensus is reached
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes
- Test your changes (see Testing section below)
- Commit with clear messages: Follow conventional commits format
- Push to your fork
- Create a Pull Request with:
- Description of changes
- Related issue number
- Testing performed
- Documentation updates
-
Use $ref for reusability
{ "owner": { "$ref": "../../type/entityReference.json" } } -
Provide clear descriptions
{ "name": { "description": "Name of the entity as defined in the source system", "type": "string" } } -
Use examples
{ "name": { "type": "string", "examples": ["customers", "orders", "products"] } } -
Set appropriate constraints
{ "name": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[a-zA-Z0-9_.-]+$" } } -
Include version information
{ "$schema": "http://json-schema.org/draft-07/schema#", "version": "1.2.0" }
To maintain backward compatibility:
-
DO:
- Add new optional fields
- Extend enums with new values
- Relax constraints (e.g., remove minimum length)
- Add new schemas
-
DON'T:
- Remove required fields
- Make optional fields required
- Change field types
- Tighten constraints
- Remove enum values
If a breaking change is necessary:
- Document the change in CHANGELOG.md
- Increment major version
- Provide migration guide
- Deprecate old schema for 2 major versions before removal
-
Use standard vocabularies where possible (RDFS, OWL, PROV-O, DCAT)
-
Provide clear labels and comments
om:Table a rdfs:Class ; rdfs:label "Table" ; rdfs:comment "Represents a database table or view" ; rdfs:subClassOf om:DataAsset .
-
Define domains and ranges
om:owner a rdf:Property ; rdfs:domain om:Entity ; rdfs:range om:User ; rdfs:label "owner" .
-
Use persistent URIs
# Good <http://open-metadata.org/ontology#Table> # Avoid :Table
-
One shape per entity type
-
Include constraints for required properties
om:TableShape a sh:NodeShape ; sh:targetClass om:Table ; sh:property [ sh:path om:name ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; ] .
-
Validate data types and ranges
-
Provide clear error messages
sh:property [ sh:path om:email ; sh:pattern "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" ; sh:message "Email must be a valid email address" ; ] .
- Use clear, concise language
- Provide examples for complex concepts
- Include code samples in multiple languages
- Add diagrams where helpful
- Link to related documentation
- Getting Started: Introductory material
- Schemas: In-depth schema documentation
- RDF: Ontology and semantic web documentation
- Examples: Practical examples
- Developer Guide: Contributing and development
- Use ATX-style headers (
#) - Include table of contents for long pages
- Use code fences with language identifiers
- Add links to schemas and entities
- Use admonitions for important notes
Before submitting:
# Validate all JSON schemas
npm run validate:schemas
# Validate examples against schemas
npm run validate:examples# Validate RDF syntax
from rdflib import Graph
g = Graph()
g.parse('rdf/ontology/openmetadata.ttl', format='turtle')
# Validate SHACL shapes
from pyshacl import validate
conforms, results_graph, results_text = validate(
data_graph,
shacl_graph=shapes_graph
)
assert conforms, results_text# Build documentation
mkdocs build --strict
# Serve locally
mkdocs serveWe use Semantic Versioning:
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes
Use conventional commits format:
<type>(<scope>): <subject>
<body>
<footer>
Types:
feat: New featurefix: Bug fixdocs: Documentation changesrefactor: Code refactoringtest: Adding testschore: Maintenance tasks
Examples:
feat(schemas): add support for ML feature store
Add new schema for ML feature store entities including
feature groups, features, and feature values.
Closes #123
fix(rdf): correct domain for owner property
The owner property should have domain om:Entity instead
of om:Table to allow all entities to have owners.
- Update version in schemas
- Update CHANGELOG.md
- Create release branch
- Test thoroughly
- Create GitHub release
- Deploy documentation
- Announce in community channels
- Slack: Join #openmetadata-standards
- GitHub Discussions: Ask questions
- Documentation: Read the docs
Contributors will be recognized in:
- CONTRIBUTORS.md file
- Release notes
- Documentation acknowledgements
Thank you for contributing to OpenMetadata Standards!