worph is a public project at wordlift/worph, forked from morph-kgc. It keeps compatibility with retained morph_kgc imports while evolving the primary implementation under src/worph/.
- Overview
- Repository Layout
- Quick Start
- CLI Commands
- Testing
- Compatibility
- Documentation
- Release
- License
worph provides RML/YARRRML materialization flows with compatibility for existing morph_kgc consumers. The codebase includes regression suites and compatibility shims used in CI to validate behavior against retained tests.
src/worph/: primary package implementation.ci_shims/morph_kgc/: compatibility shim re-exporting fromworphtest/: regression and issue-driven test suitesexamples/: runnable configs and sample scriptsspecs/: compatibility, playbook, and agent-guidance documentsspecs/agents/: specialist subagent briefs used during planning/reviewdocs/: operational documentation
uv sync --extra test
uv run python -m worph examples/csv/config.iniRun using the package entrypoint:
uv run worph examples/json/config.iniEquivalent module form:
uv run python -m worph examples/xml/config.iniRun full CI-aligned tests with shim compatibility enabled:
PYTHONPATH=.ci_shims:src uv run pytest -qRun the explicit shim validation test:
PYTHONPATH=.ci_shims:src uv run pytest -q test/test_ci_shim_uses_worph.pySome retained tests still import morph_kgc. CI sets PYTHONPATH=.ci_shims:src so imports resolve to .ci_shims/morph_kgc first, then delegate to worph.
XPath note (breaking change):
worphno longer auto-rewrites non-standard XPath shorthand attribute syntax.- Mappings must use standard XPath syntax (for example
foo/@bar, notfoo@bar). - Migration examples:
country@name->country/@nameneighbor@name->neighbor/@name
Publishing to PyPI is handled inside .github/workflows/ci.yml.
- Trigger: push a version tag like
0.1.11orv0.1.11 - Gate:
publishjob runs only aftertest-and-examplessucceeds - Auth: PyPI Trusted Publisher (OIDC)
Trusted Publisher settings on pypi.org:
- Owner:
wordlift - Repository:
worph - Workflow name:
ci.yml - Environment: empty (unless you add one in GitHub)
All code and documentation in this repository are licensed under the Apache License 2.0.
