diff --git a/.cruft.json b/.cruft.json new file mode 100644 index 0000000..19f3e80 --- /dev/null +++ b/.cruft.json @@ -0,0 +1,27 @@ +{ + "template": "https://github.com/linkml/linkml-project-cookiecutter", + "commit": "07462f015a240ff3a68f52e25df027b33b364b1b", + "checkout": null, + "context": { + "cookiecutter": { + "project_name": "ansrs-schema", + "__project_slug": "ansrs_schema", + "github_org": "my-org", + "__source_path": "src/ansrs_schema/schema/ansrs_schema.yaml", + "project_description": "Schema for ANSRS", + "full_name": "Lydia Ng", + "email": "LydiaN@alleninstitute.org", + "__author": "Lydia Ng ", + "license": "MIT", + "main_schema_class": "Person", + "create_python_classes": "No", + "use_schemasheets": "No", + "google_sheet_id": "1wVoaiFg47aT9YWNeRfTZ8tYHN8s8PAuDx5i2HUcDpvQ", + "google_sheet_tabs": "personinfo enums", + "__google_sheet_module": "personinfo_enums", + "github_token_for_pypi_deployment": "PYPI_PASSWORD", + "_template": "https://github.com/linkml/linkml-project-cookiecutter" + } + }, + "directory": null +} diff --git a/.env.public b/.env.public new file mode 100644 index 0000000..6e65d1b --- /dev/null +++ b/.env.public @@ -0,0 +1,27 @@ +# This file is public in git. No sensitive info allowed. + +###### schema definition variables, used by makefile + +LINKML_SCHEMA_NAME="ansrs_schema" +LINKML_SCHEMA_AUTHOR="Lydia Ng " +LINKML_SCHEMA_DESCRIPTION="Schema for ANSRS" +LINKML_SCHEMA_SOURCE_PATH="src/ansrs_schema/schema/ansrs_schema.yaml" +LINKML_SCHEMA_GOOGLE_SHEET_ID="1wVoaiFg47aT9YWNeRfTZ8tYHN8s8PAuDx5i2HUcDpvQ" +LINKML_SCHEMA_GOOGLE_SHEET_TABS="personinfo enums" + +###### linkml generator variables, used by makefile + +## gen-project configuration file +LINKML_GENERATORS_CONFIG_YAML= --config-file config.yaml + +## pass args if gendoc ignores config.yaml (i.e. --no-mergeimports) +LINKML_GENERATORS_DOC_ARGS= + +## pass args to workaround genowl rdfs config bug (linkml#1453) +## (i.e. --no-type-objects --no-metaclasses --metadata-profile rdfs) +LINKML_GENERATORS_OWL_ARGS= + +## pass args to trigger experimental java/typescript generation +LINKML_GENERATORS_JAVA_ARGS= +LINKML_GENERATORS_TYPESCRIPT_ARGS= + diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml new file mode 100644 index 0000000..ee9e990 --- /dev/null +++ b/.github/workflows/deploy-docs.yaml @@ -0,0 +1,40 @@ +--- +name: Auto-deployment of ansrs_schema Documentation +on: + push: + branches: [main] + +jobs: + build-docs: + runs-on: ubuntu-latest + + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + contents: write # to let mkdocs write the new docs + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 # otherwise, you will failed to push refs to dest repo + + - name: Set up Python. + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install Poetry. + run: pipx install poetry + + - name: Install dependencies. + run: poetry install -E docs + + - name: Build documentation. + run: | + mkdir -p docs + touch docs/.nojekyll + make gendoc + ([ ! -f docs/about.md ] && cp src/docs/about.md docs/) || true + make mkd-gh-deploy diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..0be1947 --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,36 @@ +# Built from: +# https://docs.github.com/en/actions/guides/building-and-testing-python +--- +name: Build and test ansrs_schema + +on: [pull_request] + +jobs: + test: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10"] + + steps: + + - name: Check out repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry + run: pipx install poetry + + - name: Install dependencies + run: poetry install --no-interaction --no-root + + - name: Install project + run: poetry install --no-interaction + + - name: Run test suite + run: make test diff --git a/.github/workflows/pypi-publish.yaml b/.github/workflows/pypi-publish.yaml new file mode 100644 index 0000000..22d5a69 --- /dev/null +++ b/.github/workflows/pypi-publish.yaml @@ -0,0 +1,36 @@ +--- +name: Publish Python Package + +on: + release: + types: [created] + +jobs: + build-n-publish: + name: Build and publish Python 🐍 distributions 📦 to PyPI + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install Poetry + run: | + pipx install poetry + poetry self add "poetry-dynamic-versioning[plugin]" + + # - name: Install dependencies + # run: poetry install --no-interaction + + - name: Build source and wheel archives + run: poetry build + + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@v1.2.2 + with: + user: __token__ + password: ${{ secrets.PYPI_PASSWORD }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e110be5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,133 @@ +/docs/ +/project/docs/ +/tmp/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..2b301c6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, +body size, disability, ethnicity, gender identity and expression, level of +experience, nationality, personal appearance, race, religion, or sexual +identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an +appointed representative at an online or offline event. Representation of a +project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by [contacting the project team](contact.md). All complaints will be +reviewed and investigated and will result in a response that is deemed +necessary and appropriate to the circumstances. The project team is obligated +to maintain confidentiality with regard to the reporter of an incident. Further +details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This code of conduct has been derived from the excellent code of conduct of the +[ATOM project](https://github.com/atom/atom/blob/master/CODE_OF_CONDUCT.md) +which in turn is adapted from the [Contributor Covenant][homepage], version +1.4, available at [https://contributor-covenant.org/version/1/4][version] + +[homepage]: https://contributor-covenant.org +[version]: https://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..dace06c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,121 @@ +# Contributing to ansrs-schema + +:+1: First of all: Thank you for taking the time to contribute! + +The following is a set of guidelines for contributing to +ansrs-schema. These guidelines are not strict rules. +Use your best judgment, and feel free to propose changes to this document +in a pull request. + +## Table Of Contents + +* [Code of Conduct](#code-of-conduct) +* [Guidelines for Contributions and Requests](#contributions) + * [Reporting issues and making requests](#reporting-issues) + * [Questions and Discussion](#questions-and-discussion) + * [Adding new elements yourself](#adding-elements) +* [Best Practices](#best-practices) + * [How to write a great issue](#great-issues) + * [How to create a great pull/merge request](#great-pulls) + + + +## Code of Conduct + +The ansrs-schema team strives to create a +welcoming environment for editors, users and other contributors. +Please carefully read our [Code of Conduct](CODE_OF_CONDUCT.md). + + + +## Guidelines for Contributions and Requests + + + +### Reporting problems and suggesting changes to with the data model + +Please use our [Issue Tracker][issues] for any of the following: + +- Reporting problems +- Requesting new schema elements + + + +### Questions and Discussions + +Please use our [Discussions forum][discussions] to ask general questions or contribute to discussions. + + + +### Adding new elements yourself + +Please submit a [Pull Request][pulls] to submit a new term for consideration. + + + +## Best Practices + + + +### GitHub Best Practice + +- Creating and curating issues + - Read ["About Issues"][[about-issues]] + - Issues should be focused and actionable + - Complex issues should be broken down into simpler issues where possible +- Pull Requests + - Read ["About Pull Requests"][about-pulls] + - Read [GitHub Pull Requests: 10 Tips to Know](https://blog.mergify.com/github-pull-requests-10-tips-to-know/) + - Pull Requests (PRs) should be atomic and aim to close a single issue + - Long running PRs should be avoided where possible + - PRs should reference issues following standard conventions (e.g. “fixes #123”) + - Schema developers should always be working on a single issue at any one time + - Never work on the main branch, always work on an issue/feature branch + - Core developers can work on branches off origin rather than forks + - Always create a PR on a branch to maximize transparency of what you are doing + - PRs should be reviewed and merged in a timely fashion by the ansrs-schema technical leads + - PRs that do not pass GitHub actions should never be merged + - In the case of git conflicts, the contributor should try and resolve the conflict + - If a PR fails a GitHub action check, the contributor should try and resolve the issue in a timely fashion + +### Understanding LinkML + +Core developers should read the material on the [LinkML site](https://linkml.io/linkml), in particular: + +- [Overview](https://linkml.io/linkml/intro/overview.html) +- [Tutorial](https://linkml.io/linkml/intro/tutorial.html) +- [Schemas](https://linkml.io/linkml/schemas/index.html) +- [FAQ](https://linkml.io/linkml/faq/index.html) + +### Modeling Best Practice + +- Follow Naming conventions + - Standard LinkML naming conventions should be followed (UpperCamelCase for classes and enums, snake_case for slots) + - Know how to use the LinkML linter to check style and conventions + - The names for classes should be nouns or noun-phrases: Person, GenomeAnnotation, Address, Sample + - Spell out abbreviations and short forms, except where this goes against convention (e.g. do not spell out DNA) + - Elements that are imported from outside (e.g. schema.org) need not follow the same naming conventions + - Multivalued slots should be named as plurals +- Document model elements + - All model elements should have documentation (descriptions) and other textual annotations (e.g. comments, notes) + - Textual annotations on classes, slots and enumerations should be written with minimal jargon, clear grammar and no misspellings +- Include examples and counter-examples (intentionally invalid examples) + - Rationale: these serve as documentation and unit tests + - These will be used by the automated test suite + - All elements of the nmdc-schema must be illustrated with valid and invalid data examples in src/data. New schema elements will not be merged into the main branch until examples are provided + - Invalid example data files should be invalid for one single reason, which should be reflected in the filename. It should be possible to render the invalid example files valid by addressing that single fault. +- Use enums for categorical values + - Rationale: Open-ended string ranges encourage multiple values to represent the same entity, like “water”, “H2O” and “HOH” + - Any slot whose values could be constrained to a finite set should use an Enum + - Non-categorical values, e.g. descriptive fields like `name` or `description` fall outside of this. +- Reuse + - Existing scheme elements should be reused where appropriate, rather than making duplicative elements + - More specific classes can be created by refinining classes using inheritance (`is_a`) + +[about-branches]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches +[about-issues]: https://docs.github.com/en/issues/tracking-your-work-with-issues/about-issues +[about-pulls]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests +[issues]: https://github.com/my-org/ansrs-schema/issues/ +[pulls]: https://github.com/my-org/ansrs-schema/pulls/ + +We recommend also reading [GitHub Pull Requests: 10 Tips to Know](https://blog.mergify.com/github-pull-requests-10-tips-to-know/) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a398611 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2024 Lydia Ng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..629fcb2 --- /dev/null +++ b/Makefile @@ -0,0 +1,223 @@ +MAKEFLAGS += --warn-undefined-variables +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c +.DEFAULT_GOAL := help +.DELETE_ON_ERROR: +.SUFFIXES: +.SECONDARY: + +# environment variables +.EXPORT_ALL_VARIABLES: +ifdef LINKML_ENVIRONMENT_FILENAME +include ${LINKML_ENVIRONMENT_FILENAME} +else +include .env.public +endif + +RUN = poetry run +SCHEMA_NAME = $(LINKML_SCHEMA_NAME) +SOURCE_SCHEMA_PATH = $(LINKML_SCHEMA_SOURCE_PATH) +SOURCE_SCHEMA_DIR = $(dir $(SOURCE_SCHEMA_PATH)) +SRC = src +DEST = project +PYMODEL = $(SRC)/$(SCHEMA_NAME)/datamodel +DOCDIR = docs +EXAMPLEDIR = examples +SHEET_MODULE = personinfo_enums +SHEET_ID = $(LINKML_SCHEMA_GOOGLE_SHEET_ID) +SHEET_TABS = $(LINKML_SCHEMA_GOOGLE_SHEET_TABS) +SHEET_MODULE_PATH = $(SOURCE_SCHEMA_DIR)/$(SHEET_MODULE).yaml + +CONFIG_YAML = +ifdef LINKML_GENERATORS_CONFIG_YAML +CONFIG_YAML = ${LINKML_GENERATORS_CONFIG_YAML} +endif + +GEN_DOC_ARGS = +ifdef LINKML_GENERATORS_DOC_ARGS +GEN_DOC_ARGS = ${LINKML_GENERATORS_DOC_ARGS} +endif + +GEN_OWL_ARGS = +ifdef LINKML_GENERATORS_OWL_ARGS +GEN_OWL_ARGS = ${LINKML_GENERATORS_OWL_ARGS} +endif + +GEN_JAVA_ARGS = +ifdef LINKML_GENERATORS_JAVA_ARGS +GEN_JAVA_ARGS = ${LINKML_GENERATORS_JAVA_ARGS} +endif + +GEN_TS_ARGS = +ifdef LINKML_GENERATORS_TYPESCRIPT_ARGS +GEN_TS_ARGS = ${LINKML_GENERATORS_TYPESCRIPT_ARGS} +endif + + +# basename of a YAML file in model/ +.PHONY: all clean setup gen-project gen-examples gendoc git-init-add git-init git-add git-commit git-status + +# note: "help" MUST be the first target in the file, +# when the user types "make" they should get help info +help: status + @echo "" + @echo "make setup -- initial setup (run this first)" + @echo "make site -- makes site locally" + @echo "make install -- install dependencies" + @echo "make test -- runs tests" + @echo "make lint -- perform linting" + @echo "make testdoc -- builds docs and runs local test server" + @echo "make deploy -- deploys site" + @echo "make update -- updates linkml version" + @echo "make help -- show this help" + @echo "" + +status: check-config + @echo "Project: $(SCHEMA_NAME)" + @echo "Source: $(SOURCE_SCHEMA_PATH)" + +# generate products and add everything to github +setup: check-config git-init install gen-project gen-examples gendoc git-add git-commit + +# install any dependencies required for building +install: + poetry install +.PHONY: install + +# --- +# Project Synchronization +# --- +# +# check we are up to date +check: cruft-check +cruft-check: + cruft check +cruft-diff: + cruft diff + +update: update-template update-linkml +update-template: + cruft update + +# todo: consider pinning to template +update-linkml: + poetry add -D linkml@latest + +# EXPERIMENTAL +create-data-harmonizer: + npm init data-harmonizer $(SOURCE_SCHEMA_PATH) + +all: site +site: gen-project gendoc +%.yaml: gen-project +deploy: all mkd-gh-deploy + +compile-sheets: + $(RUN) sheets2linkml --gsheet-id $(SHEET_ID) $(SHEET_TABS) > $(SHEET_MODULE_PATH).tmp && mv $(SHEET_MODULE_PATH).tmp $(SHEET_MODULE_PATH) + +# In future this will be done by conversion +gen-examples: + cp src/data/examples/* $(EXAMPLEDIR) + +# generates all project files + +gen-project: $(PYMODEL) + $(RUN) gen-project ${CONFIG_YAML} -d $(DEST) $(SOURCE_SCHEMA_PATH) && mv $(DEST)/*.py $(PYMODEL) + + +# non-empty arg triggers owl (workaround https://github.com/linkml/linkml/issues/1453) +ifneq ($(strip ${GEN_OWL_ARGS}),) + $(RUN) gen-owl ${GEN_OWL_ARGS} -o ${DEST}/owl/${SCHEMA_NAME}.owl.ttl $(SOURCE_SCHEMA_PATH) +endif +# non-empty arg triggers java +ifneq ($(strip ${GEN_JAVA_ARGS}),) + $(RUN) gen-java ${GEN_JAVA_ARGS} --output-directory ${DEST}/java/ $(SOURCE_SCHEMA_PATH) +endif +# non-empty arg triggers typescript +ifneq ($(strip ${GEN_TS_ARGS}),) + $(RUN) gen-typescript ${GEN_TS_ARGS} $(SOURCE_SCHEMA_PATH) >${DEST}/typescript/${SCHEMA_NAME}.ts +endif + +test: test-schema test-python test-examples + +test-schema: + $(RUN) gen-project ${CONFIG_YAML} -d tmp $(SOURCE_SCHEMA_PATH) + +test-python: + $(RUN) python -m unittest discover + +lint: + $(RUN) linkml-lint $(SOURCE_SCHEMA_PATH) + +check-config: +ifndef LINKML_SCHEMA_NAME + $(error **Project not configured**:\n\n - See '.env.public'\n\n) +else + $(info Ok) +endif + +convert-examples-to-%: + $(patsubst %, $(RUN) linkml-convert % -s $(SOURCE_SCHEMA_PATH) -C Person, $(shell ${SHELL} find src/data/examples -name "*.yaml")) + +examples/%.yaml: src/data/examples/%.yaml + $(RUN) linkml-convert -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ +examples/%.json: src/data/examples/%.yaml + $(RUN) linkml-convert -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ +examples/%.ttl: src/data/examples/%.yaml + $(RUN) linkml-convert -P EXAMPLE=http://example.org/ -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ + +test-examples: examples/output + +examples/output: src/ansrs_schema/schema/ansrs_schema.yaml + mkdir -p $@ + $(RUN) linkml-run-examples \ + --output-formats json \ + --output-formats yaml \ + --counter-example-input-directory src/data/examples/invalid \ + --input-directory src/data/examples/valid \ + --output-directory $@ \ + --schema $< > $@/README.md + +# Test documentation locally +serve: mkd-serve + +# Python datamodel +$(PYMODEL): + mkdir -p $@ + + +$(DOCDIR): + mkdir -p $@ + +gendoc: $(DOCDIR) + cp -rf $(SRC)/docs/* $(DOCDIR) ; \ + $(RUN) gen-doc ${GEN_DOC_ARGS} -d $(DOCDIR) $(SOURCE_SCHEMA_PATH) + +testdoc: gendoc serve + +MKDOCS = $(RUN) mkdocs +mkd-%: + $(MKDOCS) $* + +git-init-add: git-init git-add git-commit git-status +git-init: + git init +git-add: .cruft.json + git add . +git-commit: + git commit -m 'chore: make setup was run' -a +git-status: + git status + +# only necessary if setting up via cookiecutter +.cruft.json: + echo "creating a stub for .cruft.json. IMPORTANT: setup via cruft not cookiecutter recommended!" ; \ + touch $@ + +clean: + rm -rf $(DEST) + rm -rf tmp + rm -fr docs/* + rm -fr $(PYMODEL)/* + +include project.Makefile diff --git a/README.md b/README.md new file mode 100644 index 0000000..6ffe9f1 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# ansrs-schema + +Schema for ANSRS + +## Website + +[https://my-org.github.io/ansrs-schema](https://my-org.github.io/ansrs-schema) + +## Repository Structure + +* [examples/](examples/) - example data +* [project/](project/) - project files (do not edit these) +* [src/](src/) - source files (edit these) + * [ansrs_schema](src/ansrs_schema) + * [schema](src/ansrs_schema/schema) -- LinkML schema + (edit this) + +## Developer Documentation + +
+Use the `make` command to generate project artefacts: + +* `make all`: make everything +* `make deploy`: deploys site +
+ +## Credits + +This project was made with +[linkml-project-cookiecutter](https://github.com/linkml/linkml-project-cookiecutter). diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..56da66d --- /dev/null +++ b/config.yaml @@ -0,0 +1,41 @@ +# Configuration of generators (defaults illustrated) +--- +generator_args: + excel: + mergeimports: true + owl: + mergeimports: true + metaclasses: true + type_objects: true + # throws 'Cannot handle metadata profile: rdfs' + # metadata_profile: rdfs + markdown: + mergeimports: true + graphql: + mergeimports: true + java: + mergeimports: true + metadata: true + jsonld: + mergeimports: true + jsonschema: + mergeimports: true + jsonldcontext: + mergeimports: true + python: + mergeimports: true + prefixmap: + mergeimports: true + proto: + mergeimports: true + shacl: + mergeimports: true + shex: + mergeimports: true + sqlddl: + mergeimports: true + typescript: + mergeimports: true + metadata: true + +... diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..9b16c58 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,5 @@ +# Examples of use of ansrs_schema + +This folder contains example data conforming to ansrs_schema + +The source for these is in [src/data](../src/data/examples) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..85c617d --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,25 @@ +--- +site_name: "ansrs-schema" +theme: + name: material + # palette: + # scheme: slate + # primary: cyan + features: + - content.tabs.link +plugins: + - search + - mermaid2 +nav: + # - Home: home.md + - Index: index.md + - About: about.md +site_url: https://my-org.github.io/ansrs-schema +repo_url: https://github.com/my-org/ansrs-schema + +# Uncomment this block to enable use of Google Analytics. +# Replace the property value with your own ID. +# extra: +# analytics: +# provider: google +# property: G-XXXXXXXXXX diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..52e96f7 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2784 @@ +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.9.3" +description = "ANTLR 4.9.3 runtime for Python 3.7" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, +] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +category = "dev" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bioregistry" +version = "0.10.135" +description = "Integrated registry of biological databases and nomenclatures" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "bioregistry-0.10.135-py3-none-any.whl", hash = "sha256:a173512461ad652b1989745d00edac23efef0aae8edbf0e68992a78ff72b451c"}, + {file = "bioregistry-0.10.135.tar.gz", hash = "sha256:ea256539a2f4411af8782940a48ff3a11b0469c3b90a41803b1baadd2d4014b6"}, +] + +[package.dependencies] +click = "*" +curies = ">=0.7.0" +more-click = ">=0.1.2" +pydantic = "*" +pystow = ">=0.1.13" +requests = "*" +tqdm = "*" + +[package.extras] +align = ["beautifulsoup4", "class-resolver", "defusedxml", "fairsharing-client (>=0.1.0)", "pyyaml", "tabulate"] +charts = ["jinja2", "matplotlib", "matplotlib-venn", "pandas", "seaborn"] +docs = ["autodoc-pydantic", "sphinx", "sphinx-automodapi", "sphinx-click", "sphinx-rtd-theme"] +export = ["ndex2", "pyyaml", "rdflib", "rdflib-jsonld"] +gha = ["more-itertools"] +health = ["click-default-group", "jinja2", "pandas", "pyyaml", "tabulate"] +tests = ["coverage", "httpx", "more-itertools", "pytest"] +web = ["bootstrap-flask (<=2.0.0)", "curies[fastapi]", "fastapi", "flask (<2.2.4)", "markdown", "pyyaml", "rdflib", "rdflib-endpoint", "rdflib-jsonld", "uvicorn", "werkzeug (<2.3.0)"] + +[[package]] +name = "cachetools" +version = "5.3.2" +description = "Extensible memoizing collections and decorators" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, +] + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "cfgraph" +version = "0.2.1" +description = "rdflib collections flattening graph" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "CFGraph-0.2.1.tar.gz", hash = "sha256:b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74"}, +] + +[package.dependencies] +rdflib = ">=0.4.2" + +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "curies" +version = "0.7.7" +description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "curies-0.7.7-py3-none-any.whl", hash = "sha256:609de3e8cdf39f410e8f4d9f06eb7df379465860f4fb441bf0e79672430f8e2a"}, + {file = "curies-0.7.7.tar.gz", hash = "sha256:a8d674029f906fb9c3564eafa0862ce96725932bd801fa751e076265b111cb34"}, +] + +[package.dependencies] +pydantic = "*" +pytrie = "*" +requests = "*" + +[package.extras] +docs = ["sphinx", "sphinx-automodapi", "sphinx-rtd-theme"] +fastapi = ["defusedxml", "fastapi", "httpx", "python-multipart", "uvicorn"] +flask = ["defusedxml", "flask"] +pandas = ["pandas"] +rdflib = ["rdflib"] +tests = ["coverage", "pytest"] + +[[package]] +name = "daff" +version = "1.3.46" +description = "Diff and patch tables" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "daff-1.3.46.tar.gz", hash = "sha256:22d0da9fd6a3275b54c926a9c97b180f9258aad65113ea18f3fec52cbadcd818"}, +] + +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + +[[package]] +name = "editorconfig" +version = "0.12.3" +description = "EditorConfig File Locator and Interpreter for Python" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "EditorConfig-0.12.3-py3-none-any.whl", hash = "sha256:6b0851425aa875b08b16789ee0eeadbd4ab59666e9ebe728e526314c4a2e52c1"}, + {file = "EditorConfig-0.12.3.tar.gz", hash = "sha256:57f8ce78afcba15c8b18d46b5170848c88d56fd38f05c2ec60dbbfcb8996e89e"}, +] + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.13.1" +description = "A platform independent file lock." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "google" +version = "3.0.0" +description = "Python bindings to the Google search engine." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "google-3.0.0-py2.py3-none-any.whl", hash = "sha256:889cf695f84e4ae2c55fbc0cfdaf4c1e729417fa52ab1db0485202ba173e4935"}, + {file = "google-3.0.0.tar.gz", hash = "sha256:143530122ee5130509ad5e989f0512f7cb218b2d4eddbafbad40fd10e8d8ccbe"}, +] + +[package.dependencies] +beautifulsoup4 = "*" + +[[package]] +name = "google-api-core" +version = "2.16.2" +description = "Google API client core library" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-2.16.2.tar.gz", hash = "sha256:032d37b45d1d6bdaf68fb11ff621e2593263a239fa9246e2e94325f9c47876d2"}, + {file = "google_api_core-2.16.2-py3-none-any.whl", hash = "sha256:449ca0e3f14c179b4165b664256066c7861610f70b6ffe54bb01a04e9b466929"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-api-python-client" +version = "2.116.0" +description = "Google API Client Library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-python-client-2.116.0.tar.gz", hash = "sha256:f9f32361e16114d62929638fe07f77be30216b079ad316dc2ced859d9f72e5ad"}, + {file = "google_api_python_client-2.116.0-py2.py3-none-any.whl", hash = "sha256:846e44417c6b7385fa5f5a46cb6b9d23327754c560830245ee53a577c5e44cec"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1.dev0" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.27.0" +description = "Google Authentication Library" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.27.0.tar.gz", hash = "sha256:e863a56ccc2d8efa83df7a80272601e43487fa9a728a376205c86c26aaefa821"}, + {file = "google_auth-2.27.0-py2.py3-none-any.whl", hash = "sha256:8e4bad367015430ff253fe49d500fdc3396c1a434db5740828c728e45bcce245"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.2.0" +description = "Google Authentication Library: httplib2 transport" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + +[[package]] +name = "google-auth-oauthlib" +version = "1.2.0" +description = "Google Authentication Library" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "google-auth-oauthlib-1.2.0.tar.gz", hash = "sha256:292d2d3783349f2b0734a0a0207b1e1e322ac193c2c09d8f7c613fb7cc501ea8"}, + {file = "google_auth_oauthlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:297c1ce4cb13a99b5834c74a1fe03252e1e499716718b190f56bcb9c4abc4faf"}, +] + +[package.dependencies] +google-auth = ">=2.15.0" +requests-oauthlib = ">=0.7.0" + +[package.extras] +tool = ["click (>=6.0.0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.62.0" +description = "Common protobufs used in Google APIs" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.62.0.tar.gz", hash = "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277"}, + {file = "googleapis_common_protos-1.62.0-py2.py3-none-any.whl", hash = "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07"}, +] + +[package.dependencies] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "graphviz" +version = "0.20.1" +description = "Simple Python interface for Graphviz" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, + {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, +] + +[package.extras] +dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] +docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "gspread" +version = "6.0.1" +description = "Google Spreadsheets Python API" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "gspread-6.0.1-py3-none-any.whl", hash = "sha256:6c3af32b753fe75d9dd513ea9e088e9e043e09b9e3bf04d61d77213f37e67b79"}, + {file = "gspread-6.0.1.tar.gz", hash = "sha256:8c8bf83be676a019d3a483455d8b17b442f2acfc620172f245422ca4fc960dd0"}, +] + +[package.dependencies] +google-auth = ">=1.12.0" +google-auth-oauthlib = ">=0.4.1" +StrEnum = "0.4.15" + +[[package]] +name = "gspread-formatting" +version = "1.1.2" +description = "Complete Google Sheets formatting support for gspread worksheets" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "gspread-formatting-1.1.2.tar.gz", hash = "sha256:4d954d8c283880c4189f5684652b114c3889ffa4b442f339b80e2371782cb4c0"}, + {file = "gspread_formatting-1.1.2-py2.py3-none-any.whl", hash = "sha256:e5d14477f18ec2f08db0a00d22470d1c621d53b0633412c4873d86712c9a7bca"}, +] + +[package.dependencies] +gspread = ">=3.0.0" + +[[package]] +name = "hbreader" +version = "0.9.1" +description = "Honey Badger reader - a generic file/url/string open and read tool" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "hbreader-0.9.1-py3-none-any.whl", hash = "sha256:9a6e76c9d1afc1b977374a5dc430a1ebb0ea0488205546d4678d6e31cc5f6801"}, + {file = "hbreader-0.9.1.tar.gz", hash = "sha256:d2c132f8ba6276d794c66224c3297cec25c8079d0a4cf019c061611e0a3b94fa"}, +] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "importlib-metadata" +version = "7.0.1" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isodate" +version = "0.6.1" +description = "An ISO 8601 date/time/duration parser and formatter" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, + {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jinja2" +version = "3.1.3" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jsbeautifier" +version = "1.14.11" +description = "JavaScript unobfuscator and beautifier." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jsbeautifier-1.14.11.tar.gz", hash = "sha256:6b632581ea60dd1c133cd25a48ad187b4b91f526623c4b0fb5443ef805250505"}, +] + +[package.dependencies] +editorconfig = ">=0.12.2" +six = ">=1.13.0" + +[[package]] +name = "json-flattener" +version = "0.1.9" +description = "Python library for denormalizing nested dicts or json objects to tables and back" +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "json_flattener-0.1.9-py3-none-any.whl", hash = "sha256:6b027746f08bf37a75270f30c6690c7149d5f704d8af1740c346a3a1236bc941"}, + {file = "json_flattener-0.1.9.tar.gz", hash = "sha256:84cf8523045ffb124301a602602201665fcb003a171ece87e6f46ed02f7f0c15"}, +] + +[package.dependencies] +click = "*" +pyyaml = "*" + +[[package]] +name = "jsonasobj" +version = "1.3.1" +description = "JSON as python objects" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jsonasobj-1.3.1-py3-none-any.whl", hash = "sha256:b9e329dc1ceaae7cf5d5b214684a0b100e0dad0be6d5bbabac281ec35ddeca65"}, + {file = "jsonasobj-1.3.1.tar.gz", hash = "sha256:d52e0544a54a08f6ea3f77fa3387271e3648655e0eace2f21e825c26370e44a2"}, +] + +[[package]] +name = "jsonasobj2" +version = "1.0.4" +description = "JSON as python objects - version 2" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "jsonasobj2-1.0.4-py3-none-any.whl", hash = "sha256:12e86f86324d54fcf60632db94ea74488d5314e3da554c994fe1e2c6f29acb79"}, + {file = "jsonasobj2-1.0.4.tar.gz", hash = "sha256:f50b1668ef478004aa487b2d2d094c304e5cb6b79337809f4a1f2975cc7fbb4e"}, +] + +[package.dependencies] +hbreader = "*" + +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpath-ng" +version = "1.6.1" +description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jsonpath-ng-1.6.1.tar.gz", hash = "sha256:086c37ba4917304850bd837aeab806670224d3f038fe2833ff593a672ef0a5fa"}, + {file = "jsonpath_ng-1.6.1-py3-none-any.whl", hash = "sha256:8f22cd8273d7772eea9aaa84d922e0841aa36fdb8a2c6b7f6c3791a16a9bc0be"}, +] + +[package.dependencies] +ply = "*" + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, +] + +[[package]] +name = "jsonschema" +version = "4.21.1" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, + {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format\""} +idna = {version = "*", optional = true, markers = "extra == \"format\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} +rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.12.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "linkml" +version = "1.6.11" +description = "Linked Open Data Modeling Language" +category = "dev" +optional = false +python-versions = ">=3.8.1,<4.0.0" +files = [ + {file = "linkml-1.6.11-py3-none-any.whl", hash = "sha256:a7f90f8cc5bd3d171812b23eebde04de3b4318ac4f48a5eae476ce890f09907c"}, + {file = "linkml-1.6.11.tar.gz", hash = "sha256:963e88c1548c5462bc885e4cd96cabbda066866f8737bcc3bb92f4b0247419ae"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.0,<4.10" +click = ">=7.0" +graphviz = ">=0.10.1" +hbreader = "*" +isodate = ">=0.6.0" +jinja2 = ">=3.1.0" +jsonasobj2 = ">=1.0.3,<2.0.0" +jsonschema = {version = ">=4.0.0", extras = ["format"]} +linkml-dataops = "*" +linkml-runtime = ">=1.6.0" +openpyxl = "*" +parse = "*" +prefixcommons = ">=0.1.7" +prefixmaps = ">=0.1.3" +pydantic = ">=1.0.0,<3.0.0" +pyjsg = ">=0.11.6" +pyshex = ">=0.7.20" +pyshexc = ">=0.8.3" +python-dateutil = "*" +pyyaml = "*" +rdflib = ">=6.0.0" +requests = ">=2.22" +sqlalchemy = ">=1.4.31" +watchdog = ">=0.9.0" + +[[package]] +name = "linkml-dataops" +version = "0.1.0" +description = "LinkML Data Operations API" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "linkml_dataops-0.1.0-py3-none-any.whl", hash = "sha256:193cf7f659e5f07946d2c2761896910d5f7151d91282543b1363801f68307f4c"}, + {file = "linkml_dataops-0.1.0.tar.gz", hash = "sha256:4550eab65e78b70dc3b9c651724a94ac2b1d1edb2fbe576465f1d6951a54ed04"}, +] + +[package.dependencies] +jinja2 = "*" +jsonpatch = "*" +jsonpath-ng = "*" +linkml-runtime = ">=1.1.6" +"ruamel.yaml" = "*" + +[[package]] +name = "linkml-runtime" +version = "1.6.3" +description = "Runtime environment for LinkML, the Linked open data modeling language" +category = "main" +optional = false +python-versions = ">=3.7.6,<4.0.0" +files = [ + {file = "linkml_runtime-1.6.3-py3-none-any.whl", hash = "sha256:08f616302ce493be775104c87bd5a2ec0eb2c67624e611a3f7e28c978d08a4d1"}, + {file = "linkml_runtime-1.6.3.tar.gz", hash = "sha256:88e3d0b776055723d187128c03527145dc1ffdc2d2a69e89f8aabce203d418a3"}, +] + +[package.dependencies] +click = "*" +curies = ">=0.5.4" +deprecated = "*" +hbreader = "*" +json-flattener = ">=0.1.9" +jsonasobj2 = ">=1.0.4,<2.dev0" +jsonschema = ">=3.2.0" +prefixcommons = ">=0.1.12" +prefixmaps = ">=0.1.4" +pydantic = ">=1.10.2,<3.0.0" +pyyaml = "*" +rdflib = ">=6.0.0" +requests = "*" + +[[package]] +name = "markdown" +version = "3.5.2" +description = "Python implementation of John Gruber's Markdown." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.5.3" +description = "Project documentation with Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-material" +version = "8.5.11" +description = "Documentation that simply works" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-8.5.11-py3-none-any.whl", hash = "sha256:c907b4b052240a5778074a30a78f31a1f8ff82d7012356dc26898b97559f082e"}, + {file = "mkdocs_material-8.5.11.tar.gz", hash = "sha256:b0ea0513fd8cab323e8a825d6692ea07fa83e917bb5db042e523afecc7064ab7"}, +] + +[package.dependencies] +jinja2 = ">=3.0.2" +markdown = ">=3.2" +mkdocs = ">=1.4.0" +mkdocs-material-extensions = ">=1.1" +pygments = ">=2.12" +pymdown-extensions = ">=9.4" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "mkdocs-mermaid2-plugin" +version = "0.6.0" +description = "A MkDocs plugin for including mermaid graphs in markdown sources" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mkdocs-mermaid2-plugin-0.6.0.tar.gz", hash = "sha256:99cca6db7c6b4a954a701dcb6b507191bc32a7b0b47eacf2885c1bacf77d1af1"}, + {file = "mkdocs_mermaid2_plugin-0.6.0-py3-none-any.whl", hash = "sha256:ffbe8a7daa7ed718cb800c44c5ce4c0ff413caebf7b8b63d9c4a998dfd78a64d"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.6.3" +jsbeautifier = "*" +mkdocs = ">=1.0.4" +mkdocs-material = "*" +pymdown-extensions = ">=8.0" +pyyaml = "*" +requests = "*" +setuptools = ">=18.5" + +[[package]] +name = "more-click" +version = "0.1.2" +description = "More click." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "more_click-0.1.2-py3-none-any.whl", hash = "sha256:f6387af37ef7e7423bd94b72a81a53c79c5086a3bfe5cc035da534ff0c2a0a9e"}, + {file = "more_click-0.1.2.tar.gz", hash = "sha256:085da66d5a9b823c5d912a888dca1fa0c8b3a14ed1b21ea9c8a1b814857a3981"}, +] + +[package.dependencies] +click = "*" + +[package.extras] +tests = ["coverage", "pytest"] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "ontodev-cogs" +version = "0.3.3" +description = "COGS Operates Google Sheets" +category = "dev" +optional = false +python-versions = ">=3.6, <4" +files = [ + {file = "ontodev-cogs-0.3.3.tar.gz", hash = "sha256:04cf448eda59e0645c6626453f7617a6b2be3129c8586c4d4a515ad031f61a18"}, + {file = "ontodev_cogs-0.3.3-py3-none-any.whl", hash = "sha256:b3299b7884891d00e016f9cb0329a1a0dc8af4bfba45dce3815f654360b1f333"}, +] + +[package.dependencies] +daff = "*" +google = "*" +google-api-python-client = "*" +gspread = "*" +gspread-formatting = "*" +requests = "*" +tabulate = "*" +termcolor = "*" + +[[package]] +name = "openpyxl" +version = "3.1.2" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, + {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "parse" +version = "1.20.1" +description = "parse() is the opposite of format()" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "parse-1.20.1-py2.py3-none-any.whl", hash = "sha256:76ddd5214255ae711db4c512be636151fbabaa948c6f30115aecc440422ca82c"}, + {file = "parse-1.20.1.tar.gz", hash = "sha256:09002ca350ad42e76629995f71f7b518670bcf93548bdde3684fd55d2be51975"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] + +[[package]] +name = "pluggy" +version = "1.4.0" +description = "plugin and hook calling mechanisms for python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + +[[package]] +name = "prefixcommons" +version = "0.1.12" +description = "A python API for working with ID prefixes" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "prefixcommons-0.1.12-py3-none-any.whl", hash = "sha256:16dbc0a1f775e003c724f19a694fcfa3174608f5c8b0e893d494cf8098ac7f8b"}, + {file = "prefixcommons-0.1.12.tar.gz", hash = "sha256:22c4e2d37b63487b3ab48f0495b70f14564cb346a15220f23919eb0c1851f69f"}, +] + +[package.dependencies] +click = ">=8.1.3,<9.0.0" +pytest-logging = ">=2015.11.4,<2016.0.0" +PyYAML = ">=6.0,<7.0" +requests = ">=2.28.1,<3.0.0" + +[[package]] +name = "prefixmaps" +version = "0.2.1" +description = "A python library for retrieving semantic prefix maps" +category = "main" +optional = false +python-versions = ">=3.9,<4.0" +files = [ + {file = "prefixmaps-0.2.1-py3-none-any.whl", hash = "sha256:0d204caeb4c368cb7a981de98117665fd8885ba76f058714f27f5963e620d5a1"}, + {file = "prefixmaps-0.2.1.tar.gz", hash = "sha256:8aed88739f900e6c0df0ada061b90223c79c29ca074f5ae6d3de423aef8fa3cf"}, +] + +[package.dependencies] +click = ">=8.1.3" +curies = ">=0.5.3" +pydantic = ">=2.5,<3.0" +pyyaml = ">=5.3.1" +tox = ">=4.11.3,<5.0.0" + +[package.extras] +docs = ["Sphinx[docs] (>=7.2.6,<8.0.0)", "myst-parser[docs] (>=2.0.0,<3.0.0)", "sphinx-autodoc-typehints[docs] (>=1.23.4,<2.0.0)", "sphinx-click[docs] (>=4.3.0,<5.0.0)", "sphinx-rtd-theme[docs] (>=1.0.0,<2.0.0)"] +refresh = ["bioregistry[refresh] (>=0.10.65,<0.11.0)", "rdflib[refresh] (>=6.2.0,<7.0.0)", "requests[refresh] (>=2.28.1,<3.0.0)"] + +[[package]] +name = "protobuf" +version = "4.25.2" +description = "" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, + {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, + {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, + {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, + {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, + {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, + {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, + {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, + {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, +] + +[[package]] +name = "pyasn1" +version = "0.5.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, + {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + +[[package]] +name = "pydantic" +version = "2.6.1" +description = "Data validation using Python type hints" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"}, + {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.16.2" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.16.2" +description = "" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"}, + {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"}, + {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"}, + {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"}, + {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"}, + {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"}, + {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"}, + {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"}, + {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"}, + {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"}, + {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"}, + {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"}, + {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"}, + {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"}, + {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"}, + {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"}, + {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"}, + {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"}, + {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"}, + {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"}, + {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"}, + {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"}, + {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"}, + {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"}, + {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"}, + {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"}, + {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"}, + {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"}, + {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"}, + {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"}, + {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"}, + {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"}, + {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjsg" +version = "0.11.10" +description = "Python JSON Schema Grammar interpreter" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "PyJSG-0.11.10-py3-none-any.whl", hash = "sha256:10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d"}, + {file = "PyJSG-0.11.10.tar.gz", hash = "sha256:4bd6e3ff2833fa2b395bbe803a2d72a5f0bab5b7285bccd0da1a1bc0aee88bfa"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.3,<4.10.0" +jsonasobj = ">=1.2.1" + +[[package]] +name = "pymdown-extensions" +version = "10.7" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, + {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, +] + +[package.dependencies] +markdown = ">=3.5" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyproject-api" +version = "1.6.1" +description = "API to interact with the python pyproject.toml based projects" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, + {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, +] + +[package.dependencies] +packaging = ">=23.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2023.8.19)", "sphinx (<7.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "setuptools (>=68.1.2)", "wheel (>=0.41.2)"] + +[[package]] +name = "pyshex" +version = "0.8.1" +description = "Python ShEx Implementation" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a"}, + {file = "PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0"}, +] + +[package.dependencies] +cfgraph = ">=0.2.1" +chardet = "*" +pyshexc = "0.9.1" +rdflib-shim = "*" +requests = ">=2.22.0" +shexjsg = ">=0.8.2" +sparqlslurper = ">=0.5.1" +sparqlwrapper = ">=1.8.5" +urllib3 = "*" + +[[package]] +name = "pyshexc" +version = "0.9.1" +description = "PyShExC - Python ShEx compiler" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028"}, + {file = "PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.3,<4.10.0" +chardet = "*" +jsonasobj = ">=1.2.1" +pyjsg = ">=0.11.10" +rdflib-shim = "*" +shexjsg = ">=0.8.1" + +[[package]] +name = "pystow" +version = "0.5.2" +description = "Easily pick a place to store data for your python package." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pystow-0.5.2-py3-none-any.whl", hash = "sha256:c0faeb0fc854ede714be7949555f4d55ce40d8fd57f0ae1ff75e86158792299a"}, + {file = "pystow-0.5.2.tar.gz", hash = "sha256:d05d233299d61b50f53c7de220d990ec4c58e3a54d195d8449f0302563eb6de6"}, +] + +[package.dependencies] +click = "*" +requests = "*" +tqdm = "*" + +[package.extras] +aws = ["boto3"] +docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-click", "sphinx-rtd-theme"] +pandas = ["pandas"] +rdf = ["rdflib"] +tests = ["coverage", "pytest", "requests-file"] +xml = ["lxml"] + +[[package]] +name = "pytest" +version = "8.0.0" +description = "pytest: simple powerful testing with Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.3.0,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-logging" +version = "2015.11.4" +description = "Configures logging and allows tweaking the log level with a py.test flag" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pytest-logging-2015.11.4.tar.gz", hash = "sha256:cec5c85ecf18aab7b2ead5498a31b9f758680ef5a902b9054ab3f2bdbb77c896"}, +] + +[package.dependencies] +pytest = ">=2.8.1" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytrie" +version = "0.4.0" +description = "A pure Python implementation of the trie data structure." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, +] + +[package.dependencies] +sortedcontainers = "*" + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "rdflib" +version = "7.0.0" +description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." +category = "main" +optional = false +python-versions = ">=3.8.1,<4.0.0" +files = [ + {file = "rdflib-7.0.0-py3-none-any.whl", hash = "sha256:0438920912a642c866a513de6fe8a0001bd86ef975057d6962c79ce4771687cd"}, + {file = "rdflib-7.0.0.tar.gz", hash = "sha256:9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"}, +] + +[package.dependencies] +isodate = ">=0.6.0,<0.7.0" +pyparsing = ">=2.1.0,<4" + +[package.extras] +berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"] +html = ["html5lib (>=1.0,<2.0)"] +lxml = ["lxml (>=4.3.0,<5.0.0)"] +networkx = ["networkx (>=2.0.0,<3.0.0)"] + +[[package]] +name = "rdflib-jsonld" +version = "0.6.1" +description = "rdflib extension adding JSON-LD parser and serializer" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "rdflib-jsonld-0.6.1.tar.gz", hash = "sha256:eda5a42a2e09f80d4da78e32b5c684bccdf275368f1541e6b7bcddfb1382a0e0"}, + {file = "rdflib_jsonld-0.6.1-py2.py3-none-any.whl", hash = "sha256:bcf84317e947a661bae0a3f2aee1eced697075fc4ac4db6065a3340ea0f10fc2"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" + +[[package]] +name = "rdflib-shim" +version = "1.0.3" +description = "Shim for rdflib 5 and 6 incompatibilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "rdflib_shim-1.0.3-py3-none-any.whl", hash = "sha256:7a853e7750ef1e9bf4e35dea27d54e02d4ed087de5a9e0c329c4a6d82d647081"}, + {file = "rdflib_shim-1.0.3.tar.gz", hash = "sha256:d955d11e2986aab42b6830ca56ac6bc9c893abd1d049a161c6de2f1b99d4fc0d"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" +rdflib-jsonld = "0.6.1" + +[[package]] +name = "referencing" +version = "0.33.0" +description = "JSON Referencing + Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, + {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3987" +version = "1.3.8" +description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, + {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, +] + +[[package]] +name = "rpds-py" +version = "0.17.1" +description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, + {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, + {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, + {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, + {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, + {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, + {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, + {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, + {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, + {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, + {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, + {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, +] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +category = "dev" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "ruamel-yaml" +version = "0.18.5" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.5-py3-none-any.whl", hash = "sha256:a013ac02f99a69cdd6277d9664689eb1acba07069f912823177c5eced21a6ada"}, + {file = "ruamel.yaml-0.18.5.tar.gz", hash = "sha256:61917e3a35a569c1133a8f772e1226961bf5a1198bea7e23f06a0841dea1ab0e"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "schemasheets" +version = "0.1.24" +description = "Package to author schemas using spreadsheets" +category = "dev" +optional = false +python-versions = ">=3.9,<4.0" +files = [ + {file = "schemasheets-0.1.24-py3-none-any.whl", hash = "sha256:b7ebceb28e6cd61bbe743945d54e5d45540e794cfc0432b52cb228af8015c4cc"}, + {file = "schemasheets-0.1.24.tar.gz", hash = "sha256:af18b1012994989cd6c811b770ed547ac52067a640e04b5a4a63cf32306dab3a"}, +] + +[package.dependencies] +bioregistry = ">0.5.0" +Jinja2 = ">=3.0.3" +linkml = ">=1.5.0" +linkml-runtime = ">=1.5.0" +ontodev-cogs = ">=0.3.3,<0.4.0" + +[[package]] +name = "setuptools" +version = "69.0.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "shexjsg" +version = "0.8.2" +description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766"}, + {file = "ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6"}, +] + +[package.dependencies] +pyjsg = ">=0.11.10" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "sparqlslurper" +version = "0.5.1" +description = "SPARQL Slurper for rdflib" +category = "dev" +optional = false +python-versions = ">=3.7.4" +files = [ + {file = "sparqlslurper-0.5.1-py3-none-any.whl", hash = "sha256:ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87"}, + {file = "sparqlslurper-0.5.1.tar.gz", hash = "sha256:9282ebb064fc6152a58269d194cb1e7b275b0f095425a578d75b96dcc851f546"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" +rdflib-shim = "*" +sparqlwrapper = ">=1.8.2" + +[[package]] +name = "sparqlwrapper" +version = "2.0.0" +description = "SPARQL Endpoint interface to Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SPARQLWrapper-2.0.0-py3-none-any.whl", hash = "sha256:c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20"}, + {file = "SPARQLWrapper-2.0.0.tar.gz", hash = "sha256:3fed3ebcc77617a4a74d2644b86fd88e0f32e7f7003ac7b2b334c026201731f1"}, +] + +[package.dependencies] +rdflib = ">=6.1.1" + +[package.extras] +dev = ["mypy (>=0.931)", "pandas (>=1.3.5)", "pandas-stubs (>=1.2.0.48)", "setuptools (>=3.7.1)"] +docs = ["sphinx (<5)", "sphinx-rtd-theme"] +keepalive = ["keepalive (>=0.5)"] +pandas = ["pandas (>=1.3.5)"] + +[[package]] +name = "sqlalchemy" +version = "2.0.25" +description = "Database Abstraction Library" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4344d059265cc8b1b1be351bfb88749294b87a8b2bbe21dfbe066c4199541ebd"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9e2e59cbcc6ba1488404aad43de005d05ca56e069477b33ff74e91b6319735"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84daa0a2055df9ca0f148a64fdde12ac635e30edbca80e87df9b3aaf419e144a"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc8b7dabe8e67c4832891a5d322cec6d44ef02f432b4588390017f5cec186a84"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5693145220517b5f42393e07a6898acdfe820e136c98663b971906120549da5"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db854730a25db7c956423bb9fb4bdd1216c839a689bf9cc15fada0a7fb2f4570"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-win32.whl", hash = "sha256:14a6f68e8fc96e5e8f5647ef6cda6250c780612a573d99e4d881581432ef1669"}, + {file = "SQLAlchemy-2.0.25-cp310-cp310-win_amd64.whl", hash = "sha256:87f6e732bccd7dcf1741c00f1ecf33797383128bd1c90144ac8adc02cbb98643"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:342d365988ba88ada8af320d43df4e0b13a694dbd75951f537b2d5e4cb5cd002"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f37c0caf14b9e9b9e8f6dbc81bc56db06acb4363eba5a633167781a48ef036ed"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa9373708763ef46782d10e950b49d0235bfe58facebd76917d3f5cbf5971aed"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d24f571990c05f6b36a396218f251f3e0dda916e0c687ef6fdca5072743208f5"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75432b5b14dc2fff43c50435e248b45c7cdadef73388e5610852b95280ffd0e9"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:884272dcd3ad97f47702965a0e902b540541890f468d24bd1d98bcfe41c3f018"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-win32.whl", hash = "sha256:e607cdd99cbf9bb80391f54446b86e16eea6ad309361942bf88318bcd452363c"}, + {file = "SQLAlchemy-2.0.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d505815ac340568fd03f719446a589162d55c52f08abd77ba8964fbb7eb5b5f"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0dacf67aee53b16f365c589ce72e766efaabd2b145f9de7c917777b575e3659d"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b801154027107461ee992ff4b5c09aa7cc6ec91ddfe50d02bca344918c3265c6"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59a21853f5daeb50412d459cfb13cb82c089ad4c04ec208cd14dddd99fc23b39"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29049e2c299b5ace92cbed0c1610a7a236f3baf4c6b66eb9547c01179f638ec5"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b64b183d610b424a160b0d4d880995e935208fc043d0302dd29fee32d1ee3f95"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f7a7d7fcc675d3d85fbf3b3828ecd5990b8d61bd6de3f1b260080b3beccf215"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-win32.whl", hash = "sha256:cf18ff7fc9941b8fc23437cc3e68ed4ebeff3599eec6ef5eebf305f3d2e9a7c2"}, + {file = "SQLAlchemy-2.0.25-cp312-cp312-win_amd64.whl", hash = "sha256:91f7d9d1c4dd1f4f6e092874c128c11165eafcf7c963128f79e28f8445de82d5"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bb209a73b8307f8fe4fe46f6ad5979649be01607f11af1eb94aa9e8a3aaf77f0"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:798f717ae7c806d67145f6ae94dc7c342d3222d3b9a311a784f371a4333212c7"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd402169aa00df3142149940b3bf9ce7dde075928c1886d9a1df63d4b8de62"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0d3cab3076af2e4aa5693f89622bef7fa770c6fec967143e4da7508b3dceb9b9"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:74b080c897563f81062b74e44f5a72fa44c2b373741a9ade701d5f789a10ba23"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-win32.whl", hash = "sha256:87d91043ea0dc65ee583026cb18e1b458d8ec5fc0a93637126b5fc0bc3ea68c4"}, + {file = "SQLAlchemy-2.0.25-cp37-cp37m-win_amd64.whl", hash = "sha256:75f99202324383d613ddd1f7455ac908dca9c2dd729ec8584c9541dd41822a2c"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:420362338681eec03f53467804541a854617faed7272fe71a1bfdb07336a381e"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c88f0c7dcc5f99bdb34b4fd9b69b93c89f893f454f40219fe923a3a2fd11625"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3be4987e3ee9d9a380b66393b77a4cd6d742480c951a1c56a23c335caca4ce3"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a159111a0f58fb034c93eeba211b4141137ec4b0a6e75789ab7a3ef3c7e7e3"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8b8cb63d3ea63b29074dcd29da4dc6a97ad1349151f2d2949495418fd6e48db9"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:736ea78cd06de6c21ecba7416499e7236a22374561493b456a1f7ffbe3f6cdb4"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-win32.whl", hash = "sha256:10331f129982a19df4284ceac6fe87353ca3ca6b4ca77ff7d697209ae0a5915e"}, + {file = "SQLAlchemy-2.0.25-cp38-cp38-win_amd64.whl", hash = "sha256:c55731c116806836a5d678a70c84cb13f2cedba920212ba7dcad53260997666d"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:605b6b059f4b57b277f75ace81cc5bc6335efcbcc4ccb9066695e515dbdb3900"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:665f0a3954635b5b777a55111ababf44b4fc12b1f3ba0a435b602b6387ffd7cf"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecf6d4cda1f9f6cb0b45803a01ea7f034e2f1aed9475e883410812d9f9e3cfcf"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c51db269513917394faec5e5c00d6f83829742ba62e2ac4fa5c98d58be91662f"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:790f533fa5c8901a62b6fef5811d48980adeb2f51f1290ade8b5e7ba990ba3de"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1b1180cda6df7af84fe72e4530f192231b1f29a7496951db4ff38dac1687202d"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-win32.whl", hash = "sha256:555651adbb503ac7f4cb35834c5e4ae0819aab2cd24857a123370764dc7d7e24"}, + {file = "SQLAlchemy-2.0.25-cp39-cp39-win_amd64.whl", hash = "sha256:dc55990143cbd853a5d038c05e79284baedf3e299661389654551bd02a6a68d7"}, + {file = "SQLAlchemy-2.0.25-py3-none-any.whl", hash = "sha256:a86b4240e67d4753dc3092d9511886795b3c2852abe599cffe108952f7af7ac3"}, + {file = "SQLAlchemy-2.0.25.tar.gz", hash = "sha256:a2c69a7664fb2d54b8682dd774c3b54f67f84fa123cf84dda2a5f40dcaa04e08"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "strenum" +version = "0.4.15" +description = "An Enum that inherits from str." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "StrEnum-0.4.15-py3-none-any.whl", hash = "sha256:a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659"}, + {file = "StrEnum-0.4.15.tar.gz", hash = "sha256:878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff"}, +] + +[package.extras] +docs = ["myst-parser[linkify]", "sphinx", "sphinx-rtd-theme"] +release = ["twine"] +test = ["pylint", "pytest", "pytest-black", "pytest-cov", "pytest-pylint"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "termcolor" +version = "2.4.0" +description = "ANSI color formatting for output in terminal" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tox" +version = "4.12.1" +description = "tox is a generic virtualenv management and test command line tool" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tox-4.12.1-py3-none-any.whl", hash = "sha256:c07ea797880a44f3c4f200ad88ad92b446b83079d4ccef89585df64cc574375c"}, + {file = "tox-4.12.1.tar.gz", hash = "sha256:61aafbeff1bd8a5af84e54ef6e8402f53c6a6066d0782336171ddfbf5362122e"}, +] + +[package.dependencies] +cachetools = ">=5.3.2" +chardet = ">=5.2" +colorama = ">=0.4.6" +filelock = ">=3.13.1" +packaging = ">=23.2" +platformdirs = ">=4.1" +pluggy = ">=1.3" +pyproject-api = ">=1.6.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +virtualenv = ">=20.25" + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.25.2)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.11)"] +testing = ["build[virtualenv] (>=1.0.3)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=8.0.2)", "distlib (>=0.3.8)", "flaky (>=3.7)", "hatch-vcs (>=0.4)", "hatchling (>=1.21)", "psutil (>=5.9.7)", "pytest (>=7.4.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-xdist (>=3.5)", "re-assert (>=1.1)", "time-machine (>=2.13)", "wheel (>=0.42)"] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.20240106" +description = "Typing stubs for python-dateutil" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, + {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, +] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] + +[[package]] +name = "urllib3" +version = "2.2.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "virtualenv" +version = "20.25.0" +description = "Virtual Python Environment builder" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[extras] +docs = [] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "45ab0641686b3572e070cc39ae4a66ac504af0e079ac7e36c12fdaee200a1f11" diff --git a/project.Makefile b/project.Makefile new file mode 100644 index 0000000..0dd0fa0 --- /dev/null +++ b/project.Makefile @@ -0,0 +1 @@ +## Add your own custom Makefile targets here diff --git a/project/excel/ansrs_schema.xlsx b/project/excel/ansrs_schema.xlsx new file mode 100644 index 0000000..885641e Binary files /dev/null and b/project/excel/ansrs_schema.xlsx differ diff --git a/project/graphql/ansrs_schema.graphql b/project/graphql/ansrs_schema.graphql new file mode 100644 index 0000000..3d6a023 --- /dev/null +++ b/project/graphql/ansrs_schema.graphql @@ -0,0 +1,128 @@ +type AnatomicalAnnotationSet + { + id: Uriorcurie! + name: String! + description: String! + version: String! + parameterizes: AnatomicalSpace! + revisionOf: ParcellationTerminology + } + +type AnatomicalSpace + { + id: Uriorcurie! + name: String! + description: String! + version: String! + measures: ImageDataset! + revisionOf: AnatomicalSpace + } + +type ImageDataset + { + id: Uriorcurie! + name: String! + description: String! + version: String! + xDirection: ANATOMICALDIRECTION + yDirection: ANATOMICALDIRECTION + zDirection: ANATOMICALDIRECTION + xSize: Integer + ySize: Integer + zSize: Integer + xResolution: Float + yResolution: Float + zResolution: Float + unit: DISTANCEUNIT + revisionOf: ImageDataset + } + +interface NamedThing + { + id: Uriorcurie! + name: String! + description: String! + } + +type ParcellationAnnotation + { + partOfAnatomicalAnnotationSet: AnatomicalAnnotationSet! + internalIdentifier: String! + voxelCount: Integer + } + +type ParcellationAnnotationTermMap + { + subjectParcellationAnnotation: ParcellationAnnotation! + subjectParcellationTerm: ParcellationTerm! + } + +type ParcellationAtlas + { + id: Uriorcurie! + name: String! + description: String! + version: String! + hasAnatomicalSpace: AnatomicalSpace! + hasAnatomicalAnnotationSet: AnatomicalAnnotationSet! + hasParcellationTerminology: ParcellationTerminology! + specializationOf: ParcellationAtlas + revisionOf: AnatomicalSpace + } + +type ParcellationColorAssignment + { + partOfParcellationColorScheme: ParcellationColorScheme! + subjectParcellationTerm: ParcellationTerm! + color: String + } + +type ParcellationColorScheme + { + id: Uriorcurie! + name: String! + description: String! + version: String! + subjectParcellationTerminology: ParcellationTerminology! + revisionOf: ParcellationTerminology + } + +type ParcellationTerm + { + id: Uriorcurie! + name: String! + description: String! + symbol: String + partOfParcellationTermSet: ParcellationTermSet! + ordinal: Integer + hasParentParcellationTerm: ParcellationTerm + } + +type ParcellationTerminology + { + id: Uriorcurie! + name: String! + description: String! + version: String! + revisionOf: ParcellationTerminology + } + +type ParcellationTermSet + { + id: Uriorcurie! + name: String! + description: String! + partOfParcellationTerminology: ParcellationTerminology! + ordinal: Integer + hasParentParcellationTermSet: ParcellationTermSet + } + +interface VersionedNamedThing + { + id: Uriorcurie! + name: String! + description: String! + version: String! + revisionOf: VersionedNamedThing + } + diff --git a/project/jsonld/ansrs_schema.context.jsonld b/project/jsonld/ansrs_schema.context.jsonld new file mode 100644 index 0000000..9a303b9 --- /dev/null +++ b/project/jsonld/ansrs_schema.context.jsonld @@ -0,0 +1,126 @@ +{ + "comments": { + "description": "Auto generated by LinkML jsonld context generator", + "generation_date": "2024-02-06T10:45:57", + "source": "ansrs_schema.yaml" + }, + "@context": { + "ANSRS": "https://w3id.org/my-org/ansrs-schema/", + "PATO": { + "@id": "http://purl.obolibrary.org/obo/PATO_", + "@prefix": true + }, + "ansrs": "https://w3id.org/my-org/ansrs-schema/", + "biolink": "https://w3id.org/biolink/", + "example": "https://example.org/", + "linkml": "https://w3id.org/linkml/", + "schema": "http://schema.org/", + "skos": "http://www.w3.org/2004/02/skos/core#", + "@vocab": "https://w3id.org/my-org/ansrs-schema/", + "parameterizes": { + "@type": "@id" + }, + "measures": { + "@type": "@id" + }, + "id": "@id", + "unit": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + } + }, + "x_direction": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + } + }, + "x_resolution": { + "@type": "xsd:float" + }, + "x_size": { + "@type": "xsd:integer" + }, + "y_direction": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + } + }, + "y_resolution": { + "@type": "xsd:float" + }, + "y_size": { + "@type": "xsd:integer" + }, + "z_direction": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + } + }, + "z_resolution": { + "@type": "xsd:float" + }, + "z_size": { + "@type": "xsd:integer" + }, + "part_of_anatomical_annotation_set": { + "@type": "@id" + }, + "voxel_count": { + "@type": "xsd:integer" + }, + "subject_parcellation_annotation": { + "@type": "@id" + }, + "subject_parcellation_term": { + "@type": "@id" + }, + "has_anatomical_annotation_set": { + "@type": "@id" + }, + "has_anatomical_space": { + "@type": "@id" + }, + "has_parcellation_terminology": { + "@type": "@id" + }, + "specialization_of": { + "@type": "@id" + }, + "part_of_parcellation_color_scheme": { + "@type": "@id" + }, + "subject_parcellation_terminology": { + "@type": "@id" + }, + "has_parent_parcellation_term": { + "@type": "@id" + }, + "ordinal": { + "@type": "xsd:integer" + }, + "part_of_parcellation_term_set": { + "@type": "@id" + }, + "has_parent_parcellation_term_set": { + "@type": "@id" + }, + "part_of_parcellation_terminology": { + "@type": "@id" + }, + "revision_of": { + "@type": "@id" + } + } +} diff --git a/project/jsonld/ansrs_schema.jsonld b/project/jsonld/ansrs_schema.jsonld new file mode 100644 index 0000000..79b56df --- /dev/null +++ b/project/jsonld/ansrs_schema.jsonld @@ -0,0 +1,1515 @@ +{ + "name": "ansrs-schema", + "description": "Schema for ANSRS", + "title": "ANSRS schema", + "see_also": [ + "https://my-org.github.io/ansrs-schema" + ], + "id": "https://w3id.org/my-org/ansrs-schema", + "imports": [ + "linkml:types", + "core" + ], + "license": "MIT", + "prefixes": [ + { + "prefix_prefix": "ANSRS", + "prefix_reference": "https://w3id.org/my-org/ansrs-schema/" + }, + { + "prefix_prefix": "linkml", + "prefix_reference": "https://w3id.org/linkml/" + }, + { + "prefix_prefix": "biolink", + "prefix_reference": "https://w3id.org/biolink/" + }, + { + "prefix_prefix": "schema", + "prefix_reference": "http://schema.org/" + }, + { + "prefix_prefix": "PATO", + "prefix_reference": "http://purl.obolibrary.org/obo/PATO_" + }, + { + "prefix_prefix": "example", + "prefix_reference": "https://example.org/" + } + ], + "default_prefix": "ANSRS", + "default_range": "string", + "types": [ + { + "name": "string", + "definition_uri": "https://w3id.org/linkml/String", + "description": "A character string", + "notes": [ + "In RDF serializations, a slot with range of string is treated as a literal or type xsd:string. If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"string\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Text" + ], + "base": "str", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "@type": "TypeDefinition" + }, + { + "name": "integer", + "definition_uri": "https://w3id.org/linkml/Integer", + "description": "An integer", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"integer\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Integer" + ], + "base": "int", + "uri": "http://www.w3.org/2001/XMLSchema#integer", + "@type": "TypeDefinition" + }, + { + "name": "boolean", + "definition_uri": "https://w3id.org/linkml/Boolean", + "description": "A binary (true or false) value", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"boolean\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Boolean" + ], + "base": "Bool", + "uri": "http://www.w3.org/2001/XMLSchema#boolean", + "repr": "bool", + "@type": "TypeDefinition" + }, + { + "name": "float", + "definition_uri": "https://w3id.org/linkml/Float", + "description": "A real number that conforms to the xsd:float specification", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"float\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Float" + ], + "base": "float", + "uri": "http://www.w3.org/2001/XMLSchema#float", + "@type": "TypeDefinition" + }, + { + "name": "double", + "definition_uri": "https://w3id.org/linkml/Double", + "description": "A real number that conforms to the xsd:double specification", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"double\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "close_mappings": [ + "schema:Float" + ], + "base": "float", + "uri": "http://www.w3.org/2001/XMLSchema#double", + "@type": "TypeDefinition" + }, + { + "name": "decimal", + "definition_uri": "https://w3id.org/linkml/Decimal", + "description": "A real number with arbitrary precision that conforms to the xsd:decimal specification", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"decimal\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "broad_mappings": [ + "schema:Number" + ], + "base": "Decimal", + "uri": "http://www.w3.org/2001/XMLSchema#decimal", + "@type": "TypeDefinition" + }, + { + "name": "time", + "definition_uri": "https://w3id.org/linkml/Time", + "description": "A time object represents a (local) time of day, independent of any particular day", + "notes": [ + "URI is dateTime because OWL reasoners do not work with straight date or time", + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"time\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Time" + ], + "base": "XSDTime", + "uri": "http://www.w3.org/2001/XMLSchema#time", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "date", + "definition_uri": "https://w3id.org/linkml/Date", + "description": "a date (year, month and day) in an idealized calendar", + "notes": [ + "URI is dateTime because OWL reasoners don't work with straight date or time", + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"date\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Date" + ], + "base": "XSDDate", + "uri": "http://www.w3.org/2001/XMLSchema#date", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "datetime", + "definition_uri": "https://w3id.org/linkml/Datetime", + "description": "The combination of a date and time", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"datetime\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "exact_mappings": [ + "schema:DateTime" + ], + "base": "XSDDateTime", + "uri": "http://www.w3.org/2001/XMLSchema#dateTime", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "date_or_datetime", + "definition_uri": "https://w3id.org/linkml/DateOrDatetime", + "description": "Either a date or a datetime", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"date_or_datetime\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "str", + "uri": "https://w3id.org/linkml/DateOrDatetime", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "uriorcurie", + "definition_uri": "https://w3id.org/linkml/Uriorcurie", + "description": "a URI or a CURIE", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"uriorcurie\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "URIorCURIE", + "uri": "http://www.w3.org/2001/XMLSchema#anyURI", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "curie", + "definition_uri": "https://w3id.org/linkml/Curie", + "conforms_to": "https://www.w3.org/TR/curie/", + "description": "a compact URI", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"curie\"." + ], + "comments": [ + "in RDF serializations this MUST be expanded to a URI", + "in non-RDF serializations MAY be serialized as the compact representation" + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "Curie", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "uri", + "definition_uri": "https://w3id.org/linkml/Uri", + "conforms_to": "https://www.ietf.org/rfc/rfc3987.txt", + "description": "a complete URI", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"uri\"." + ], + "comments": [ + "in RDF serializations a slot with range of uri is treated as a literal or type xsd:anyURI unless it is an identifier or a reference to an identifier, in which case it is translated directly to a node" + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "close_mappings": [ + "schema:URL" + ], + "base": "URI", + "uri": "http://www.w3.org/2001/XMLSchema#anyURI", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "ncname", + "definition_uri": "https://w3id.org/linkml/Ncname", + "description": "Prefix part of CURIE", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"ncname\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "NCName", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "objectidentifier", + "definition_uri": "https://w3id.org/linkml/Objectidentifier", + "description": "A URI or CURIE that represents an object in the model.", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"objectidentifier\"." + ], + "comments": [ + "Used for inheritance and type checking" + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "ElementIdentifier", + "uri": "http://www.w3.org/ns/shex#iri", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "nodeidentifier", + "definition_uri": "https://w3id.org/linkml/Nodeidentifier", + "description": "A URI, CURIE or BNODE that represents a node in a model.", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"nodeidentifier\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "NodeIdentifier", + "uri": "http://www.w3.org/ns/shex#nonLiteral", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "jsonpointer", + "definition_uri": "https://w3id.org/linkml/Jsonpointer", + "conforms_to": "https://datatracker.ietf.org/doc/html/rfc6901", + "description": "A string encoding a JSON Pointer. The value of the string MUST conform to JSON Point syntax and SHOULD dereference to a valid object within the current instance document when encoded in tree form.", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"jsonpointer\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "str", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "jsonpath", + "definition_uri": "https://w3id.org/linkml/Jsonpath", + "conforms_to": "https://www.ietf.org/archive/id/draft-goessner-dispatch-jsonpath-00.html", + "description": "A string encoding a JSON Path. The value of the string MUST conform to JSON Point syntax and SHOULD dereference to zero or more valid objects within the current instance document when encoded in tree form.", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"jsonpath\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "str", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + }, + { + "name": "sparqlpath", + "definition_uri": "https://w3id.org/linkml/Sparqlpath", + "conforms_to": "https://www.w3.org/TR/sparql11-query/#propertypaths", + "description": "A string encoding a SPARQL Property Path. The value of the string MUST conform to SPARQL syntax and SHOULD dereference to zero or more valid objects within the current instance document when encoded as RDF.", + "notes": [ + "If you are authoring schemas in LinkML YAML, the type is referenced with the lower case \"sparqlpath\"." + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "str", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + } + ], + "enums": [ + { + "name": "ANATOMICAL_DIRECTION", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ANATOMICALDIRECTION", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "permissible_values": [ + { + "text": "left_to_right", + "description": "A controlled vocabulary term defining the x axis direction in terms of anatomical direction.", + "title": "left-to-right" + }, + { + "text": "posterior_to_anterior", + "title": "posterior-to-anterior" + }, + { + "text": "inferior_to_superior", + "title": "inferior-to-superior" + } + ] + }, + { + "name": "DISTANCE_UNIT", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/DISTANCEUNIT", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "permissible_values": [ + { + "text": "mm", + "title": "millimeter" + }, + { + "text": "um", + "title": "micrometer" + }, + { + "text": "m", + "title": "meter" + } + ] + } + ], + "slots": [ + { + "name": "id", + "definition_uri": "https://w3id.org/my-org/core/id", + "from_schema": "https://w3id.org/my-org/core", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/id", + "identifier": true, + "owner": "NamedThing", + "domain_of": [ + "NamedThing" + ], + "range": "uriorcurie", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "name", + "definition_uri": "https://w3id.org/my-org/core/name", + "from_schema": "https://w3id.org/my-org/core", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/name", + "owner": "NamedThing", + "domain_of": [ + "NamedThing" + ], + "range": "string", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "description", + "definition_uri": "https://w3id.org/my-org/core/description", + "from_schema": "https://w3id.org/my-org/core", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/description", + "owner": "NamedThing", + "domain_of": [ + "NamedThing" + ], + "range": "string", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "version", + "definition_uri": "https://w3id.org/my-org/core/version", + "from_schema": "https://w3id.org/my-org/core", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/version", + "owner": "VersionedNamedThing", + "domain_of": [ + "VersionedNamedThing" + ], + "range": "string", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "owner": "VersionedNamedThing", + "domain_of": [ + "VersionedNamedThing" + ], + "range": "VersionedNamedThing", + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__x_direction", + "description": "A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/x_direction", + "alias": "x_direction", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__y_direction", + "description": "A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/y_direction", + "alias": "y_direction", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__z_direction", + "description": "A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/z_direction", + "alias": "z_direction", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__x_size", + "description": "The number of pixels/voxels (size) along the x axis.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/x_size", + "alias": "x_size", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__y_size", + "description": "The number of pixels/voxels (size) along the y axis.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/y_size", + "alias": "y_size", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__z_size", + "description": "The number of pixels/voxels (size) along the y axis.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/z_size", + "alias": "z_size", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__x_resolution", + "description": "The resolution (length / pixel) in along the x axis (numerical value part).", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/x_resolution", + "alias": "x_resolution", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__y_resolution", + "description": "The resolution (length / pixel) in along the y axis (numerical value part).", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/y_resolution", + "alias": "y_resolution", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__z_resolution", + "description": "The resolution (length / pixel) in along the z axis (numerical value part).", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/z_resolution", + "alias": "z_resolution", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "imageDataset__unit", + "description": "A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/unit", + "alias": "unit", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "range": "DISTANCE_UNIT", + "@type": "SlotDefinition" + }, + { + "name": "anatomicalSpace__measures", + "description": "Reference to the specific image dataset used to define the anatomical space.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/measures", + "alias": "measures", + "owner": "AnatomicalSpace", + "domain_of": [ + "AnatomicalSpace" + ], + "range": "ImageDataset", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationTermSet__part_of_parcellation_terminology", + "description": "Reference to the parcellation terminology for which the parcellation term set partitions.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/part_of_parcellation_terminology", + "alias": "part_of_parcellation_terminology", + "owner": "ParcellationTermSet", + "domain_of": [ + "ParcellationTermSet" + ], + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationTermSet__ordinal", + "description": "Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/ordinal", + "alias": "ordinal", + "owner": "ParcellationTermSet", + "domain_of": [ + "ParcellationTermSet" + ], + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + }, + { + "name": "parcellationTermSet__has_parent_parcellation_term_set", + "description": "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/has_parent_parcellation_term_set", + "alias": "has_parent_parcellation_term_set", + "owner": "ParcellationTermSet", + "domain_of": [ + "ParcellationTermSet" + ], + "range": "ParcellationTermSet", + "@type": "SlotDefinition" + }, + { + "name": "parcellationTerm__symbol", + "description": "Symbol representing a parcellation term.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/symbol", + "alias": "symbol", + "owner": "ParcellationTerm", + "domain_of": [ + "ParcellationTerm" + ], + "range": "string", + "@type": "SlotDefinition" + }, + { + "name": "parcellationTerm__part_of_parcellation_term_set", + "description": "Reference to the parcellation term set for which the parcellation term is part of.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/part_of_parcellation_term_set", + "alias": "part_of_parcellation_term_set", + "owner": "ParcellationTerm", + "domain_of": [ + "ParcellationTerm" + ], + "range": "ParcellationTermSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationTerm__ordinal", + "description": "Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/ordinal", + "alias": "ordinal", + "owner": "ParcellationTerm", + "domain_of": [ + "ParcellationTerm" + ], + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + }, + { + "name": "parcellationTerm__has_parent_parcellation_term", + "description": "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/has_parent_parcellation_term", + "alias": "has_parent_parcellation_term", + "owner": "ParcellationTerm", + "domain_of": [ + "ParcellationTerm" + ], + "range": "ParcellationTerm", + "@type": "SlotDefinition" + }, + { + "name": "parcellationColorScheme__subject_parcellation_terminology", + "description": "Reference to the parcellation terminology for which the parcellation color scheme is in context of.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/subject_parcellation_terminology", + "alias": "subject_parcellation_terminology", + "owner": "ParcellationColorScheme", + "domain_of": [ + "ParcellationColorScheme" + ], + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationColorAssignment__part_of_parcellation_color_scheme", + "description": "Reference to the parcellation color scheme for which the color assignment is part of.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/part_of_parcellation_color_scheme", + "alias": "part_of_parcellation_color_scheme", + "owner": "ParcellationColorAssignment", + "domain_of": [ + "ParcellationColorAssignment" + ], + "range": "ParcellationColorScheme", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationColorAssignment__subject_parcellation_term", + "description": "Reference to the parcellation term identifier for which the color assignment is about.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/subject_parcellation_term", + "alias": "subject_parcellation_term", + "owner": "ParcellationColorAssignment", + "domain_of": [ + "ParcellationColorAssignment" + ], + "range": "ParcellationTerm", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationColorAssignment__color", + "description": "A string representing to hex triplet code of a color", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/color", + "alias": "color", + "owner": "ParcellationColorAssignment", + "domain_of": [ + "ParcellationColorAssignment" + ], + "range": "string", + "structured_pattern": { + "syntax": "{ColorHexTriplet}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "anatomicalAnnotationSet__parameterizes", + "description": "Reference to the anatomical space for which the anatomical annotation set is anchored", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/parameterizes", + "alias": "parameterizes", + "owner": "AnatomicalAnnotationSet", + "domain_of": [ + "AnatomicalAnnotationSet" + ], + "range": "AnatomicalSpace", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAnnotation__part_of_anatomical_annotation_set", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/part_of_anatomical_annotation_set", + "alias": "part_of_anatomical_annotation_set", + "owner": "ParcellationAnnotation", + "domain_of": [ + "ParcellationAnnotation" + ], + "range": "AnatomicalAnnotationSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAnnotation__internal_identifier", + "description": "An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/internal_identifier", + "alias": "internal_identifier", + "owner": "ParcellationAnnotation", + "domain_of": [ + "ParcellationAnnotation" + ], + "range": "string", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAnnotation__voxel_count", + "description": "The number of voxels (3D pixels) spanned by the parcellation annotation (optional).", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/voxel_count", + "alias": "voxel_count", + "owner": "ParcellationAnnotation", + "domain_of": [ + "ParcellationAnnotation" + ], + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAnnotationTermMap__subject_parcellation_annotation", + "description": "Reference to the parcellation annotation that is the subject of the association.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/subject_parcellation_annotation", + "alias": "subject_parcellation_annotation", + "owner": "ParcellationAnnotationTermMap", + "domain_of": [ + "ParcellationAnnotationTermMap" + ], + "range": "ParcellationAnnotation", + "required": true, + "inlined": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAnnotationTermMap__subject_parcellation_term", + "description": "Reference to the parcellation term that is the subject of the association.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/subject_parcellation_term", + "alias": "subject_parcellation_term", + "owner": "ParcellationAnnotationTermMap", + "domain_of": [ + "ParcellationAnnotationTermMap" + ], + "range": "ParcellationTerm", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAtlas__has_anatomical_space", + "description": "Reference to the anatomical space component of the parcellation atlas", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/has_anatomical_space", + "alias": "has_anatomical_space", + "owner": "ParcellationAtlas", + "domain_of": [ + "ParcellationAtlas" + ], + "range": "AnatomicalSpace", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAtlas__has_anatomical_annotation_set", + "description": "Reference to the anatomical annotation set component of the parcellation atlas", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/has_anatomical_annotation_set", + "alias": "has_anatomical_annotation_set", + "owner": "ParcellationAtlas", + "domain_of": [ + "ParcellationAtlas" + ], + "range": "AnatomicalAnnotationSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAtlas__has_parcellation_terminology", + "description": "Reference to the parcellation terminology component of the parcellation atlas", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/has_parcellation_terminology", + "alias": "has_parcellation_terminology", + "owner": "ParcellationAtlas", + "domain_of": [ + "ParcellationAtlas" + ], + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "parcellationAtlas__specialization_of", + "description": "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/specialization_of", + "alias": "specialization_of", + "owner": "ParcellationAtlas", + "domain_of": [ + "ParcellationAtlas" + ], + "range": "ParcellationAtlas", + "@type": "SlotDefinition" + }, + { + "name": "ImageDataset_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "ImageDataset", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "ImageDataset", + "domain_of": [ + "ImageDataset" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "ImageDataset", + "@type": "SlotDefinition" + }, + { + "name": "AnatomicalSpace_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "AnatomicalSpace", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "AnatomicalSpace", + "domain_of": [ + "AnatomicalSpace" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "AnatomicalSpace", + "@type": "SlotDefinition" + }, + { + "name": "ParcellationTerminology_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "ParcellationTerminology", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "ParcellationTerminology", + "domain_of": [ + "ParcellationTerminology" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "ParcellationTerminology", + "@type": "SlotDefinition" + }, + { + "name": "ParcellationColorScheme_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "ParcellationColorScheme", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "ParcellationColorScheme", + "domain_of": [ + "ParcellationColorScheme" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "ParcellationTerminology", + "@type": "SlotDefinition" + }, + { + "name": "AnatomicalAnnotationSet_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "AnatomicalAnnotationSet", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "AnatomicalAnnotationSet", + "domain_of": [ + "AnatomicalAnnotationSet" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "ParcellationTerminology", + "@type": "SlotDefinition" + }, + { + "name": "ParcellationAtlas_revision_of", + "definition_uri": "https://w3id.org/my-org/core/revision_of", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "revision_of", + "domain": "ParcellationAtlas", + "slot_uri": "https://w3id.org/my-org/ansrs-schema/revision_of", + "alias": "revision_of", + "owner": "ParcellationAtlas", + "domain_of": [ + "ParcellationAtlas" + ], + "is_usage_slot": true, + "usage_slot_name": "revision_of", + "range": "AnatomicalSpace", + "@type": "SlotDefinition" + } + ], + "classes": [ + { + "name": "ImageDataset", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ImageDataset", + "description": "An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266)", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "imageDataset__x_direction", + "imageDataset__y_direction", + "imageDataset__z_direction", + "imageDataset__x_size", + "imageDataset__y_size", + "imageDataset__z_size", + "imageDataset__x_resolution", + "imageDataset__y_resolution", + "imageDataset__z_resolution", + "imageDataset__unit", + "ImageDataset_revision_of" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "x_direction", + "description": "A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction.", + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "y_direction", + "description": "A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction.", + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "z_direction", + "description": "A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction.", + "range": "ANATOMICAL_DIRECTION", + "@type": "SlotDefinition" + }, + { + "name": "x_size", + "description": "The number of pixels/voxels (size) along the x axis.", + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "y_size", + "description": "The number of pixels/voxels (size) along the y axis.", + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "z_size", + "description": "The number of pixels/voxels (size) along the y axis.", + "range": "integer", + "minimum_value": 1, + "@type": "SlotDefinition" + }, + { + "name": "x_resolution", + "description": "The resolution (length / pixel) in along the x axis (numerical value part).", + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "y_resolution", + "description": "The resolution (length / pixel) in along the y axis (numerical value part).", + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "z_resolution", + "description": "The resolution (length / pixel) in along the z axis (numerical value part).", + "range": "float", + "structured_pattern": { + "syntax": "{PositiveFloat}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + }, + { + "name": "unit", + "description": "A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values.", + "range": "DISTANCE_UNIT", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ImageDataset", + "@type": "ClassDefinition" + }, + { + "name": "AnatomicalSpace", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/AnatomicalSpace", + "description": "An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499)", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "anatomicalSpace__measures", + "AnatomicalSpace_revision_of" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "measures", + "description": "Reference to the specific image dataset used to define the anatomical space.", + "range": "ImageDataset", + "required": true, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/AnatomicalSpace", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationTerminology", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTerminology", + "description": "A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, providing human readability and context and allowing communication about brain locations and structural properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499)", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "ParcellationTerminology_revision_of" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTerminology", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationTermSet", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTermSet", + "description": "A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, all terms are grouped into a single parcellation term set.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "NamedThing", + "slots": [ + "id", + "name", + "description", + "parcellationTermSet__part_of_parcellation_terminology", + "parcellationTermSet__ordinal", + "parcellationTermSet__has_parent_parcellation_term_set" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "part_of_parcellation_terminology", + "description": "Reference to the parcellation terminology for which the parcellation term set partitions.", + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "ordinal", + "description": "Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.", + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + }, + { + "name": "has_parent_parcellation_term_set", + "description": "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.", + "range": "ParcellationTermSet", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTermSet", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationTerm", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTerm", + "description": "A parcellation term is an individual term within a specific parcellation terminology describing a single anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within the context of one versioned release of a parcellation terminology, they can be reused in different parcellation terminology versions enabling the representation of terminology updates and modifications over time.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "NamedThing", + "slots": [ + "id", + "name", + "description", + "parcellationTerm__symbol", + "parcellationTerm__part_of_parcellation_term_set", + "parcellationTerm__ordinal", + "parcellationTerm__has_parent_parcellation_term" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "symbol", + "description": "Symbol representing a parcellation term.", + "@type": "SlotDefinition" + }, + { + "name": "part_of_parcellation_term_set", + "description": "Reference to the parcellation term set for which the parcellation term is part of.", + "range": "ParcellationTermSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "ordinal", + "description": "Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.", + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + }, + { + "name": "has_parent_parcellation_term", + "description": "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of", + "range": "ParcellationTerm", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationTerm", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationColorScheme", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationColorScheme", + "description": "A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one parcellation terminology.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "parcellationColorScheme__subject_parcellation_terminology", + "ParcellationColorScheme_revision_of" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "subject_parcellation_terminology", + "description": "Reference to the parcellation terminology for which the parcellation color scheme is in context of.", + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationColorScheme", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationColorAssignment", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationColorAssignment", + "description": "The parcellation color assignment associates hex color value to a parcellation term within a versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slots": [ + "parcellationColorAssignment__part_of_parcellation_color_scheme", + "parcellationColorAssignment__subject_parcellation_term", + "parcellationColorAssignment__color" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "part_of_parcellation_color_scheme", + "description": "Reference to the parcellation color scheme for which the color assignment is part of.", + "range": "ParcellationColorScheme", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "subject_parcellation_term", + "description": "Reference to the parcellation term identifier for which the color assignment is about.", + "range": "ParcellationTerm", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "color", + "description": "A string representing to hex triplet code of a color", + "range": "string", + "structured_pattern": { + "syntax": "{ColorHexTriplet}", + "@type": "PatternExpression" + }, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationColorAssignment", + "@type": "ClassDefinition" + }, + { + "name": "AnatomicalAnnotationSet", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/AnatomicalAnnotationSet", + "description": "An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same anatomical space that divides the space into distinct segments following some annotation criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499)", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "anatomicalAnnotationSet__parameterizes", + "AnatomicalAnnotationSet_revision_of" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "parameterizes", + "description": "Reference to the anatomical space for which the anatomical annotation set is anchored", + "range": "AnatomicalSpace", + "required": true, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/AnatomicalAnnotationSet", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationAnnotation", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAnnotation", + "description": "A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation corresponds to a specific label index (internal identifier) in the mask.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slots": [ + "parcellationAnnotation__part_of_anatomical_annotation_set", + "parcellationAnnotation__internal_identifier", + "parcellationAnnotation__voxel_count" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "part_of_anatomical_annotation_set", + "range": "AnatomicalAnnotationSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "internal_identifier", + "description": "An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "voxel_count", + "description": "The number of voxels (3D pixels) spanned by the parcellation annotation (optional).", + "range": "integer", + "minimum_value": 0, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAnnotation", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationAnnotationTermMap", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAnnotationTermMap", + "description": "The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent region R.", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "slots": [ + "parcellationAnnotationTermMap__subject_parcellation_annotation", + "parcellationAnnotationTermMap__subject_parcellation_term" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "subject_parcellation_annotation", + "description": "Reference to the parcellation annotation that is the subject of the association.", + "range": "ParcellationAnnotation", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "subject_parcellation_term", + "description": "Reference to the parcellation term that is the subject of the association.", + "range": "ParcellationTerm", + "required": true, + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAnnotationTermMap", + "@type": "ClassDefinition" + }, + { + "name": "ParcellationAtlas", + "definition_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAtlas", + "description": "A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499).", + "from_schema": "https://w3id.org/my-org/ansrs-schema", + "is_a": "VersionedNamedThing", + "slots": [ + "id", + "name", + "description", + "version", + "parcellationAtlas__has_anatomical_space", + "parcellationAtlas__has_anatomical_annotation_set", + "parcellationAtlas__has_parcellation_terminology", + "parcellationAtlas__specialization_of", + "ParcellationAtlas_revision_of" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "has_anatomical_space", + "description": "Reference to the anatomical space component of the parcellation atlas", + "range": "AnatomicalSpace", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "has_anatomical_annotation_set", + "description": "Reference to the anatomical annotation set component of the parcellation atlas", + "range": "AnatomicalAnnotationSet", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "has_parcellation_terminology", + "description": "Reference to the parcellation terminology component of the parcellation atlas", + "range": "ParcellationTerminology", + "required": true, + "@type": "SlotDefinition" + }, + { + "name": "specialization_of", + "description": "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.", + "range": "ParcellationAtlas", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/my-org/ansrs-schema/ParcellationAtlas", + "@type": "ClassDefinition" + }, + { + "name": "NamedThing", + "definition_uri": "https://w3id.org/my-org/core/NamedThing", + "description": "Core base entity for ANSRS schema representing an entity with an identifier name and description.", + "from_schema": "https://w3id.org/my-org/core", + "abstract": true, + "slots": [ + "id", + "name", + "description" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/my-org/ansrs-schema/NamedThing", + "@type": "ClassDefinition" + }, + { + "name": "VersionedNamedThing", + "definition_uri": "https://w3id.org/my-org/core/VersionedNamedThing", + "description": "Core base entity for ANSRS schema representing an versioned named thing.", + "from_schema": "https://w3id.org/my-org/core", + "is_a": "NamedThing", + "abstract": true, + "slots": [ + "id", + "name", + "description", + "version", + "revision_of" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/my-org/ansrs-schema/VersionedNamedThing", + "@type": "ClassDefinition" + } + ], + "metamodel_version": "1.7.0", + "source_file": "ansrs_schema.yaml", + "source_file_date": "2024-02-06T10:43:44", + "source_file_size": 14026, + "generation_date": "2024-02-06T10:45:57", + "settings": [ + { + "setting_key": "PositiveFloat", + "setting_value": "^[+]?\\d*\\.?\\d+$" + }, + { + "setting_key": "ColorHexTriplet", + "setting_value": "#[0-9a-fA-F]{6}" + } + ], + "@type": "SchemaDefinition", + "@context": [ + "project/jsonld/ansrs_schema.context.jsonld", + "https://w3id.org/linkml/types.context.jsonld", + "core.context.jsonld", + { + "@base": "https://w3id.org/my-org/ansrs-schema/" + } + ] +} diff --git a/project/jsonschema/ansrs_schema.schema.json b/project/jsonschema/ansrs_schema.schema.json new file mode 100644 index 0000000..3d7d5c1 --- /dev/null +++ b/project/jsonschema/ansrs_schema.schema.json @@ -0,0 +1,426 @@ +{ + "$defs": { + "ANATOMICALDIRECTION": { + "description": "", + "enum": [ + "left_to_right", + "posterior_to_anterior", + "inferior_to_superior" + ], + "title": "ANATOMICALDIRECTION", + "type": "string" + }, + "AnatomicalAnnotationSet": { + "additionalProperties": false, + "description": "An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same anatomical space that divides the space into distinct segments following some annotation criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499)", + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "parameterizes": { + "description": "Reference to the anatomical space for which the anatomical annotation set is anchored", + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "parameterizes", + "version", + "id", + "name", + "description" + ], + "title": "AnatomicalAnnotationSet", + "type": "object" + }, + "AnatomicalSpace": { + "additionalProperties": false, + "description": "An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499)", + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "measures": { + "description": "Reference to the specific image dataset used to define the anatomical space.", + "type": "string" + }, + "name": { + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "measures", + "version", + "id", + "name", + "description" + ], + "title": "AnatomicalSpace", + "type": "object" + }, + "DISTANCEUNIT": { + "description": "", + "enum": [ + "mm", + "um", + "m" + ], + "title": "DISTANCEUNIT", + "type": "string" + }, + "ImageDataset": { + "additionalProperties": false, + "description": "An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266)", + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "unit": { + "$ref": "#/$defs/DISTANCEUNIT", + "description": "A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values." + }, + "version": { + "type": "string" + }, + "x_direction": { + "$ref": "#/$defs/ANATOMICALDIRECTION", + "description": "A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction." + }, + "x_resolution": { + "description": "The resolution (length / pixel) in along the x axis (numerical value part).", + "type": "number" + }, + "x_size": { + "description": "The number of pixels/voxels (size) along the x axis.", + "minimum": 1, + "type": "integer" + }, + "y_direction": { + "$ref": "#/$defs/ANATOMICALDIRECTION", + "description": "A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction." + }, + "y_resolution": { + "description": "The resolution (length / pixel) in along the y axis (numerical value part).", + "type": "number" + }, + "y_size": { + "description": "The number of pixels/voxels (size) along the y axis.", + "minimum": 1, + "type": "integer" + }, + "z_direction": { + "$ref": "#/$defs/ANATOMICALDIRECTION", + "description": "A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction." + }, + "z_resolution": { + "description": "The resolution (length / pixel) in along the z axis (numerical value part).", + "type": "number" + }, + "z_size": { + "description": "The number of pixels/voxels (size) along the y axis.", + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "version", + "id", + "name", + "description" + ], + "title": "ImageDataset", + "type": "object" + }, + "ParcellationAnnotation": { + "additionalProperties": false, + "description": "A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation corresponds to a specific label index (internal identifier) in the mask.", + "properties": { + "internal_identifier": { + "description": "An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set", + "type": "string" + }, + "part_of_anatomical_annotation_set": { + "type": "string" + }, + "voxel_count": { + "description": "The number of voxels (3D pixels) spanned by the parcellation annotation (optional).", + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "part_of_anatomical_annotation_set", + "internal_identifier" + ], + "title": "ParcellationAnnotation", + "type": "object" + }, + "ParcellationAnnotationTermMap": { + "additionalProperties": false, + "description": "The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent region R.", + "properties": { + "subject_parcellation_annotation": { + "$ref": "#/$defs/ParcellationAnnotation", + "description": "Reference to the parcellation annotation that is the subject of the association." + }, + "subject_parcellation_term": { + "description": "Reference to the parcellation term that is the subject of the association.", + "type": "string" + } + }, + "required": [ + "subject_parcellation_annotation", + "subject_parcellation_term" + ], + "title": "ParcellationAnnotationTermMap", + "type": "object" + }, + "ParcellationAtlas": { + "additionalProperties": false, + "description": "A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499).", + "properties": { + "description": { + "type": "string" + }, + "has_anatomical_annotation_set": { + "description": "Reference to the anatomical annotation set component of the parcellation atlas", + "type": "string" + }, + "has_anatomical_space": { + "description": "Reference to the anatomical space component of the parcellation atlas", + "type": "string" + }, + "has_parcellation_terminology": { + "description": "Reference to the parcellation terminology component of the parcellation atlas", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "specialization_of": { + "description": "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.", + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "has_anatomical_space", + "has_anatomical_annotation_set", + "has_parcellation_terminology", + "version", + "id", + "name", + "description" + ], + "title": "ParcellationAtlas", + "type": "object" + }, + "ParcellationColorAssignment": { + "additionalProperties": false, + "description": "The parcellation color assignment associates hex color value to a parcellation term within a versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to.", + "properties": { + "color": { + "description": "A string representing to hex triplet code of a color", + "type": "string" + }, + "part_of_parcellation_color_scheme": { + "description": "Reference to the parcellation color scheme for which the color assignment is part of.", + "type": "string" + }, + "subject_parcellation_term": { + "description": "Reference to the parcellation term identifier for which the color assignment is about.", + "type": "string" + } + }, + "required": [ + "part_of_parcellation_color_scheme", + "subject_parcellation_term" + ], + "title": "ParcellationColorAssignment", + "type": "object" + }, + "ParcellationColorScheme": { + "additionalProperties": false, + "description": "A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one parcellation terminology.", + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "subject_parcellation_terminology": { + "description": "Reference to the parcellation terminology for which the parcellation color scheme is in context of.", + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "subject_parcellation_terminology", + "version", + "id", + "name", + "description" + ], + "title": "ParcellationColorScheme", + "type": "object" + }, + "ParcellationTerm": { + "additionalProperties": false, + "description": "A parcellation term is an individual term within a specific parcellation terminology describing a single anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within the context of one versioned release of a parcellation terminology, they can be reused in different parcellation terminology versions enabling the representation of terminology updates and modifications over time.", + "properties": { + "description": { + "type": "string" + }, + "has_parent_parcellation_term": { + "description": "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ordinal": { + "description": "Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.", + "minimum": 0, + "type": "integer" + }, + "part_of_parcellation_term_set": { + "description": "Reference to the parcellation term set for which the parcellation term is part of.", + "type": "string" + }, + "symbol": { + "description": "Symbol representing a parcellation term.", + "type": "string" + } + }, + "required": [ + "part_of_parcellation_term_set", + "id", + "name", + "description" + ], + "title": "ParcellationTerm", + "type": "object" + }, + "ParcellationTermSet": { + "additionalProperties": false, + "description": "A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, all terms are grouped into a single parcellation term set.", + "properties": { + "description": { + "type": "string" + }, + "has_parent_parcellation_term_set": { + "description": "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ordinal": { + "description": "Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.", + "minimum": 0, + "type": "integer" + }, + "part_of_parcellation_terminology": { + "description": "Reference to the parcellation terminology for which the parcellation term set partitions.", + "type": "string" + } + }, + "required": [ + "part_of_parcellation_terminology", + "id", + "name", + "description" + ], + "title": "ParcellationTermSet", + "type": "object" + }, + "ParcellationTerminology": { + "additionalProperties": false, + "description": "A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, providing human readability and context and allowing communication about brain locations and structural properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499)", + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "revision_of": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "version", + "id", + "name", + "description" + ], + "title": "ParcellationTerminology", + "type": "object" + } + }, + "$id": "https://w3id.org/my-org/ansrs-schema", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "additionalProperties": true, + "metamodel_version": "1.7.0", + "title": "ansrs-schema", + "type": "object", + "version": null +} \ No newline at end of file diff --git a/project/owl/ansrs_schema.owl.ttl b/project/owl/ansrs_schema.owl.ttl new file mode 100644 index 0000000..7183d2c --- /dev/null +++ b/project/owl/ansrs_schema.owl.ttl @@ -0,0 +1,752 @@ +@prefix ANSRS: . +@prefix dcterms: . +@prefix linkml: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix skos: . +@prefix xsd: . + +ANSRS:ParcellationAnnotationTermMap a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationAnnotationTermMap" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_term ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_annotation ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_term ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationAnnotation ; + owl:onProperty ANSRS:subject_parcellation_annotation ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_annotation ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerm ; + owl:onProperty ANSRS:subject_parcellation_term ] ; + skos:definition "The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent region R." ; + skos:inScheme . + +ANSRS:ParcellationColorAssignment a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationColorAssignment" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:color ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_term ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_color_scheme ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:color ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_term ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerm ; + owl:onProperty ANSRS:subject_parcellation_term ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:color ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationColorScheme ; + owl:onProperty ANSRS:part_of_parcellation_color_scheme ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_color_scheme ] ; + skos:definition "The parcellation color assignment associates hex color value to a parcellation term within a versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to." ; + skos:inScheme . + +ANSRS:ParcellationAnnotation a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationAnnotation" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalAnnotationSet ; + owl:onProperty ANSRS:part_of_anatomical_annotation_set ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 0 ] ) ] ) ] ; + owl:onProperty ANSRS:voxel_count ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:internal_identifier ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:voxel_count ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:internal_identifier ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:voxel_count ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:internal_identifier ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:part_of_anatomical_annotation_set ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:part_of_anatomical_annotation_set ] ; + skos:definition "A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation corresponds to a specific label index (internal identifier) in the mask." ; + skos:inScheme . + +ANSRS:ParcellationAtlas a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationAtlas" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:specialization_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalSpace ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalAnnotationSet ; + owl:onProperty ANSRS:has_anatomical_annotation_set ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalSpace ; + owl:onProperty ANSRS:has_anatomical_space ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:has_parcellation_terminology ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:has_parcellation_terminology ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:has_parcellation_terminology ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:specialization_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:has_anatomical_space ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:has_anatomical_space ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:has_anatomical_annotation_set ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:has_anatomical_annotation_set ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationAtlas ; + owl:onProperty ANSRS:specialization_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + ANSRS:VersionedNamedThing ; + skos:definition "A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499)." ; + skos:inScheme . + +ANSRS:ParcellationColorScheme a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationColorScheme" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_terminology ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:subject_parcellation_terminology ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:subject_parcellation_terminology ], + ANSRS:VersionedNamedThing ; + skos:definition "A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one parcellation terminology." ; + skos:inScheme . + + a owl:Class, + ANSRS:ANATOMICALDIRECTION ; + rdfs:label "inferior_to_superior" ; + rdfs:subClassOf ANSRS:ANATOMICALDIRECTION . + + a owl:Class, + ANSRS:ANATOMICALDIRECTION ; + rdfs:label "left_to_right" ; + rdfs:subClassOf ANSRS:ANATOMICALDIRECTION . + + a owl:Class, + ANSRS:ANATOMICALDIRECTION ; + rdfs:label "posterior_to_anterior" ; + rdfs:subClassOf ANSRS:ANATOMICALDIRECTION . + +ANSRS:AnatomicalAnnotationSet a owl:Class, + linkml:ClassDefinition ; + rdfs:label "AnatomicalAnnotationSet" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:parameterizes ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalSpace ; + owl:onProperty ANSRS:parameterizes ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:parameterizes ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + ANSRS:VersionedNamedThing ; + skos:definition "An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same anatomical space that divides the space into distinct segments following some annotation criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499)" ; + skos:inScheme . + + a owl:Class, + ANSRS:DISTANCEUNIT ; + rdfs:label "m" ; + rdfs:subClassOf ANSRS:DISTANCEUNIT . + + a owl:Class, + ANSRS:DISTANCEUNIT ; + rdfs:label "mm" ; + rdfs:subClassOf ANSRS:DISTANCEUNIT . + + a owl:Class, + ANSRS:DISTANCEUNIT ; + rdfs:label "um" ; + rdfs:subClassOf ANSRS:DISTANCEUNIT . + +ANSRS:ImageDataset a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ImageDataset" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:x_size ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:y_resolution ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:z_resolution ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:y_resolution ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:x_direction ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:unit ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 1 ] ) ] ) ] ; + owl:onProperty ANSRS:z_size ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ANSRS:y_resolution ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ANATOMICALDIRECTION ; + owl:onProperty ANSRS:z_direction ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:z_direction ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ImageDataset ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:z_resolution ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ANATOMICALDIRECTION ; + owl:onProperty ANSRS:y_direction ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:y_direction ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:DISTANCEUNIT ; + owl:onProperty ANSRS:unit ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:x_resolution ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ANSRS:z_resolution ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:y_direction ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:y_size ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:z_direction ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:x_size ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:x_resolution ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 1 ] ) ] ) ] ; + owl:onProperty ANSRS:x_size ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ANSRS:x_resolution ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ANATOMICALDIRECTION ; + owl:onProperty ANSRS:x_direction ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:z_size ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:x_direction ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 1 ] ) ] ) ] ; + owl:onProperty ANSRS:y_size ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:y_size ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:unit ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:z_size ], + ANSRS:VersionedNamedThing ; + skos:definition "An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266)" ; + skos:inScheme . + +ANSRS:ParcellationTermSet a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationTermSet" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTermSet ; + owl:onProperty ANSRS:has_parent_parcellation_term_set ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:has_parent_parcellation_term_set ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_terminology ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_terminology ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:has_parent_parcellation_term_set ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 0 ] ) ] ) ] ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:part_of_parcellation_terminology ], + ANSRS:NamedThing ; + skos:definition "A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, all terms are grouped into a single parcellation term set." ; + skos:inScheme . + +ANSRS:NamedThing a owl:Class, + linkml:ClassDefinition ; + rdfs:label "NamedThing" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:name ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ANSRS:id ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:description ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:description ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:id ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:name ] ; + skos:definition "Core base entity for ANSRS schema representing an entity with an identifier name and description." ; + skos:inScheme . + +ANSRS:ParcellationTerm a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationTerm" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:symbol ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:has_parent_parcellation_term ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_term_set ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:Integer [ a rdfs:Datatype ; + owl:onDatatype xsd:integer ; + owl:withRestrictions ( [ xsd:minInclusive 0 ] ) ] ) ] ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:symbol ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:symbol ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:has_parent_parcellation_term ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTermSet ; + owl:onProperty ANSRS:part_of_parcellation_term_set ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerm ; + owl:onProperty ANSRS:has_parent_parcellation_term ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:ordinal ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:part_of_parcellation_term_set ], + ANSRS:NamedThing ; + skos:definition "A parcellation term is an individual term within a specific parcellation terminology describing a single anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within the context of one versioned release of a parcellation terminology, they can be reused in different parcellation terminology versions enabling the representation of terminology updates and modifications over time." ; + skos:inScheme . + +ANSRS:color a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "color" ; + skos:definition "A string representing to hex triplet code of a color" ; + skos:inScheme . + +ANSRS:description a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "description" ; + skos:inScheme . + +ANSRS:has_anatomical_annotation_set a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has_anatomical_annotation_set" ; + skos:definition "Reference to the anatomical annotation set component of the parcellation atlas" ; + skos:inScheme . + +ANSRS:has_anatomical_space a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has_anatomical_space" ; + skos:definition "Reference to the anatomical space component of the parcellation atlas" ; + skos:inScheme . + +ANSRS:has_parcellation_terminology a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has_parcellation_terminology" ; + skos:definition "Reference to the parcellation terminology component of the parcellation atlas" ; + skos:inScheme . + +ANSRS:has_parent_parcellation_term a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has_parent_parcellation_term" ; + skos:definition "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of" ; + skos:inScheme . + +ANSRS:has_parent_parcellation_term_set a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has_parent_parcellation_term_set" ; + skos:definition "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of." ; + skos:inScheme . + +ANSRS:id a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "id" ; + rdfs:range linkml:Uriorcurie ; + skos:inScheme . + +ANSRS:internal_identifier a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "internal_identifier" ; + skos:definition "An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set" ; + skos:inScheme . + +ANSRS:measures a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "measures" ; + skos:definition "Reference to the specific image dataset used to define the anatomical space." ; + skos:inScheme . + +ANSRS:name a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "name" ; + skos:inScheme . + +ANSRS:parameterizes a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "parameterizes" ; + skos:definition "Reference to the anatomical space for which the anatomical annotation set is anchored" ; + skos:inScheme . + +ANSRS:part_of_anatomical_annotation_set a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "part_of_anatomical_annotation_set" ; + skos:inScheme . + +ANSRS:part_of_parcellation_color_scheme a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "part_of_parcellation_color_scheme" ; + skos:definition "Reference to the parcellation color scheme for which the color assignment is part of." ; + skos:inScheme . + +ANSRS:part_of_parcellation_term_set a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "part_of_parcellation_term_set" ; + skos:definition "Reference to the parcellation term set for which the parcellation term is part of." ; + skos:inScheme . + +ANSRS:part_of_parcellation_terminology a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "part_of_parcellation_terminology" ; + skos:definition "Reference to the parcellation terminology for which the parcellation term set partitions." ; + skos:inScheme . + +ANSRS:specialization_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "specialization_of" ; + skos:definition "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of." ; + skos:inScheme . + +ANSRS:subject_parcellation_annotation a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "subject_parcellation_annotation" ; + skos:definition "Reference to the parcellation annotation that is the subject of the association." ; + skos:inScheme . + +ANSRS:subject_parcellation_terminology a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "subject_parcellation_terminology" ; + skos:definition "Reference to the parcellation terminology for which the parcellation color scheme is in context of." ; + skos:inScheme . + +ANSRS:symbol a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "symbol" ; + skos:definition "Symbol representing a parcellation term." ; + skos:inScheme . + +ANSRS:unit a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "unit" ; + skos:definition "A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values." ; + skos:inScheme . + +ANSRS:version a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "version" ; + skos:inScheme . + +ANSRS:voxel_count a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "voxel_count" ; + skos:definition "The number of voxels (3D pixels) spanned by the parcellation annotation (optional)." ; + skos:inScheme . + +ANSRS:x_direction a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "x_direction" ; + skos:definition "A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction." ; + skos:inScheme . + +ANSRS:x_resolution a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "x_resolution" ; + skos:definition "The resolution (length / pixel) in along the x axis (numerical value part)." ; + skos:inScheme . + +ANSRS:x_size a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "x_size" ; + skos:definition "The number of pixels/voxels (size) along the x axis." ; + skos:inScheme . + +ANSRS:y_direction a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "y_direction" ; + skos:definition "A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction." ; + skos:inScheme . + +ANSRS:y_resolution a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "y_resolution" ; + skos:definition "The resolution (length / pixel) in along the y axis (numerical value part)." ; + skos:inScheme . + +ANSRS:y_size a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "y_size" ; + skos:definition "The number of pixels/voxels (size) along the y axis." ; + skos:inScheme . + +ANSRS:z_direction a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "z_direction" ; + skos:definition "A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction." ; + skos:inScheme . + +ANSRS:z_resolution a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "z_resolution" ; + skos:definition "The resolution (length / pixel) in along the z axis (numerical value part)." ; + skos:inScheme . + +ANSRS:z_size a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "z_size" ; + skos:definition "The number of pixels/voxels (size) along the y axis." ; + skos:inScheme . + +ANSRS:AnatomicalSpace a owl:Class, + linkml:ClassDefinition ; + rdfs:label "AnatomicalSpace" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ImageDataset ; + owl:onProperty ANSRS:measures ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:AnatomicalSpace ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:measures ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:measures ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + ANSRS:VersionedNamedThing ; + skos:definition "An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499)" ; + skos:inScheme . + +ANSRS:ParcellationTerminology a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ParcellationTerminology" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:ParcellationTerminology ; + owl:onProperty ANSRS:revision_of ], + ANSRS:VersionedNamedThing ; + skos:definition "A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, providing human readability and context and allowing communication about brain locations and structural properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499)" ; + skos:inScheme . + +ANSRS:ordinal a owl:ObjectProperty, + linkml:SlotDefinition . + +ANSRS:subject_parcellation_term a owl:ObjectProperty, + linkml:SlotDefinition . + +ANSRS:DISTANCEUNIT a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + . + +ANSRS:VersionedNamedThing a owl:Class, + linkml:ClassDefinition ; + rdfs:label "VersionedNamedThing" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:version ], + [ a owl:Restriction ; + owl:allValuesFrom ANSRS:VersionedNamedThing ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ANSRS:version ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ANSRS:revision_of ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ANSRS:version ], + ANSRS:NamedThing ; + skos:definition "Core base entity for ANSRS schema representing an versioned named thing." ; + skos:inScheme . + +ANSRS:ANATOMICALDIRECTION a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + . + +ANSRS:revision_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "revision_of" ; + rdfs:range ANSRS:VersionedNamedThing ; + skos:inScheme . + + a owl:Ontology ; + rdfs:label "ansrs-schema" ; + dcterms:license "MIT" ; + dcterms:title "ANSRS schema" ; + rdfs:seeAlso ; + skos:definition "Schema for ANSRS" . + diff --git a/project/prefixmap/ansrs_schema.yaml b/project/prefixmap/ansrs_schema.yaml new file mode 100644 index 0000000..692f0f0 --- /dev/null +++ b/project/prefixmap/ansrs_schema.yaml @@ -0,0 +1,9 @@ +{ + "ANSRS": "https://w3id.org/my-org/ansrs-schema/", + "PATO": "http://purl.obolibrary.org/obo/PATO_", + "ansrs": "https://w3id.org/my-org/ansrs-schema/", + "biolink": "https://w3id.org/biolink/", + "example": "https://example.org/", + "linkml": "https://w3id.org/linkml/", + "schema": "http://schema.org/" +} diff --git a/project/protobuf/ansrs_schema.proto b/project/protobuf/ansrs_schema.proto new file mode 100644 index 0000000..83c8c6e --- /dev/null +++ b/project/protobuf/ansrs_schema.proto @@ -0,0 +1,112 @@ +// An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same anatomical space that divides the space into distinct segments following some annotation criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499) +message AnatomicalAnnotationSet + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + anatomicalSpace parameterizes = 0 + parcellationTerminology revisionOf = 0 + } +// An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499) +message AnatomicalSpace + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + imageDataset measures = 0 + anatomicalSpace revisionOf = 0 + } +// An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266) +message ImageDataset + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + aNATOMICALDIRECTION xDirection = 0 + aNATOMICALDIRECTION yDirection = 0 + aNATOMICALDIRECTION zDirection = 0 + integer xSize = 0 + integer ySize = 0 + integer zSize = 0 + float xResolution = 0 + float yResolution = 0 + float zResolution = 0 + dISTANCEUNIT unit = 0 + imageDataset revisionOf = 0 + } +// A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation corresponds to a specific label index (internal identifier) in the mask. +message ParcellationAnnotation + { + anatomicalAnnotationSet partOfAnatomicalAnnotationSet = 0 + string internalIdentifier = 0 + integer voxelCount = 0 + } +// The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent region R. +message ParcellationAnnotationTermMap + { + parcellationAnnotation subjectParcellationAnnotation = 0 + parcellationTerm subjectParcellationTerm = 0 + } +// A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499). +message ParcellationAtlas + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + anatomicalSpace hasAnatomicalSpace = 0 + anatomicalAnnotationSet hasAnatomicalAnnotationSet = 0 + parcellationTerminology hasParcellationTerminology = 0 + parcellationAtlas specializationOf = 0 + anatomicalSpace revisionOf = 0 + } +// The parcellation color assignment associates hex color value to a parcellation term within a versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. +message ParcellationColorAssignment + { + parcellationColorScheme partOfParcellationColorScheme = 0 + parcellationTerm subjectParcellationTerm = 0 + string color = 0 + } +// A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one parcellation terminology. +message ParcellationColorScheme + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + parcellationTerminology subjectParcellationTerminology = 0 + parcellationTerminology revisionOf = 0 + } +// A parcellation term is an individual term within a specific parcellation terminology describing a single anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within the context of one versioned release of a parcellation terminology, they can be reused in different parcellation terminology versions enabling the representation of terminology updates and modifications over time. +message ParcellationTerm + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string symbol = 0 + parcellationTermSet partOfParcellationTermSet = 0 + integer ordinal = 0 + parcellationTerm hasParentParcellationTerm = 0 + } +// A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, providing human readability and context and allowing communication about brain locations and structural properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499) +message ParcellationTerminology + { + uriorcurie id = 0 + string name = 0 + string description = 0 + string version = 0 + parcellationTerminology revisionOf = 0 + } +// A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, all terms are grouped into a single parcellation term set. +message ParcellationTermSet + { + uriorcurie id = 0 + string name = 0 + string description = 0 + parcellationTerminology partOfParcellationTerminology = 0 + integer ordinal = 0 + parcellationTermSet hasParentParcellationTermSet = 0 + } diff --git a/project/shacl/ansrs_schema.shacl.ttl b/project/shacl/ansrs_schema.shacl.ttl new file mode 100644 index 0000000..1c50e63 --- /dev/null +++ b/project/shacl/ansrs_schema.shacl.ttl @@ -0,0 +1,488 @@ +@prefix ANSRS: . +@prefix rdf: . +@prefix sh: . +@prefix xsd: . + +ANSRS:NamedThing a sh:NodeShape ; + sh:closed false ; + sh:description "Core base entity for ANSRS schema representing an entity with an identifier name and description." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path ANSRS:id ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path ANSRS:name ] ; + sh:targetClass ANSRS:NamedThing . + +ANSRS:ParcellationAnnotationTermMap a sh:NodeShape ; + sh:closed true ; + sh:description "The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent region R." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:ParcellationTerm ; + sh:description "Reference to the parcellation term that is the subject of the association." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:subject_parcellation_term ], + [ sh:class ANSRS:ParcellationAnnotation ; + sh:description "Reference to the parcellation annotation that is the subject of the association." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 0 ; + sh:path ANSRS:subject_parcellation_annotation ] ; + sh:targetClass ANSRS:ParcellationAnnotationTermMap . + +ANSRS:ParcellationColorAssignment a sh:NodeShape ; + sh:closed true ; + sh:description "The parcellation color assignment associates hex color value to a parcellation term within a versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:ParcellationColorScheme ; + sh:description "Reference to the parcellation color scheme for which the color assignment is part of." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:part_of_parcellation_color_scheme ], + [ sh:datatype xsd:string ; + sh:description "A string representing to hex triplet code of a color" ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path ANSRS:color ], + [ sh:class ANSRS:ParcellationTerm ; + sh:description "Reference to the parcellation term identifier for which the color assignment is about." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:subject_parcellation_term ] ; + sh:targetClass ANSRS:ParcellationColorAssignment . + +ANSRS:ParcellationAnnotation a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation corresponds to a specific label index (internal identifier) in the mask." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:AnatomicalAnnotationSet ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:part_of_anatomical_annotation_set ], + [ sh:datatype xsd:integer ; + sh:description "The number of voxels (3D pixels) spanned by the parcellation annotation (optional)." ; + sh:maxCount 1 ; + sh:minInclusive 0 ; + sh:order 2 ; + sh:path ANSRS:voxel_count ], + [ sh:datatype xsd:string ; + sh:description "An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path ANSRS:internal_identifier ] ; + sh:targetClass ANSRS:ParcellationAnnotation . + +ANSRS:ParcellationAtlas a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:AnatomicalSpace ; + sh:description "Reference to the anatomical space component of the parcellation atlas" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:has_anatomical_space ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 7 ; + sh:path ANSRS:name ], + [ sh:class ANSRS:AnatomicalSpace ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 5 ; + sh:path ANSRS:revision_of ], + [ sh:class ANSRS:AnatomicalAnnotationSet ; + sh:description "Reference to the anatomical annotation set component of the parcellation atlas" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:has_anatomical_annotation_set ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:version ], + [ sh:class ANSRS:ParcellationTerminology ; + sh:description "Reference to the parcellation terminology component of the parcellation atlas" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path ANSRS:has_parcellation_terminology ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 6 ; + sh:path ANSRS:id ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 8 ; + sh:path ANSRS:description ], + [ sh:class ANSRS:ParcellationAtlas ; + sh:description "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path ANSRS:specialization_of ] ; + sh:targetClass ANSRS:ParcellationAtlas . + +ANSRS:ParcellationColorScheme a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one parcellation terminology." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path ANSRS:version ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:name ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:id ], + [ sh:class ANSRS:ParcellationTerminology ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path ANSRS:revision_of ], + [ sh:class ANSRS:ParcellationTerminology ; + sh:description "Reference to the parcellation terminology for which the parcellation color scheme is in context of." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:subject_parcellation_terminology ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 5 ; + sh:path ANSRS:description ] ; + sh:targetClass ANSRS:ParcellationColorScheme . + +ANSRS:VersionedNamedThing a sh:NodeShape ; + sh:closed false ; + sh:description "Core base entity for ANSRS schema representing an versioned named thing." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:name ], + [ sh:class ANSRS:VersionedNamedThing ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:revision_of ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path ANSRS:version ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path ANSRS:id ] ; + sh:targetClass ANSRS:VersionedNamedThing . + +ANSRS:AnatomicalAnnotationSet a sh:NodeShape ; + sh:closed true ; + sh:description "An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same anatomical space that divides the space into distinct segments following some annotation criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499)" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 5 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path ANSRS:version ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:name ], + [ sh:class ANSRS:ParcellationTerminology ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path ANSRS:revision_of ], + [ sh:class ANSRS:AnatomicalSpace ; + sh:description "Reference to the anatomical space for which the anatomical annotation set is anchored" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:parameterizes ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:id ] ; + sh:targetClass ANSRS:AnatomicalAnnotationSet . + +ANSRS:ImageDataset a sh:NodeShape ; + sh:closed true ; + sh:description "An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266)" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:description "A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values." ; + sh:in ( "mm" "um" "m" ) ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path ANSRS:unit ], + [ sh:datatype xsd:float ; + sh:description "The resolution (length / pixel) in along the x axis (numerical value part)." ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path ANSRS:x_resolution ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 13 ; + sh:path ANSRS:name ], + [ sh:datatype xsd:float ; + sh:description "The resolution (length / pixel) in along the y axis (numerical value part)." ; + sh:maxCount 1 ; + sh:order 7 ; + sh:path ANSRS:y_resolution ], + [ sh:datatype xsd:integer ; + sh:description "The number of pixels/voxels (size) along the y axis." ; + sh:maxCount 1 ; + sh:minInclusive 1 ; + sh:order 4 ; + sh:path ANSRS:y_size ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 10 ; + sh:path ANSRS:version ], + [ sh:class ANSRS:ImageDataset ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 11 ; + sh:path ANSRS:revision_of ], + [ sh:description "A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction." ; + sh:in ( "left_to_right" "posterior_to_anterior" "inferior_to_superior" ) ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path ANSRS:z_direction ], + [ sh:datatype xsd:integer ; + sh:description "The number of pixels/voxels (size) along the x axis." ; + sh:maxCount 1 ; + sh:minInclusive 1 ; + sh:order 3 ; + sh:path ANSRS:x_size ], + [ sh:description "A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction." ; + sh:in ( "left_to_right" "posterior_to_anterior" "inferior_to_superior" ) ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ANSRS:x_direction ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 12 ; + sh:path ANSRS:id ], + [ sh:description "A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction." ; + sh:in ( "left_to_right" "posterior_to_anterior" "inferior_to_superior" ) ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path ANSRS:y_direction ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 14 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:float ; + sh:description "The resolution (length / pixel) in along the z axis (numerical value part)." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path ANSRS:z_resolution ], + [ sh:datatype xsd:integer ; + sh:description "The number of pixels/voxels (size) along the y axis." ; + sh:maxCount 1 ; + sh:minInclusive 1 ; + sh:order 5 ; + sh:path ANSRS:z_size ] ; + sh:targetClass ANSRS:ImageDataset . + +ANSRS:ParcellationTermSet a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, all terms are grouped into a single parcellation term set." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:id ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:name ], + [ sh:class ANSRS:ParcellationTerminology ; + sh:description "Reference to the parcellation terminology for which the parcellation term set partitions." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:part_of_parcellation_terminology ], + [ sh:datatype xsd:integer ; + sh:description "Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology." ; + sh:maxCount 1 ; + sh:minInclusive 0 ; + sh:order 1 ; + sh:path ANSRS:ordinal ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 5 ; + sh:path ANSRS:description ], + [ sh:class ANSRS:ParcellationTermSet ; + sh:description "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path ANSRS:has_parent_parcellation_term_set ] ; + sh:targetClass ANSRS:ParcellationTermSet . + +ANSRS:ParcellationTerm a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation term is an individual term within a specific parcellation terminology describing a single anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within the context of one versioned release of a parcellation terminology, they can be reused in different parcellation terminology versions enabling the representation of terminology updates and modifications over time." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:ParcellationTerm ; + sh:description "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path ANSRS:has_parent_parcellation_term ], + [ sh:datatype xsd:integer ; + sh:description "Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology." ; + sh:maxCount 1 ; + sh:minInclusive 0 ; + sh:order 2 ; + sh:path ANSRS:ordinal ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 6 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 5 ; + sh:path ANSRS:name ], + [ sh:datatype xsd:string ; + sh:description "Symbol representing a parcellation term." ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ANSRS:symbol ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:id ], + [ sh:class ANSRS:ParcellationTermSet ; + sh:description "Reference to the parcellation term set for which the parcellation term is part of." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:part_of_parcellation_term_set ] ; + sh:targetClass ANSRS:ParcellationTerm . + +ANSRS:AnatomicalSpace a sh:NodeShape ; + sh:closed true ; + sh:description "An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499)" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:AnatomicalSpace ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path ANSRS:revision_of ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path ANSRS:version ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 5 ; + sh:path ANSRS:description ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:name ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:id ], + [ sh:class ANSRS:ImageDataset ; + sh:description "Reference to the specific image dataset used to define the anatomical space." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ANSRS:measures ] ; + sh:targetClass ANSRS:AnatomicalSpace . + +ANSRS:ParcellationTerminology a sh:NodeShape ; + sh:closed true ; + sh:description "A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, providing human readability and context and allowing communication about brain locations and structural properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499)" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ANSRS:ParcellationTerminology ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ANSRS:revision_of ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path ANSRS:name ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path ANSRS:id ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path ANSRS:version ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path ANSRS:description ] ; + sh:targetClass ANSRS:ParcellationTerminology . + diff --git a/project/shex/ansrs_schema.shex b/project/shex/ansrs_schema.shex new file mode 100644 index 0000000..8b2684f --- /dev/null +++ b/project/shex/ansrs_schema.shex @@ -0,0 +1,199 @@ +BASE +PREFIX rdf: +PREFIX xsd: +PREFIX linkml: + + +linkml:String xsd:string + +linkml:Integer xsd:integer + +linkml:Boolean xsd:boolean + +linkml:Float xsd:float + +linkml:Double xsd:double + +linkml:Decimal xsd:decimal + +linkml:Time xsd:time + +linkml:Date xsd:date + +linkml:Datetime xsd:dateTime + +linkml:DateOrDatetime linkml:DateOrDatetime + +linkml:Uriorcurie IRI + +linkml:Curie xsd:string + +linkml:Uri IRI + +linkml:Ncname xsd:string + +linkml:Objectidentifier IRI + +linkml:Nodeidentifier NONLITERAL + +linkml:Jsonpointer xsd:string + +linkml:Jsonpath xsd:string + +linkml:Sparqlpath xsd:string + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + [ + + ] ? ; + [ + + ] ? ; + [ + + ] ? ; + @linkml:Integer ? ; + @linkml:Integer ? ; + @linkml:Integer ? ; + @linkml:Float ? ; + @linkml:Float ? ; + @linkml:Float ? ; + [ + ] ? ; + @ ? + ) ; + rdf:type [ ] + ) +} + + ( + @ OR @ OR @ +) + + { + ( $ ( @linkml:String ; + @linkml:String + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( @ ; + @linkml:String ; + @linkml:Integer ? + ) ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( @ ; + @ + ) ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ; + @ ; + @ ; + @ ? ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( @ ; + @ ; + @linkml:String ? + ) ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @linkml:String ? ; + @ ; + @linkml:Integer ? ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @ ; + @linkml:Integer ? ; + @ ? + ) ; + rdf:type [ ] + ) +} + + ( + @ OR @ OR @ OR @ OR @ OR + @ +) + + { + ( $ ( & ; + rdf:type [ ] ? ; + @linkml:String ; + @ ? + ) ; + rdf:type [ ] + ) +} + + diff --git a/project/sqlschema/ansrs_schema.sql b/project/sqlschema/ansrs_schema.sql new file mode 100644 index 0000000..dcb4764 --- /dev/null +++ b/project/sqlschema/ansrs_schema.sql @@ -0,0 +1,134 @@ + + +CREATE TABLE "ImageDataset" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + x_direction VARCHAR(21), + y_direction VARCHAR(21), + z_direction VARCHAR(21), + x_size INTEGER, + y_size INTEGER, + z_size INTEGER, + x_resolution FLOAT, + y_resolution FLOAT, + z_resolution FLOAT, + unit VARCHAR(2), + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(revision_of) REFERENCES "ImageDataset" (id) +); + +CREATE TABLE "ParcellationTerminology" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(revision_of) REFERENCES "ParcellationTerminology" (id) +); + +CREATE TABLE "AnatomicalSpace" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + measures TEXT NOT NULL, + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(measures) REFERENCES "ImageDataset" (id), + FOREIGN KEY(revision_of) REFERENCES "AnatomicalSpace" (id) +); + +CREATE TABLE "ParcellationColorScheme" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + subject_parcellation_terminology TEXT NOT NULL, + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(subject_parcellation_terminology) REFERENCES "ParcellationTerminology" (id), + FOREIGN KEY(revision_of) REFERENCES "ParcellationTerminology" (id) +); + +CREATE TABLE "ParcellationTermSet" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + part_of_parcellation_terminology TEXT NOT NULL, + ordinal INTEGER, + has_parent_parcellation_term_set TEXT, + PRIMARY KEY (id), + FOREIGN KEY(part_of_parcellation_terminology) REFERENCES "ParcellationTerminology" (id), + FOREIGN KEY(has_parent_parcellation_term_set) REFERENCES "ParcellationTermSet" (id) +); + +CREATE TABLE "AnatomicalAnnotationSet" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + parameterizes TEXT NOT NULL, + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(parameterizes) REFERENCES "AnatomicalSpace" (id), + FOREIGN KEY(revision_of) REFERENCES "ParcellationTerminology" (id) +); + +CREATE TABLE "ParcellationTerm" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + symbol TEXT, + part_of_parcellation_term_set TEXT NOT NULL, + ordinal INTEGER, + has_parent_parcellation_term TEXT, + PRIMARY KEY (id), + FOREIGN KEY(part_of_parcellation_term_set) REFERENCES "ParcellationTermSet" (id), + FOREIGN KEY(has_parent_parcellation_term) REFERENCES "ParcellationTerm" (id) +); + +CREATE TABLE "ParcellationAnnotation" ( + part_of_anatomical_annotation_set TEXT NOT NULL, + internal_identifier TEXT NOT NULL, + voxel_count INTEGER, + PRIMARY KEY (part_of_anatomical_annotation_set, internal_identifier, voxel_count), + FOREIGN KEY(part_of_anatomical_annotation_set) REFERENCES "AnatomicalAnnotationSet" (id) +); + +CREATE TABLE "ParcellationAnnotationTermMap" ( + subject_parcellation_annotation TEXT NOT NULL, + subject_parcellation_term TEXT NOT NULL, + PRIMARY KEY (subject_parcellation_annotation, subject_parcellation_term), + FOREIGN KEY(subject_parcellation_term) REFERENCES "ParcellationTerm" (id) +); + +CREATE TABLE "ParcellationAtlas" ( + id TEXT NOT NULL, + name TEXT NOT NULL, + description TEXT NOT NULL, + version TEXT NOT NULL, + has_anatomical_space TEXT NOT NULL, + has_anatomical_annotation_set TEXT NOT NULL, + has_parcellation_terminology TEXT NOT NULL, + specialization_of TEXT, + revision_of TEXT, + PRIMARY KEY (id), + FOREIGN KEY(has_anatomical_space) REFERENCES "AnatomicalSpace" (id), + FOREIGN KEY(has_anatomical_annotation_set) REFERENCES "AnatomicalAnnotationSet" (id), + FOREIGN KEY(has_parcellation_terminology) REFERENCES "ParcellationTerminology" (id), + FOREIGN KEY(specialization_of) REFERENCES "ParcellationAtlas" (id), + FOREIGN KEY(revision_of) REFERENCES "AnatomicalSpace" (id) +); + +CREATE TABLE "ParcellationColorAssignment" ( + part_of_parcellation_color_scheme TEXT NOT NULL, + subject_parcellation_term TEXT NOT NULL, + color TEXT, + PRIMARY KEY (part_of_parcellation_color_scheme, subject_parcellation_term, color), + FOREIGN KEY(part_of_parcellation_color_scheme) REFERENCES "ParcellationColorScheme" (id), + FOREIGN KEY(subject_parcellation_term) REFERENCES "ParcellationTerm" (id) +); diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..153dea1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "ansrs_schema" +version = "0.1.0" +description = "Schema for ANSRS" +authors = ["Lydia Ng "] +license = "MIT" +readme = "README.md" +include = ["README.md", "src/ansrs_schema/schema", "project"] + +[tool.poetry.dependencies] +python = "^3.9" +linkml-runtime = "^1.1.24" + +[tool.poetry-dynamic-versioning] +enable = true +vcs = "git" +style = "pep440" + +[tool.poetry.dev-dependencies] +linkml = "^1.3.5" +mkdocs-material = "^8.2.8" +mkdocs-mermaid2-plugin = "^0.6.0" +schemasheets = "^0.1.14" + +[build-system] +requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning"] +build-backend = "poetry_dynamic_versioning.backend" + +[tool.poetry.extras] +docs = ["linkml", "mkdocs-material"] \ No newline at end of file diff --git a/src/ansrs_schema/_version.py b/src/ansrs_schema/_version.py new file mode 100644 index 0000000..7edc9ee --- /dev/null +++ b/src/ansrs_schema/_version.py @@ -0,0 +1,7 @@ +from importlib.metadata import version, PackageNotFoundError + +try: + __version__ = version(__name__) +except PackageNotFoundError: + # package not installed + __version__ = "0.0.0" diff --git a/src/ansrs_schema/datamodel/__init__.py b/src/ansrs_schema/datamodel/__init__.py new file mode 100644 index 0000000..6df84db --- /dev/null +++ b/src/ansrs_schema/datamodel/__init__.py @@ -0,0 +1 @@ +from .ansrs_schema import * diff --git a/src/ansrs_schema/datamodel/ansrs_schema.py b/src/ansrs_schema/datamodel/ansrs_schema.py new file mode 100644 index 0000000..542db95 --- /dev/null +++ b/src/ansrs_schema/datamodel/ansrs_schema.py @@ -0,0 +1,782 @@ +# Auto generated from ansrs_schema.yaml by pythongen.py version: 0.0.1 +# Generation date: 2024-02-06T10:46:00 +# Schema: ansrs-schema +# +# id: https://w3id.org/my-org/ansrs-schema +# description: Schema for ANSRS +# license: MIT + +import dataclasses +import re +from jsonasobj2 import JsonObj, as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any +from dataclasses import dataclass +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions + +from linkml_runtime.utils.slot import Slot +from linkml_runtime.utils.metamodelcore import empty_list, empty_dict, bnode +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str, extended_float, extended_int +from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs +from linkml_runtime.utils.formatutils import camelcase, underscore, sfx +from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from rdflib import Namespace, URIRef +from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.linkml_model.types import Float, Integer, String, Uriorcurie +from linkml_runtime.utils.metamodelcore import URIorCURIE + +metamodel_version = "1.7.0" +version = None + +# Overwrite dataclasses _init_fn to add **kwargs in __init__ +dataclasses._init_fn = dataclasses_init_fn_with_kwargs + +# Namespaces +ANSRS = CurieNamespace('ANSRS', 'https://w3id.org/my-org/ansrs-schema/') +PATO = CurieNamespace('PATO', 'http://purl.obolibrary.org/obo/PATO_') +ANSRS = CurieNamespace('ansrs', 'https://w3id.org/my-org/ansrs-schema/') +BIOLINK = CurieNamespace('biolink', 'https://w3id.org/biolink/') +EXAMPLE = CurieNamespace('example', 'https://example.org/') +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +SCHEMA = CurieNamespace('schema', 'http://schema.org/') +DEFAULT_ = ANSRS + + +# Types + +# Class references +class NamedThingId(URIorCURIE): + pass + + +class ParcellationTermSetId(NamedThingId): + pass + + +class ParcellationTermId(NamedThingId): + pass + + +class VersionedNamedThingId(NamedThingId): + pass + + +class ImageDatasetId(VersionedNamedThingId): + pass + + +class AnatomicalSpaceId(VersionedNamedThingId): + pass + + +class ParcellationTerminologyId(VersionedNamedThingId): + pass + + +class ParcellationColorSchemeId(VersionedNamedThingId): + pass + + +class AnatomicalAnnotationSetId(VersionedNamedThingId): + pass + + +class ParcellationAtlasId(VersionedNamedThingId): + pass + + +@dataclass +class ParcellationColorAssignment(YAMLRoot): + """ + The parcellation color assignment associates hex color value to a parcellation term within a versioned release of + a color scheme. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation + terminology it belongs to. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationColorAssignment"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationColorAssignment" + class_name: ClassVar[str] = "ParcellationColorAssignment" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationColorAssignment + + part_of_parcellation_color_scheme: Union[str, ParcellationColorSchemeId] = None + subject_parcellation_term: Union[str, ParcellationTermId] = None + color: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.part_of_parcellation_color_scheme): + self.MissingRequiredField("part_of_parcellation_color_scheme") + if not isinstance(self.part_of_parcellation_color_scheme, ParcellationColorSchemeId): + self.part_of_parcellation_color_scheme = ParcellationColorSchemeId(self.part_of_parcellation_color_scheme) + + if self._is_empty(self.subject_parcellation_term): + self.MissingRequiredField("subject_parcellation_term") + if not isinstance(self.subject_parcellation_term, ParcellationTermId): + self.subject_parcellation_term = ParcellationTermId(self.subject_parcellation_term) + + if self.color is not None and not isinstance(self.color, str): + self.color = str(self.color) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationAnnotation(YAMLRoot): + """ + A parcellation annotation defines a specific segment of an anatomical space denoted by an internal identifier and + is a unique and exclusive member of a versioned release anatomical annotation set. For example, in the case where + the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), a specific annotation + corresponds to a specific label index (internal identifier) in the mask. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationAnnotation"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationAnnotation" + class_name: ClassVar[str] = "ParcellationAnnotation" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationAnnotation + + part_of_anatomical_annotation_set: Union[str, AnatomicalAnnotationSetId] = None + internal_identifier: str = None + voxel_count: Optional[int] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.part_of_anatomical_annotation_set): + self.MissingRequiredField("part_of_anatomical_annotation_set") + if not isinstance(self.part_of_anatomical_annotation_set, AnatomicalAnnotationSetId): + self.part_of_anatomical_annotation_set = AnatomicalAnnotationSetId(self.part_of_anatomical_annotation_set) + + if self._is_empty(self.internal_identifier): + self.MissingRequiredField("internal_identifier") + if not isinstance(self.internal_identifier, str): + self.internal_identifier = str(self.internal_identifier) + + if self.voxel_count is not None and not isinstance(self.voxel_count, int): + self.voxel_count = int(self.voxel_count) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationAnnotationTermMap(YAMLRoot): + """ + The parcellation annotation term map table defines the relationship between parcellation annotations and + parcellation terms. A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation + terminology it belongs to. A parcellation term can be spatially parameterized by the union of one or more + parcellation annotations within a versioned release of an anatomical annotation set. For example, annotations + defining individual cortical layers in cortical region R (R1, R2/3, R4, etc) can be combined to define the parent + region R. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationAnnotationTermMap"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationAnnotationTermMap" + class_name: ClassVar[str] = "ParcellationAnnotationTermMap" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationAnnotationTermMap + + subject_parcellation_annotation: Union[dict, ParcellationAnnotation] = None + subject_parcellation_term: Union[str, ParcellationTermId] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.subject_parcellation_annotation): + self.MissingRequiredField("subject_parcellation_annotation") + if not isinstance(self.subject_parcellation_annotation, ParcellationAnnotation): + self.subject_parcellation_annotation = ParcellationAnnotation(**as_dict(self.subject_parcellation_annotation)) + + if self._is_empty(self.subject_parcellation_term): + self.MissingRequiredField("subject_parcellation_term") + if not isinstance(self.subject_parcellation_term, ParcellationTermId): + self.subject_parcellation_term = ParcellationTermId(self.subject_parcellation_term) + + super().__post_init__(**kwargs) + + +@dataclass +class NamedThing(YAMLRoot): + """ + Core base entity for ANSRS schema representing an entity with an identifier name and description. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["NamedThing"] + class_class_curie: ClassVar[str] = "ANSRS:NamedThing" + class_name: ClassVar[str] = "NamedThing" + class_model_uri: ClassVar[URIRef] = ANSRS.NamedThing + + id: Union[str, NamedThingId] = None + name: str = None + description: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, NamedThingId): + self.id = NamedThingId(self.id) + + if self._is_empty(self.name): + self.MissingRequiredField("name") + if not isinstance(self.name, str): + self.name = str(self.name) + + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationTermSet(NamedThing): + """ + A parcellation term set is the set of parcellation terms within a specific parcellation terminology. A + parcellation term set belongs to one and only one parcellation terminology and each parcellation term in a + parcellation terminology belongs to one and only one term set. If the parcellation terminology is a taxonomy, + parcellation term sets can be used to represent taxonomic ranks. For consistency, if the terminology does not have + the notion of taxonomic ranks, all terms are grouped into a single parcellation term set. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationTermSet"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationTermSet" + class_name: ClassVar[str] = "ParcellationTermSet" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationTermSet + + id: Union[str, ParcellationTermSetId] = None + name: str = None + description: str = None + part_of_parcellation_terminology: Union[str, ParcellationTerminologyId] = None + ordinal: Optional[int] = None + has_parent_parcellation_term_set: Optional[Union[str, ParcellationTermSetId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ParcellationTermSetId): + self.id = ParcellationTermSetId(self.id) + + if self._is_empty(self.part_of_parcellation_terminology): + self.MissingRequiredField("part_of_parcellation_terminology") + if not isinstance(self.part_of_parcellation_terminology, ParcellationTerminologyId): + self.part_of_parcellation_terminology = ParcellationTerminologyId(self.part_of_parcellation_terminology) + + if self.ordinal is not None and not isinstance(self.ordinal, int): + self.ordinal = int(self.ordinal) + + if self.has_parent_parcellation_term_set is not None and not isinstance(self.has_parent_parcellation_term_set, ParcellationTermSetId): + self.has_parent_parcellation_term_set = ParcellationTermSetId(self.has_parent_parcellation_term_set) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationTerm(NamedThing): + """ + A parcellation term is an individual term within a specific parcellation terminology describing a single + anatomical entity by a persistent identifier, name, symbol and description. A parcellation term is a unique and + exclusive member of a versioned release parcellation terminology. Although term identifiers must be unique within + the context of one versioned release of a parcellation terminology, they can be reused in different parcellation + terminology versions enabling the representation of terminology updates and modifications over time. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationTerm"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationTerm" + class_name: ClassVar[str] = "ParcellationTerm" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationTerm + + id: Union[str, ParcellationTermId] = None + name: str = None + description: str = None + part_of_parcellation_term_set: Union[str, ParcellationTermSetId] = None + symbol: Optional[str] = None + ordinal: Optional[int] = None + has_parent_parcellation_term: Optional[Union[str, ParcellationTermId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ParcellationTermId): + self.id = ParcellationTermId(self.id) + + if self._is_empty(self.part_of_parcellation_term_set): + self.MissingRequiredField("part_of_parcellation_term_set") + if not isinstance(self.part_of_parcellation_term_set, ParcellationTermSetId): + self.part_of_parcellation_term_set = ParcellationTermSetId(self.part_of_parcellation_term_set) + + if self.symbol is not None and not isinstance(self.symbol, str): + self.symbol = str(self.symbol) + + if self.ordinal is not None and not isinstance(self.ordinal, int): + self.ordinal = int(self.ordinal) + + if self.has_parent_parcellation_term is not None and not isinstance(self.has_parent_parcellation_term, ParcellationTermId): + self.has_parent_parcellation_term = ParcellationTermId(self.has_parent_parcellation_term) + + super().__post_init__(**kwargs) + + +@dataclass +class VersionedNamedThing(NamedThing): + """ + Core base entity for ANSRS schema representing an versioned named thing. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["VersionedNamedThing"] + class_class_curie: ClassVar[str] = "ANSRS:VersionedNamedThing" + class_name: ClassVar[str] = "VersionedNamedThing" + class_model_uri: ClassVar[URIRef] = ANSRS.VersionedNamedThing + + id: Union[str, VersionedNamedThingId] = None + name: str = None + description: str = None + version: str = None + revision_of: Optional[Union[str, VersionedNamedThingId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.version): + self.MissingRequiredField("version") + if not isinstance(self.version, str): + self.version = str(self.version) + + if self.revision_of is not None and not isinstance(self.revision_of, VersionedNamedThingId): + self.revision_of = VersionedNamedThingId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class ImageDataset(VersionedNamedThing): + """ + An image dataset is versioned release of a multidimensional regular grid of measurements and metadata required for + a morphological representation of an entity such as an anatomical structure (ref: OBI_0003327, RRID:SCR_006266) + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ImageDataset"] + class_class_curie: ClassVar[str] = "ANSRS:ImageDataset" + class_name: ClassVar[str] = "ImageDataset" + class_model_uri: ClassVar[URIRef] = ANSRS.ImageDataset + + id: Union[str, ImageDatasetId] = None + name: str = None + description: str = None + version: str = None + x_direction: Optional[Union[str, "ANATOMICALDIRECTION"]] = None + y_direction: Optional[Union[str, "ANATOMICALDIRECTION"]] = None + z_direction: Optional[Union[str, "ANATOMICALDIRECTION"]] = None + x_size: Optional[int] = None + y_size: Optional[int] = None + z_size: Optional[int] = None + x_resolution: Optional[float] = None + y_resolution: Optional[float] = None + z_resolution: Optional[float] = None + unit: Optional[Union[str, "DISTANCEUNIT"]] = None + revision_of: Optional[Union[str, ImageDatasetId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ImageDatasetId): + self.id = ImageDatasetId(self.id) + + if self.x_direction is not None and not isinstance(self.x_direction, ANATOMICALDIRECTION): + self.x_direction = ANATOMICALDIRECTION(self.x_direction) + + if self.y_direction is not None and not isinstance(self.y_direction, ANATOMICALDIRECTION): + self.y_direction = ANATOMICALDIRECTION(self.y_direction) + + if self.z_direction is not None and not isinstance(self.z_direction, ANATOMICALDIRECTION): + self.z_direction = ANATOMICALDIRECTION(self.z_direction) + + if self.x_size is not None and not isinstance(self.x_size, int): + self.x_size = int(self.x_size) + + if self.y_size is not None and not isinstance(self.y_size, int): + self.y_size = int(self.y_size) + + if self.z_size is not None and not isinstance(self.z_size, int): + self.z_size = int(self.z_size) + + if self.x_resolution is not None and not isinstance(self.x_resolution, float): + self.x_resolution = float(self.x_resolution) + + if self.y_resolution is not None and not isinstance(self.y_resolution, float): + self.y_resolution = float(self.y_resolution) + + if self.z_resolution is not None and not isinstance(self.z_resolution, float): + self.z_resolution = float(self.z_resolution) + + if self.unit is not None and not isinstance(self.unit, DISTANCEUNIT): + self.unit = DISTANCEUNIT(self.unit) + + if self.revision_of is not None and not isinstance(self.revision_of, ImageDatasetId): + self.revision_of = ImageDatasetId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class AnatomicalSpace(VersionedNamedThing): + """ + An anatomical space is versioned release of a mathematical space with a defined mapping between the anatomical + axes and the mathematical axes. An anatomical space may be defined by a reference image chosen as the biological + reference for an anatomical structure of interest derived from a single or multiple specimens (ref: ILX:0777106, + RRID:SCR_023499) + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["AnatomicalSpace"] + class_class_curie: ClassVar[str] = "ANSRS:AnatomicalSpace" + class_name: ClassVar[str] = "AnatomicalSpace" + class_model_uri: ClassVar[URIRef] = ANSRS.AnatomicalSpace + + id: Union[str, AnatomicalSpaceId] = None + name: str = None + description: str = None + version: str = None + measures: Union[str, ImageDatasetId] = None + revision_of: Optional[Union[str, AnatomicalSpaceId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, AnatomicalSpaceId): + self.id = AnatomicalSpaceId(self.id) + + if self._is_empty(self.measures): + self.MissingRequiredField("measures") + if not isinstance(self.measures, ImageDatasetId): + self.measures = ImageDatasetId(self.measures) + + if self.revision_of is not None and not isinstance(self.revision_of, AnatomicalSpaceId): + self.revision_of = AnatomicalSpaceId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationTerminology(VersionedNamedThing): + """ + A parcellation terminology is a versioned release set of terms that can be used to label annotations in an atlas, + providing human readability and context and allowing communication about brain locations and structural + properties. Typically, a terminology is a set of descriptive anatomical terms following a specific naming + convention and/or approach to organization scheme. The terminology may be a flat list of controlled vocabulary, a + taxonomy and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499) + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationTerminology"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationTerminology" + class_name: ClassVar[str] = "ParcellationTerminology" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationTerminology + + id: Union[str, ParcellationTerminologyId] = None + name: str = None + description: str = None + version: str = None + revision_of: Optional[Union[str, ParcellationTerminologyId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ParcellationTerminologyId): + self.id = ParcellationTerminologyId(self.id) + + if self.revision_of is not None and not isinstance(self.revision_of, ParcellationTerminologyId): + self.revision_of = ParcellationTerminologyId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationColorScheme(VersionedNamedThing): + """ + A parcellation color scheme is a versioned release color palette that can be used to visualize a parcellation + terminology or its related parcellation annotation. A parcellation terminology may have zero or more parcellation + color schemes and each color scheme is in context of a specific parcellation terminology, where each parcellation + term is assigned a hex color value. A parcellation color scheme is defined as a part of one and only one + parcellation terminology. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationColorScheme"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationColorScheme" + class_name: ClassVar[str] = "ParcellationColorScheme" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationColorScheme + + id: Union[str, ParcellationColorSchemeId] = None + name: str = None + description: str = None + version: str = None + subject_parcellation_terminology: Union[str, ParcellationTerminologyId] = None + revision_of: Optional[Union[str, ParcellationTerminologyId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ParcellationColorSchemeId): + self.id = ParcellationColorSchemeId(self.id) + + if self._is_empty(self.subject_parcellation_terminology): + self.MissingRequiredField("subject_parcellation_terminology") + if not isinstance(self.subject_parcellation_terminology, ParcellationTerminologyId): + self.subject_parcellation_terminology = ParcellationTerminologyId(self.subject_parcellation_terminology) + + if self.revision_of is not None and not isinstance(self.revision_of, ParcellationTerminologyId): + self.revision_of = ParcellationTerminologyId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class AnatomicalAnnotationSet(VersionedNamedThing): + """ + An anatomical annotation set is a versioned release of a set of anatomical annotations anchored in the same + anatomical space that divides the space into distinct segments following some annotation criteria or parcellation + scheme. For example, the anatomical annotation set of 3D image based reference atlases (e.g. Allen Mouse CCF) can + be expressed as a set of label indices of single multi-valued image annotations or as a set of segmentation masks + (ref: ILX:0777108, RRID:SCR_023499) + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["AnatomicalAnnotationSet"] + class_class_curie: ClassVar[str] = "ANSRS:AnatomicalAnnotationSet" + class_name: ClassVar[str] = "AnatomicalAnnotationSet" + class_model_uri: ClassVar[URIRef] = ANSRS.AnatomicalAnnotationSet + + id: Union[str, AnatomicalAnnotationSetId] = None + name: str = None + description: str = None + version: str = None + parameterizes: Union[str, AnatomicalSpaceId] = None + revision_of: Optional[Union[str, ParcellationTerminologyId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, AnatomicalAnnotationSetId): + self.id = AnatomicalAnnotationSetId(self.id) + + if self._is_empty(self.parameterizes): + self.MissingRequiredField("parameterizes") + if not isinstance(self.parameterizes, AnatomicalSpaceId): + self.parameterizes = AnatomicalSpaceId(self.parameterizes) + + if self.revision_of is not None and not isinstance(self.revision_of, ParcellationTerminologyId): + self.revision_of = ParcellationTerminologyId(self.revision_of) + + super().__post_init__(**kwargs) + + +@dataclass +class ParcellationAtlas(VersionedNamedThing): + """ + A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial + relationship between objects or the location of objects within the context of some anatomical structure. An atlas + is minimally defined by a notion of space (either implicit or explicit) and an annotation set. Reference atlases + usually have additional parts that make them more useful in certain situations, such as a well defined coordinate + system, delineations indicating the boundaries of various regions or cell populations, landmarks, and labels and + names to make it easier to communicate about well known and useful locations (ref: ILX:0777109, RRID:SCR_023499). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = ANSRS["ParcellationAtlas"] + class_class_curie: ClassVar[str] = "ANSRS:ParcellationAtlas" + class_name: ClassVar[str] = "ParcellationAtlas" + class_model_uri: ClassVar[URIRef] = ANSRS.ParcellationAtlas + + id: Union[str, ParcellationAtlasId] = None + name: str = None + description: str = None + version: str = None + has_anatomical_space: Union[str, AnatomicalSpaceId] = None + has_anatomical_annotation_set: Union[str, AnatomicalAnnotationSetId] = None + has_parcellation_terminology: Union[str, ParcellationTerminologyId] = None + specialization_of: Optional[Union[str, ParcellationAtlasId]] = None + revision_of: Optional[Union[str, AnatomicalSpaceId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ParcellationAtlasId): + self.id = ParcellationAtlasId(self.id) + + if self._is_empty(self.has_anatomical_space): + self.MissingRequiredField("has_anatomical_space") + if not isinstance(self.has_anatomical_space, AnatomicalSpaceId): + self.has_anatomical_space = AnatomicalSpaceId(self.has_anatomical_space) + + if self._is_empty(self.has_anatomical_annotation_set): + self.MissingRequiredField("has_anatomical_annotation_set") + if not isinstance(self.has_anatomical_annotation_set, AnatomicalAnnotationSetId): + self.has_anatomical_annotation_set = AnatomicalAnnotationSetId(self.has_anatomical_annotation_set) + + if self._is_empty(self.has_parcellation_terminology): + self.MissingRequiredField("has_parcellation_terminology") + if not isinstance(self.has_parcellation_terminology, ParcellationTerminologyId): + self.has_parcellation_terminology = ParcellationTerminologyId(self.has_parcellation_terminology) + + if self.specialization_of is not None and not isinstance(self.specialization_of, ParcellationAtlasId): + self.specialization_of = ParcellationAtlasId(self.specialization_of) + + if self.revision_of is not None and not isinstance(self.revision_of, AnatomicalSpaceId): + self.revision_of = AnatomicalSpaceId(self.revision_of) + + super().__post_init__(**kwargs) + + +# Enumerations +class ANATOMICALDIRECTION(EnumDefinitionImpl): + + left_to_right = PermissibleValue( + text="left_to_right", + description="A controlled vocabulary term defining the x axis direction in terms of anatomical direction.") + posterior_to_anterior = PermissibleValue(text="posterior_to_anterior") + inferior_to_superior = PermissibleValue(text="inferior_to_superior") + + _defn = EnumDefinition( + name="ANATOMICALDIRECTION", + ) + +class DISTANCEUNIT(EnumDefinitionImpl): + + mm = PermissibleValue(text="mm") + um = PermissibleValue(text="um") + m = PermissibleValue(text="m") + + _defn = EnumDefinition( + name="DISTANCEUNIT", + ) + +# Slots +class slots: + pass + +slots.id = Slot(uri=ANSRS.id, name="id", curie=ANSRS.curie('id'), + model_uri=ANSRS.id, domain=None, range=URIRef) + +slots.name = Slot(uri=ANSRS.name, name="name", curie=ANSRS.curie('name'), + model_uri=ANSRS.name, domain=None, range=str) + +slots.description = Slot(uri=ANSRS.description, name="description", curie=ANSRS.curie('description'), + model_uri=ANSRS.description, domain=None, range=str) + +slots.version = Slot(uri=ANSRS.version, name="version", curie=ANSRS.curie('version'), + model_uri=ANSRS.version, domain=None, range=str) + +slots.revision_of = Slot(uri=ANSRS.revision_of, name="revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.revision_of, domain=None, range=Optional[Union[str, VersionedNamedThingId]]) + +slots.imageDataset__x_direction = Slot(uri=ANSRS.x_direction, name="imageDataset__x_direction", curie=ANSRS.curie('x_direction'), + model_uri=ANSRS.imageDataset__x_direction, domain=None, range=Optional[Union[str, "ANATOMICALDIRECTION"]]) + +slots.imageDataset__y_direction = Slot(uri=ANSRS.y_direction, name="imageDataset__y_direction", curie=ANSRS.curie('y_direction'), + model_uri=ANSRS.imageDataset__y_direction, domain=None, range=Optional[Union[str, "ANATOMICALDIRECTION"]]) + +slots.imageDataset__z_direction = Slot(uri=ANSRS.z_direction, name="imageDataset__z_direction", curie=ANSRS.curie('z_direction'), + model_uri=ANSRS.imageDataset__z_direction, domain=None, range=Optional[Union[str, "ANATOMICALDIRECTION"]]) + +slots.imageDataset__x_size = Slot(uri=ANSRS.x_size, name="imageDataset__x_size", curie=ANSRS.curie('x_size'), + model_uri=ANSRS.imageDataset__x_size, domain=None, range=Optional[int]) + +slots.imageDataset__y_size = Slot(uri=ANSRS.y_size, name="imageDataset__y_size", curie=ANSRS.curie('y_size'), + model_uri=ANSRS.imageDataset__y_size, domain=None, range=Optional[int]) + +slots.imageDataset__z_size = Slot(uri=ANSRS.z_size, name="imageDataset__z_size", curie=ANSRS.curie('z_size'), + model_uri=ANSRS.imageDataset__z_size, domain=None, range=Optional[int]) + +slots.imageDataset__x_resolution = Slot(uri=ANSRS.x_resolution, name="imageDataset__x_resolution", curie=ANSRS.curie('x_resolution'), + model_uri=ANSRS.imageDataset__x_resolution, domain=None, range=Optional[float]) + +slots.imageDataset__y_resolution = Slot(uri=ANSRS.y_resolution, name="imageDataset__y_resolution", curie=ANSRS.curie('y_resolution'), + model_uri=ANSRS.imageDataset__y_resolution, domain=None, range=Optional[float]) + +slots.imageDataset__z_resolution = Slot(uri=ANSRS.z_resolution, name="imageDataset__z_resolution", curie=ANSRS.curie('z_resolution'), + model_uri=ANSRS.imageDataset__z_resolution, domain=None, range=Optional[float]) + +slots.imageDataset__unit = Slot(uri=ANSRS.unit, name="imageDataset__unit", curie=ANSRS.curie('unit'), + model_uri=ANSRS.imageDataset__unit, domain=None, range=Optional[Union[str, "DISTANCEUNIT"]]) + +slots.anatomicalSpace__measures = Slot(uri=ANSRS.measures, name="anatomicalSpace__measures", curie=ANSRS.curie('measures'), + model_uri=ANSRS.anatomicalSpace__measures, domain=None, range=Union[str, ImageDatasetId]) + +slots.parcellationTermSet__part_of_parcellation_terminology = Slot(uri=ANSRS.part_of_parcellation_terminology, name="parcellationTermSet__part_of_parcellation_terminology", curie=ANSRS.curie('part_of_parcellation_terminology'), + model_uri=ANSRS.parcellationTermSet__part_of_parcellation_terminology, domain=None, range=Union[str, ParcellationTerminologyId]) + +slots.parcellationTermSet__ordinal = Slot(uri=ANSRS.ordinal, name="parcellationTermSet__ordinal", curie=ANSRS.curie('ordinal'), + model_uri=ANSRS.parcellationTermSet__ordinal, domain=None, range=Optional[int]) + +slots.parcellationTermSet__has_parent_parcellation_term_set = Slot(uri=ANSRS.has_parent_parcellation_term_set, name="parcellationTermSet__has_parent_parcellation_term_set", curie=ANSRS.curie('has_parent_parcellation_term_set'), + model_uri=ANSRS.parcellationTermSet__has_parent_parcellation_term_set, domain=None, range=Optional[Union[str, ParcellationTermSetId]]) + +slots.parcellationTerm__symbol = Slot(uri=ANSRS.symbol, name="parcellationTerm__symbol", curie=ANSRS.curie('symbol'), + model_uri=ANSRS.parcellationTerm__symbol, domain=None, range=Optional[str]) + +slots.parcellationTerm__part_of_parcellation_term_set = Slot(uri=ANSRS.part_of_parcellation_term_set, name="parcellationTerm__part_of_parcellation_term_set", curie=ANSRS.curie('part_of_parcellation_term_set'), + model_uri=ANSRS.parcellationTerm__part_of_parcellation_term_set, domain=None, range=Union[str, ParcellationTermSetId]) + +slots.parcellationTerm__ordinal = Slot(uri=ANSRS.ordinal, name="parcellationTerm__ordinal", curie=ANSRS.curie('ordinal'), + model_uri=ANSRS.parcellationTerm__ordinal, domain=None, range=Optional[int]) + +slots.parcellationTerm__has_parent_parcellation_term = Slot(uri=ANSRS.has_parent_parcellation_term, name="parcellationTerm__has_parent_parcellation_term", curie=ANSRS.curie('has_parent_parcellation_term'), + model_uri=ANSRS.parcellationTerm__has_parent_parcellation_term, domain=None, range=Optional[Union[str, ParcellationTermId]]) + +slots.parcellationColorScheme__subject_parcellation_terminology = Slot(uri=ANSRS.subject_parcellation_terminology, name="parcellationColorScheme__subject_parcellation_terminology", curie=ANSRS.curie('subject_parcellation_terminology'), + model_uri=ANSRS.parcellationColorScheme__subject_parcellation_terminology, domain=None, range=Union[str, ParcellationTerminologyId]) + +slots.parcellationColorAssignment__part_of_parcellation_color_scheme = Slot(uri=ANSRS.part_of_parcellation_color_scheme, name="parcellationColorAssignment__part_of_parcellation_color_scheme", curie=ANSRS.curie('part_of_parcellation_color_scheme'), + model_uri=ANSRS.parcellationColorAssignment__part_of_parcellation_color_scheme, domain=None, range=Union[str, ParcellationColorSchemeId]) + +slots.parcellationColorAssignment__subject_parcellation_term = Slot(uri=ANSRS.subject_parcellation_term, name="parcellationColorAssignment__subject_parcellation_term", curie=ANSRS.curie('subject_parcellation_term'), + model_uri=ANSRS.parcellationColorAssignment__subject_parcellation_term, domain=None, range=Union[str, ParcellationTermId]) + +slots.parcellationColorAssignment__color = Slot(uri=ANSRS.color, name="parcellationColorAssignment__color", curie=ANSRS.curie('color'), + model_uri=ANSRS.parcellationColorAssignment__color, domain=None, range=Optional[str]) + +slots.anatomicalAnnotationSet__parameterizes = Slot(uri=ANSRS.parameterizes, name="anatomicalAnnotationSet__parameterizes", curie=ANSRS.curie('parameterizes'), + model_uri=ANSRS.anatomicalAnnotationSet__parameterizes, domain=None, range=Union[str, AnatomicalSpaceId]) + +slots.parcellationAnnotation__part_of_anatomical_annotation_set = Slot(uri=ANSRS.part_of_anatomical_annotation_set, name="parcellationAnnotation__part_of_anatomical_annotation_set", curie=ANSRS.curie('part_of_anatomical_annotation_set'), + model_uri=ANSRS.parcellationAnnotation__part_of_anatomical_annotation_set, domain=None, range=Union[str, AnatomicalAnnotationSetId]) + +slots.parcellationAnnotation__internal_identifier = Slot(uri=ANSRS.internal_identifier, name="parcellationAnnotation__internal_identifier", curie=ANSRS.curie('internal_identifier'), + model_uri=ANSRS.parcellationAnnotation__internal_identifier, domain=None, range=str) + +slots.parcellationAnnotation__voxel_count = Slot(uri=ANSRS.voxel_count, name="parcellationAnnotation__voxel_count", curie=ANSRS.curie('voxel_count'), + model_uri=ANSRS.parcellationAnnotation__voxel_count, domain=None, range=Optional[int]) + +slots.parcellationAnnotationTermMap__subject_parcellation_annotation = Slot(uri=ANSRS.subject_parcellation_annotation, name="parcellationAnnotationTermMap__subject_parcellation_annotation", curie=ANSRS.curie('subject_parcellation_annotation'), + model_uri=ANSRS.parcellationAnnotationTermMap__subject_parcellation_annotation, domain=None, range=Union[dict, ParcellationAnnotation]) + +slots.parcellationAnnotationTermMap__subject_parcellation_term = Slot(uri=ANSRS.subject_parcellation_term, name="parcellationAnnotationTermMap__subject_parcellation_term", curie=ANSRS.curie('subject_parcellation_term'), + model_uri=ANSRS.parcellationAnnotationTermMap__subject_parcellation_term, domain=None, range=Union[str, ParcellationTermId]) + +slots.parcellationAtlas__has_anatomical_space = Slot(uri=ANSRS.has_anatomical_space, name="parcellationAtlas__has_anatomical_space", curie=ANSRS.curie('has_anatomical_space'), + model_uri=ANSRS.parcellationAtlas__has_anatomical_space, domain=None, range=Union[str, AnatomicalSpaceId]) + +slots.parcellationAtlas__has_anatomical_annotation_set = Slot(uri=ANSRS.has_anatomical_annotation_set, name="parcellationAtlas__has_anatomical_annotation_set", curie=ANSRS.curie('has_anatomical_annotation_set'), + model_uri=ANSRS.parcellationAtlas__has_anatomical_annotation_set, domain=None, range=Union[str, AnatomicalAnnotationSetId]) + +slots.parcellationAtlas__has_parcellation_terminology = Slot(uri=ANSRS.has_parcellation_terminology, name="parcellationAtlas__has_parcellation_terminology", curie=ANSRS.curie('has_parcellation_terminology'), + model_uri=ANSRS.parcellationAtlas__has_parcellation_terminology, domain=None, range=Union[str, ParcellationTerminologyId]) + +slots.parcellationAtlas__specialization_of = Slot(uri=ANSRS.specialization_of, name="parcellationAtlas__specialization_of", curie=ANSRS.curie('specialization_of'), + model_uri=ANSRS.parcellationAtlas__specialization_of, domain=None, range=Optional[Union[str, ParcellationAtlasId]]) + +slots.ImageDataset_revision_of = Slot(uri=ANSRS.revision_of, name="ImageDataset_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.ImageDataset_revision_of, domain=ImageDataset, range=Optional[Union[str, ImageDatasetId]]) + +slots.AnatomicalSpace_revision_of = Slot(uri=ANSRS.revision_of, name="AnatomicalSpace_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.AnatomicalSpace_revision_of, domain=AnatomicalSpace, range=Optional[Union[str, AnatomicalSpaceId]]) + +slots.ParcellationTerminology_revision_of = Slot(uri=ANSRS.revision_of, name="ParcellationTerminology_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.ParcellationTerminology_revision_of, domain=ParcellationTerminology, range=Optional[Union[str, ParcellationTerminologyId]]) + +slots.ParcellationColorScheme_revision_of = Slot(uri=ANSRS.revision_of, name="ParcellationColorScheme_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.ParcellationColorScheme_revision_of, domain=ParcellationColorScheme, range=Optional[Union[str, ParcellationTerminologyId]]) + +slots.AnatomicalAnnotationSet_revision_of = Slot(uri=ANSRS.revision_of, name="AnatomicalAnnotationSet_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.AnatomicalAnnotationSet_revision_of, domain=AnatomicalAnnotationSet, range=Optional[Union[str, ParcellationTerminologyId]]) + +slots.ParcellationAtlas_revision_of = Slot(uri=ANSRS.revision_of, name="ParcellationAtlas_revision_of", curie=ANSRS.curie('revision_of'), + model_uri=ANSRS.ParcellationAtlas_revision_of, domain=ParcellationAtlas, range=Optional[Union[str, AnatomicalSpaceId]]) \ No newline at end of file diff --git a/src/ansrs_schema/schema/ansrs_schema.yaml b/src/ansrs_schema/schema/ansrs_schema.yaml new file mode 100644 index 0000000..32e82f4 --- /dev/null +++ b/src/ansrs_schema/schema/ansrs_schema.yaml @@ -0,0 +1,329 @@ +id: https://w3id.org/my-org/ansrs-schema +name: ansrs-schema +title: ANSRS schema +description: |- + Schema for ANSRS +license: MIT +see_also: + - https://my-org.github.io/ansrs-schema + +prefixes: + ANSRS: https://w3id.org/my-org/ansrs-schema/ + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ + example: https://example.org/ +default_prefix: ANSRS +default_range: string + +imports: + - linkml:types + - core + +settings: + PositiveFloat: ^[+]?\d*\.?\d+$ + ColorHexTriplet: "#[0-9a-fA-F]{6}" + +classes: + ImageDataset: + is_a: VersionedNamedThing + description: >- + An image dataset is versioned release of a multidimensional regular grid of measurements + and metadata required for a morphological representation of an entity such as an anatomical + structure (ref: OBI_0003327, RRID:SCR_006266) + attributes: + x_direction: + range: ANATOMICAL_DIRECTION + description: >- + A controlled vocabulary attribute defining the x axis direction in terms of anatomical + direction. + y_direction: + range: ANATOMICAL_DIRECTION + description: >- + A controlled vocabulary attribute defining the y axis direction in terms of anatomical + direction. + z_direction: + range: ANATOMICAL_DIRECTION + description: >- + A controlled vocabulary attribute defining the z axis direction in terms of anatomical + direction. + x_size: + range: integer + description: The number of pixels/voxels (size) along the x axis. + minimum_value: 1 + y_size: + range: integer + description: The number of pixels/voxels (size) along the y axis. + minimum_value: 1 + z_size: + range: integer + description: The number of pixels/voxels (size) along the y axis. + minimum_value: 1 + x_resolution: + range: float + description: >- + The resolution (length / pixel) in along the x axis (numerical value part). + structured_pattern: + syntax: "{PositiveFloat}" + y_resolution: + range: float + description: >- + The resolution (length / pixel) in along the y axis (numerical value part). + structured_pattern: + syntax: "{PositiveFloat}" + z_resolution: + range: float + description: >- + The resolution (length / pixel) in along the z axis (numerical value part). + structured_pattern: + syntax: "{PositiveFloat}" + unit: + range: DISTANCE_UNIT + description: >- + A controlled vocabulary attribute defining the length unit of the x, y, and z + resolution values. + slot_usage: + revision_of: + range: ImageDataset + + AnatomicalSpace: + is_a: VersionedNamedThing + description: >- + An anatomical space is versioned release of a mathematical space with a defined mapping + between the anatomical axes and the mathematical axes. An anatomical space may be defined by + a reference image chosen as the biological reference for an anatomical structure of interest + derived from a single or multiple specimens (ref: ILX:0777106, RRID:SCR_023499) + attributes: + measures: + range: ImageDataset + description: >- + Reference to the specific image dataset used to define the anatomical space. + required: true + slot_usage: + revision_of: + range: AnatomicalSpace + + ParcellationTerminology: + is_a: VersionedNamedThing + description: >- + A parcellation terminology is a versioned release set of terms that can be used to label + annotations in an atlas, providing human readability and context and allowing communication + about brain locations and structural properties. Typically, a terminology is a set of + descriptive anatomical terms following a specific naming convention and/or approach to + organization scheme. The terminology may be a flat list of controlled vocabulary, a taxonomy + and partonomy, or an ontology (ref: ILX:0777107, RRID:SCR_023499) + slot_usage: + revision_of: + range: ParcellationTerminology + + ParcellationTermSet: + is_a: NamedThing + description: >- + A parcellation term set is the set of parcellation terms within a specific parcellation terminology. + A parcellation term set belongs to one and only one parcellation terminology and each parcellation + term in a parcellation terminology belongs to one and only one term set. + If the parcellation terminology is a taxonomy, parcellation term sets can be used to represent + taxonomic ranks. For consistency, if the terminology does not have the notion of taxonomic ranks, + all terms are grouped into a single parcellation term set. + attributes: + part_of_parcellation_terminology: + range: ParcellationTerminology + description: >- + Reference to the parcellation terminology for which the parcellation term set partitions. + required: true + ordinal: + range: integer + description: >- + Ordinal of the parcellation term set among other term sets within the context of the + associated parcellation terminology. + minimum_value: 0 + has_parent_parcellation_term_set: + range: ParcellationTermSet + description: >- + Reference to the parent parcellation term set for which the parcellation term set is a child + (lower taxonomic rank) of. + + ParcellationTerm: + is_a: NamedThing + description: >- + A parcellation term is an individual term within a specific parcellation terminology describing a + single anatomical entity by a persistent identifier, name, symbol and description. A parcellation + term is a unique and exclusive member of a versioned release parcellation terminology. Although term + identifiers must be unique within the context of one versioned release of a parcellation terminology, + they can be reused in different parcellation terminology versions enabling the representation of + terminology updates and modifications over time. + attributes: + symbol: + description: Symbol representing a parcellation term. + part_of_parcellation_term_set: + range: ParcellationTermSet + description: >- + Reference to the parcellation term set for which the parcellation term is part of. + required: true + ordinal: + range: integer + description: >- + Ordinal of the parcellation term among other terms within the context of the associated + parcellation terminology. + minimum_value: 0 + has_parent_parcellation_term: + range: ParcellationTerm + description: >- + Reference to the parent parcellation term for which the parcellation term is a child ( + spatially part) of + + ParcellationColorScheme: + is_a: VersionedNamedThing + description: >- + A parcellation color scheme is a versioned release color palette that can be used to visualize a + parcellation terminology or its related parcellation annotation. A parcellation terminology may + have zero or more parcellation color schemes and each color scheme is in context of a specific + parcellation terminology, where each parcellation term is assigned a hex color value. A parcellation + color scheme is defined as a part of one and only one parcellation terminology. + attributes: + subject_parcellation_terminology: + range: ParcellationTerminology + description: >- + Reference to the parcellation terminology for which the parcellation color scheme is in + context of. + required: true + slot_usage: + revision_of: + range: ParcellationTerminology + + ParcellationColorAssignment: + description: >- + The parcellation color assignment associates hex color value to a parcellation term within a + versioned release of a color scheme. A parcellation term is uniquely denoted by a parcellation + term identifier and the parcellation terminology it belongs to. + attributes: + part_of_parcellation_color_scheme: + range: ParcellationColorScheme + description: >- + Reference to the parcellation color scheme for which the color assignment is part of. + required: true + subject_parcellation_term: + range: ParcellationTerm + description: >- + Reference to the parcellation term identifier for which the color assignment is about. + required: true + color: + range: string + description: A string representing to hex triplet code of a color + structured_pattern: + syntax: "{ColorHexTriplet}" + + AnatomicalAnnotationSet: + is_a: VersionedNamedThing + description: >- + An anatomical annotation set is a versioned release of a set of anatomical annotations anchored + in the same anatomical space that divides the space into distinct segments following some annotation + criteria or parcellation scheme. For example, the anatomical annotation set of 3D image based + reference atlases (e.g. Allen Mouse CCF) can be expressed as a set of label indices of single + multi-valued image annotations or as a set of segmentation masks (ref: ILX:0777108, RRID:SCR_023499) + attributes: + parameterizes: + range: AnatomicalSpace + description: >- + Reference to the anatomical space for which the anatomical annotation set is anchored + required: true + slot_usage: + revision_of: + range: ParcellationTerminology + + ParcellationAnnotation: + description: >- + A parcellation annotation defines a specific segment of an anatomical space denoted by an internal + identifier and is a unique and exclusive member of a versioned release anatomical annotation set. + For example, in the case where the anatomical annotation set is a single multi-value image mask (e.g. Allen Mouse CCF), + a specific annotation corresponds to a specific label index (internal identifier) in the mask. + attributes: + part_of_anatomical_annotation_set: + range: AnatomicalAnnotationSet + description: + required: true + internal_identifier: + description: >- + An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set + required: true + voxel_count: + range: integer + description: >- + The number of voxels (3D pixels) spanned by the parcellation annotation (optional). + minimum_value: 0 + + ParcellationAnnotationTermMap: + description: >- + The parcellation annotation term map table defines the relationship between parcellation annotations and parcellation terms. + A parcellation term is uniquely denoted by a parcellation term identifier and the parcellation terminology it belongs to. + A parcellation term can be spatially parameterized by the union of one or more parcellation annotations within a versioned + release of an anatomical annotation set. For example, annotations defining individual cortical layers in cortical region + R (R1, R2/3, R4, etc) can be combined to define the parent region R. + attributes: + subject_parcellation_annotation: + range: ParcellationAnnotation + description: >- + Reference to the parcellation annotation that is the subject of the association. + required: true + subject_parcellation_term: + range: ParcellationTerm + description: >- + Reference to the parcellation term that is the subject of the association. + required: true + + ParcellationAtlas: + is_a: VersionedNamedThing + description: >- + A parcellation atlas is a versioned release reference used to guide experiments or deal with the spatial relationship between + objects or the location of objects within the context of some anatomical structure. An atlas is minimally defined by a notion + of space (either implicit or explicit) and an annotation set. Reference atlases usually have additional parts that make them + more useful in certain situations, such as a well defined coordinate system, delineations indicating the boundaries of various + regions or cell populations, landmarks, and labels and names to make it easier to communicate about well known and useful + locations (ref: ILX:0777109, RRID:SCR_023499). + attributes: + has_anatomical_space: + range: AnatomicalSpace + description: >- + Reference to the anatomical space component of the parcellation atlas + required: true + has_anatomical_annotation_set: + range: AnatomicalAnnotationSet + description: >- + Reference to the anatomical annotation set component of the parcellation atlas + required: true + has_parcellation_terminology: + range: ParcellationTerminology + description: >- + Reference to the parcellation terminology component of the parcellation atlas + required: true + specialization_of: + range: ParcellationAtlas + description: >- + Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific + version release of. + slot_usage: + revision_of: + range: AnatomicalSpace + +enums: + ANATOMICAL_DIRECTION: + permissible_values: + left_to_right: + title: left-to-right + description: >- + A controlled vocabulary term defining the x axis direction in terms of + anatomical direction. + posterior_to_anterior: + title: posterior-to-anterior + inferior_to_superior: + title: inferior-to-superior + + DISTANCE_UNIT: + permissible_values: + mm: + title: millimeter + um: + title: micrometer + m: + title: meter diff --git a/src/ansrs_schema/schema/core.yaml b/src/ansrs_schema/schema/core.yaml new file mode 100644 index 0000000..9656ad5 --- /dev/null +++ b/src/ansrs_schema/schema/core.yaml @@ -0,0 +1,48 @@ +id: https://w3id.org/my-org/core +name: ANSRS-Core +title: ANSRS schema Core Types +description: |- + Core types for ANSRS schema + +prefixes: + ansrs_schema: https://w3id.org/my-org/ansrs-schema/ + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ + example: https://example.org/ +default_prefix: ansrs +default_range: string + +classes: + NamedThing: + description: >- + Core base entity for ANSRS schema representing an entity with an identifier + name and description. + abstract: true + slots: + - id + - name + - description + + VersionedNamedThing: + is_a: NamedThing + description: >- + Core base entity for ANSRS schema representing an versioned named thing. + abstract: true + slots: + - version + - revision_of +slots: + id: + range: uriorcurie + identifier: true + required: true + name: + required: true + description: + required: true + version: + required: true + revision_of: + range: VersionedNamedThing diff --git a/src/data/examples/Person-001.yaml b/src/data/examples/Person-001.yaml new file mode 100644 index 0000000..617ff08 --- /dev/null +++ b/src/data/examples/Person-001.yaml @@ -0,0 +1,7 @@ +# Example data object +--- +entries: + - id: example:Person001 + name: foo bar + primary_email: foo.bar@example.com + age_in_years: 33 diff --git a/src/docs/about.md b/src/docs/about.md new file mode 100644 index 0000000..8d71852 --- /dev/null +++ b/src/docs/about.md @@ -0,0 +1,3 @@ +# ansrs-schema + +Schema for ANSRS diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..3ea10d2 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Tests for ansrs-schema.""" diff --git a/tests/test_data.py b/tests/test_data.py new file mode 100644 index 0000000..9f2ff60 --- /dev/null +++ b/tests/test_data.py @@ -0,0 +1,22 @@ +"""Data test.""" +import os +import glob +import unittest + +from linkml_runtime.loaders import yaml_loader +from ansrs_schema.datamodel.ansrs_schema import PersonCollection + +ROOT = os.path.join(os.path.dirname(__file__), '..') +DATA_DIR = os.path.join(ROOT, "src", "data", "examples") + +EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR, '*.yaml')) + + +class TestData(unittest.TestCase): + """Test data and datamodel.""" + + def test_data(self): + """Data test.""" + for path in EXAMPLE_FILES: + obj = yaml_loader.load(path, target_class=PersonCollection) + assert obj