From df1a56e5a9ca4c5cb9c6c39b2a524f5f83e0cabb Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 2 Apr 2024 19:27:08 -0700 Subject: [PATCH 01/33] Correct URL_FOR - Unskip tests for URL resolution and correctness - Skip fail-prone and unused github URL tests - Add requests_cache --- .github/workflows/main.yaml | 2 +- linkml_runtime/linkml_model/linkml_files.py | 3 +- poetry.lock | 142 +++++++++++++------ pyproject.toml | 1 + tests/conftest.py | 22 +++ tests/test_linkml_model/test_linkml_files.py | 40 +++++- 6 files changed, 157 insertions(+), 53 deletions(-) create mode 100644 tests/conftest.py diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 96b5949d..e4ea7a4b 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -50,7 +50,7 @@ jobs: #---------------------------------------------- - name: Generate coverage results run: | - poetry run coverage run -m unittest discover + poetry run coverage run -m pytest poetry run coverage xml poetry run coverage report -m diff --git a/linkml_runtime/linkml_model/linkml_files.py b/linkml_runtime/linkml_model/linkml_files.py index 198b052f..bce1ca5b 100644 --- a/linkml_runtime/linkml_model/linkml_files.py +++ b/linkml_runtime/linkml_model/linkml_files.py @@ -143,7 +143,8 @@ def _build_loc(base: str, source: Source, fmt: Format) -> str: def URL_FOR(source: Source, fmt: Format) -> str: """ Return the URL to retrieve source in format """ - return f"{LINKML_URL_BASE}{source.value}.{fmt.value}" + fmt_path: FormatPath = _Path.get(fmt.name) + return f"{LINKML_URL_BASE}{source.value}.{fmt_path.extension}" def LOCAL_PATH_FOR(source: Source, fmt: Format) -> str: diff --git a/poetry.lock b/poetry.lock index ee462d1d..afd28039 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 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 = [ @@ -19,7 +18,6 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -35,11 +33,35 @@ 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 = "cattrs" +version = "23.2.3" +description = "Composable complex class support for attrs and dataclasses." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cattrs-23.2.3-py3-none-any.whl", hash = "sha256:0341994d94971052e9ee70662542699a3162ea1e0c62f7ce1b4a57f563685108"}, + {file = "cattrs-23.2.3.tar.gz", hash = "sha256:a934090d95abaa9e911dac357e3a8699e0b4b14f8529bcc7d2b1ad9d51672b9f"}, +] + +[package.dependencies] +attrs = ">=23.1.0" +exceptiongroup = {version = ">=1.1.1", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.1.0,<4.6.3 || >4.6.3", markers = "python_version < \"3.11\""} + +[package.extras] +bson = ["pymongo (>=4.4.0)"] +cbor2 = ["cbor2 (>=5.4.6)"] +msgpack = ["msgpack (>=1.0.5)"] +orjson = ["orjson (>=3.9.2)"] +pyyaml = ["pyyaml (>=6.0)"] +tomlkit = ["tomlkit (>=0.11.8)"] +ujson = ["ujson (>=5.7.0)"] + [[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 = [ @@ -51,7 +73,6 @@ files = [ 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 = [ @@ -151,7 +172,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -166,7 +186,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} 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 = [ @@ -178,7 +197,6 @@ files = [ name = "coverage" version = "6.5.0" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -241,7 +259,6 @@ toml = ["tomli"] name = "curies" version = "0.7.7" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -266,7 +283,6 @@ tests = ["coverage", "pytest"] 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 = [ @@ -284,7 +300,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -299,7 +314,6 @@ test = ["pytest (>=6)"] 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 = [ @@ -311,7 +325,6 @@ files = [ name = "idna" version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -323,7 +336,6 @@ files = [ name = "importlib-resources" version = "6.1.1" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -342,7 +354,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -354,7 +365,6 @@ files = [ name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" files = [ @@ -369,7 +379,6 @@ six = "*" 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 = [ @@ -385,7 +394,6 @@ pyyaml = "*" name = "jsonasobj2" version = "1.0.4" description = "JSON as python objects - version 2" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -400,7 +408,6 @@ hbreader = "*" name = "jsonschema" version = "4.21.1" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -424,7 +431,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- 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 = [ @@ -440,7 +446,6 @@ referencing = ">=0.31.0" name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -452,7 +457,6 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -460,11 +464,25 @@ files = [ {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, ] +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +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 = [ @@ -480,7 +498,6 @@ testing = ["pytest", "pytest-benchmark"] 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 = [ @@ -498,7 +515,6 @@ requests = ">=2.28.1,<3.0.0" name = "prefixmaps" version = "0.2.2" description = "A python library for retrieving semantic prefix maps" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -514,7 +530,6 @@ pyyaml = ">=5.3.1" name = "pydantic" version = "2.6.1" description = "Data validation using Python type hints" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -534,7 +549,6 @@ email = ["email-validator (>=2.0.0)"] name = "pydantic-core" version = "2.16.2" description = "" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -626,7 +640,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" 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 = [ @@ -641,7 +654,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pytest" version = "8.0.1" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -664,7 +676,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no 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 = [ @@ -678,10 +689,10 @@ pytest = ">=2.8.1" 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-py3-none-any.whl", hash = "sha256:f687c224ee8c66cda8e8628a903011b692635ffbb08d4b39c5f92b18eb78c950"}, {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, ] @@ -692,7 +703,6 @@ sortedcontainers = "*" name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -701,6 +711,7 @@ files = [ {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-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {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"}, @@ -708,8 +719,16 @@ files = [ {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-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {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-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {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"}, @@ -726,6 +745,7 @@ files = [ {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-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {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"}, @@ -733,6 +753,7 @@ files = [ {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-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {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"}, @@ -742,7 +763,6 @@ files = [ name = "rdflib" version = "6.3.2" 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.7,<4.0" files = [ @@ -764,7 +784,6 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] name = "referencing" version = "0.33.0" description = "JSON Referencing + Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -780,7 +799,6 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -798,11 +816,40 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-cache" +version = "1.2.0" +description = "A persistent cache for python requests" +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests_cache-1.2.0-py3-none-any.whl", hash = "sha256:490324301bf0cb924ff4e6324bd2613453e7e1f847353928b08adb0fdfb7f722"}, + {file = "requests_cache-1.2.0.tar.gz", hash = "sha256:db1c709ca343cc1cd5b6c8b1a5387298eceed02306a6040760db538c885e3838"}, +] + +[package.dependencies] +attrs = ">=21.2" +cattrs = ">=22.2" +platformdirs = ">=2.5" +requests = ">=2.22" +url-normalize = ">=1.4" +urllib3 = ">=1.25.5" + +[package.extras] +all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=6.0.1)", "redis (>=3)", "ujson (>=5.4)"] +bson = ["bson (>=0.5)"] +docs = ["furo (>=2023.3,<2024.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.9)"] +dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] +json = ["ujson (>=5.4)"] +mongodb = ["pymongo (>=3)"] +redis = ["redis (>=3)"] +security = ["itsdangerous (>=2.0)"] +yaml = ["pyyaml (>=6.0.1)"] + [[package]] name = "rpds-py" version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -911,7 +958,6 @@ files = [ 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 = [ @@ -923,7 +969,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" optional = false python-versions = "*" files = [ @@ -935,7 +980,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -947,7 +991,6 @@ files = [ 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 = [ @@ -955,11 +998,24 @@ files = [ {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] +[[package]] +name = "url-normalize" +version = "1.4.3" +description = "URL normalization for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "url-normalize-1.4.3.tar.gz", hash = "sha256:d23d3a070ac52a67b83a1c59a0e68f8608d1cd538783b401bc9de2c0fac999b2"}, + {file = "url_normalize-1.4.3-py2.py3-none-any.whl", hash = "sha256:ec3c301f04e5bb676d333a7fa162fa977ad2ca04b7e652bfc9fac4e405728eed"}, +] + +[package.dependencies] +six = "*" + [[package]] name = "urllib3" version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -977,7 +1033,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "wrapt" version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1057,7 +1112,6 @@ files = [ name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1072,4 +1126,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ee072611489b4293d1d155732995615e53afba728f652255af36f72826262f62" +content-hash = "fddd54f2e38fdce32a4236c283d5f4e141f897e6d7ed4aac4ce5dbb40c37e428" diff --git a/pyproject.toml b/pyproject.toml index bb504c1f..b50cba65 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,6 +64,7 @@ pydantic = ">=1.10.2, <3.0.0" [tool.poetry.dev-dependencies] coverage = "^6.2" +requests-cache = "^1.2.0" [build-system] requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning"] diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..f0f30ec9 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,22 @@ +from pathlib import Path +import pytest +import requests_cache + +@pytest.fixture(scope="session", autouse=True) +def patch_requests_cache(pytestconfig): + """ + Cache network requests - for each unique network request, store it in + an sqlite cache. only do unique requests once per session. + """ + cache_file = Path(__file__).parent / "output" / "requests-cache.sqlite" + cache_file.parent.mkdir(exist_ok=True) + requests_cache.install_cache( + str(cache_file), + backend="sqlite", + urls_expire_after={"localhost": requests_cache.DO_NOT_CACHE}, + ) + requests_cache.clear() + yield + # If we want to delete cache, this is how we might do it! + # if not pytestconfig.getoption("--with-output"): + # cache_file.unlink(missing_ok=True) \ No newline at end of file diff --git a/tests/test_linkml_model/test_linkml_files.py b/tests/test_linkml_model/test_linkml_files.py index 189f1fc3..5899950d 100644 --- a/tests/test_linkml_model/test_linkml_files.py +++ b/tests/test_linkml_model/test_linkml_files.py @@ -28,6 +28,26 @@ if (fmt not in META_ONLY or source == Source.META) ] +W3ID_EXTENSIONS = ( + 'html', + 'yaml', + 'graphql', + 'context.json', + 'context.jsonld', + 'schema.json', + 'json', + 'ttl', + 'owl', + 'shex', + 'shexc', + 'shexj' +) +W3ID_FORMATS = [ + (source, fmt) for source, fmt in EXPECTED_FORMATS + if _Path.get(fmt.name).extension in W3ID_EXTENSIONS +] +"""The formats that have rewrite rules at https://github.com/perma-id/w3id.org/blob/master/linkml/.htaccess""" + @pytest.mark.parametrize( 'source,fmt', EXPECTED_FORMATS @@ -66,7 +86,7 @@ def test_no_unmapped_dirs(): # URLs # -------------------------------------------------- -@pytest.mark.skipif(not HAVE_REQUESTS_CACHE, reason='We need to cache this...') +@pytest.mark.skip("github paths largely unused and expensive to test due to ratelimiting") @pytest.mark.parametrize( 'release_type', ReleaseTag.__iter__() @@ -78,7 +98,7 @@ def test_no_unmapped_dirs(): def test_github_path_exists(source,fmt, release_type): url = GITHUB_PATH_FOR(source, fmt, release_type) res = requests.get(url) - assert res.status_code != 404 + assert res.status_code != 404, url @pytest.mark.parametrize( @@ -99,8 +119,7 @@ def test_github_path_format(source,fmt, release_type): # for windows... assert '\\' not in url - -@pytest.mark.skipif(not HAVE_REQUESTS_CACHE,reason= "Need to cache this") +@pytest.mark.skip("github paths largely unused") @pytest.mark.parametrize( 'source,fmt', EXPECTED_FORMATS @@ -108,18 +127,25 @@ def test_github_path_format(source,fmt, release_type): def test_github_io_path(source,fmt): url = GITHUB_IO_PATH_FOR(source, fmt) res = requests.get(url) - assert res.status_code != 404 + assert res.status_code != 404, url @pytest.mark.skipif(not HAVE_REQUESTS_CACHE,reason= 'Need to cache this') @pytest.mark.parametrize( 'source,fmt', - EXPECTED_FORMATS + W3ID_FORMATS ) def test_url_for_format(source,fmt): url = URL_FOR(source, fmt) res = requests.get(url) - assert res.status_code != 404 + assert res.status_code != 404, url + +def test_fixed_meta_url(): + """ + One fixed canary value - the METAMODEL_URI as used in linkml main shouldn't change + """ + assert URL_FOR(Source.META, Format.YAML) == 'https://w3id.org/linkml/meta.yaml' + assert URL_FOR(Source.META, Format.JSONLD) == 'https://w3id.org/linkml/meta.context.jsonld' From 2b901343f6fcf9658369498268a7a12f700ca2c9 Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Wed, 22 May 2024 17:17:37 -0700 Subject: [PATCH 02/33] display any_of, exactly_one_of, none_of, all_of range assertions in class Usages section --- linkml_runtime/utils/schemaview.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 3dfb2a4f..92ebe980 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1657,7 +1657,7 @@ def usage_index(self) -> Dict[ElementName, List[SchemaUsage]]: :return: dictionary of SchemaUsages keyed by used elements """ - ROLES = ['domain', 'range'] + ROLES = ['domain', 'range', 'any_of', 'exactly_one_of', 'none_of', 'all_of'] ix = defaultdict(list) for cn, c in self.all_classes().items(): direct_slots = c.slots @@ -1671,6 +1671,9 @@ def usage_index(self) -> Dict[ElementName, List[SchemaUsage]]: vl = [v] for x in vl: if x is not None: + if isinstance(x, AnonymousSlotExpression): + x = x.range + k = f"{k}[range]" u = SchemaUsage(used_by=cn, slot=sn, metaslot=k, used=x) u.inferred = sn in direct_slots ix[x].append(u) From ef4f5a55088f61d33bc8cf62b3166fd10a15cdd3 Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Thu, 23 May 2024 11:53:38 -0700 Subject: [PATCH 03/33] tests for any_of ranges in usage_index() --- linkml_runtime/utils/schemaview.py | 1 + .../input/kitchen_sink_noimports.yaml | 10 +++++ tests/test_utils/test_schemaview.py | 38 ++++++++++++++++++- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 92ebe980..1511ca06 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1674,6 +1674,7 @@ def usage_index(self) -> Dict[ElementName, List[SchemaUsage]]: if isinstance(x, AnonymousSlotExpression): x = x.range k = f"{k}[range]" + k = k.split("[")[0] + "[range]" if "[range]" in k else k u = SchemaUsage(used_by=cn, slot=sn, metaslot=k, used=x) u.inferred = sn in direct_slots ix[x].append(u) diff --git a/tests/test_utils/input/kitchen_sink_noimports.yaml b/tests/test_utils/input/kitchen_sink_noimports.yaml index 807fe6be..9d53d80a 100644 --- a/tests/test_utils/input/kitchen_sink_noimports.yaml +++ b/tests/test_utils/input/kitchen_sink_noimports.yaml @@ -87,9 +87,15 @@ classes: - age in years - addresses - has birth event + - reason_for_happiness slot_usage: name: pattern: "^\\S+ \\S+" ## do not do this in a real schema, people have all kinds of names + reason_for_happiness: + any_of: + - range: BirthEvent + - range: EmploymentEvent + - range: MarriageEvent Adult: is_a: Person @@ -353,6 +359,10 @@ slots: alias: zip range: string + reason_for_happiness: + range: string + required: false + enums: FamilialRelationshipType: diff --git a/tests/test_utils/test_schemaview.py b/tests/test_utils/test_schemaview.py index ec7f5fbe..367fb842 100644 --- a/tests/test_utils/test_schemaview.py +++ b/tests/test_utils/test_schemaview.py @@ -186,7 +186,7 @@ def test_schemaview(self): self.assertCountEqual(['id', 'name', ## From Thing 'has employment history', 'has familial relationships', 'has medical history', - AGE_IN_YEARS, 'addresses', 'has birth event', ## From Person + AGE_IN_YEARS, 'addresses', 'has birth event', 'reason_for_happiness', ## From Person 'aliases' ## From HasAliases ], view.class_slots('Person')) @@ -256,6 +256,42 @@ def test_schemaview(self): logging.debug(f' {k} = {v}') self.assertIn(SchemaUsage(used_by='FamilialRelationship', slot=RELATED_TO, metaslot='range', used='Person', inferred=False), u['Person']) + self.assertListEqual( + [SchemaUsage(used_by='Person', + slot='reason_for_happiness', + metaslot='any_of[range]', + used='MarriageEvent', + inferred=True + ), + SchemaUsage(used_by='Adult', + slot='reason_for_happiness', + metaslot='any_of[range]', + used='MarriageEvent', + inferred=False + )], + u['MarriageEvent']) + self.assertListEqual( + [SchemaUsage(used_by='Person', + slot='has employment history', + metaslot='range', + used='EmploymentEvent', + inferred=True), + SchemaUsage(used_by='Person', + slot='reason_for_happiness', + metaslot='any_of[range]', + used='EmploymentEvent', + inferred=True), + SchemaUsage(used_by='Adult', + slot='has employment history', + metaslot='range', + used='EmploymentEvent', + inferred=False), + SchemaUsage(used_by='Adult', + slot='reason_for_happiness', + metaslot='any_of[range]', + used='EmploymentEvent', + inferred=False)], + u['EmploymentEvent']) # test methods also work for attributes leaves = view.class_leaves() From 37297a8eeec9155e70f5776caa0f76d742af499f Mon Sep 17 00:00:00 2001 From: Chris Mungall Date: Fri, 28 Jun 2024 07:49:03 -0700 Subject: [PATCH 04/33] linkml-model-1.8.0rc2 --- linkml_runtime/linkml_model/annotations.py | 2 +- linkml_runtime/linkml_model/datasets.py | 2 +- linkml_runtime/linkml_model/excel/meta.xlsx | Bin 29107 -> 31076 bytes linkml_runtime/linkml_model/extensions.py | 2 +- .../linkml_model/graphql/meta.graphql | 98 +- .../linkml_model/jsonld/meta.context.jsonld | 25 +- .../linkml_model/jsonld/meta.jsonld | 374 +- .../linkml_model/jsonschema/meta.schema.json | 1046 ++- linkml_runtime/linkml_model/mappings.py | 2 +- linkml_runtime/linkml_model/meta.py | 498 +- .../model/docs/specification/02instances.md | 31 +- .../model/docs/specification/03schemas.md | 12 +- .../docs/specification/04derived-schemas.md | 19 +- .../model/docs/specification/05validation.md | 142 +- .../linkml_model/model/schema/array.yaml | 19 +- .../linkml_model/model/schema/extensions.yaml | 2 + .../linkml_model/model/schema/meta.yaml | 141 +- linkml_runtime/linkml_model/owl/meta.owl.ttl | 2738 +++--- .../linkml_model/protobuf/meta.proto | 96 +- .../linkml_model/shacl/meta.shacl.ttl | 7586 +++++++++-------- linkml_runtime/linkml_model/shex/meta.shex | 120 +- .../linkml_model/sqlschema/meta.sql | 117 +- linkml_runtime/linkml_model/types.py | 2 +- linkml_runtime/linkml_model/units.py | 2 +- linkml_runtime/linkml_model/validation.py | 2 +- 25 files changed, 7998 insertions(+), 5080 deletions(-) diff --git a/linkml_runtime/linkml_model/annotations.py b/linkml_runtime/linkml_model/annotations.py index bc5c1cd2..9b229b22 100644 --- a/linkml_runtime/linkml_model/annotations.py +++ b/linkml_runtime/linkml_model/annotations.py @@ -1,5 +1,5 @@ # Auto generated from annotations.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-02-07T17:29:22 +# Generation date: 2024-06-27T23:15:03 # Schema: annotations # # id: https://w3id.org/linkml/annotations diff --git a/linkml_runtime/linkml_model/datasets.py b/linkml_runtime/linkml_model/datasets.py index b05a6941..e8bb1521 100644 --- a/linkml_runtime/linkml_model/datasets.py +++ b/linkml_runtime/linkml_model/datasets.py @@ -1,5 +1,5 @@ # Auto generated from datasets.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-02-07T17:29:27 +# Generation date: 2024-06-27T23:15:13 # Schema: datasets # # id: https://w3id.org/linkml/datasets diff --git a/linkml_runtime/linkml_model/excel/meta.xlsx b/linkml_runtime/linkml_model/excel/meta.xlsx index 4b28e8fbd6c7d0d158ee4683f5ab4184fdf81c07..2a70dfba3a099ae68886fe9c671df5b6e76439fe 100644 GIT binary patch delta 11114 zcmaia1yq#H_x~=jbT>-~(kO^@i!?|`ONVqU-LQm!pn$L-NH-|mND2r@cc*kC-SA)G zjr02bo%7#w_KEv^?#!LIF?XhX3AlU!#8Q?=L?Q$L0H^@W+UY2)LMZ&E6@md`-h~sp zfdBv={QeqZqU;E>~o7q%i zy)!Yfrt`Vvf0gKJ6X(x9cDn(4Z@m-b3QP?=B+YBCA+?#7OutS@ep?TCd+|o2O$bj9 z9fwUza)Uf#0UCRwERCd3NTfw)O2|wa^eHubJA=zp|q)+G=Q+atzDQ7K+YW7<6)zE?c4;l{{PZ!jE zmK|V8jq6yh%U5X%eGT;?FMAeYG(`7{Y@9*ntnr%sAzU#Rf@PcI?d4_3m6-h%Gj1Qj z$V7G0L2{fmXsJx56U&@Ub8u^|xAvTG&67G|Md~lTR?31kNLPHg&x%L&gp(Z>U}%kR z2a3BdHoA8v-@lL)A>+$RO?fwy$nz%u>Yz#|j`8bDLot&g@xfGTd-So@FL})Kk(D1$ zUvi!w9@-uk=OQUzYR4{cP4wrqUe{hVJQ7$Rwb-Ynn1g;RRqfwPJd;bGDlq0F3>*~qxz$iB+>|W9%;f(?}|c|(e)~}<))60MW0`$cfI#CDo`}+$piAH zrS=ur_lkBmgu_?Hj+gNV2Cq9FKRzsu{6(n}d8p)iW>Z{7`MR%6+t0Y4PFr$dX2_+aZr#yL6O^Ng8E}X^>W0Y+_rqTgox;_F7GjrDNC(OX#T*p92Ye3Ihpp zLzt{;pc)?fr62OFmJ&TW7MTVIeK3nY;Y3j|%6W>UJ{w;~=Q{vOI=!_p+f2xw^-|jg z>33^`EMgS4qlsO-ML(g(kGqy?eoo^Ulu3bBSX`%pt(pFsNMWNu;D&g(s3=wl^B_=&pLtxIewd zkry~n8=I9}e>nSbasEkgt3>NCD0r~qVepT30wO3llKV=7ONf%blq|%~p9onAMQ#{e z8hPNKR8O4$_fH~{O3FL^&qHh6+L9A1a@wpk(4tF}|T2YLNeWPr!{G8*#T?UrKV3g^G- z&5QL5c&FYhI5miO4=eZ-cMmW_Qo3>`Vs3;xsv+sC`-ggR4Wv6WpwaKh7XUW{0+_G| z)Kt)hxOt~UKHQF5qF{3+ho|Gzu;!HJV7i&fQu)n_1`?@nQ)5~W6!9Gn=jYKoEZH)% zo!EV3vx54IG=_X%g-CzK_QWx)r>?X(`aTaH)<^bdJ5}bqR;(IWfEB87bMmRzJ*!67 z8WpcZW$ReN5$kndQfi&6(im2DmHGu5>l%jY>2V%&A<{$=+_s2&f&gj{kXG0 z)srI$$ZdX?8a6&)!3I`pc3qSv(HuN@b5ty3&$p>*(r>0J<52>uNH{a8W5QJ?-wOQM zBpn}!J4VE|l4@Rj)1UXzTUey7X_pr;uK5JZiMjEhYn$DKeA%izZ|06&4YKzwg8{OiFVRP0>=xUIk zLCv+CCb9H}^K2w!If8UFHb>Rnit9Q#!+NZ$e)4O46N(*&-3)*%YDf?Lvk@-6q^|#Z zwHGRbdc9GXuYRzWN(To0q`j6(kGu_n4L^|*+k3S`6&|Vm3{DmPr6^C|h_#r*wm!?r%VS&MzqZ)HqHzY(0sjDnfI zVL01)Dq>;ml6ZYf$XBG+FOJa*#Ad&)j_gwy**>sx<+xcIzKoR;HZe&o znft(FYyL5fyKC_sM{`}iKKRo&DTm+#kM%_H!;uUi(U2@Ukyn%J|?SrnxX z6+SXNyyC2FR4Avg-I(pQ!0U}}vj;&iFGf_^KTSCZ2?KS6>i6p+C*r@TMtUZYPM%n^ zWO0=3hIno7h)t6GI@d7XvVV{=L3O^e)^cR6BpFIP<*l z3T*T3Adb6M8xLoe;V>Lg-9_29tU7b>vOr@h2UcG`TO%9sn9TNPJAGrJ^-7AFp}nZ0 z(omq$XI`C6%t<=P2*}RAkqe6X>xtmSXJ@Q2>x$68W4`2+Bt>@5tVG9RqdkKLMk8L< z?|P(3noG`v#K<5ybP+<)#%3~70^NO;8{d6)0bUG|w!>Mi;$y${qeP^}G8R zEi-<}JY4~Tfxs*hTY%3;H|aK3F5&}SV_8@z(Sn;txNfy_5X$i%aMdDdkdZ7AZPRiIjNsHm5Xz@NjN0Zaqem)pocz{NdNvF}*o>x{bSgm3?fjLo*zSua}=Q=t^L6L(T_nOR51nvY@+L4zxaC zv8q8F&h|njR-a)ZVf#d*F>(+q&P|~~co?nY|4Xni#W+51_2-oc#<( z5u)Q6CMC&fHN=9vHEs>h!ZzWsvfcAqtIRqA?pfx#cfgFCy@gPnlud(|Pesr|sB-p1 z-Iq2~pebLP#9;VP9eE$ogQZ+?B`z;70YS3si~ZS<(-}rv2T`|)9tViH(kNM2vsik=Idy-M#cW!u<4Hct^AH|gOBgt zZOj_`QuKcuAC4Owb^coK%ZE8EBv{*7PJMbn9k?ghE5E`cm;f_0?ByqIIRCbjuq9aS z`)tBFUylZFYiQ-=p6|xbvM!&&{ML zkN|*RxOW;R`WOU-N6?Pbza!|N*0mQ*<_X>IbiE%w4%LKHj#gLr{PbIvYe7Y_0KCs? z+6#!W$)3%=pu=BmHbtW_B6>oSD0jw@rFj&Y^!r)HN{{&Kh0 z47Gmr_Di5uY&|$!gs$>~KuSbiSx|C>!dC1^NlBFTmNs<42h?T5xG(Abs0Nl_xrZLT zQG>@?gK|6Zz^}SfUO2WuOwiK#wGn^l@VoA9>qzHFA=!yq*cQ|KoF`@kc18KJLg>i| z$k{k9s8{De%`~+<^tuD@JZ@iG?hm=+9h;(Vz;8E1EzPkn=S^3}VP~oo>LrAQ2X1DU z$k>6Nw^PuzPrr->s?5NXPo_3%FiFy7y_Gj{v%Mgty2kRpRzdpBeESnY${%7-9)OV? zCw>Y#&?qB$wUwq#3#@4;IjGUN&>wf<^(5`k3snz2mwb}yk;BE^coX*Bccp}UKIn=@ zP2SjmuYf)M!xpCun{H9oA<_kSTK2PPc=O(ctX~tfJZ%Ciz<|F5Z!R!9rvod54>CPe zeKzHo(zvp&A( z7QsnYa`guD-MeCdydRGFx8}B+A1#6-2Kwml-f1#zoFZL0+cjb@&G+|C8C@x18!Vyc z`-hG}4Jhbi1e9aG+^jyayeVN1GV#nmGNJ??g?J^?__zD()(m%&ZUyi@0le zC65%IOu(p1)3FD>aZva$F1=j!cTerjnaUtUsN5K{^;R~w%UmiRbA&p#_M8@`I~7Zs zjK*kR#m5-0E;;g$oL|nv=m&nVvH({Af7qBZF6-KOC*eilkF3_5 zx3epvrdloMeOGsWeRc9vAt5N$J*i%ZN6~k83yQ9LOTQpB5&Kqx~DL!S0tup*ot^|JG9{IRgd=Rx?4J8L-ap3MQc($6+;#T09a7|HX=|C z?%%$>;ggON+>A)wh6VSh{5au?+y9Y($DHk;-BH9YJ57Qq@f_a@*AVa|`f{u8!HWFT z%R!G#n1mb(FB>-T!t1Roy$L2F>AI;2`vhBK8^!h|WjnRUt*qlr@=XOv#im*EO;jQ6 ztgqk>yuBkN1kzqP!jq_2>lNoK0ClkCn))Iyif*eX4^3rVs>+>wd1AjLSIk>l$C08) z{#9d~WsV1FVCAedNp8Fgw6pyqf7FskP~cPQsmy6yzqV~_`CjHoVz!gp#$tg$FScrC z%uCZ3rZN|2Iq0S@Si%wxTnwyE)U0V!p-`q9A6~#nV>ad&`_*?vi>q8-anNv<%ILyS zO}k669l_&^&!J9aE6$6vuFI;BT-Z||S@j|6N`*{kO5xdYHPs}L?Ra67zSgV!PCgaY zA)F;goK@5UT~83^%Wq%azsopIFj{>ZHP`J0(t7Z0I{ZN3OPK%ML#Cj(^5Fb+O|3yW zw!pF|BasK~>$u30C~aDp8I{lr>+bOL$^QL5&8~9FYgFoHse|v3w>7FWc~{ud*%>(- zu^K7qeMXNyr;Te!5lPfTYG}@p5WicHkuD$r?W`x;^{`QD?O8z=h}h0`HbS3!I=oWq z1D1XC^4DEDpN;eRX-e(<;Kp=D% zwx0rR_UcV~n+b?}CpOA5G)5|oSX{@AyQsk$jNRITEi8dSwav=q_Haq+>?4Hv$R)c~ zRB@WAO2Cc}Kdg4fLe&FmihQm;Vrx_P=|Y)GlaPz=F(>xAHApyx>yg!D*5KliKpK3gf*8AtXEdm=9mv~$39FSwf+i*GNeyh@<^>rKJ&N2 z8LT$7+1L*SQd}gP;qkKZbJZ4sGvz6fgO26)_=x4|!BI#m0k6tl@sIEa<#CBALzwIN z@i(soRZ2elVEZ(NSUzQ&+-3>knTG`qi-xFZ3Qn1Xs(2>!#-K~Fz3NRLr8YiArnig%esJ2G-mBX0j+Bt} z(WMhOuvlT6Ns<5BoU_8c(CzB|w;M&IOYgK=%dgo{5fOoDb%L78Et`714g=Gd9#j_9 zFZ?edap4Zg&wMfw5tAY{y+~MGwd_@HzPoHFTk0B;)KE;-L1~kaQt)YR02zK%d#vO0Sep{vhqcJ;QE>a{SfbhNjONw^-N z1S#lT4{d=Ybb#uQ6$tyas#MlD@*XCBB^l_6&G^7d4~zVzAw0Ln7)oPdVk>D8C+6_wQQ8Mss01{j+hL%a@T_mx?_n&_*^lp)DGD%j3-ir{ zbOmwNNgr__5oHX1Oi_s{Im-oeywqiD9bVy8rky3F$0+G5SGTXv)0@Q7!!zluEJx&5 zo)@~ISb3*CD;Mo9M6qW&^Y<|W#?D2~0R%$i_J}`-5kjepvz#!<4`@ig%*v(qt%PW; zpJux`)@WOt4dsuRl`cmQ^K%J3HjJTtG`&8-<%CUit4wWu#xFtwj$$6*VjIoWv>PB%El3eWT*G~9s_0?&?K( z(I&~#%MGZuJTjHJ=*`jDiKT=0QymJ*n}glsY2HaDn;F+#Jx({B#5n^O-aeb*cBiSx zC~9g58#B+{MMKtL;@Y4kgO3 z`rftt@hcl9HOHbesMp{hP8;Jf)#2~82MGkdk56294z9rsH?*}m*1bb*>zlhPw_=-6NNBQ&Ug*K2z8d`pa5__e~m z6_=-~R<@o9<*CVT^TilXvFsBwsl+0h0`}5qbt^)`K-*S9&SjCCbU^7&A%Vt~2ySbKJ9J6gsGQ zKSkyzM{G^JrSZscb%l7f3yVX^XUQchZmIcF^<@>QGPzSs&ACNW~JEtliv2HV^_+ELyx_QA(2- zS)!3pg-!PJu|zCEYiqUHNCvLrTh;P5TxZh-vPtl{sU^?E$n_b`F6wzvPT%3@&LgGC zjVX;f)39^y^`S|4_6e(z2TE#)OB6mExB*WX5o66VQ;R+qFIZoSm4+`mxegQLgU*t^ z)Dbe&dW1*R7YRI1eb0Dt&Za-qXP%J?Cd%8MGV>$4o-xiO(bmnh*zyi~zLUsWMBUthc6Ezz-deu(U0^$%F8K!eKiUE-c}53o6~`}MeO7gsK!v4> z)5FT7=*ri{GwuoDQuMH0dN6EW9IbpzD*m46AWILMw?!^blvM}bX$9G%H-RtUi5x9> zA_olO`W@>9!Sgs|<-GDj_Xy_K+lq>RrFy`y2a3q$X)mFeU(ui=Dw~eX(5zX8(6@sA1(z!&#&mt zU9z*=%{8&D<*THvomfXN07*ufyDhjOTSi`9`0$#Wib$LqZf9e9`ySq7ov6?Kr931SvK5 zAJ#4hO|_}kGV~uN2oFMI7E;=g9grM!)o`{VvyZvobZs%%vHK^>#3Qd%=+J*qMYBv+ zlswVbF4lXnBEuT+VWCf=j|arJ6_X+IR!uAK`-Rg!;7AxH{s9|Z0Kssaao7dZ%PxL8 zNrV&G@0gEMvU%EkiREQr{z&%B2;CFIt$a1@yTp%9WkDg@ zwxTmqi86y>!1=x-vgv@qoK4~L_RhSwv2`3@Hq8ilpf|a_An}20f0CY?Xvjx1pwei^ z3&NFWjfHu~Nzf{w?ubQxLU0=oS}6K#>MSk`i;L-#Zx2|)s!)cL&u|~HRI7?KI*AwL z&1XwtlJi3L;nRHD2^FR|Us)6`xi1 zVLqB1TVHs5s@VvsyZ{;vS4PvrHBe-HCLH{h(wp&+(f3K^X}okL>~b$vpP#HbO!j9D3W-a^jbtGCCD9|PDdJeZr2&8g(#y( zAGq7{2iFyhVqMRjXCn13Hb@1ZPBmxuKQ}KtNQCK&fT4qmnU8DI22H6}Vcu2HCxY{| z*X-5gV?SRBzRUlNt6Aza_Tu0rCOYN_p)J$RRq(_687_Q3!#%vrZ?cpC9h#p3(iXeU z;@z@0Z2jc%`F#UKMM^)7UKXc57t+YeF^Syj=@?b)aIukyyUKLskRM<6&@E?7=xZp0 z;%dGuGUQ}?D;`Q9c@3bFOH;SSP>@X|#-E6KgM2XcxC@}qnt7WSpNj;2v~RC8jfIZ3 z*&xBZ_QBJDd0V1|9JO-15O)b>FfsjrEWy!(r8KKE3*VEW<41L-29iR+1ygM^NY%k7 z8qi0b<>!Q!H+Z0)LFhySDJm@ z`y(c6TO(EaSdY4ys@Jvh@FyzQQPb3Z&*+l_v@Wf$i#ew9L{I15Cuo6mGBj1E^t zZL3HFiZJU9Pc#}|C5%3C5!nSH<>r4rthau8?IW|IRjkqz>95)o3Vr|$<8x~_^rLZP z*sMVrHivta${A*A>i0AnghySOt`-WXKkYT45c!y3BnvS zh@jyaUr>AtYnL}AWKX*aRs5JX_C47KwwA-=LtFY>5XLcnyAc!%&2}644_YRAOicrD zH?nGDU2*ymgQ%(SRTX7RRdFW^-ScVQINdG(NYP(c6z8*(F2=n_S|Wuc9SBfDS)Nc3*p`Sr^7vhKZNxdz) z??^8Yf=Ra_%M6U~xD5h!Y#uB1J7f$wyGEXko@ErTO{7NpTw84)PQ|aaNy+XMZL@6E z?-d`+j8Zb~&V8cdil}U7*)6q9bsVnB2-Z=>L9ghaboBVB^I--fQ;*RzPNCw~=<6H; zL>FZtHc2@Q1DZUmyGMIzM{-_oDm3yl^*LnSgYehp3BhxxecB`~4CX7>*zkG$vLJkI zrhSwI^{O7?BF^H}a3bjY6J3#!F`2JjVU`Pc1tcyb*SIZLo#S@f``*_Nm+QOwKBC$L zx%eh=9PoqA5%@f;u;#o8hXNZ`s6<|I9z7QgCw=iSbp^`7*0$@G{xv}TL?7Z4awtwX z;WhpO&qJd3pj;CHWm}I^Y|YOS@e4>>H?YK=6aS&iBU%UBBaKhZ>b}$B$lw{#HSAD& zu}2RVf5=L?KDSp~qzI`*Ol3&M&l-M<pt-GewN9#X&kta=kl$@JHF`K}&QiRL8(H*bLgj`t%%KfhLs@1S5Pv}G^YMPvxE z8xMNz)*XE$ikX*ubf%BU7%tk9rOS?AhN7bKCcv@bt?9h9ru^e^bNBdpznuL+b%NA+?go?UtW}JLDM}= zB1zkS2vA=}R*q0>ph$W28}D(v)v#Fw$TRFwhsa#3L`pID(Pz_&}%YOv?0kdS2VHO@wPT%xVf|D-tXee|ccr;%>Oi$2hr zVS0K8GN}9&hSIsuB~eZ5kl>o~&BxLvUF)UuL`gPghi)xh??=Louco8DqrR`Uv@4l= z_oXdAX7o6mU9v6k9`F`Vz(8Dg2;ZCd#W^dVvZoK_s6Rg?pAj~N-29KTnc%gVcVf8mh>Qw!<1YJ%f(bjt0G@PdIXG1E}nS7E%WT(%~YMg8? z1tMF^L?_wU+0Hw46o$X<7?{WRUbvW*HM!id6HG7d>z>)_c#k%QHeo`m=53*9*{6ea zm-V9O@nl|wDbvk!>`%!U5?{Ohc+n*IR(2ao!c53478OVBN*k zK=?S#LQJ{hO$NQ#AbOYvl4LY(6tnp7TU$^y@=s#WSL6+1P#y9r?&CsYar)Cb$PwqlTq#nH`%mZNB6|lJuMDSJLf2MN{%iN>7Kl(3KEQ|M6Hz&< z>3iTKRnqpHC+`(*V@o00n$YXq5*?V-7guV(W9Vyh_?`<8fe`VZ6JD@cGeNX}j(EXn z%z1tvWq@g$gMqy;S999Cw?uO=0yZiv%9ezXzNE08;og`1|MQuZ{)>62S;8 z@a}+l)bz#;aN$beTRHy)vSY!3_QWu43*5U(Y%RbDv^aOXsekd#kyx^A!0oI)#-F^i z_;I zxBt&9#=p(7;Jqtt*ZRI$b=F`6Q-M1Yx6QpI|0FN|%7FaK8zXWD^!^L@Pb%Yofbn8? zz*d|4NS*T_Pq_vdg4*nts- zUfz8!x4Re1A5PL&y(3-xRrJ3L%|8cbRqZ#B=qca-F`Z#J5HP~F=3Pl|A^6n4RrH_W z{eL=VE!v(0HUPOFs6WG|e+Ozo53Zn$cm0fa zH~I}EI%?=eS#+|ItZWL&*D5D)3&Fh6|1LwNOR{hK8}a`DX5-S| delta 9188 zcmaiZbzGE9_xBP?cb9;KOM`TWgfvTch;;W7vXp=z21`jO-5{`Zs&t3+(jhGk(!Uk% z=e-|&{&@HE+3ULI%sFRf&dm4B%sDFuNU&uj91Ud@RAK-CfDRalR(Ow70ztg=iFdz! z-$4+2kpKV!#QV96rG~qUs|S~*i@Oyk*vT>e{a3YCZtQR~tDYvWr%zRo z-J+>oifpHWJocw2*;ZTO3*UIIB_Y-Em`xoLLmunm_nd*H@)O>mEVF2F*aU#!bVa3) zXgJ3ej%Fhy-iq7!6@mw2(9kpuWe^xI3sy`zYX`njijE$EgnN_fquO_aItij0gLr$1 zjW1yqYNYP3`(cH8#wPMH(u4#Vf{lr^K*(vQ)+HLbnud=ndBW;EpK}N*AuzkEBh$ zeufma0RAu%Y#K@8J_^E2Fe-FeB;4Qjs`Sb?O-BI$4)LI_uCtAx@ILFrf z$0phRtZ&vGgCNn`tHb_j&NT~5ZYGkScSSgNu7k7`Ur%k#yzKYU@rFh3*YnMJZk-piV^Wi|d)S_zVXiG0e~3yrSmkrL zGOv0!A2_diWA6?qamnLNRXFYT2J26>jOw5@J)kk|ScW(VIc;`EFg1_n3le;5-x!YZYBzao4@A&V?!NC(XXERYbOh*Dg7OeP^u9 z-!9-`e1$`TkGqYAKUf@5@2MHbMd#Zp3rrHSQD5Y>QRaDAPn;%(fu(jV(bT$qe#sa+ zP(zW%j5^P*u86qD>{cdw^U9{KJInP58zKOTWS^C+Z%oDF)5V|j-@mY0S-^XU9VxI~ z=Wzz)X(#2qh8F87(_frnB#mIix$&SpdU3-pJHG)bWX1FkztoF^*;b~c^_Z6c`!xxn(|uE{UY`b;t*>VR?1sqZronumgMeXBJX<4OHSBX=G$M+5_2oywRo@Md@f; zOY*0uNt)_x46-uqv*ZL$;Pv240N%y2l!m2^zXdD~@bL&?rih^nS#xlHjupBLp5 z{o5fjnHuo)A1ke(Ox;r!KmHapVYRr8vjU_vRwCCG2Bm)bOsVhV)J#htSY0hiyD$oH z=P}htCcC6@F6NKPQd|)|Pv-j@IU+(%xu(vVpwgF$5lOIFVX&hqXrv03JUCDS+@kny z>#E`j#;OJG9-&i(^?i?ulJIxIAYpo;L<><~*VR5ob#^}^WLNSZDrnqJ)CbM`uxwhv zGQUw3wkR3zI18(2gO$vaww>FO^!+p2=BF%40@+x_nlM2zPinqIA*;JQfg8EK&Fs?} zXnQ}K2HZaiZ218IEh@kMX<6Z@;VAc^CESQryjK1%T$;5J?$Q|fw+n#Mx!r?Z zJ~X{m1~p-1LgI#nGREF{3*3;ea3O@ZAi;{|p+w?=N-$GH91gi3sU|lK4-+~bst{0O z^!L}$0^8N52{(7*pFWiYpcY8J-yPn$Bn^snsVWalb$*rno&9i?)PB{>0wrO-cz7%d zyeaU(g*v}5)E?UOAZE_GYD6GyC2eO~)!nh%7HfiY-^qmSR0t*X!p$%C0k(3}l%`D= zvu~DwE6Pz0#3CqfYFItTq0BT(mAbfd<7mb6yg;E|{U_h{RkRzSE=*?TWw$TCngTrw zw}$3k#;<*@)L@>kBzXse(1{~qdpff>ct0gQ?=4*F_OwzY`c;vzj9jgBVJmo5I6C$8o!g0*tdj|X^{R6@krKGl9` zW66r=0$Z}0u!f-fF=s4Z;E3Qz$n-N|HiKGtdF<(P?Kol|B3;l~ko+3iV0I(_IbLrkK}H}BKv)uRWXUMeGtSC_ta+HyBHke^cR#U%Oa z+$IHh`S<}t-_B=sjc>6e0vuDUpZ2Wd+Ri7)b-c$T2f1#(+l0<-#Rr?!Hc`c;te@4A zvB{Kj6j;4veSTgfJ5gv?Iop;L5vO^D(~k4V5+iZa!YRv4ozUN? zBAoyh)~~?}V@lQHJoC0W??=WqhbsIuDx}SP9zcj2^K@Qz@7oy7ji?SJn3<_M;XHTg zLN5Z+VSRG$>HYZp>MF&@rEY3!De!06hvm8Oj(px!cy12X-pAD)TjM=?Pp+6A*FynI ziWx5)Dscfv!D%7|+!!T?(QZbQfV7XZq=I;fdWm>sEgWQ@@@k^b+$4-lRX^DzeqTM< zyyjLt++JrMY&Ppvzdv6SP1fVYNA~qgvIDmt@9`Ud&WRectFW?-3KM#Q@mbeiC$`!> zq!u%V`RoWq+nYCOdn&?dPT%-H`fVMM5ec%r8A#bVHk(l>NeTfpn=mfes_$DG-mb4J3I zuT~h;=KOOM4PI0L+8u|SS;jf=yfO1DHbD)n({aA^{qCMgLvUl&RvSO5?3i?w(p-!@ zZLHx_8ud<-shG4ks$21+t`JLxiSeqk2<*5i)urfP`mSsfRP!W^-`yC-UD2*Hqya9_ zL_b!8Q16lTu5b2)d1Q%G6Av~_edEeJ9!-GARW14iW{mZqU}BMbm`b#p_`eQON~H=k zNW51!>c)RnjY)kpr7gOdxd*t=Lr2q-e~}nJud<}>ru|i^vS&VdmJ9-ZFnTe;IS@wn zy_~)RUJS-oi9#7Qh`fT&gxYk&44dVzaVqCMAlHuSu&af-O{wysHm>tJb4z!B+4x z_FC%8>DrGi?rT@)aopv%)XiT>bWw;(cBz@-{Bo&-uevR!ZMz`-QBv2G*d-z>>}P^- zg%|0s;>NtmNn^^E!kcz$1X%G|wj496_P=>hJM3T@+gUAdU?f-kAnjRu#6AVwa^Y&q zObG1RY(O@a&)Lg9($bxs(+=OJ+;V*V@Et1KRv_9TW7{UB4Lxg|^Q)@L(K-h#w75d8 z@i8`s%|^*;5H%ab-m|fsd{0bU>V0v3njJ^MNt_NJuIgfN7Rky72CL(3fct212AyvI zXDG`zUh`jI0z0y>- za$SH=T_gDwtH-(`m zJZJEF$lSNft8DdMZjF+$%5uc&SWWxV`E{U#zlVotOA6QSe73=_SDoFx4$CWR&DVKf zj=RrfCac<{S@jpm6Q-&LJ8;c%AHHgCoH6=3DsB0d-P{9+Xn zvGJ!D(cc7H)A8R20M4j?I}E zX!%Lx%J)oqu~^$?Eeher)54N9>KCX20rd}Fh$KW%t?jlN79=@2Shm_VzbW?>BoA{h zv8OPtl{YxI+6draFgYKi<1_6>?9;qp-+)U$4P~dp;j#vw9fc^2Lv2ApS!*Fgq&rM zF^gS%%$Z|PZBQp$8?y^crObKFYRUR!q*IU|)RCQ;&tis`^FzIg`QYp{Vrj4*DgA`w zxdxGq#1?C*`eBW)E~FsGQMJ)6<#cnXKu=vYwFjv1WLMyWdJ_#!?-7%ZB4kt`X2j{p z(@aa%jkwaJO5V@Hsw6!0sj8wRb`Od^U75QbF8MR$qQ{(3;|}2;9_Hr0*>oAHEPPf* z@h$t*y%S)AKIC1}_{Nc=g#jp+0}C%&7caJDA(Ni!;$Dm75rN1`OUq?YgxZ!|PrGX! zFHV5h*jA_B1cvd}B#7;!J^V=`$V%p_&1#=)YQIXcNf@4v>1So7E!}3)iqlPkjh|&@ z9^`;p8)HRvYIAdr@7ygV=$a0fTkZ~$_z6BBjcusc9o~u!{vi~UDDR{Q!uCYV>W&{t zN?Q+={QBzT#U#W=$mGTB1r}&n+1+<#>zt}+A>|q1QJ(z^m`S3|^ z<>L&oQeeL8v<>y%1bI|yh->=^iBcm&*tF&wGR>v-uNuoe)m1@WG9UbptHv(h2!zX= z7J4$$8|_njo?qkkN~O?}(}zAy5$u#Hn3J$tXL79vb;N`MCv+NXUJV;vlz@$`#q z=CD-$PUi=41^QsBdmEQcY;~+_DoDSt9yNONGGtetF*vS1-Z2^bo_YqeD*mVuA-aN0 z4MYJ`V1hG!5Rbd$?Y)#5VvTLI3LiOAji2_)c;cCH%_EFZ22jG&DcloG({3 z${w}I>CMALVrm^lp;#oM>_anywVZ>%7_9C4dQ$#+VbCvH;a@+Y6AvxV9x5aXSCoX~ za;2$4Ub!u-c_82WcoK7!#Ty~*uT?Ckh*!0-ABR$2SK|gjZGWZ#A2B3rNVgCMI{HO& zHaSaGs-_p_yjr5@)x{L2@p`Vcgu&;L16)z+{xqbL{voS~8eaL}Q7A^MuumfC!6K50 z3Z=SRyUeeowx}V_kR@&5U>P-L!i!~{H=(AvkS{(T?^72zBCk>#Z%y&pA@8V|@Wyr4 z#Hy}7`qd`OBE5mxke!kFDTGCoI@+r8&}Mc#*>{ZGz}u%zCZk0W*mG08#?wdeb?>{V#<#K+)4zbPM(g*!Y`vB`EU6zi7Ds0@a5pz;_PZ|Ch>1P zK(rY@>;_+Rz(w=HewQt40NY=c@_GXf-XN8XAG>4D%K^tIeCYs68q@i0v!)?%w|eDf z;gxl2d})>TLhohgrw3+eX-xrw5~9M_JCL0s!Ow^6#k1C%CcIu$DW*U#!2zf59aw%3 z7$ha;Qb9-OYl19BJ}Dt$e)CQ1N)bzWz9LfT^;$o_Q~EycaoLT+gLPl7+uyjo;7$3c z-f=iJygKIT?a2?3Y#(q7#XS-N2ebLFY8zo^%((3H3e z4m1<#dGLU9gsr)=CN1mc&v=o3mrhc62QmOKg&E633nd~VgH;RG-JMpsWSa*KEXvD&W+#E zq7;WG)suZiV9!QE9_qw>AEmnKRqD#LVbzNdFAREX=7n>Dn9U|l+r2OSe>!%mJ2%R= zU@8N81jcK*yAx%1q(NbR7`iXT9l!3U2>TU9HUxsg#zXD>x{{a1Y>#rwlo|p=es*$R zdA_Eh*jX5{$$;seT|D82rWsK{KzYNY#zX6m@eUOw;F3uuj_(6|O2WOs;{!|ftZh2m zsr=9YVkj~SzZ_2c+j&>i4p|np)rnC1YhwP`LAdA{G!R9oMd_Z9j7J`oq1u6u@AwyE zukcdW7npd_ephizEa3#2}WY={^IbJ6P2 zcHDE*bW;LJKBZP7)D?9Sy-R}G?q18g*awcMbniM#}osj~T( zfr$dkD}gfhteH&9T@`b|XLLcDAA&G`oUC#IEqP-i682{Y{9w;)oMQ?vhQof$LhP%_ zLrSq5=`Ku~4U%z0j$d5j`-BDPX|0`&K0nXfj&mxSec0X??j%7a1CjIpjB}q{R!-~G z{QT-ch#ap^PiM;{J{zU)DhMZnWVZ2#A;VnWro_uv-lka$pNrlMJz9Ph-W;8Hbojw` zUH%?xLp6oD+>@Hg^*Y4O@!W6WMkmoY&34nYP6rcTRorywo?luc5%2J{p6g(a{vnz6 z9$IBlNwpV<{c<4Q%vO%cKr zqM-&85+5u`!}zW^4`PD8^STGa&@{UvIA}2;3BcZKncanHvVA+QDiHnPxa-F|t>1`q z`i;2G--s)VQ}oAI`i(dof!~NLKp;;47IBO4-Be8}D3|T$XQJ1$X9Fkmdd@?ipI}K% zrSWsB946$$xuP^`%yqyoX@ss}vMwZU6Q84od^P$323n0DRpv-_?GgujEVjQ5Ds6Y$ zqLE2pHC6S@(*}Ko^z+U4`k*BGjg4??^!2EfEMTtJTLv|>XQjy-xk_jCim~UN1-L*0 ztL4I31Stg;4Md}dwIjDCg`ING7&$SqM~R()*O$RhxS5leaxMeQk|lj(Rt`@FF8AL7 zOwDqTsWa=waH_svzWB&rrrngGJd^t6iH6I^1aS7#ex* zv9}HO*5QAvy(upn5}=8 z{)S0OI3oM$7m28(jCPoI_9PL{YBDxske2XT0Fu4j5M#c2CY2+1Rp}t%msdf=uFOdM zhRqyt&jwaaAez;@ijroG@(pt9MSz0kJ)Mw*2RqN$STVL`j;utFQa9vQh!zAfuqQ7> zs!9?WEGSlW#T`J%4TLmE>~R=L=FKeuA&*J(YV8b)WI9qnL~JHD+TyR79ZhfY`f;BO z#Rrr1&2t(ibKXfyc=N-gb_AUu)^YCMme!!DWTC_<4sy6S*q z5BlEi@aT^^L(07I$>rzo@AMM>R9W=nU z+A7w|Wm2#1{So7Yp6M|`$#tk;!uqv$fZ8!(M1Cv`BQh;Py2aDXR8PGr0#9uSJW(R^ za>F*v9PbdKZ@~nUM5nteq(5UqfUV=%9eQBE=YDtUa;$&cC6R1UzyIF$@UZ{@JVX)+ z?8xQg;_mRw#l_(^DwD9K2InRYGRx^fVUIyseHg`u@gO41-ASg^v+Wfp4g+pCZ z6f_YBrQXq7j&A;F36VG%D=HtPviwM9#8lN#xs|=&+@zwVCy-uyVQx5NQ7oYAMw@)X z0^#@KP^#sz%9FZ?<47zT4OuZI-=Q3?f1ZAY*IPvjUZn(lUJ24PUSB!4r=3!7c-qOa zobmdG*xzz6D@e~L2|p#8Y_U!L>7vh8_D#Y&_P8OLSAzND-H#1wI~oJ|bsH&m>KeI9 z-n*wgZ~elc&!sf_g0?kafokFu++mvglZQUWGfts}_+tL$56tmyg{DK*B-$+WrkXMQ_jviBz!S|dB!45EAs+L| zpv(}FVrk<>f>#8L;ZKdJnzV8~Ud~r(d=c3GdNcD1V(Lmn(c@;!@|5J0X&#JqVmg;|mN|?EYv0_a9lowT}Bq zadL%k!cynKy9oMWqko0OPeaQD3E!cGXjDfZ;^Oz5Vq*=KtTucY1+MaL2QYneBB9_F z>bb_=qUFOH3%K6_yrLL4%O9VlXeD2jOvyi9xY{@Q+C})b2~T?Tndp6uSYGxzzQv#H zOQ+;AXZ>aKWvhkau@RuhyzIP*`}uVvQ72bv3Uz&Dy&U>X#**dW#R}1=D9vOGNRB9n zOcnb_3u7({Cf?S^H@KaLrPsJKFO!9TXpr(c@=Q#FubsWzd*-O&R39I`-6dtp%kD3) zEIV#pq~--W9ZJJJZ;UsUNwp=B``d%*%qdLY?ArjZ9_8)hPo%|tl9^Atwgw;XUR6QF zOmF_gmwxL&Db`a91b(K7002q=bRSF&>7VS6`o>KhzG%c!2l(!>w3}W!Q%lnrteHh} zp#Zfw`k6N=clDeU_Wn$liADSc{hmhs^^p}Rmnuz^GF7aR&bWnT6geEv;fd)lRxD`l zu@_`*)KiD_!pf)GDZvZ|t4YrFfQt`u!;cU9R$N`K%$No8zB8RRFy9mg&_F04jx8xa zDKU4m6mboFPTVZFOQ>r?Ul>0hQ5WdGuH~7%1~Ql5m}F~Yqsrk%QA-aKN9Cf*@dA?x zi2E~a)if%DGVe(b6GkPV%CP|r35XS=WOK1qxg2?GInZmkyEvZKa8GhX)^M+Lbk%VG z;y|zEM(2E5%T3N1S<4ON?5gF42$inaKK|#yMZ19ghE1gO|Mw8}oZ%7rIpo&4Q2V5F z)`$jg-}IdOK8^!6m~FZoGX8cK!XD9|m_?CPz4yrF0_6`Ur(dMUUJ!+tgO`ZhHW2`( z;uwj<{2gMooiaXVc0;l?p8dXX7R~%>zH2j_>krDkU;WE^zp;zLrX6gn!~UmE@^9Si`FBRt=KenG+7P&$`KwP;;Dncz>yYzC%>g;Qg-VxeZDERj)rsX2-dKaIU5Z=lW+8lZ3ZQ(On5{ z+o5))LOvzAC8_-vNsIiJ6z57n_j|B#cS&ppMAX~}|8I4lDQ_94|6%+$&Gk1UI_)hZ zo!ecz{%%yrv2;+7+oRhC{>^y-02KeR2jU$RtorcQj-~&|VYpKvH!|Ilj@|A$_isr5 zZ`ncMEu)zG9pk^DyuTT7IiTh2RM1Fw>|3MEAsX@Hy_N0xNA};F*x#}~0>2rF1%7W@ ze@z3_(Sr&p7b@)mydC7fSG2!%6pG(A_Q~VUIOiTz$XQaiq#yr~q&*S#dV(+^DU`$W zZa7Q{72G9=ITpkGTV0U+Eu*LBow`AU>~qCiQo}#86zpN4Dv0&3kC6Y<-anLnGZNos zM*bd-i5C^Joyx5uMX!H40k|5FxZc*`j4LwLI$W)QL;jBZImK6kPs_x9yA5o10y0uJIpH1VWJfED?Li e-3t5Dt^GF>krh **ClassDefinitionName** := **ElementName** +> **ClassDefinitionName** := **ElementName** | **Unspecified** -> **TypeDefinitionName** := **ElementName** +> **TypeDefinitionName** := **ElementName** | **Unspecified** -> **EnumDefinitionName** := **ElementName** +> **EnumDefinitionName** := **ElementName** | **Unspecified** > **SlotDefinitionName** := **ElementName** -> **ElementName** := *a finite sequence of characters matching the PN_LOCAL production of [SPARQL](https://www.w3.org/TR/rdf-sparql-query/) and not matching any of the keyword terminals of the syntax* +> **ElementName** := **LocalName** | **PrefixedName** | **IRI** -Names MUST NOT be shared across definition types +> **LocalName** := *a finite sequence of characters matching the PN_LOCAL production of [SPARQL](https://www.w3.org/TR/rdf-sparql-query/) and not matching any of the keyword terminals of the syntax* + +> **PrefixedName** := **Prefix** ':' **LocalName** + +> **IRI** := '<' *a valid IRI* '>' + +> **Unspecified** := '?' + +Names SHOULD NOT be shared across definition types. + +The **Unspecified** name is used to indicate that the name of the class, type, or enum +is unknown. An instance that uses **Unspecified** as a name anywhere in its tree is +called *uncommitted*. Uncommitted trees may be generated when parsing from tree-serializations +such as JSON or the JSON-equivalent of YAML. They may be replaced with names as +part of an **Inference Procedure** (see [Part 5](../05validation)). ### Instances of Classes (Objects) @@ -59,8 +73,8 @@ assignment is a key-value pair of a **SlotName** and an **Instance** value. ```mermaid classDiagram Instance <|-- InstanceOfClass - InstanceOfClass "1" --> "1..*" Assignment - Assignment "1" --> Instance + InstanceOfClass "1" --> "1..*" Assignment : assignments + Assignment "1" --> Instance : value class InstanceOfClass { +ClassDefinitionName type @@ -222,6 +236,7 @@ Examples of collections: * `[Person(name=..., ...), Person(name=..., ...)]` -- a list of class instances * `[Person(name=..., ...), Integer^5, None]` -- a heterogeneous collection * `[]` -- an empty collection +* `[[Integer^1,Integer^2], [Integer^3, Integer^4]]` -- a list of lists Note that collections can be serialized in different ways depending on the target syntax, for examples, lists vs dictionaries. See section [6](../06mapping) for details of serializations. diff --git a/linkml_runtime/linkml_model/model/docs/specification/03schemas.md b/linkml_runtime/linkml_model/model/docs/specification/03schemas.md index d9631588..89573c7f 100644 --- a/linkml_runtime/linkml_model/model/docs/specification/03schemas.md +++ b/linkml_runtime/linkml_model/model/docs/specification/03schemas.md @@ -255,15 +255,15 @@ A collection of ClassDefinition instances might look name=String^"NamedThing", abstract=True, slots=[ - SlotDefinitionReference&"id", - SlotDefinitionReference&"name", + SlotDefinition&"id", + SlotDefinition&"name", ... ] ), ClassDefinition( name=String^"Person", description=String^"A person, living or dead", - is_a=ClassDefinitionReference&"NamedThing", + is_a=ClassDefinition&"NamedThing", attributes=[ SlotDefinition( name=String^"height", @@ -424,7 +424,7 @@ SchemaDefinition( name=String^"id", identifier=Boolean^True, description=String^"A unique identifier for an object", - range=TypeDefinitionReference&"String", + range=TypeDefinition&"String", ... ), SlotDefinition( @@ -741,14 +741,14 @@ SchemaDefinition( ], slots=[ SlotDefinition( - name=SlotDefinition&"id", + name=String^"id", identifier=Boolean^True, description=String^"...", range=TypeDefinition&"String", ... ), SlotDefinition( - name=SlotDefinition&"name", + name=String^"name", description=SlotDefinition&"...", ... ), diff --git a/linkml_runtime/linkml_model/model/docs/specification/04derived-schemas.md b/linkml_runtime/linkml_model/model/docs/specification/04derived-schemas.md index 6b7223b4..61508ebf 100644 --- a/linkml_runtime/linkml_model/model/docs/specification/04derived-schemas.md +++ b/linkml_runtime/linkml_model/model/docs/specification/04derived-schemas.md @@ -152,13 +152,14 @@ The one with the shortest reference is chosen as the canonical. The function **Resolve** takes as input a **InstanceOfReference** and returns an **InstanceOfClass** that is the referenced object. -| *i* | **Resolve**(*i*) | -|------------------------|------------------| -| `SlotDefinition&` | `m.slots[]` | -| `ClassDefinition&` | `m.classes[]` | -| `EnumDefinition&` | `m.enums[]` | -| `TypeDefinition&` | `m.types[]` | -| `SchemaDefinition&` | see below | +| *i* | **Resolve**(*i*) | +|------------------------|---------------------------------------------| +| `SlotDefinition&` | `m.slots[]` | +| `ClassDefinition&` | `m.classes[]` | +| `EnumDefinition&` | `m.enums[]` | +| `TypeDefinition&` | `m.types[]` | +| `SchemaDefinition&` | see below | +| [*i1*, *i2*, ...] | [**Resolve**(*i1*), **Resolve**(*i2*), ...] | The rules for schema resolution are as follows: @@ -211,13 +212,13 @@ The ancestors function **A** returns the **Closure** of the **Parents** function The function **ReflexiveAncestors** **A*** uses the **ReflexiveClosure**. -> **A***(*e*) = **C***(*e*, **P**) +> **A**`*`(*e*) = **C**`*`(*e*, **P**) ### Function: Imports Closure The imports closure function **I** returns the reflexive **ReferenceClosure** of the direct imports. -> **I**(*s*) = **C***(*s*, **s.imports**) +> **I**(*s*) = **C**`*`(*s*, **s.imports**) ### Function: Element CURIEs and URIs diff --git a/linkml_runtime/linkml_model/model/docs/specification/05validation.md b/linkml_runtime/linkml_model/model/docs/specification/05validation.md index f8a0d3ad..c0073c89 100644 --- a/linkml_runtime/linkml_model/model/docs/specification/05validation.md +++ b/linkml_runtime/linkml_model/model/docs/specification/05validation.md @@ -35,29 +35,137 @@ The following holds for any validation procedure: ## Types of checks -| Check | Type | Description | SHACL | -|-----------------------|-----------|------------------------|-----------------------------------| -| `Required` | ERROR | | `MinCountConstraintComponent` | -| `Recommended` | WARNING | | `MinCountConstraintComponent` | -| `Singlevalued` | ERROR | | `MaxCountConstraintComponent` | -| `Multivalued` | ERROR | | `MinCountConstraintComponent` | -| `Inlined` | ERROR | | | -| `Referenced` | ERROR | | | -| `ClassRange` | ERROR | class matches range | `ClassConstraintComponent` | -| `Datatype` | ERROR | datatype matches range | `DatatypeConstraintComponent` | -| `NodeKind` | ERROR | range metatype | `NodeKindConstraintComponent` | -| `MinimumValue` | ERROR | | `MinInclusiveConstraintComponent` | -| `MaximumValue` | ERROR | | `MaxInclusiveConstraintComponent` | -| `Pattern` | ERROR | | `PatternConstraintComponent` | -| `EqualsExpression` | INFERENCE | | `EqualsConstraintComponent` | -| `StringSerialization` | INFERENCE | | `EqualsConstraintComponent` | -| `TypeDesignator` | INFERENCE | | | +| Check | Type | Description | SHACL | +|-----------------------|-----------|---------------------------------|-----------------------------------| +| `Required` | ERROR | slot MUST be present | `MinCountConstraintComponent` | +| `Recommended` | WARNING | slot SHOULD be present | `MinCountConstraintComponent` | +| `Singlevalued` | ERROR | slot MUST NOT be collection | `MaxCountConstraintComponent` | +| `Multivalued` | ERROR | slot MUST be collection | `MinCountConstraintComponent` | +| `Inlined` | ERROR | object value MUST be nested | | +| `Referenced` | ERROR | object value MUST NOT be nested | | +| `ClassRange` | ERROR | class matches range | `ClassConstraintComponent` | +| `Datatype` | ERROR | datatype matches range | `DatatypeConstraintComponent` | +| `NodeKind` | ERROR | range metatype | `NodeKindConstraintComponent` | +| `MinimumValue` | ERROR | value of slot MUST NOT be lower | `MinInclusiveConstraintComponent` | +| `MaximumValue` | ERROR | value of slot MUST NOT exceed | `MaxInclusiveConstraintComponent` | +| `Pattern` | ERROR | string value MUST match | `PatternConstraintComponent` | +| `EqualsExpression` | INFERENCE | value MUST be equal to | `EqualsConstraintComponent` | +| `StringSerialization` | INFERENCE | | `EqualsConstraintComponent` | +| `TypeDesignator` | INFERENCE | | | For the `INFERENCE` type, the validation procedure MAY fill in missing values in the instance. There is only an error if the inferred value is not consistent with the asserted value. ## Validation procedure for instances +### Validation against an element + +To **Validate** an instance `i` against an element `e` and a schema `m` , perform the following steps. They return +a **ValidationResult** object. + +**Validate**(*i*, *e*, *m*): + +* Set *errors* to an empty list +* Set *problems* to an empty list +* For each *e'* in *e*.`all_of` + **Parents**(*e*): + - Set *r* to **Validate**(*i*, *e'*, *m*) + - If *r.error* is `True`, append *r* to *errors* + - If *r.problem* is `True`, append *r* to *problems* +* For each *e'* in *e*.`none_of`: + - Set *r* to **ValidateAssignment**(*i*, *e'*, *m*) + - If *r.error* is `False`, append *r* to *errors* +* If *e*.`any_of` is set: + - Set *any_of_results* to `{` **ValidateAssignment**(*i*, *e'*, *m*) : *e'* in *e*.`any_of` `}` + - Set *any_of_passes* to `{` *r* : *r* in *any_of_results* if *r.error* is `False` `}` + - If *any_of_passes* is empty, append *s* to *errors* + - If *any_of_passes* is not empty, append *any_of_passes*`[0].types` to *types* (greedy non-determinism) +* If *s*.`exactly_one_of` is set: + - Set *exactly_one_of_results* to `{` **ValidateAssignment**(*i*, *s'*, *m*) : *s'* in *s*.`exactly_one_of` `}` + - Set *exactly_one_of_passes* to `{` *r* : *r* in *exactly_one_of_results* if *r.error* is `False` `}` + - If *len*(*exactly_one_of_passes*) is not 1, append *s* to *errors* + - otherwise append *exactly_one_of_passes*`[0].types` to *types* +* If *i* is a **InstanceOfType**: + - if *e* is not a **TypeDefinition**: + - append **DatatypeCheck**(*e*) to *errors* +* If *i* is a **InstanceOfEnum**: + - if *e* is not a **EnumDefinition**: + - append **DatatypeCheck**(*e*) to *errors* + - if *i* is not in *e*.`permissible_values`: + - append **PermissibleValueCheck**(*e*) to *errors* +* If *i* is a **InstanceOfClass**: + - for each *sn*, *j* in *i*.`assignments`: + - Set *s* to **Resolve**(*sn*) + - append **ValidateAssignment**(*j*, *s'*, *m*) to *errors* // todo +* Return **ValidationResult**(*i*, **errors**, **problems**, **e**) + +### Validation of an assignment + +To perform a **ValidateAssignment** operation on an instance `i` against a **SlotExpression** *s* and schema `m` perform the following steps. +They return a **ValidationResult** object. + +**ValidateAssignment**(*i*, *s*, *m*): + +* Set *errors* to an empty list +* Set *problems* to an empty list +* Set *types* to an empty list +* For each *s'* in *s*.`all_of` + **Resolve**(*s*.`is_a` + *s*.`mixins`): + - Set *r* to **ValidateAssignment**(*i*, *s'*, *m*) + - If *r.error* is `True`, append *r* to *errors* + - If *r.problem* is `True`, append *r* to *problems* + - If *r.error* is `False`, append *r.types* to *types* +* For each *s'* in *s*.`none_of`: + - Set *r* to **ValidateAssignment**(*i*, *s'*, *m*) + - If *r.error* is `False`, append *r* to *errors* +* If *s*.`any_of` is set: + - Set *any_of_results* to `{` **ValidateAssignment**(*i*, *s'*, *m*) : *s'* in *s*.`any_of` `}` + - Set *any_of_passes* to `{` *r* : *r* in *any_of_results* if *r.error* is `False` `}` + - If *any_of_passes* is empty, append *s* to *errors* + - If *any_of_passes* is not empty, append *any_of_passes*`[0].types` to *types* (greedy non-determinism) +* If *s*.`exactly_one_of` is set: + - Set *exactly_one_of_results* to `{` **ValidateAssignment**(*i*, *s'*, *m*) : *s'* in *s*.`exactly_one_of` `}` + - Set *exactly_one_of_passes* to `{` *r* : *r* in *exactly_one_of_results* if *r.error* is `False` `}` + - If *len*(*exactly_one_of_passes*) is not 1, append *s* to *errors* + - otherwise append *exactly_one_of_passes*`[0].types` to *types* +* If *s*.`required` is `True`: + - if *i* is `None` then append *s* to *errors* +* If *s*.`recommended` is `True`: + - if *i* is `None` then append *s* to *problems* +* If *s*.`range` is set: + - append *s.range* to *types* +* If *s*`.multivalued` is `True`: + - if *i* is not a **Collection**: + - add **MinCountConstraintComponent**(i) to *errors* + - else: + - copy *s* to *s'* + - set *s'*`.multivalued to `False` + - for *i'* in **AtomicMembers**(i): + - append **ValidateAssignment**(*i'*, *s'*, *m*) to *errors* and *problems* +* If *s*`.multivalued` is `False`: + * If *i* is a **Collection**: + - add **MaxCountConstraintComponent**(i) to *errors* + * If *s*.`maximum_value` is set: + - If *i* is not `None` and *i* > *s*.`maximum_value`, append *s* to *errors* + * If *s*.`minimum_value` is set: + - If *i* is not `None` and *i* < *s*.`minimum_value`, append *s* to *errors* + * If *s*.`pattern` is set: + - If *i* is not `None` and *i* does not match *s*.`pattern`, append *s* to *errors* + * If *s*.`equals_expression` is set: + - If *i* is not `None` and *i* != *Eval*(*s*.`equals_expression`), append *s* to *errors* + * If *s*.`equals_string` is set: + - If *i* is not `None` and *i* != *s*.`equals_string`, append *s* to *errors* + * If *s*.`range` is set: + - Set *r* to **Validate**(*i*, *s*.`range`, *m*) + - append *r*.`errors` to *errors* + - append *r*.`problems` to *problems* +* Return **ValidationResult**(*i*, **errors**, **problems**, **types**) + + +**ValidateClassInstance**(*i*, *s*, *m*): + +* for each *sn*, *j* in *i*.`assignments`: + - Set *s* to **Resolve**(*sn*) + - for each *s'* in **GetSlotExpressions**(*sn*, *types*) + - append **ValidateAssignment**(*v*, *s'*, *m*) to *errors* ``` Validate(i, m, t): diff --git a/linkml_runtime/linkml_model/model/schema/array.yaml b/linkml_runtime/linkml_model/model/schema/array.yaml index 1d5f67fd..e030f9b8 100644 --- a/linkml_runtime/linkml_model/model/schema/array.yaml +++ b/linkml_runtime/linkml_model/model/schema/array.yaml @@ -11,14 +11,15 @@ description: >- use `implements` to denote conformance. status: testing -# contributors: -# - github:rly -# - github:oruebel -# - github:jmchandonia -# - github:realmarcin -# - github:mavaylon1 -# - github:ialarmedalien -# - github:cmungall + contributors: + - github:rly + - github:oruebel + - github:sneakers-the-rat + - github:jmchandonia + - github:realmarcin + - github:mavaylon1 + - github:ialarmedalien + - github:cmungall prefixes: linkml: https://w3id.org/linkml/ @@ -39,7 +40,7 @@ classes: DataStructure: abstract: true - NDArray: + Array: description: >- a data structure consisting of a collection of *elements*, each identified by at least one array index tuple. abstract: true diff --git a/linkml_runtime/linkml_model/model/schema/extensions.yaml b/linkml_runtime/linkml_model/model/schema/extensions.yaml index b015dcae..6d5fd2d5 100644 --- a/linkml_runtime/linkml_model/model/schema/extensions.yaml +++ b/linkml_runtime/linkml_model/model/schema/extensions.yaml @@ -38,6 +38,8 @@ slots: alias: value required: true range: AnyValue + annotations: + simple_dict_value: true classes: diff --git a/linkml_runtime/linkml_model/model/schema/meta.yaml b/linkml_runtime/linkml_model/model/schema/meta.yaml index d9c21038..c3e78ed6 100644 --- a/linkml_runtime/linkml_model/model/schema/meta.yaml +++ b/linkml_runtime/linkml_model/model/schema/meta.yaml @@ -464,6 +464,14 @@ slots: description: >- The relationship between an element and its alias. + alias_contexts: + alias: contexts + domain: structured_alias + range: uri + multivalued: true + description: >- + The context in which an alias should be applied + in_language: slot_uri: schema:inLanguage range: string @@ -502,7 +510,6 @@ slots: # -------------------------------------------------------------- is_a: rank: 11 - domain: definition range: definition abstract: true description: >- @@ -546,7 +553,6 @@ slots: rank: 13 aliases: - traits - domain: definition multivalued: true range: definition description: >- @@ -618,7 +624,6 @@ slots: - BasicSubset pv_formula: - domain: enum_expression range: pv_formula_options description: >- Defines the specific formula to be used to generate the permissible values. @@ -1499,8 +1504,7 @@ slots: range: string inherited: true description: >- - function that provides a default value for the slot. Possible values for this slot are defined in - linkml.utils.ifabsent_functions.default_library: + function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * bnode -- blank node identifier @@ -1512,6 +1516,7 @@ slots: * slot_uri -- URI for the slot * slot_curie -- CURIE for the slot * string(value) -- string value + * EnumName(PermissibleValue) -- enum value close_mappings: - sh:defaultValue in_subset: @@ -1543,7 +1548,7 @@ slots: domain: slot_definition range: presence_enum inherited: true - description: if true then a value must be present (for lists there must be at least one value). If false then a value must be absent (for lists, must be empty) + description: if PRESENT then a value must be present (for lists there must be at least one value). If ABSENT then a value must be absent (for lists, must be empty) comments: - if set to true this has the same effect as required=true. In contrast, required=false allows a value to be present status: unstable @@ -2098,6 +2103,63 @@ slots: in_subset: - SpecificationSubset + bindings: + domain: element + range: enum_binding + multivalued: true + inlined: true + status: testing + description: >- + A collection of enum bindings that specify how a slot can be bound to a permissible value + from an enumeration. + + LinkML provides enums to allow string values to be restricted to one of a set of permissible + values (specified statically or dynamically). + + Enum bindings allow enums to be bound to any object, including complex nested objects. For + example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the + values the id takes on in a given context. For example, a HumanSample class may have a slot for + representing sample site, with a range of concept, but the values of that slot may be restricted to + concepts from a particular branch of an anatomy ontology. + in_subset: + - SpecificationSubset + + binds_value_of: + domain: enum_binding + range: string + description: >- + A path to a slot that is being bound to a permissible value from an enumeration. + in_subset: + - SpecificationSubset + + obligation_level: + range: obligation_level_enum + description: >- + The level of obligation or recommendation strength for a metadata element + in_subset: + - SpecificationSubset + + type_mappings: + range: type_mapping + description: >- + A collection of type mappings that specify how a slot's range should be mapped or + serialized in different frameworks + multivalued: true + + framework_key: + range: string + alias: framework + key: true + description: >- + The name of a format that can be used to serialize LinkML data. + The string value should be a code from the LinkML frameworks vocabulary, + but this is not strictly enforced + + mapped_type: + range: type_definition + alias: type + description: >- + type to coerce to # ----------------------------------- # Slots for type definition @@ -2520,6 +2582,7 @@ classes: - generation_date - slot_names_unique - settings + - bindings see_also: - https://en.wikipedia.org/wiki/Data_dictionary close_mappings: @@ -2673,6 +2736,24 @@ classes: slots: - enum_uri + enum_binding: + description: >- + A binding of a slot or a class to a permissible value from an enumeration. + slots: + - range + - obligation_level + - binds_value_of + - pv_formula + slot_usage: + range: + range: enum_definition + in_subset: + - SpecificationSubset + mixins: + - extensible + - annotatable + - common_metadata + match_query: description: >- A query that is used on an enum expression to dynamically obtain a set of permissivle values via a query that @@ -2711,6 +2792,7 @@ classes: - literal_form - alias_predicate - categories + - alias_contexts slot_usage: categories: description: >- @@ -2772,8 +2854,10 @@ classes: - range - range_expression - enum_range + - bindings - required - recommended + - multivalued - inlined - inlined_as_list - minimum_value @@ -2831,7 +2915,6 @@ classes: - singular_name - domain - slot_uri - - multivalued - array - inherited - readonly @@ -2866,6 +2949,7 @@ classes: - disjoint_with - children_are_mutually_disjoint - union_of + - type_mappings slot_usage: is_a: range: slot_definition @@ -3104,6 +3188,10 @@ classes: - description - meaning - unit + - instantiates + - implements + - is_a + - mixins in_subset: - SpecificationSubset - BasicSubset @@ -3124,6 +3212,20 @@ classes: - BasicSubset - RelationalModelProfile + type_mapping: + rank: 21 + description: Represents how a slot or type can be serialized to a format. + mixins: + - extensible + - annotatable + - common_metadata + slots: + - framework_key + - mapped_type + - string_serialization + in_subset: + - SpecificationSubset + # ================================== # Enumerations # # ================================== @@ -3192,3 +3294,28 @@ enums: meaning: skos:broaderMatch NARROW_SYNONYM: meaning: skos:narrowerMatch + + obligation_level_enum: + rank: 10 + description: >- + The level of obligation or recommendation strength for a metadata element + permissible_values: + REQUIRED: + description: >- + The metadata element is required to be present in the model + RECOMMENDED: + aliases: + - ENCOURAGED + description: >- + The metadata element is recommended to be present in the model + OPTIONAL: + description: >- + The metadata element is optional to be present in the model + EXAMPLE: + description: >- + The metadata element is an example of how to use the model + DISCOURAGED: + description: >- + The metadata element is allowed but discouraged to be present in the model + in_subset: + - SpecificationSubset diff --git a/linkml_runtime/linkml_model/owl/meta.owl.ttl b/linkml_runtime/linkml_model/owl/meta.owl.ttl index 7e7e1261..c2667db1 100644 --- a/linkml_runtime/linkml_model/owl/meta.owl.ttl +++ b/linkml_runtime/linkml_model/owl/meta.owl.ttl @@ -149,65 +149,65 @@ linkml:ClassRule a owl:Class, owl:minCardinality 0 ; owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:open_world ], + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:postconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:postconditions ], + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:deactivated ], + owl:maxCardinality 1 ; + owl:onProperty linkml:preconditions ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:open_world ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:postconditions ], + owl:onProperty linkml:preconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:deactivated ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:rank ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:open_world ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:preconditions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:deactivated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:elseconditions ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:deactivated ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:postconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:preconditions ], + owl:onProperty linkml:postconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:bidirectional ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:preconditions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:open_world ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:elseconditions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:preconditions ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:open_world ], linkml:Annotatable, linkml:ClassLevelRule, linkml:CommonMetadata, @@ -226,44 +226,69 @@ linkml:DimensionExpression a owl:Class, owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:minimum_cardinality ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_cardinality ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_cardinality ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exact_cardinality ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:alias ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:alias ], + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:maximum_cardinality ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exact_cardinality ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; skos:definition "defines one of the dimensions of an array" ; skos:inScheme linkml:meta . + a owl:Class, + linkml:ObligationLevelEnum ; + rdfs:label "DISCOURAGED" ; + rdfs:subClassOf linkml:ObligationLevelEnum . + + a owl:Class, + linkml:ObligationLevelEnum ; + rdfs:label "EXAMPLE" ; + rdfs:subClassOf linkml:ObligationLevelEnum . + + a owl:Class, + linkml:ObligationLevelEnum ; + rdfs:label "OPTIONAL" ; + rdfs:subClassOf linkml:ObligationLevelEnum . + + a owl:Class, + linkml:ObligationLevelEnum ; + rdfs:label "RECOMMENDED" ; + rdfs:subClassOf linkml:ObligationLevelEnum . + + a owl:Class, + linkml:ObligationLevelEnum ; + rdfs:label "REQUIRED" ; + rdfs:subClassOf linkml:ObligationLevelEnum . + a owl:Class, linkml:PresenceEnum ; rdfs:label "ABSENT" ; @@ -318,122 +343,168 @@ linkml:TypeExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "type_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; + owl:onProperty linkml:unit ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_value ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:implicit_prefix ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:pattern ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:pattern ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_number ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:structured_pattern ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:PatternExpression ; owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:equals_string ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:all_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:implicit_prefix ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_value ], + owl:minCardinality 0 ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; - owl:onProperty linkml:all_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_value ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string_in ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:equals_string ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousTypeExpression ; owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:any_of ], + linkml:Expression ; + skos:definition "An abstract class grouping named types and anonymous type expressions" ; + skos:inScheme linkml:meta . + +linkml:TypeMapping a owl:Class, + linkml:ClassDefinition ; + rdfs:label "type_mapping" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:string_serialization ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:framework_key ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; - owl:onProperty linkml:none_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:framework_key ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:framework_key ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:mapped_type ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], - linkml:Expression ; - skos:definition "An abstract class grouping named types and anonymous type expressions" ; - skos:inScheme linkml:meta . + owl:onProperty linkml:string_serialization ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:string_serialization ], + linkml:Annotatable, + linkml:CommonMetadata, + linkml:Extensible ; + skos:definition "Represents how a slot or type can be serialized to a format." ; + skos:inScheme linkml:meta ; + sh:order 21 . + +linkml:alias_contexts a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "alias_contexts" ; + rdfs:domain linkml:StructuredAlias ; + rdfs:range linkml:Uri ; + skos:definition "The context in which an alias should be applied" ; + skos:inScheme linkml:meta ; + skos:prefLabel "contexts" . linkml:alt_descriptions a owl:ObjectProperty, linkml:SlotDefinition ; @@ -627,14 +698,6 @@ linkml:inherits a owl:ObjectProperty, skos:inScheme linkml:meta ; skos:note "All permissible values for all inherited enums are copied to form the initial seed set" . -linkml:instantiates a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "instantiates" ; - rdfs:domain linkml:Element ; - rdfs:range linkml:Uriorcurie ; - skos:definition "An element in another schema which this element instantiates." ; - skos:inScheme linkml:meta . - linkml:keywords a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "keywords" ; @@ -811,6 +874,13 @@ linkml:todos a owl:ObjectProperty, skos:definition "Outstanding issues that needs resolution" ; skos:inScheme linkml:meta . +linkml:type_mappings a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "type_mappings" ; + rdfs:range linkml:TypeMapping ; + skos:definition "A collection of type mappings that specify how a slot's range should be mapped or serialized in different frameworks" ; + skos:inScheme linkml:meta . + linkml:types a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "types" ; @@ -841,10 +911,10 @@ linkml:Annotation a owl:Class, linkml:ClassDefinition ; rdfs:label "annotation" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Annotation ; + owl:minCardinality 0 ; owl:onProperty linkml:annotations ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Annotation ; owl:onProperty linkml:annotations ], linkml:Annotatable, linkml:Extension ; @@ -855,47 +925,47 @@ linkml:ClassExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "class_expression" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_conditions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_conditions ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:minCardinality 0 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:none_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; + owl:minCardinality 0 ; owl:onProperty linkml:slot_conditions ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ] ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:none_of ] ; skos:definition "A boolean expression that can be used to dynamically determine membership of a class" ; skos:inScheme linkml:meta . @@ -903,23 +973,23 @@ linkml:MatchQuery a owl:Class, linkml:ClassDefinition ; rdfs:label "match_query" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:identifier_pattern ], + owl:minCardinality 0 ; + owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:identifier_pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:identifier_pattern ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:source_ontology ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:identifier_pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_ontology ] ; + owl:onProperty linkml:identifier_pattern ] ; skos:definition "A query that is used on an enum expression to dynamically obtain a set of permissivle values via a query that matches on properties of the external concepts." ; skos:inScheme linkml:meta . @@ -1024,6 +1094,14 @@ linkml:bidirectional a owl:ObjectProperty, skos:definition "in addition to preconditions entailing postconditions, the postconditions entail the preconditions" ; skos:inScheme linkml:meta . +linkml:binds_value_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "binds_value_of" ; + rdfs:domain linkml:EnumBinding ; + rdfs:range linkml:String ; + skos:definition "A path to a slot that is being bound to a permissible value from an enumeration." ; + skos:inScheme linkml:meta . + linkml:code_set a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "code_set" ; @@ -1235,6 +1313,14 @@ linkml:followed_by a owl:ObjectProperty, skos:definition "in a sequential list, this indicates the next member" ; skos:inScheme linkml:meta . +linkml:framework_key a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "framework_key" ; + rdfs:range linkml:String ; + skos:definition "The name of a format that can be used to serialize LinkML data. The string value should be a code from the LinkML frameworks vocabulary, but this is not strictly enforced" ; + skos:inScheme linkml:meta ; + skos:prefLabel "framework" . + linkml:from_schema a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "from_schema" ; @@ -1252,15 +1338,6 @@ linkml:generation_date a owl:ObjectProperty, skos:definition "date and time that the schema was loaded/generated" ; skos:inScheme linkml:meta . -linkml:has_extra_dimensions a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "has_extra_dimensions" ; - bibo:status ; - rdfs:domain linkml:ArrayExpression ; - rdfs:range linkml:Boolean ; - skos:definition "If this is set to true" ; - skos:inScheme linkml:meta . - linkml:has_member a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "has_member" ; @@ -1329,7 +1406,7 @@ linkml:ifabsent a owl:ObjectProperty, rdfs:range linkml:String ; rdfs:seeAlso linkml:equals_expression ; skos:closeMatch sh:defaultValue ; - skos:definition """function that provides a default value for the slot. Possible values for this slot are defined in linkml.utils.ifabsent_functions.default_library: + skos:definition """function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * bnode -- blank node identifier @@ -1340,15 +1417,8 @@ linkml:ifabsent a owl:ObjectProperty, * int(value) -- integer value * slot_uri -- URI for the slot * slot_curie -- CURIE for the slot - * string(value) -- string value""" ; - skos:inScheme linkml:meta . - -linkml:implements a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "implements" ; - rdfs:domain linkml:Element ; - rdfs:range linkml:Uriorcurie ; - skos:definition "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + * string(value) -- string value + * EnumName(PermissibleValue) -- enum value""" ; skos:inScheme linkml:meta . linkml:import_as a owl:ObjectProperty, @@ -1571,6 +1641,14 @@ linkml:locally_reflexive a owl:ObjectProperty, skos:definition "If s is locally_reflexive, then i.s=i for all instances i where s is a class slot for the type of i" ; skos:inScheme linkml:meta . +linkml:mapped_type a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "mapped_type" ; + rdfs:range linkml:TypeDefinition ; + skos:definition "type to coerce to" ; + skos:inScheme linkml:meta ; + skos:prefLabel "type" . + linkml:matches a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "matches" ; @@ -1646,6 +1724,13 @@ linkml:multivalued a owl:ObjectProperty, skos:inScheme linkml:meta ; sh:order 7 . +linkml:obligation_level a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "obligation_level" ; + rdfs:range linkml:ObligationLevelEnum ; + skos:definition "The level of obligation or recommendation strength for a metadata element" ; + skos:inScheme linkml:meta . + linkml:open_world a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "open_world" ; @@ -1721,35 +1806,6 @@ linkml:prefix_reference a owl:ObjectProperty, skos:inScheme linkml:meta ; sh:order 2 . -linkml:pv_formula a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "pv_formula" ; - rdfs:domain linkml:EnumExpression ; - rdfs:range linkml:PvFormulaOptions ; - skos:definition "Defines the specific formula to be used to generate the permissible values." ; - skos:inScheme linkml:meta ; - skos:note "code_set must be supplied for this to be valid", - "you cannot have BOTH the permissible_values and permissible_value_formula tag" . - -linkml:range a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "range" ; - rdfs:domain linkml:SlotDefinition ; - rdfs:range linkml:Element ; - skos:altLabel "value domain" ; - skos:definition """defines the type of the object of the slot. Given the following slot definition - S1: - domain: C1 - range: C2 -the declaration - X: - S1: Y - -implicitly asserts Y is an instance of C2 -""" ; - skos:inScheme linkml:meta ; - skos:note "range is underspecified, as not all elements can appear as the range of a slot." . - linkml:reachable_from a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "reachable_from" ; @@ -1948,18 +2004,6 @@ linkml:status a owl:ObjectProperty, skos:definition "status of the element" ; skos:inScheme linkml:meta . -linkml:string_serialization a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "string_serialization" ; - rdfs:domain linkml:Definition ; - rdfs:range linkml:String ; - rdfs:seeAlso ; - skos:definition """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. -We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. -Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects -For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; - skos:inScheme linkml:meta . - linkml:subclass_of a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "subclass_of" ; @@ -2119,7 +2163,7 @@ linkml:value_presence a owl:ObjectProperty, rdfs:domain linkml:SlotDefinition ; rdfs:range linkml:PresenceEnum ; rdfs:subPropertyOf linkml:list_value_specification_constant ; - skos:definition "if true then a value must be present (for lists there must be at least one value). If false then a value must be absent (for lists, must be empty)" ; + skos:definition "if PRESENT then a value must be present (for lists there must be at least one value). If ABSENT then a value must be absent (for lists, must be empty)" ; skos:inScheme linkml:meta ; skos:note "if set to true this has the same effect as required=true. In contrast, required=false allows a value to be present" . @@ -2138,16 +2182,16 @@ linkml:AltDescription a owl:Class, owl:maxCardinality 1 ; owl:onProperty linkml:alt_description_source ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alt_description_source ], - [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alt_description_source ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; owl:minCardinality 1 ; @@ -2170,22 +2214,67 @@ linkml:AnonymousTypeExpression a owl:Class, skos:definition "A type expression that is not a top-level named type definition. Used for nesting." ; skos:inScheme linkml:meta . -linkml:ImportExpression a owl:Class, +linkml:EnumBinding a owl:Class, linkml:ClassDefinition ; - rdfs:label "import_expression" ; - bibo:status ; + rdfs:label "enum_binding" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:PvFormulaOptions ; + owl:onProperty linkml:pv_formula ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:import_as ], + owl:onProperty linkml:binds_value_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Setting ; - owl:onProperty linkml:import_map ], + owl:minCardinality 0 ; + owl:onProperty linkml:pv_formula ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:obligation_level ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:obligation_level ], [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:pv_formula ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:binds_value_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:binds_value_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ObligationLevelEnum ; + owl:onProperty linkml:obligation_level ], + linkml:Annotatable, + linkml:CommonMetadata, + linkml:Extensible ; + skos:definition "A binding of a slot or a class to a permissible value from an enumeration." ; + skos:inScheme linkml:meta . + +linkml:ImportExpression a owl:Class, + linkml:ClassDefinition ; + rdfs:label "import_expression" ; + bibo:status ; + rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:import_as ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:import_as ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:import_map ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Setting ; + owl:onProperty linkml:import_map ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:import_from ], @@ -2197,7 +2286,7 @@ linkml:ImportExpression a owl:Class, owl:onProperty linkml:import_from ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:import_map ], + owl:onProperty linkml:import_as ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2208,22 +2297,22 @@ linkml:LocalName a owl:Class, linkml:ClassDefinition ; rdfs:label "local_name" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:local_name_source ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:local_name_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; + owl:minCardinality 1 ; owl:onProperty linkml:local_name_source ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:local_name_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:local_name_value ], + owl:onProperty linkml:local_name_source ], [ a owl:Restriction ; owl:minCardinality 1 ; + owl:onProperty linkml:local_name_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:local_name_source ] ; skos:definition "an attributed label" ; skos:inScheme linkml:meta . @@ -2233,22 +2322,22 @@ linkml:Prefix a owl:Class, rdfs:label "prefix" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty linkml:prefix_reference ], + owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty linkml:prefix_reference ], [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:prefix_prefix ], + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:prefix_reference ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:prefix_prefix ], + owl:maxCardinality 1 ; + owl:onProperty linkml:prefix_reference ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:prefix_reference ] ; + owl:maxCardinality 1 ; + owl:onProperty linkml:prefix_prefix ] ; skos:definition "prefix URI tuple" ; skos:inScheme linkml:meta ; sh:order 12 . @@ -2257,282 +2346,262 @@ linkml:SlotExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "slot_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_cardinality ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implicit_prefix ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:enum_range ], + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:pattern ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:recommended ], + owl:onProperty linkml:has_member ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:any_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_number ], + owl:maxCardinality 1 ; + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:maximum_cardinality ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value_presence ], + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:equals_expression ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:recommended ], + owl:onProperty linkml:all_members ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inlined_as_list ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inlined_as_list ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inlined ], + owl:maxCardinality 1 ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:has_member ], + owl:maxCardinality 1 ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:pattern ], + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:minimum_value ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string_in ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:all_members ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:range_expression ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unit ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:inlined ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:implicit_prefix ], + owl:onProperty linkml:range ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:maximum_cardinality ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:all_members ], + owl:maxCardinality 1 ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:required ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PatternExpression ; - owl:onProperty linkml:structured_pattern ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_cardinality ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:required ], + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:range ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_value ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_members ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:equals_number ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_value ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:required ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:enum_range ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inlined ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_of ], + owl:allValuesFrom linkml:PresenceEnum ; + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:structured_pattern ], + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumExpression ; + owl:minCardinality 0 ; owl:onProperty linkml:enum_range ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PresenceEnum ; - owl:onProperty linkml:value_presence ], + owl:maxCardinality 1 ; + owl:onProperty linkml:enum_range ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:recommended ], + owl:allValuesFrom linkml:EnumExpression ; + owl:onProperty linkml:enum_range ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:maxCardinality 1 ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:has_member ], + owl:minCardinality 0 ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Element ; - owl:onProperty linkml:range ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:has_member ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_value ], + owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:has_member ], + owl:allValuesFrom linkml:PatternExpression ; + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:none_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:maximum_cardinality ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_expression ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exact_cardinality ], + owl:minCardinality 0 ; + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inlined_as_list ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:minimum_value ], + owl:allValuesFrom linkml:Element ; + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_members ], + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:equals_number ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inlined ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:value_presence ], + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:structured_pattern ], + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:has_member ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:maximum_value ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:inlined_as_list ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:required ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], - linkml:Expression ; - skos:definition "an expression that constrains the range of values a slot can take" ; - skos:inScheme linkml:meta . - -linkml:StructuredAlias a owl:Class, - linkml:ClassDefinition ; - rdfs:label "structured_alias" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:categories ], + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias_predicate ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:categories ], + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:literal_form ], + owl:maxCardinality 1 ; + owl:onProperty linkml:all_members ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:literal_form ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:literal_form ], + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AliasPredicateEnum ; - owl:onProperty linkml:alias_predicate ], + owl:maxCardinality 1 ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alias_predicate ], - linkml:Annotatable, - linkml:CommonMetadata, - linkml:Expression, - linkml:Extensible ; - skos:definition "object that contains meta data about a synonym or alias including where it came from (source) and its scope (narrow, broad, etc.)" ; - skos:exactMatch skosxl:Label ; + owl:onProperty linkml:implicit_prefix ], + linkml:Expression ; + skos:definition "an expression that constrains the range of values a slot can take" ; skos:inScheme linkml:meta . linkml:SubsetDefinition a owl:Class, @@ -2543,6 +2612,17 @@ linkml:SubsetDefinition a owl:Class, skos:inScheme linkml:meta ; sh:order 6 . +linkml:bindings a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "bindings" ; + bibo:status ; + rdfs:domain linkml:Element ; + rdfs:range linkml:EnumBinding ; + skos:definition """A collection of enum bindings that specify how a slot can be bound to a permissible value from an enumeration. +LinkML provides enums to allow string values to be restricted to one of a set of permissible values (specified statically or dynamically). +Enum bindings allow enums to be bound to any object, including complex nested objects. For example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the values the id takes on in a given context. For example, a HumanSample class may have a slot for representing sample site, with a range of concept, but the values of that slot may be restricted to concepts from a particular branch of an anatomy ontology.""" ; + skos:inScheme linkml:meta . + linkml:boolean_slot a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "boolean_slot" ; @@ -2604,6 +2684,14 @@ linkml:iec61360code a owl:ObjectProperty, rdfs:label "iec61360code" ; skos:inScheme linkml:units . +linkml:instantiates a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "instantiates" ; + rdfs:domain linkml:Element ; + rdfs:range linkml:Uriorcurie ; + skos:definition "An element in another schema which this element instantiates." ; + skos:inScheme linkml:meta . + linkml:slot_uri a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "slot_uri" ; @@ -2654,58 +2742,99 @@ linkml:Example a owl:Class, rdfs:label "example" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:value_description ], + owl:onProperty linkml:value_object ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:value ], + owl:minCardinality 0 ; + owl:onProperty linkml:value_object ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:value_description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value_object ], + owl:onProperty linkml:value_description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:value_object ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:value ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:value_object ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty linkml:value_description ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:value ] ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:value_object ] ; skos:definition "usage example and description" ; skos:inScheme linkml:meta . -linkml:UniqueKey a owl:Class, +linkml:StructuredAlias a owl:Class, linkml:ClassDefinition ; - rdfs:label "unique_key" ; + rdfs:label "structured_alias" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:consider_nulls_inequal ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:unique_key_name ], + owl:onProperty linkml:literal_form ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty linkml:unique_key_name ], + owl:onProperty linkml:literal_form ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:consider_nulls_inequal ], + owl:onProperty linkml:alias_contexts ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:categories ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:categories ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AliasPredicateEnum ; + owl:onProperty linkml:alias_predicate ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:literal_form ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:alias_contexts ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:alias_predicate ], + linkml:Annotatable, + linkml:CommonMetadata, + linkml:Expression, + linkml:Extensible ; + skos:definition "object that contains meta data about a synonym or alias including where it came from (source) and its scope (narrow, broad, etc.)" ; + skos:exactMatch skosxl:Label ; + skos:inScheme linkml:meta . + +linkml:UniqueKey a owl:Class, + linkml:ClassDefinition ; + rdfs:label "unique_key" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty linkml:unique_key_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:consider_nulls_inequal ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:unique_key_slots ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:consider_nulls_inequal ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:unique_key_slots ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:unique_key_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:unique_key_name ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:consider_nulls_inequal ], @@ -2720,26 +2849,53 @@ linkml:UnitOfMeasure a owl:Class, linkml:ClassDefinition ; rdfs:label "UnitOfMeasure" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:ucum_code ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:symbol ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty linkml:iec61360code ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:iec61360code ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:descriptive_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:derivation ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:descriptive_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:ucum_code ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ucum_code ], + owl:onProperty linkml:derivation ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:symbol ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:has_quantity_kind ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:abbreviation ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:has_quantity_kind ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:iec61360code ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:symbol ], [ owl:unionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:ucum_code ] [ a owl:Restriction ; @@ -2749,53 +2905,26 @@ linkml:UnitOfMeasure a owl:Class, owl:onProperty linkml:symbol ] [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:exact_mappings ] ) ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:exact_mappings ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:has_quantity_kind ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:iec61360code ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:derivation ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:abbreviation ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:iec61360code ], + owl:onProperty linkml:descriptive_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:has_quantity_kind ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symbol ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:descriptive_name ], + owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:derivation ], + owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:symbol ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:iec61360code ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:ucum_code ] ; skos:definition "A unit of measure, or unit, is a particular quantity value that has been chosen as a scale for measuring other quantities the same kind (more generally of equivalent dimension)." ; skos:exactMatch qudt:Unit ; @@ -2820,30 +2949,82 @@ linkml:exact_mappings a owl:ObjectProperty, skos:definition "A list of terms from different schemas or terminology systems that have identical meaning." ; skos:inScheme linkml:mappings . +linkml:implements a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "implements" ; + rdfs:domain linkml:Element ; + rdfs:range linkml:Uriorcurie ; + skos:definition "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + skos:inScheme linkml:meta . + +linkml:ArrayExpression a owl:Class, + linkml:ClassDefinition ; + rdfs:label "array_expression" ; + bibo:status ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:DimensionExpression ; + owl:onProperty linkml:dimensions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:maximum_number_dimensions ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:dimensions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exact_number_dimensions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:exact_number_dimensions ], + [ a owl:Restriction ; + owl:allValuesFrom [ owl:intersectionOf ( [ a rdfs:Datatype ; + owl:unionOf ( linkml:Integer linkml:Boolean ) ] linkml:Anything ) ] ; + owl:onProperty linkml:maximum_number_dimensions ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:exact_number_dimensions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:minimum_number_dimensions ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:maximum_number_dimensions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:minimum_number_dimensions ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_number_dimensions ], + linkml:Annotatable, + linkml:CommonMetadata, + linkml:Extensible ; + skos:definition "defines the dimensions of an array" ; + skos:inScheme linkml:meta . + linkml:Extension a owl:Class, linkml:ClassDefinition ; rdfs:label "extension" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; + owl:onProperty linkml:extension_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnyValue ; owl:onProperty linkml:extension_value ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:extension_tag ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnyValue ; + owl:maxCardinality 1 ; + owl:onProperty linkml:extension_tag ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:extension_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:Extension ; owl:onProperty linkml:extensions ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:extension_tag ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:extension_tag ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:extension_value ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:extensions ] ; @@ -2854,28 +3035,28 @@ linkml:PatternExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "pattern_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:interpolated ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:partial_match ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:maxCardinality 1 ; owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:interpolated ], + owl:onProperty linkml:syntax ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:syntax ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:syntax ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:syntax ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; + owl:onProperty linkml:interpolated ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; @@ -2890,23 +3071,35 @@ linkml:PermissibleValue a owl:Class, linkml:ClassDefinition ; rdfs:label "permissible_value" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:meaning ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UnitOfMeasure ; owl:onProperty linkml:unit ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:text ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:mixins ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:implements ], [ a owl:Restriction ; owl:allValuesFrom linkml:PermissibleValue ; owl:onProperty linkml:is_a ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:text ], @@ -2915,31 +3108,31 @@ linkml:PermissibleValue a owl:Class, owl:onProperty linkml:meaning ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:meaning ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:meaning ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:instantiates ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:text ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:description ], + owl:minCardinality 0 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:meaning ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:text ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:instantiates ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:mixins ], + owl:minCardinality 0 ; + owl:onProperty linkml:implements ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2953,22 +3146,22 @@ linkml:Setting a owl:Class, linkml:ClassDefinition ; rdfs:label "setting" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:setting_value ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:setting_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; + owl:maxCardinality 1 ; owl:onProperty linkml:setting_key ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:setting_value ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty linkml:setting_key ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:setting_value ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:setting_key ] ; skos:definition "assignment of a key to a value" ; skos:inScheme linkml:meta . @@ -3107,6 +3300,34 @@ linkml:pattern a owl:ObjectProperty, skos:inScheme linkml:meta ; sh:order 35 . +linkml:pv_formula a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "pv_formula" ; + rdfs:range linkml:PvFormulaOptions ; + skos:definition "Defines the specific formula to be used to generate the permissible values." ; + skos:inScheme linkml:meta ; + skos:note "code_set must be supplied for this to be valid", + "you cannot have BOTH the permissible_values and permissible_value_formula tag" . + +linkml:range a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "range" ; + rdfs:domain linkml:SlotDefinition ; + rdfs:range linkml:Element ; + skos:altLabel "value domain" ; + skos:definition """defines the type of the object of the slot. Given the following slot definition + S1: + domain: C1 + range: C2 +the declaration + X: + S1: Y + +implicitly asserts Y is an instance of C2 +""" ; + skos:inScheme linkml:meta ; + skos:note "range is underspecified, as not all elements can appear as the range of a slot." . + linkml:range_expression a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "range_expression" ; @@ -3159,6 +3380,18 @@ linkml:source_ontology a owl:ObjectProperty, skos:note "examples include schema.org, wikidata, or an OBO ontology", "for obo ontologies we recommend CURIEs of the form obo:cl, obo:envo, etc" . +linkml:string_serialization a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "string_serialization" ; + rdfs:domain linkml:Definition ; + rdfs:range linkml:String ; + rdfs:seeAlso ; + skos:definition """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. +We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. +Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects +For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + skos:inScheme linkml:meta . + linkml:structured_pattern a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "structured_pattern" ; @@ -3177,134 +3410,81 @@ linkml:union_of a owl:ObjectProperty, skos:editorialNote "this only applies in the OWL generation" ; skos:inScheme linkml:meta . -linkml:ArrayExpression a owl:Class, +linkml:PathExpression a owl:Class, linkml:ClassDefinition ; - rdfs:label "array_expression" ; - bibo:status ; + rdfs:label "path_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exact_number_dimensions ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_number_dimensions ], + owl:onProperty linkml:reversed ], [ a owl:Restriction ; - owl:allValuesFrom linkml:DimensionExpression ; - owl:onProperty linkml:dimensions ], + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_number_dimensions ], + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:has_extra_dimensions ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:has_extra_dimensions ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:has_extra_dimensions ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:traverse ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_number_dimensions ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_number_dimensions ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:minimum_number_dimensions ], + owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_number_dimensions ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:minimum_number_dimensions ], - [ a owl:Restriction ; - owl:allValuesFrom [ owl:intersectionOf ( [ a rdfs:Datatype ; - owl:unionOf ( linkml:Integer linkml:Boolean ) ] linkml:Anything ) ] ; - owl:onProperty linkml:maximum_number_dimensions ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:dimensions ], - linkml:Annotatable, - linkml:CommonMetadata, - linkml:Extensible ; - skos:definition "defines the dimensions of an array" ; - skos:inScheme linkml:meta . - -linkml:PathExpression a owl:Class, - linkml:ClassDefinition ; - rdfs:label "path_expression" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:traverse ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:reversed ], + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; + owl:maxCardinality 1 ; owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:traverse ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:range_expression ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; owl:onProperty linkml:all_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; owl:onProperty linkml:none_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:traverse ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:traverse ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:traverse ], linkml:Annotatable, linkml:CommonMetadata, linkml:Expression, @@ -3316,53 +3496,53 @@ linkml:ReachabilityQuery a owl:Class, linkml:ClassDefinition ; rdfs:label "reachability_query" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:source_nodes ], + owl:minCardinality 0 ; + owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:traverse_up ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:relationship_types ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_nodes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:is_direct ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:traverse_up ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:source_nodes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relationship_types ], + owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_ontology ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:include_self ], + owl:onProperty linkml:source_nodes ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:include_self ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:relationship_types ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:is_direct ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:source_ontology ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:traverse_up ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_direct ], + owl:onProperty linkml:traverse_up ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:source_ontology ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_direct ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:traverse_up ] ; + owl:onProperty linkml:include_self ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:source_ontology ] ; skos:definition "A query that is used on an enum expression to dynamically obtain a set of permissible values via walking from a set of source nodes to a set of descendants or ancestors over a set of relationship types." ; skos:inScheme linkml:meta . @@ -3392,7 +3572,6 @@ linkml:PresenceEnum a owl:Class, linkml:mixins a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "mixins" ; - rdfs:domain linkml:Definition ; rdfs:range linkml:Definition ; rdfs:seeAlso ; skos:altLabel "traits" ; @@ -3401,14 +3580,35 @@ linkml:mixins a owl:ObjectProperty, skos:note "mixins act in the same way as parents (is_a). They allow a model to have a primary strict hierarchy, while keeping the benefits of multiple inheritance" ; sh:order 13 . +linkml:unit a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "unit" ; + rdfs:range linkml:UnitOfMeasure ; + skos:definition "an encoding of a unit" ; + skos:inScheme linkml:units . + +linkml:AliasPredicateEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ) ; + linkml:permissible_values skos:broaderMatch, + skos:exactMatch, + skos:narrowerMatch, + skos:relatedMatch . + +linkml:Anything a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Anything" ; + skos:exactMatch linkml:Any ; + skos:inScheme linkml:meta . + linkml:EnumDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:enum_uri ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:enum_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -3433,545 +3633,532 @@ linkml:EnumDefinition a owl:Class, skos:inScheme linkml:meta ; sh:order 5 . -linkml:unit a owl:ObjectProperty, +linkml:extensions a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "unit" ; - rdfs:range linkml:UnitOfMeasure ; - skos:definition "an encoding of a unit" ; - skos:inScheme linkml:units . + rdfs:label "extensions" ; + rdfs:domain linkml:Extensible ; + rdfs:range linkml:Extension ; + skos:definition "a tag/text tuple attached to an arbitrary element" ; + skos:inScheme linkml:extensions . -linkml:AliasPredicateEnum a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ) ; - linkml:permissible_values skos:broaderMatch, - skos:exactMatch, - skos:narrowerMatch, - skos:relatedMatch . +linkml:list_value_specification_constant a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "list_value_specification_constant" ; + bibo:status ; + skos:definition "Grouping for metamodel slots that constrain members of a multivalued slot value to equal a specified constant" ; + skos:inScheme linkml:meta . -linkml:Anything a owl:Class, +linkml:Expression a owl:Class, linkml:ClassDefinition ; - rdfs:label "Anything" ; - skos:exactMatch linkml:Any ; + rdfs:label "expression" ; + skos:definition "general mixin for any class that can represent some form of expression" ; skos:inScheme linkml:meta . -linkml:CommonMetadata a owl:Class, - linkml:ClassDefinition ; - rdfs:label "common_metadata" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Example ; - owl:onProperty linkml:examples ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:created_by ], +linkml:ObligationLevelEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + , + , + . + +linkml:RelationalRoleEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( rdf:subject rdf:object rdf:predicate ) ; + linkml:permissible_values rdf:object, + rdf:predicate, + rdf:subject, + , + . + +linkml:all_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "all_of" ; + rdfs:range linkml:Expression ; + rdfs:seeAlso ; + rdfs:subPropertyOf linkml:boolean_slot ; + skos:definition "holds if all of the expressions hold" ; + skos:exactMatch sh:and ; + skos:inScheme linkml:meta ; + sh:order 107 . + +linkml:any_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "any_of" ; + rdfs:range linkml:Expression ; + rdfs:seeAlso ; + rdfs:subPropertyOf linkml:boolean_slot ; + skos:definition "holds if at least one of the expressions hold" ; + skos:exactMatch sh:or ; + skos:inScheme linkml:meta ; + sh:order 101 . + +linkml:exactly_one_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "exactly_one_of" ; + rdfs:range linkml:Expression ; + rdfs:seeAlso ; + rdfs:subPropertyOf linkml:boolean_slot ; + skos:definition "holds if only one of the expressions hold" ; + skos:exactMatch sh:xone ; + skos:inScheme linkml:meta ; + sh:order 103 . + +linkml:none_of a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "none_of" ; + rdfs:range linkml:Expression ; + rdfs:seeAlso ; + rdfs:subPropertyOf linkml:boolean_slot ; + skos:definition "holds if none of the expressions hold" ; + skos:exactMatch sh:not ; + skos:inScheme linkml:meta ; + sh:order 105 . + +linkml:CommonMetadata a owl:Class, + linkml:ClassDefinition ; + rdfs:label "common_metadata" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:modified_by ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:title ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:imported_from ], + owl:maxCardinality 1 ; + owl:onProperty linkml:created_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:from_schema ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AltDescription ; - owl:onProperty linkml:alt_descriptions ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:in_subset ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:created_on ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated ], + owl:onProperty linkml:in_language ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:categories ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:mappings ], + owl:onProperty linkml:created_by ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:broad_mappings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:last_updated_on ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:status ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Example ; + owl:onProperty linkml:examples ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:onProperty linkml:source ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:aliases ], + owl:onProperty linkml:notes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:see_also ], + owl:onProperty linkml:title ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:comments ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:contributors ], + owl:maxCardinality 1 ; + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated ], + owl:onProperty linkml:keywords ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:related_mappings ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:keywords ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:contributors ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:status ], + owl:onProperty linkml:modified_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:see_also ], + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:created_on ], + owl:onProperty linkml:source ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:modified_by ], + owl:minCardinality 0 ; + owl:onProperty linkml:created_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:broad_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:keywords ], + owl:minCardinality 0 ; + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:title ], + owl:minCardinality 0 ; + owl:onProperty linkml:description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:broad_mappings ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:todos ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alt_descriptions ], + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:description ], + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:created_on ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:modified_by ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:related_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:in_subset ], + owl:onProperty linkml:see_also ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:description ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:deprecated_element_has_exact_replacement ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:status ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:contributors ], + owl:onProperty linkml:mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:comments ], + owl:onProperty linkml:last_updated_on ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:notes ], + owl:onProperty linkml:related_mappings ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:from_schema ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:todos ], + owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:rank ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:in_subset ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:last_updated_on ], + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:last_updated_on ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:created_on ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:last_updated_on ], + owl:onProperty linkml:comments ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:maxCardinality 1 ; + owl:onProperty linkml:status ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:related_mappings ], + owl:onProperty linkml:modified_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty linkml:imported_from ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:StructuredAlias ; - owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:close_mappings ], + owl:onProperty linkml:contributors ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:imported_from ], + owl:onProperty linkml:title ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:comments ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:narrow_mappings ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mappings ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:title ], + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:created_by ], + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:deprecated ], + owl:minCardinality 0 ; + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:rank ], + owl:minCardinality 0 ; + owl:onProperty linkml:narrow_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:notes ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:structured_aliases ], + owl:allValuesFrom linkml:AltDescription ; + owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:created_on ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:modified_by ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:aliases ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:status ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:todos ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:keywords ], + owl:onProperty linkml:source ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source ], + owl:onProperty linkml:aliases ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:source ], + owl:onProperty linkml:see_also ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:last_updated_on ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:from_schema ], + owl:onProperty linkml:in_subset ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:notes ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:examples ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:todos ], + owl:maxCardinality 1 ; + owl:onProperty linkml:description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:close_mappings ], + owl:allValuesFrom linkml:StructuredAlias ; + owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:created_by ] ; + owl:onProperty linkml:structured_aliases ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:mappings ] ; skos:definition "Generic metadata shared across definitions" ; skos:inScheme linkml:meta . +linkml:PvFormulaOptions a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + , + , + . + linkml:TypeDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "type_definition" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:typeof ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:repr ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:repr ], + owl:onProperty linkml:typeof ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:repr ], + owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:base ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:repr ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:union_of ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:type_uri ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:typeof ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty linkml:repr ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:typeof ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:typeof ], + owl:onProperty linkml:repr ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:union_of ], linkml:Element, linkml:TypeExpression ; skos:definition "an element that whose instances are atomic scalar values that can be mapped to primitive types" ; skos:inScheme linkml:meta ; sh:order 4 . -linkml:extensions a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "extensions" ; - rdfs:domain linkml:Extensible ; - rdfs:range linkml:Extension ; - skos:definition "a tag/text tuple attached to an arbitrary element" ; - skos:inScheme linkml:extensions . - -linkml:list_value_specification_constant a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "list_value_specification_constant" ; - bibo:status ; - skos:definition "Grouping for metamodel slots that constrain members of a multivalued slot value to equal a specified constant" ; - skos:inScheme linkml:meta . - -linkml:Expression a owl:Class, - linkml:ClassDefinition ; - rdfs:label "expression" ; - skos:definition "general mixin for any class that can represent some form of expression" ; - skos:inScheme linkml:meta . - -linkml:Extensible a owl:Class, +linkml:EnumExpression a owl:Class, linkml:ClassDefinition ; - rdfs:label "extensible" ; + rdfs:label "enum_expression" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:extensions ], + owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Extension ; - owl:onProperty linkml:extensions ] ; - skos:definition "mixin for classes that support extension" ; - skos:inScheme linkml:extensions . - -linkml:PvFormulaOptions a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( ) ; - linkml:permissible_values , - , - , - , - . - -linkml:RelationalRoleEnum a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( rdf:subject rdf:object rdf:predicate ) ; - linkml:permissible_values rdf:object, - rdf:predicate, - rdf:subject, - , - . - -linkml:all_of a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "all_of" ; - rdfs:range linkml:Expression ; - rdfs:seeAlso ; - rdfs:subPropertyOf linkml:boolean_slot ; - skos:definition "holds if all of the expressions hold" ; - skos:exactMatch sh:and ; - skos:inScheme linkml:meta ; - sh:order 107 . - -linkml:any_of a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "any_of" ; - rdfs:range linkml:Expression ; - rdfs:seeAlso ; - rdfs:subPropertyOf linkml:boolean_slot ; - skos:definition "holds if at least one of the expressions hold" ; - skos:exactMatch sh:or ; - skos:inScheme linkml:meta ; - sh:order 101 . - -linkml:exactly_one_of a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "exactly_one_of" ; - rdfs:range linkml:Expression ; - rdfs:seeAlso ; - rdfs:subPropertyOf linkml:boolean_slot ; - skos:definition "holds if only one of the expressions hold" ; - skos:exactMatch sh:xone ; - skos:inScheme linkml:meta ; - sh:order 103 . - -linkml:none_of a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "none_of" ; - rdfs:range linkml:Expression ; - rdfs:seeAlso ; - rdfs:subPropertyOf linkml:boolean_slot ; - skos:definition "holds if none of the expressions hold" ; - skos:exactMatch sh:not ; - skos:inScheme linkml:meta ; - sh:order 105 . - -linkml:Annotatable a owl:Class, - linkml:ClassDefinition ; - rdfs:label "annotatable" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:annotations ], + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:permissible_values ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Annotation ; - owl:onProperty linkml:annotations ] ; - skos:definition "mixin for classes that support annotations" ; - skos:inScheme linkml:annotations . - -linkml:AnonymousClassExpression a owl:Class, - linkml:ClassDefinition ; - rdfs:label "anonymous_class_expression" ; - rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:concepts ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:minCardinality 0 ; + owl:onProperty linkml:matches ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:is_a ], - linkml:AnonymousExpression, - linkml:ClassExpression ; - skos:inScheme linkml:meta . - -linkml:EnumExpression a owl:Class, - linkml:ClassDefinition ; - rdfs:label "enum_expression" ; - rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom linkml:MatchQuery ; owl:onProperty linkml:matches ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:minus ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PvFormulaOptions ; + owl:onProperty linkml:pv_formula ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:matches ], [ a owl:Restriction ; owl:allValuesFrom linkml:EnumDefinition ; owl:onProperty linkml:inherits ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:permissible_values ], + owl:minCardinality 0 ; + owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:code_set ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:code_set ], + owl:allValuesFrom linkml:AnonymousEnumExpression ; + owl:onProperty linkml:include ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:matches ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:permissible_values ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:reachable_from ], + owl:onProperty linkml:code_set ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:code_set_tag ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:code_set_tag ], + owl:allValuesFrom linkml:AnonymousEnumExpression ; + owl:onProperty linkml:minus ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:pv_formula ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:code_set_version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:include ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ReachabilityQuery ; - owl:onProperty linkml:reachable_from ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty linkml:code_set_tag ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:PvFormulaOptions ; - owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:concepts ], + owl:onProperty linkml:code_set ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousEnumExpression ; - owl:onProperty linkml:include ], + owl:maxCardinality 1 ; + owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousEnumExpression ; - owl:onProperty linkml:minus ], + owl:maxCardinality 1 ; + owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:inherits ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:pv_formula ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:minus ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:concepts ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:code_set_version ], + owl:onProperty linkml:permissible_values ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ReachabilityQuery ; + owl:onProperty linkml:reachable_from ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:code_set_tag ], linkml:Expression ; skos:definition "An expression that constrains the range of a slot" ; skos:inScheme linkml:meta . +linkml:Extensible a owl:Class, + linkml:ClassDefinition ; + rdfs:label "extensible" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:Extension ; + owl:onProperty linkml:extensions ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:extensions ] ; + skos:definition "mixin for classes that support extension" ; + skos:inScheme linkml:extensions . + +linkml:Annotatable a owl:Class, + linkml:ClassDefinition ; + rdfs:label "annotatable" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:annotations ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Annotation ; + owl:onProperty linkml:annotations ] ; + skos:definition "mixin for classes that support annotations" ; + skos:inScheme linkml:annotations . + +linkml:AnonymousClassExpression a owl:Class, + linkml:ClassDefinition ; + rdfs:label "anonymous_class_expression" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:is_a ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:is_a ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], + linkml:AnonymousExpression, + linkml:ClassExpression ; + skos:inScheme linkml:meta . + linkml:is_a a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "is_a" ; - rdfs:domain linkml:Definition ; rdfs:range linkml:Definition ; skos:definition "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; skos:inScheme linkml:meta ; @@ -3993,173 +4180,179 @@ linkml:SchemaDefinition a owl:Class, rdfs:label "schema_definition" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; + owl:maxCardinality 1 ; owl:onProperty linkml:generation_date ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:generation_date ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:subsets ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:settings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:imports ], + owl:minCardinality 1 ; + owl:onProperty linkml:id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:default_prefix ], + owl:onProperty linkml:license ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source_file_date ], + owl:maxCardinality 1 ; + owl:onProperty linkml:default_range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:id ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:metamodel_version ], + owl:onProperty linkml:types ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_definitions ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_size ], + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:classes ], + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_date ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:license ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:emit_prefixes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:imports ], + owl:onProperty linkml:source_file ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:enums ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:metamodel_version ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:id ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:name ], + owl:onProperty linkml:emit_prefixes ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:source_file_size ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:default_range ], + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:name ], + owl:minCardinality 0 ; + owl:onProperty linkml:version ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:prefixes ], [ a owl:Restriction ; owl:allValuesFrom linkml:Setting ; owl:onProperty linkml:settings ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:default_range ], + owl:onProperty linkml:default_curi_maps ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:emit_prefixes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:source_file_date ], + owl:minCardinality 0 ; + owl:onProperty linkml:classes ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:default_prefix ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:types ], + owl:onProperty linkml:default_range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:settings ], + owl:onProperty linkml:enums ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:types ], + owl:onProperty linkml:slot_definitions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:id ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:version ], + owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_file ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:imports ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:slot_names_unique ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:license ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_file_size ], + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; owl:allValuesFrom linkml:EnumDefinition ; owl:onProperty linkml:enums ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:classes ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:types ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_prefix ], + owl:minCardinality 1 ; + owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_curi_maps ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_definitions ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_curi_maps ], + owl:allValuesFrom linkml:Prefix ; + owl:onProperty linkml:prefixes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:source_file ], + owl:minCardinality 0 ; + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_prefix ], + owl:minCardinality 0 ; + owl:onProperty linkml:default_range ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:id ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:subsets ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:generation_date ], + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:default_range ], + owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:license ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:subsets ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_definitions ], + owl:minCardinality 0 ; + owl:onProperty linkml:license ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:minCardinality 0 ; + owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Prefix ; - owl:onProperty linkml:prefixes ], + owl:minCardinality 0 ; + owl:onProperty linkml:bindings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:classes ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:source_file_date ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:imports ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:id ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:default_curi_maps ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:source_file_size ], linkml:Element ; skos:altLabel "data dictionary", "data model", @@ -4179,55 +4372,55 @@ linkml:Definition a owl:Class, rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixin ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:string_serialization ], + owl:minCardinality 0 ; + owl:onProperty linkml:values_from ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:values_from ], [ a owl:Restriction ; owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:mixin ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:mixins ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:string_serialization ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:abstract ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:string_serialization ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:mixins ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:mixin ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:abstract ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:values_from ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:mixin ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:minCardinality 0 ; + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:apply_to ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:values_from ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:abstract ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:apply_to ], @@ -4240,65 +4433,65 @@ linkml:Element a owl:Class, rdfs:label "element" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:id_prefixes ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:conforms_to ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:LocalName ; - owl:onProperty linkml:local_names ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:name ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:instantiates ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:local_names ], + owl:onProperty linkml:id_prefixes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:instantiates ], + owl:maxCardinality 1 ; + owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:implements ], + owl:onProperty linkml:definition_uri ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:id_prefixes_are_closed ], + owl:minCardinality 1 ; + owl:onProperty linkml:name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:id_prefixes_are_closed ], + owl:onProperty linkml:local_names ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:maxCardinality 1 ; owl:onProperty linkml:definition_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:name ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:definition_uri ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:id_prefixes ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:name ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:implements ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:definition_uri ], + owl:allValuesFrom linkml:LocalName ; + owl:onProperty linkml:local_names ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:name ], + owl:minCardinality 0 ; + owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:name ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:implements ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:instantiates ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -4311,134 +4504,134 @@ linkml:ClassDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "class_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:slot_names_unique ], + owl:allValuesFrom linkml:UniqueKey ; + owl:onProperty linkml:unique_keys ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:tree_root ], + owl:onProperty linkml:slots ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_usage ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:apply_to ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:class_uri ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassRule ; - owl:onProperty linkml:rules ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:maxCardinality 1 ; + owl:onProperty linkml:represents_relationship ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UniqueKey ; - owl:onProperty linkml:unique_keys ], + owl:minCardinality 0 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:attributes ], + owl:minCardinality 0 ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:attributes ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:classification_rules ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:children_are_mutually_disjoint ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:apply_to ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:classification_rules ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:maxCardinality 1 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:rules ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty linkml:represents_relationship ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slots ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:slot_usage ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:class_uri ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:represents_relationship ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassRule ; + owl:onProperty linkml:rules ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:tree_root ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:tree_root ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:slot_names_unique ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:slot_usage ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:is_a ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slots ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:defining_slots ], + owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:subclass_of ], + owl:onProperty linkml:unique_keys ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:attributes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:represents_relationship ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unique_keys ], + owl:onProperty linkml:defining_slots ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:subclass_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:tree_root ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:defining_slots ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:union_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slots ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:class_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:mixins ], + owl:minCardinality 0 ; + owl:onProperty linkml:rules ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:attributes ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:classification_rules ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:subclass_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:defining_slots ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_usage ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:subclass_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], linkml:ClassExpression, linkml:Definition ; skos:altLabel "message", @@ -4485,359 +4678,356 @@ linkml:SlotDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "slot_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:multivalued ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:relational_role ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:role ], + owl:onProperty linkml:readonly ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ifabsent ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:usage_slot_name ], + owl:maxCardinality 1 ; + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:mixins ], + owl:minCardinality 0 ; + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:domain_of ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:list_elements_unique ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:slot_group ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:singular_name ], + owl:minCardinality 0 ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:transitive ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:shared ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:role ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:list_elements_unique ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:apply_to ], + owl:maxCardinality 1 ; + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:reflexive ], + owl:maxCardinality 1 ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_usage_slot ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:shared ], + owl:onProperty linkml:array ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_group ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:readonly ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_ordered ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:designates_type ], + owl:maxCardinality 1 ; + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:asymmetric ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inverse ], + owl:onProperty linkml:readonly ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:identifier ], + owl:minCardinality 0 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_class_field ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:union_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:shared ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:domain ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:readonly ], + owl:onProperty linkml:list_elements_ordered ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:alias ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:transitive ], + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:disjoint_with ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:key ], + owl:maxCardinality 1 ; + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:readonly ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:array ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inherited ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_group ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:path_rule ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:key ], + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_group ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:ifabsent ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:role ], + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_class_field ], + owl:onProperty linkml:inverse ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:locally_reflexive ], + owl:maxCardinality 1 ; + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:shared ], + owl:maxCardinality 1 ; + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:designates_type ], + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:asymmetric ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:children_are_mutually_disjoint ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_grouping_slot ], + owl:onProperty linkml:domain_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:usage_slot_name ], + owl:onProperty linkml:inherited ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:list_elements_ordered ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:identifier ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:key ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:irreflexive ], + owl:onProperty linkml:shared ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:domain ], + owl:maxCardinality 1 ; + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:slot_group ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_grouping_slot ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:domain_of ], + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:path_rule ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:multivalued ], + owl:onProperty linkml:array ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:shared ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:asymmetric ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:locally_reflexive ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:RelationalRoleEnum ; - owl:onProperty linkml:relational_role ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:transitive ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:owner ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_uri ], + owl:onProperty linkml:role ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relational_role ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_grouping_slot ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:children_are_mutually_disjoint ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:domain ], + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:transitive_form_of ], + owl:onProperty linkml:asymmetric ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:asymmetric ], + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:owner ], + owl:onProperty linkml:domain ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reflexive ], + owl:onProperty linkml:key ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:RelationalRoleEnum ; + owl:onProperty linkml:relational_role ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:union_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:symmetric ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:identifier ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:list_elements_ordered ], + owl:minCardinality 0 ; + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:identifier ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:owner ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inherited ], + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:readonly ], + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:irreflexive ], + owl:allValuesFrom linkml:ArrayExpression ; + owl:onProperty linkml:array ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:identifier ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_class_field ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:inherited ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:array ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:transitive_form_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:transitive_form_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:subproperty_of ], + owl:onProperty linkml:asymmetric ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:singular_name ], + owl:minCardinality 0 ; + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ArrayExpression ; - owl:onProperty linkml:array ], + owl:allValuesFrom linkml:TypeMapping ; + owl:onProperty linkml:type_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:inverse ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:singular_name ], + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:subproperty_of ], + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:multivalued ], + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:path_rule ], + owl:minCardinality 0 ; + owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:slot_uri ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_usage_slot ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inverse ], + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:ifabsent ], + owl:onProperty linkml:type_mappings ], linkml:Definition, linkml:SlotExpression ; skos:altLabel "attribute", diff --git a/linkml_runtime/linkml_model/protobuf/meta.proto b/linkml_runtime/linkml_model/protobuf/meta.proto index 454e6ed5..f3271b3b 100644 --- a/linkml_runtime/linkml_model/protobuf/meta.proto +++ b/linkml_runtime/linkml_model/protobuf/meta.proto @@ -111,8 +111,10 @@ message AnonymousSlotExpression element range = 0 anonymousClassExpression rangeExpression = 0 enumExpression enumRange = 0 + repeated enumBinding bindings = 0 boolean required = 8 boolean recommended = 9 + boolean multivalued = 7 boolean inlined = 25 boolean inlinedAsList = 27 anything minimumValue = 0 @@ -159,7 +161,6 @@ message ArrayExpression integer exactNumberDimensions = 0 integer minimumNumberDimensions = 0 anything maximumNumberDimensions = 0 - boolean hasExtraDimensions = 0 repeated dimensionExpression dimensions = 0 repeated extension extensions = 0 repeated annotation annotations = 0 @@ -359,6 +360,49 @@ message DimensionExpression repeated uriorcurie categories = 0 repeated string keywords = 0 } +// A binding of a slot or a class to a permissible value from an enumeration. +message EnumBinding + { + enumDefinition range = 0 + obligationLevelEnum obligationLevel = 0 + string bindsValueOf = 0 + pvFormulaOptions pvFormula = 0 + repeated extension extensions = 0 + repeated annotation annotations = 0 + string description = 5 + repeated altDescription altDescriptions = 0 + string title = 3 + string deprecated = 0 + repeated string todos = 0 + repeated string notes = 0 + repeated string comments = 0 + repeated example examples = 0 + repeated subsetDefinition inSubset = 0 + uri fromSchema = 0 + string importedFrom = 0 + uriorcurie source = 0 + string inLanguage = 0 + repeated uriorcurie seeAlso = 0 + uriorcurie deprecatedElementHasExactReplacement = 0 + uriorcurie deprecatedElementHasPossibleReplacement = 0 + repeated string aliases = 0 + repeated structuredAlias structuredAliases = 0 + repeated uriorcurie mappings = 0 + repeated uriorcurie exactMappings = 0 + repeated uriorcurie closeMappings = 0 + repeated uriorcurie relatedMappings = 0 + repeated uriorcurie narrowMappings = 0 + repeated uriorcurie broadMappings = 0 + uriorcurie createdBy = 0 + repeated uriorcurie contributors = 0 + datetime createdOn = 0 + datetime lastUpdatedOn = 0 + uriorcurie modifiedBy = 0 + uriorcurie status = 0 + integer rank = 51 + repeated uriorcurie categories = 0 + repeated string keywords = 0 + } // an element whose instances must be drawn from a specified set of permissible values message EnumDefinition { @@ -604,6 +648,8 @@ message PermissibleValue string description = 5 uriorcurie meaning = 23 unitOfMeasure unit = 0 + repeated uriorcurie instantiates = 0 + repeated uriorcurie implements = 0 permissibleValue isA = 11 repeated permissibleValue mixins = 13 repeated extension extensions = 0 @@ -723,6 +769,7 @@ message SchemaDefinition datetime generationDate = 0 boolean slotNamesUnique = 0 repeated setting settings = 20 + repeated enumBinding bindings = 0 ncname name = 1 } // assignment of a key to a value @@ -784,7 +831,6 @@ message SlotDefinition string singularName = 0 classDefinition domain = 0 uriorcurie slotUri = 2 - boolean multivalued = 7 arrayExpression array = 0 boolean inherited = 0 string readonly = 0 @@ -819,14 +865,17 @@ message SlotDefinition repeated slotDefinition disjointWith = 0 boolean childrenAreMutuallyDisjoint = 0 repeated slotDefinition unionOf = 0 + repeated typeMapping typeMappings = 0 slotDefinition isA = 11 repeated slotDefinition mixins = 13 repeated slotDefinition applyTo = 0 element range = 0 anonymousClassExpression rangeExpression = 0 enumExpression enumRange = 0 + repeated enumBinding bindings = 0 boolean required = 8 boolean recommended = 9 + boolean multivalued = 7 boolean inlined = 25 boolean inlinedAsList = 27 anything minimumValue = 0 @@ -856,6 +905,7 @@ message StructuredAlias string literalForm = 0 aliasPredicateEnum predicate = 0 repeated uriorcurie categories = 0 + repeated uri contexts = 0 repeated extension extensions = 0 repeated annotation annotations = 0 string description = 5 @@ -1003,6 +1053,48 @@ message TypeDefinition repeated anonymousTypeExpression anyOf = 101 repeated anonymousTypeExpression allOf = 107 } +// Represents how a slot or type can be serialized to a format. +message TypeMapping + { + string framework = 0 + typeDefinition type = 0 + string stringSerialization = 0 + repeated extension extensions = 0 + repeated annotation annotations = 0 + string description = 5 + repeated altDescription altDescriptions = 0 + string title = 3 + string deprecated = 0 + repeated string todos = 0 + repeated string notes = 0 + repeated string comments = 0 + repeated example examples = 0 + repeated subsetDefinition inSubset = 0 + uri fromSchema = 0 + string importedFrom = 0 + uriorcurie source = 0 + string inLanguage = 0 + repeated uriorcurie seeAlso = 0 + uriorcurie deprecatedElementHasExactReplacement = 0 + uriorcurie deprecatedElementHasPossibleReplacement = 0 + repeated string aliases = 0 + repeated structuredAlias structuredAliases = 0 + repeated uriorcurie mappings = 0 + repeated uriorcurie exactMappings = 0 + repeated uriorcurie closeMappings = 0 + repeated uriorcurie relatedMappings = 0 + repeated uriorcurie narrowMappings = 0 + repeated uriorcurie broadMappings = 0 + uriorcurie createdBy = 0 + repeated uriorcurie contributors = 0 + datetime createdOn = 0 + datetime lastUpdatedOn = 0 + uriorcurie modifiedBy = 0 + uriorcurie status = 0 + integer rank = 51 + repeated uriorcurie categories = 0 + repeated string keywords = 0 + } // a collection of slots whose values uniquely identify an instance of a class message UniqueKey { diff --git a/linkml_runtime/linkml_model/shacl/meta.shacl.ttl b/linkml_runtime/linkml_model/shacl/meta.shacl.ttl index 370a098e..9f89012e 100644 --- a/linkml_runtime/linkml_model/shacl/meta.shacl.ttl +++ b/linkml_runtime/linkml_model/shacl/meta.shacl.ttl @@ -30,17 +30,48 @@ linkml:AnonymousExpression a sh:NodeShape ; sh:description "An abstract parent class for any nested expression" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path dcterms:title ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 0 ; + sh:path linkml:extensions ], + [ sh:datatype xsd:string ; sh:description "notes and comments about an element intended primarily for external consumption" ; sh:order 8 ; sh:path skos:note ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 18 ; + sh:path skos:altLabel ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:examples ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 11 ; - sh:path skos:inScheme ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 21 ; - sh:path skos:exactMatch ], + sh:order 30 ; + sh:path oslc:modifiedBy ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 29 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 20 ; + sh:path skos:mappingRelation ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 10 ; + sh:path OIO:inSubset ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 24 ; + sh:path skos:narrowMatch ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; @@ -51,130 +82,99 @@ linkml:AnonymousExpression a sh:NodeShape ; sh:maxCount 1 ; sh:order 12 ; sh:path linkml:imported_from ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 31 ; - sh:path bibo:status ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 20 ; - sh:path skos:mappingRelation ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 7 ; + sh:path skos:editorialNote ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; sh:order 19 ; sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 34 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 7 ; - sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 22 ; + sh:path skos:closeMatch ], + [ sh:description "agent that contributed to the element" ; + sh:order 27 ; + sh:path dcterms:contributor ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 13 ; + sh:path dcterms:source ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 1 ; + sh:path linkml:annotations ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:order 5 ; sh:path linkml:deprecated ], - [ sh:description "agent that contributed to the element" ; - sh:order 27 ; - sh:path dcterms:contributor ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:order 2 ; sh:path skos:definition ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 26 ; - sh:path pav:createdBy ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 16 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 32 ; + sh:path sh:order ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:order 6 ; sh:path linkml:todos ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 0 ; - sh:path linkml:extensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 25 ; - sh:path skos:broadMatch ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 21 ; + sh:path skos:exactMatch ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 33 ; + sh:path dcterms:subject ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 32 ; - sh:path sh:order ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 10 ; - sh:path OIO:inSubset ], + sh:order 14 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 15 ; + sh:path rdfs:seeAlso ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 16 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 28 ; sh:path pav:createdOn ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 15 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 18 ; - sh:path skos:altLabel ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 33 ; - sh:path dcterms:subject ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 1 ; - sh:path linkml:annotations ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 30 ; - sh:path oslc:modifiedBy ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:order 17 ; sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 24 ; - sh:path skos:narrowMatch ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path dcterms:source ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 25 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 29 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:examples ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 11 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 23 ; + sh:path skos:relatedMatch ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 14 ; - sh:path schema1:inLanguage ], + sh:order 26 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 34 ; + sh:path schema1:keywords ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 22 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 23 ; - sh:path skos:relatedMatch ] ; + sh:order 31 ; + sh:path bibo:status ] ; sh:targetClass linkml:AnonymousExpression . linkml:ClassExpression a sh:NodeShape ; @@ -182,30 +182,30 @@ linkml:ClassExpression a sh:NodeShape ; sh:description "A boolean expression that can be used to dynamically determine membership of a class" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if none of the expressions hold" ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:none_of ], + sh:order 1 ; + sh:path linkml:exactly_one_of ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 0 ; sh:path linkml:any_of ], [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if only one of the expressions hold" ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 1 ; - sh:path linkml:exactly_one_of ], + sh:order 3 ; + sh:path linkml:all_of ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if none of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:none_of ], [ sh:class linkml:SlotDefinition ; sh:description "expresses constraints on a group of slots for a class expression" ; sh:nodeKind sh:IRI ; sh:order 4 ; - sh:path linkml:slot_conditions ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path linkml:all_of ] ; + sh:path linkml:slot_conditions ] ; sh:targetClass linkml:ClassExpression . linkml:ClassLevelRule a sh:NodeShape ; @@ -218,14 +218,13 @@ linkml:CommonMetadata a sh:NodeShape ; sh:closed false ; sh:description "Generic metadata shared across definitions" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:property [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 18 ; + sh:path skos:mappingRelation ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 30 ; - sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 23 ; - sh:path skos:broadMatch ], + sh:order 24 ; + sh:path pav:createdBy ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; @@ -235,125 +234,126 @@ linkml:CommonMetadata a sh:NodeShape ; sh:description "Outstanding issues that needs resolution" ; sh:order 4 ; sh:path linkml:todos ], - [ sh:description "agent that contributed to the element" ; - sh:order 25 ; - sh:path dcterms:contributor ], - [ sh:description "agent that created the element" ; + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 24 ; - sh:path pav:createdBy ], + sh:order 30 ; + sh:path sh:order ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 29 ; + sh:path bibo:status ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 8 ; sh:path OIO:inSubset ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:deprecated ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 21 ; - sh:path skos:relatedMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 22 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 32 ; - sh:path schema1:keywords ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 31 ; - sh:path dcterms:subject ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 17 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path skos:definition ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 6 ; - sh:path skos:note ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 27 ; - sh:path pav:lastUpdatedOn ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:examples ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 31 ; + sh:path dcterms:subject ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:order 15 ; sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 16 ; - sh:path skos:altLabel ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 28 ; + sh:path oslc:modifiedBy ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:order 11 ; sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 32 ; + sh:path schema1:keywords ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 26 ; sh:path pav:createdOn ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path skos:inScheme ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 18 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 28 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 13 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 21 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 12 ; - sh:path schema1:inLanguage ], + sh:order 27 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "agent that contributed to the element" ; + sh:order 25 ; + sh:path dcterms:contributor ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:order 19 ; sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 23 ; + sh:path skos:broadMatch ], [ sh:datatype xsd:string ; sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; sh:order 2 ; sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 12 ; + sh:path schema1:inLanguage ], [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:order 14 ; sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 5 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path skos:inScheme ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 16 ; + sh:path skos:altLabel ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 17 ; + sh:path skosxl:altLabel ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path linkml:deprecated ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 13 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:order 10 ; sh:path linkml:imported_from ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 5 ; - sh:path skos:editorialNote ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:examples ], - [ sh:description "status of the element" ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 29 ; - sh:path bibo:status ], + sh:order 0 ; + sh:path skos:definition ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:order 20 ; - sh:path skos:closeMatch ] ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 6 ; + sh:path skos:note ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 22 ; + sh:path skos:narrowMatch ] ; sh:targetClass linkml:CommonMetadata . linkml:Expression a sh:NodeShape ; @@ -377,500 +377,480 @@ linkml:ImportExpression a sh:NodeShape ; sh:closed true ; sh:description "an expression describing an import" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 24 ; - sh:path skos:exactMatch ], + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:import_as ], [ sh:datatype xsd:string ; sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; sh:order 21 ; sh:path skos:altLabel ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 11 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:imported_from ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 9 ; - sh:path linkml:todos ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; sh:order 22 ; sh:path skosxl:altLabel ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 25 ; - sh:path skos:closeMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 24 ; + sh:path skos:exactMatch ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; sh:order 12 ; sh:path linkml:examples ], - [ sh:description "A related resource from which the element is derived." ; + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 18 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 16 ; - sh:path dcterms:source ], + sh:order 32 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 9 ; + sh:path linkml:todos ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 13 ; sh:path OIO:inSubset ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 14 ; - sh:path skos:inScheme ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 30 ; - sh:path dcterms:contributor ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 10 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:deprecated ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 3 ; sh:path linkml:extensions ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 29 ; - sh:path pav:createdBy ], - [ sh:description "status of the element" ; + [ sh:description "agent that contributed to the element" ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 34 ; - sh:path bibo:status ], - [ sh:description "agent that modified the element" ; + sh:order 31 ; + sh:path pav:createdOn ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 33 ; - sh:path oslc:modifiedBy ], + sh:order 7 ; + sh:path dcterms:title ], [ sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path linkml:import_from ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path skos:definition ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 37 ; - sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 26 ; - sh:path skos:relatedMatch ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 18 ; - sh:path rdfs:seeAlso ], + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 11 ; + sh:path skos:note ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:order 27 ; sh:path skos:narrowMatch ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; - sh:maxCount 1 ; - sh:order 35 ; - sh:path sh:order ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 23 ; + sh:path skos:mappingRelation ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 36 ; + sh:path dcterms:subject ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:order 33 ; + sh:path oslc:modifiedBy ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 31 ; - sh:path pav:createdOn ], + sh:order 29 ; + sh:path pav:createdBy ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; sh:order 4 ; sh:path linkml:annotations ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 28 ; + sh:path skos:broadMatch ], [ sh:class linkml:Setting ; sh:nodeKind sh:BlankNode ; sh:order 2 ; sh:path linkml:import_map ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 36 ; - sh:path dcterms:subject ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 35 ; + sh:path sh:order ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:import_as ] ; + sh:order 5 ; + sh:path skos:definition ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path linkml:deprecated ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 10 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 26 ; + sh:path skos:relatedMatch ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 16 ; + sh:path dcterms:source ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path skos:inScheme ] ; sh:targetClass linkml:ImportExpression . linkml:SchemaDefinition a sh:NodeShape ; sh:closed true ; sh:description "A collection of definitions that make up a schema or a data model." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 60 ; - sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "license for the schema" ; + sh:property [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 3 ; - sh:path dcterms:license ], - [ sh:datatype xsd:string ; - sh:description "The prefix that is used for all elements within a schema" ; + sh:order 44 ; + sh:path schema1:inLanguage ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path linkml:default_prefix ], - [ sh:datatype xsd:string ; - sh:description "particular version of schema" ; + sh:order 61 ; + sh:path bibo:status ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path pav:version ], + sh:order 46 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 58 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:Setting ; - sh:description "A collection of global variable settings" ; - sh:nodeKind sh:BlankNode ; - sh:order 20 ; - sh:path linkml:settings ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNode ; - sh:order 25 ; - sh:path linkml:local_names ], - [ sh:datatype xsd:string ; - sh:description "a unique name for the schema that is both human-readable and consists of only characters from the NCName set" ; + sh:description "date and time that the schema was loaded/generated" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 21 ; - sh:path rdfs:label ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 32 ; - sh:path linkml:alt_descriptions ], + sh:order 18 ; + sh:path linkml:generation_date ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 38 ; + sh:order 39 ; sh:path linkml:examples ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 62 ; - sh:path dcterms:subject ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + [ sh:class linkml:EnumBinding ; + sh:description """A collection of enum bindings that specify how a slot can be bound to a permissible value from an enumeration. +LinkML provides enums to allow string values to be restricted to one of a set of permissible values (specified statically or dynamically). +Enum bindings allow enums to be bound to any object, including complex nested objects. For example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the values the id takes on in a given context. For example, a HumanSample class may have a slot for representing sample site, with a range of concept, but the values of that slot may be restricted to concepts from a particular branch of an anatomy ontology.""" ; sh:nodeKind sh:BlankNode ; - sh:order 29 ; - sh:path linkml:extensions ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 45 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 21 ; + sh:path linkml:bindings ], [ sh:datatype xsd:dateTime ; sh:description "modification date of the source of the schema" ; sh:maxCount 1 ; sh:order 16 ; sh:path linkml:source_file_date ], - [ sh:description "agent that contributed to the element" ; - sh:order 56 ; - sh:path dcterms:contributor ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 28 ; - sh:path linkml:instantiates ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 26 ; + sh:path linkml:local_names ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 23 ; - sh:path linkml:id_prefixes_are_closed ], + sh:order 41 ; + sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path linkml:deprecated ], - [ sh:datatype xsd:integer ; - sh:description "size in bytes of the source of the schema" ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path linkml:source_file_size ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 55 ; - sh:path pav:createdBy ], + sh:description "Outstanding issues that needs resolution" ; + sh:order 36 ; + sh:path linkml:todos ], [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 59 ; + sh:order 60 ; sh:path oslc:modifiedBy ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 41 ; - sh:path linkml:imported_from ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:order 26 ; - sh:path dcterms:conformsTo ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 27 ; - sh:path linkml:implements ], [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; - sh:order 24 ; + sh:order 25 ; sh:path linkml:definition_uri ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 43 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 49 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 63 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 40 ; - sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "Version of the metamodel used to load the schema" ; - sh:maxCount 1 ; - sh:order 14 ; - sh:path linkml:metamodel_version ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; sh:order 48 ; - sh:path skosxl:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 51 ; - sh:path skos:closeMatch ], + sh:path skos:altLabel ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 31 ; + sh:path linkml:annotations ], [ sh:class linkml:TypeDefinition ; sh:description "An index to the collection of all type definitions in the schema" ; sh:nodeKind sh:IRI ; sh:order 10 ; sh:path linkml:types ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 54 ; - sh:path skos:broadMatch ], - [ sh:class linkml:ClassDefinition ; - sh:description "An index to the collection of all class definitions in the schema" ; - sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path linkml:classes ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path OIO:inSubset ], - [ sh:class linkml:SlotDefinition ; - sh:description "An index to the collection of all slot definitions in the schema" ; - sh:nodeKind sh:IRI ; - sh:order 12 ; - sh:path linkml:slot_definitions ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:order 57 ; - sh:path pav:createdOn ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 47 ; - sh:path skos:altLabel ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 33 ; + sh:path linkml:alt_descriptions ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 36 ; + sh:order 37 ; sh:path skos:editorialNote ], - [ sh:datatype xsd:anyURI ; - sh:description "The official schema URI" ; + [ sh:class linkml:EnumDefinition ; + sh:description "An index to the collection of all enum definitions in the schema" ; + sh:nodeKind sh:IRI ; + sh:order 11 ; + sh:path linkml:enums ], + [ sh:class linkml:Prefix ; + sh:description "A collection of prefix expansions that specify how CURIEs can be expanded to URIs" ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path sh:declare ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 38 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "a unique name for the schema that is both human-readable and consists of only characters from the NCName set" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 0 ; - sh:path linkml:id ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:order 22 ; + sh:path rdfs:label ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 46 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:class linkml:TypeDefinition ; - sh:description "default slot range to be used if range element is omitted from a slot definition" ; + sh:order 42 ; + sh:path linkml:imported_from ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 49 ; + sh:path skosxl:altLabel ], + [ sh:datatype xsd:boolean ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 8 ; - sh:path linkml:default_range ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 44 ; - sh:path rdfs:seeAlso ], + sh:order 24 ; + sh:path linkml:id_prefixes_are_closed ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 35 ; - sh:path linkml:todos ], + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:order 27 ; + sh:path dcterms:conformsTo ], + [ sh:datatype xsd:string ; + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 23 ; + sh:path linkml:id_prefixes ], + [ sh:datatype xsd:string ; + sh:description "a list of Curie prefixes that are used in the representation of instances of the model. All prefixes in this list are added to the prefix sections of the target models." ; + sh:order 5 ; + sh:path linkml:emit_prefixes ], + [ sh:datatype xsd:string ; + sh:description "license for the schema" ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path dcterms:license ], + [ sh:datatype xsd:boolean ; + sh:description "if true then induced/mangled slot names are not created for class_usage and attributes" ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path linkml:slot_names_unique ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 53 ; + sh:order 54 ; sh:path skos:narrowMatch ], - [ sh:description "A list of schemas that are to be included in this schema" ; - sh:order 2 ; - sh:path linkml:imports ], + [ sh:class linkml:ClassDefinition ; + sh:description "An index to the collection of all class definitions in the schema" ; + sh:nodeKind sh:IRI ; + sh:order 13 ; + sh:path linkml:classes ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 63 ; + sh:path dcterms:subject ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path dcterms:source ], + [ sh:description "agent that contributed to the element" ; + sh:order 57 ; + sh:path dcterms:contributor ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 31 ; + sh:order 32 ; sh:path skos:definition ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 45 ; + sh:path rdfs:seeAlso ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 55 ; + sh:path skos:broadMatch ], [ sh:datatype xsd:string ; - sh:description "a list of Curie prefixes that are used in the representation of instances of the model. All prefixes in this list are added to the prefix sections of the target models." ; - sh:order 5 ; - sh:path linkml:emit_prefixes ], + sh:description "ordered list of prefixcommon biocontexts to be fetched to resolve id prefixes and inline prefix variables" ; + sh:order 6 ; + sh:path linkml:default_curi_maps ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 28 ; + sh:path linkml:implements ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 52 ; + sh:path skos:closeMatch ], [ sh:class linkml:SubsetDefinition ; sh:description "An index to the collection of all subset definitions in the schema" ; sh:nodeKind sh:IRI ; sh:order 9 ; sh:path linkml:subsets ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 37 ; - sh:path skos:note ], - [ sh:class linkml:EnumDefinition ; - sh:description "An index to the collection of all enum definitions in the schema" ; + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 56 ; + sh:path pav:createdBy ], + [ sh:class linkml:SlotDefinition ; + sh:description "An index to the collection of all slot definitions in the schema" ; sh:nodeKind sh:IRI ; - sh:order 11 ; - sh:path linkml:enums ], + sh:order 12 ; + sh:path linkml:slot_definitions ], [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:description "size in bytes of the source of the schema" ; sh:maxCount 1 ; - sh:order 61 ; - sh:path sh:order ], + sh:order 17 ; + sh:path linkml:source_file_size ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 58 ; + sh:path pav:createdOn ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 50 ; + sh:order 51 ; sh:path skos:exactMatch ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 30 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 52 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:boolean ; - sh:description "if true then induced/mangled slot names are not created for class_usage and attributes" ; + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 29 ; + sh:path linkml:instantiates ], + [ sh:datatype xsd:anyURI ; + sh:description "The official schema URI" ; sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:slot_names_unique ], - [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 22 ; - sh:path linkml:id_prefixes ], - [ sh:class linkml:Prefix ; - sh:description "A collection of prefix expansions that specify how CURIEs can be expanded to URIs" ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path sh:declare ], - [ sh:datatype xsd:string ; - sh:description "ordered list of prefixcommon biocontexts to be fetched to resolve id prefixes and inline prefix variables" ; - sh:order 6 ; - sh:path linkml:default_curi_maps ], + sh:minCount 1 ; + sh:order 0 ; + sh:path linkml:id ], [ sh:datatype xsd:string ; - sh:description "name, uri or description of the source of the schema" ; + sh:description "Version of the metamodel used to load the schema" ; sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:source_file ], + sh:order 14 ; + sh:path linkml:metamodel_version ], + [ sh:class linkml:Setting ; + sh:description "A collection of global variable settings" ; + sh:nodeKind sh:BlankNode ; + sh:order 20 ; + sh:path linkml:settings ], [ sh:datatype xsd:dateTime ; - sh:description "date and time that the schema was loaded/generated" ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:generation_date ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 59 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 42 ; - sh:path dcterms:source ], + sh:order 47 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:datatype xsd:string ; + sh:description "particular version of schema" ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path pav:version ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 40 ; + sh:path OIO:inSubset ], + [ sh:class linkml:TypeDefinition ; + sh:description "default slot range to be used if range element is omitted from a slot definition" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 8 ; + sh:path linkml:default_range ], [ sh:datatype xsd:string ; sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 33 ; - sh:path dcterms:title ] ; - sh:targetClass linkml:SchemaDefinition . - -linkml:SlotExpression a sh:NodeShape ; - sh:closed false ; - sh:description "an expression that constrains the range of values a slot can take" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:order 34 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "The prefix that is used for all elements within a schema" ; sh:maxCount 1 ; - sh:order 14 ; - sh:path linkml:equals_string ], - [ sh:class linkml:Element ; - sh:description """defines the type of the object of the slot. Given the following slot definition - S1: - domain: C1 - range: C2 -the declaration - X: - S1: Y - -implicitly asserts Y is an instance of C2 -""" ; + sh:order 7 ; + sh:path linkml:default_prefix ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 64 ; + sh:path schema1:keywords ], + [ sh:description "A list of schemas that are to be included in this schema" ; + sh:order 2 ; + sh:path linkml:imports ], + [ sh:datatype xsd:string ; + sh:description "name, uri or description of the source of the schema" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:source_file ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 53 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 30 ; + sh:path linkml:extensions ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 50 ; + sh:path skos:mappingRelation ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:range ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:order 62 ; + sh:path sh:order ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; + sh:order 35 ; + sh:path linkml:deprecated ] ; + sh:targetClass linkml:SchemaDefinition . + +linkml:SlotExpression a sh:NodeShape ; + sh:closed false ; + sh:description "an expression that constrains the range of values a slot can take" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:maximum_value ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:order 26 ; + sh:path linkml:exactly_one_of ], + [ sh:datatype xsd:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path linkml:all_members ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 25 ; - sh:path linkml:any_of ], + sh:order 21 ; + sh:path linkml:minimum_cardinality ], [ sh:datatype xsd:integer ; sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:order 20 ; + sh:order 22 ; sh:path linkml:maximum_cardinality ], [ sh:class linkml:EnumExpression ; sh:description "An inlined enumeration" ; @@ -879,483 +859,461 @@ implicitly asserts Y is an instance of C2 sh:order 2 ; sh:path linkml:enum_range ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 21 ; - sh:path linkml:has_member ], - [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:exact_cardinality ], + sh:order 24 ; + sh:path linkml:all_members ], [ sh:datatype xsd:string ; sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; - sh:order 12 ; + sh:order 14 ; sh:path linkml:implicit_prefix ], + [ sh:class linkml:PatternExpression ; + sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 12 ; + sh:path linkml:structured_pattern ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 28 ; + sh:path linkml:all_of ], [ sh:class linkml:AnonymousSlotExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 23 ; + sh:order 25 ; sh:path linkml:none_of ], + [ sh:datatype xsd:integer ; + sh:description "the exact number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:exact_cardinality ], [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:pattern ], + sh:order 16 ; + sh:path linkml:equals_string ], [ sh:datatype xsd:boolean ; sh:description "True means that keyed or identified slot appears in an outer structure by value. False means that only the key or identifier for the slot appears within the domain, referencing a structure that appears elsewhere." ; sh:maxCount 1 ; - sh:order 5 ; + sh:order 7 ; sh:path linkml:inlined ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; + [ sh:datatype xsd:string ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:minimum_cardinality ], + sh:order 11 ; + sh:path linkml:pattern ], + [ sh:class linkml:EnumBinding ; + sh:description """A collection of enum bindings that specify how a slot can be bound to a permissible value from an enumeration. +LinkML provides enums to allow string values to be restricted to one of a set of permissible values (specified statically or dynamically). +Enum bindings allow enums to be bound to any object, including complex nested objects. For example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the values the id takes on in a given context. For example, a HumanSample class may have a slot for representing sample site, with a range of concept, but the values of that slot may be restricted to concepts from a particular branch of an anatomy ontology.""" ; + sh:nodeKind sh:BlankNode ; + sh:order 3 ; + sh:path linkml:bindings ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot must be present in instances of the class definition" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path linkml:required ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if only one of the expressions hold" ; + sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 24 ; - sh:path linkml:exactly_one_of ], + sh:order 27 ; + sh:path linkml:any_of ], [ sh:class qudt:Unit ; sh:description "an encoding of a unit" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 11 ; + sh:order 13 ; sh:path qudt:unit ], + [ sh:datatype xsd:integer ; + sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path linkml:equals_number ], [ sh:datatype xsd:boolean ; - sh:description "true means that the slot must be present in instances of the class definition" ; + sh:description "true means that slot can have more than one value and should be represented using a list or collection structure." ; sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:required ], + sh:order 6 ; + sh:path linkml:multivalued ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 23 ; + sh:path linkml:has_member ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 10 ; + sh:path linkml:maximum_value ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path linkml:recommended ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:minimum_value ], [ sh:datatype xsd:string ; sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 15 ; + sh:order 17 ; sh:path linkml:equals_string_in ], + [ sh:description "if PRESENT then a value must be present (for lists there must be at least one value). If ABSENT then a value must be absent (for lists, must be empty)" ; + sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:value_presence ], [ sh:datatype xsd:string ; sh:description "the value of the slot must equal the value of the evaluated expression" ; sh:maxCount 1 ; - sh:order 17 ; + sh:order 19 ; sh:path linkml:equals_expression ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + [ sh:class linkml:Element ; + sh:description """defines the type of the object of the slot. Given the following slot definition + S1: + domain: C1 + range: C2 +the declaration + X: + S1: Y + +implicitly asserts Y is an instance of C2 +""" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:structured_pattern ], + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:range ], [ sh:class linkml:AnonymousClassExpression ; sh:description "A range that is described as a boolean expression combining existing ranges" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 1 ; sh:path linkml:range_expression ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 26 ; - sh:path linkml:all_of ], - [ sh:datatype xsd:boolean ; - sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:recommended ], - [ sh:description "if true then a value must be present (for lists there must be at least one value). If false then a value must be absent (for lists, must be empty)" ; - sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:value_presence ], [ sh:datatype xsd:boolean ; sh:description "True means that an inlined slot is represented as a list of range instances. False means that an inlined slot is represented as a dictionary, whose key is the slot key or identifier and whose value is the range instance." ; sh:maxCount 1 ; - sh:order 6 ; - sh:path linkml:inlined_as_list ], - [ sh:datatype xsd:integer ; - sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path linkml:equals_number ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or higher than this" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:minimum_value ] ; + sh:order 8 ; + sh:path linkml:inlined_as_list ] ; sh:targetClass linkml:SlotExpression . linkml:TypeExpression a sh:NodeShape ; sh:closed false ; sh:description "An abstract class grouping named types and anonymous type expressions" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class qudt:Unit ; + sh:property [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path linkml:equals_string ], + [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; + sh:order 5 ; + sh:path linkml:equals_string_in ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if none of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:none_of ], + [ sh:class qudt:Unit ; sh:description "an encoding of a unit" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 2 ; sh:path qudt:unit ], - [ sh:datatype xsd:integer ; - sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path linkml:equals_number ], [ sh:datatype xsd:string ; sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; sh:order 3 ; sh:path linkml:implicit_prefix ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 5 ; - sh:path linkml:equals_string_in ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:maximum_value ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:equals_string ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or higher than this" ; - sh:maxCount 1 ; + sh:order 10 ; + sh:path linkml:exactly_one_of ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:minimum_value ], + sh:order 11 ; + sh:path linkml:any_of ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 12 ; sh:path linkml:all_of ], + [ sh:datatype xsd:integer ; + sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path linkml:equals_number ], [ sh:datatype xsd:string ; sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; sh:order 0 ; sh:path linkml:pattern ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:none_of ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if only one of the expressions hold" ; + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:exactly_one_of ], + sh:order 7 ; + sh:path linkml:minimum_value ], [ sh:class linkml:PatternExpression ; sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 1 ; sh:path linkml:structured_pattern ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if at least one of the expressions hold" ; + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 11 ; - sh:path linkml:any_of ] ; + sh:order 8 ; + sh:path linkml:maximum_value ] ; sh:targetClass linkml:TypeExpression . linkml:ArrayExpression a sh:NodeShape ; sh:closed true ; sh:description "defines the dimensions of an array" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 12 ; - sh:path skos:editorialNote ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path dcterms:source ], - [ sh:datatype xsd:boolean ; - sh:description "If this is set to true" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:has_extra_dimensions ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:property [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 29 ; - sh:path skos:narrowMatch ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 38 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 20 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; sh:order 13 ; - sh:path skos:note ], + sh:path linkml:examples ], + [ sh:datatype xsd:integer ; + sh:description "minimum number of dimensions in the array" ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:minimum_number_dimensions ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 34 ; + sh:order 33 ; sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 10 ; - sh:path linkml:deprecated ], [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 25 ; + sh:order 24 ; sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 11 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 39 ; - sh:path schema1:keywords ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 14 ; - sh:path linkml:examples ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:alt_descriptions ], - [ sh:description "agent that contributed to the element" ; - sh:order 32 ; - sh:path dcterms:contributor ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 21 ; - sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 30 ; + sh:order 29 ; sh:path skos:broadMatch ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 22 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 37 ; + sh:path dcterms:subject ], [ sh:class linkml:Any ; sh:description "maximum number of dimensions in the array, or False if explicitly no maximum. If this is unset, and an explicit list of dimensions are passed using dimensions, then this is interpreted as a closed list and the maximum_number_dimensions is the length of the dimensions list, unless this value is set to False" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 2 ; sh:path linkml:maximum_number_dimensions ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 27 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path OIO:inSubset ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 19 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path dcterms:source ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 5 ; + sh:path linkml:annotations ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 37 ; + sh:order 36 ; sh:path sh:order ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 28 ; + sh:path skos:narrowMatch ], + [ sh:description "agent that contributed to the element" ; sh:order 31 ; - sh:path pav:createdBy ], + sh:path dcterms:contributor ], [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 23 ; - sh:path skos:altLabel ], + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 12 ; + sh:path skos:note ], [ sh:datatype xsd:integer ; sh:description "exact number of dimensions in the array" ; sh:maxCount 1 ; sh:order 0 ; sh:path linkml:exact_number_dimensions ], - [ sh:datatype xsd:integer ; - sh:description "minimum number of dimensions in the array" ; + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:minimum_number_dimensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 27 ; - sh:path skos:closeMatch ], + sh:order 15 ; + sh:path skos:inScheme ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 21 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 36 ; + sh:order 35 ; sh:path bibo:status ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 17 ; + sh:order 16 ; sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 26 ; - sh:path skos:exactMatch ], - [ sh:description "agent that modified the element" ; + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 35 ; - sh:path oslc:modifiedBy ], - [ sh:class linkml:DimensionExpression ; - sh:description "definitions of each axis in the array" ; + sh:order 30 ; + sh:path pav:createdBy ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:dimensions ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 15 ; - sh:path OIO:inSubset ], + sh:order 7 ; + sh:path linkml:alt_descriptions ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 7 ; + sh:order 6 ; sh:path skos:definition ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 24 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 9 ; - sh:path dcterms:title ], + sh:order 18 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 22 ; + sh:path skos:altLabel ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 11 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 38 ; + sh:path schema1:keywords ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 5 ; + sh:order 4 ; sh:path linkml:extensions ], + [ sh:class linkml:DimensionExpression ; + sh:description "definitions of each axis in the array" ; + sh:nodeKind sh:BlankNode ; + sh:order 3 ; + sh:path linkml:dimensions ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 33 ; + sh:order 32 ; sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 28 ; - sh:path skos:relatedMatch ] ; + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 25 ; + sh:path skos:exactMatch ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 23 ; + sh:path skosxl:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 26 ; + sh:path skos:closeMatch ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 10 ; + sh:path linkml:todos ] ; sh:targetClass linkml:ArrayExpression . linkml:ClassRule a sh:NodeShape ; sh:closed true ; sh:description "A rule that applies to instances of a class" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 23 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 25 ; - sh:path skos:altLabel ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 11 ; - sh:path dcterms:title ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:property [ sh:class linkml:AnonymousClassExpression ; + sh:description "an expression that must hold for an instance of the class, if the preconditions hold" ; sh:maxCount 1 ; - sh:order 9 ; - sh:path skos:definition ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 32 ; - sh:path skos:broadMatch ], + sh:nodeKind sh:BlankNode ; + sh:order 1 ; + sh:path linkml:postconditions ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 17 ; + sh:path OIO:inSubset ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:extensions ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 29 ; + sh:path skos:closeMatch ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; sh:order 26 ; sh:path skosxl:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 27 ; - sh:path skos:mappingRelation ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 39 ; - sh:path dcterms:subject ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 14 ; - sh:path skos:editorialNote ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 29 ; - sh:path skos:closeMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 34 ; - sh:path dcterms:contributor ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 16 ; - sh:path linkml:examples ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 28 ; - sh:path skos:exactMatch ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "an expression that must hold in order for the rule to be applicable to an instance" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 0 ; - sh:path sh:condition ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:annotations ], + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 15 ; + sh:path skos:note ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:order 19 ; sh:path linkml:imported_from ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path sh:order ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 37 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 22 ; - sh:path rdfs:seeAlso ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 31 ; - sh:path skos:narrowMatch ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 38 ; - sh:path bibo:status ], + [ sh:description "agent that contributed to the element" ; + sh:order 34 ; + sh:path dcterms:contributor ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 10 ; + sh:path linkml:alt_descriptions ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 36 ; sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 12 ; - sh:path linkml:deprecated ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 13 ; - sh:path linkml:todos ], - [ sh:description "A related resource from which the element is derived." ; + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 20 ; - sh:path dcterms:source ], - [ sh:description "agent that created the element" ; + sh:order 23 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "an expression that must hold in order for the rule to be applicable to an instance" ; sh:maxCount 1 ; - sh:order 33 ; - sh:path pav:createdBy ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path OIO:inSubset ], + sh:nodeKind sh:BlankNode ; + sh:order 0 ; + sh:path sh:condition ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 14 ; + sh:path skos:editorialNote ], [ sh:datatype xsd:boolean ; sh:description "if true, the the postconditions may be omitted in instance data, but it is valid for an inference engine to add these" ; sh:maxCount 1 ; @@ -1365,166 +1323,247 @@ linkml:ClassRule a sh:NodeShape ; sh:description "Keywords or tags used to describe the element" ; sh:order 40 ; sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 30 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 21 ; - sh:path schema1:inLanguage ], + sh:order 11 ; + sh:path dcterms:title ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 35 ; sh:path pav:createdOn ], + [ sh:datatype xsd:boolean ; + sh:description "in addition to preconditions entailing postconditions, the postconditions entail the preconditions" ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path linkml:bidirectional ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 31 ; + sh:path skos:narrowMatch ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 16 ; + sh:path linkml:examples ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 39 ; + sh:path dcterms:subject ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 22 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:boolean ; sh:description "a deactivated rule is not executed by the rules engine" ; sh:maxCount 1 ; sh:order 6 ; sh:path sh:deactivated ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 15 ; - sh:path skos:note ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "an expression that must hold for an instance of the class, if the preconditions hold" ; + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 1 ; - sh:path linkml:postconditions ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "an expression that must hold for an instance of the class, if the preconditions no not hold" ; + sh:order 38 ; + sh:path bibo:status ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:elseconditions ], - [ sh:datatype xsd:boolean ; - sh:description "in addition to preconditions entailing postconditions, the postconditions entail the preconditions" ; + sh:order 20 ; + sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:bidirectional ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:extensions ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:alt_descriptions ] ; - sh:targetClass linkml:ClassRule . - -linkml:DimensionExpression a sh:NodeShape ; - sh:closed true ; - sh:description "defines one of the dimensions of an array" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; + sh:order 9 ; + sh:path skos:definition ], + [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 36 ; + sh:order 5 ; sh:path sh:order ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:exact_cardinality ], + sh:order 8 ; + sh:path linkml:annotations ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path skos:definition ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; sh:order 25 ; - sh:path skos:exactMatch ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 37 ; - sh:path dcterms:subject ], + sh:path skos:altLabel ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 21 ; + sh:path schema1:inLanguage ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 9 ; + sh:order 12 ; sh:path linkml:deprecated ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 13 ; + sh:path linkml:todos ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path skos:inScheme ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 37 ; + sh:path oslc:modifiedBy ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 30 ; + sh:path skos:relatedMatch ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; + sh:order 33 ; + sh:path pav:createdBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 28 ; + sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 27 ; + sh:path skos:mappingRelation ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:order 32 ; - sh:path pav:createdOn ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:path skos:broadMatch ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "an expression that must hold for an instance of the class, if the preconditions no not hold" ; sh:maxCount 1 ; - sh:order 8 ; - sh:path dcterms:title ], + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:elseconditions ] ; + sh:targetClass linkml:ClassRule . + +linkml:DimensionExpression a sh:NodeShape ; + sh:closed true ; + sh:description "defines one of the dimensions of an array" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 10 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 12 ; + sh:path skos:note ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 14 ; sh:path OIO:inSubset ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 5 ; - sh:path linkml:annotations ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 30 ; + sh:path pav:createdBy ], + [ sh:datatype xsd:string ; + sh:description "the name used for a slot in the context of its owning class. If present, this is used instead of the actual slot name." ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path skos:prefLabel ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 16 ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:integer ; + sh:description "the exact number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path linkml:exact_cardinality ], [ sh:datatype xsd:anyURI ; sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:order 15 ; sh:path skos:inScheme ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 19 ; - sh:path rdfs:seeAlso ], [ sh:datatype xsd:integer ; sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:order 1 ; sh:path linkml:maximum_cardinality ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 23 ; - sh:path skosxl:altLabel ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path oslc:modifiedBy ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 37 ; + sh:path dcterms:subject ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 29 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 11 ; + sh:path skos:editorialNote ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:alt_descriptions ], - [ sh:description "status of the element" ; + sh:order 4 ; + sh:path linkml:extensions ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 27 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:order 35 ; - sh:path bibo:status ], + sh:order 2 ; + sh:path linkml:minimum_cardinality ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 33 ; sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:minimum_cardinality ], + sh:order 6 ; + sh:path skos:definition ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 19 ; + sh:path rdfs:seeAlso ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 28 ; + sh:path skos:narrowMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 26 ; + sh:path skos:closeMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 24 ; + sh:path skos:mappingRelation ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:order 21 ; sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 13 ; + sh:path linkml:examples ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 32 ; + sh:path pav:createdOn ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 22 ; + sh:path skos:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 25 ; + sh:path skos:exactMatch ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 35 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; @@ -1533,64 +1572,39 @@ linkml:DimensionExpression a sh:NodeShape ; [ sh:description "agent that contributed to the element" ; sh:order 31 ; sh:path dcterms:contributor ], - [ sh:datatype xsd:string ; - sh:description "the name used for a slot in the context of its owning class. If present, this is used instead of the actual slot name." ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path skos:prefLabel ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 10 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 11 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 22 ; - sh:path skos:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 24 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 12 ; - sh:path skos:note ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:order 38 ; sh:path schema1:keywords ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path dcterms:source ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 27 ; - sh:path skos:relatedMatch ], - [ sh:description "agent that created the element" ; + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 30 ; - sh:path pav:createdBy ], + sh:order 36 ; + sh:path sh:order ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 23 ; + sh:path skosxl:altLabel ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 16 ; - sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 29 ; - sh:path skos:broadMatch ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + sh:order 9 ; + sh:path linkml:deprecated ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 13 ; - sh:path linkml:examples ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 26 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 28 ; - sh:path skos:narrowMatch ] ; + sh:order 5 ; + sh:path linkml:annotations ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path dcterms:source ] ; sh:targetClass linkml:DimensionExpression . linkml:Prefix a sh:NodeShape ; @@ -1611,104 +1625,219 @@ linkml:Prefix a sh:NodeShape ; sh:path sh:prefix ] ; sh:targetClass linkml:Prefix . -linkml:UniqueKey a sh:NodeShape ; +linkml:TypeMapping a sh:NodeShape ; sh:closed true ; - sh:description "a collection of slots whose values uniquely identify an instance of a class" ; + sh:description "Represents how a slot or type can be serialized to a format." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path skos:inScheme ], + [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:order 37 ; sh:path schema1:keywords ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 27 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 11 ; + sh:path skos:note ], + [ sh:class linkml:TypeDefinition ; + sh:description "type to coerce to" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:mapped_type ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 7 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. +We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. +Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects +For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:string_serialization ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 26 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 14 ; - sh:path skos:inScheme ], + sh:order 16 ; + sh:path dcterms:source ], [ sh:datatype xsd:string ; - sh:description "name of the unique key" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path linkml:unique_key_name ], + sh:order 15 ; + sh:path linkml:imported_from ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:order 28 ; sh:path skos:broadMatch ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 36 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 17 ; - sh:path schema1:inLanguage ], + sh:order 29 ; + sh:path pav:createdBy ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:order 25 ; sh:path skos:closeMatch ], + [ sh:description "agent that contributed to the element" ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 9 ; + sh:path linkml:todos ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; sh:order 35 ; sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 33 ; - sh:path oslc:modifiedBy ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:imported_from ], + sh:order 8 ; + sh:path linkml:deprecated ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 36 ; + sh:path dcterms:subject ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 24 ; + sh:path skos:exactMatch ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 11 ; - sh:path skos:note ], + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 10 ; + sh:path skos:editorialNote ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 3 ; sh:path linkml:extensions ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 13 ; + sh:path OIO:inSubset ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 12 ; + sh:path linkml:examples ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 33 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 18 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path skos:definition ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path bibo:status ], + [ sh:datatype xsd:string ; + sh:description "The name of a format that can be used to serialize LinkML data. The string value should be a code from the LinkML frameworks vocabulary, but this is not strictly enforced" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path linkml:framework_key ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 32 ; sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 10 ; - sh:path skos:editorialNote ], + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 23 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:string ; sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; sh:order 21 ; sh:path skos:altLabel ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path linkml:annotations ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 22 ; + sh:path skosxl:altLabel ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 31 ; - sh:path pav:createdOn ], + sh:path pav:createdOn ] ; + sh:targetClass linkml:TypeMapping . + +linkml:UniqueKey a sh:NodeShape ; + sh:closed true ; + sh:description "a collection of slots whose values uniquely identify an instance of a class" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 10 ; + sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 24 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path skos:inScheme ], [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:order 26 ; sh:path skos:relatedMatch ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 9 ; - sh:path linkml:todos ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 21 ; + sh:path skos:altLabel ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 13 ; + sh:path OIO:inSubset ], + [ sh:datatype xsd:boolean ; + sh:description "By default, None values are considered equal for the purposes of comparisons in determining uniqueness. Set this to true to treat missing values as per ANSI-SQL NULLs, i.e NULL=NULL is always False." ; sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:deprecated ], + sh:order 2 ; + sh:path linkml:consider_nulls_inequal ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; @@ -1718,66 +1847,123 @@ linkml:UniqueKey a sh:NodeShape ; sh:maxCount 1 ; sh:order 19 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path skos:definition ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 18 ; + sh:path rdfs:seeAlso ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 12 ; - sh:path linkml:examples ], + sh:order 3 ; + sh:path linkml:extensions ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:order 29 ; sh:path pav:createdBy ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 18 ; - sh:path rdfs:seeAlso ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path OIO:inSubset ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 27 ; - sh:path skos:narrowMatch ], + [ sh:description "agent that contributed to the element" ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 33 ; + sh:path oslc:modifiedBy ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 35 ; + sh:path sh:order ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 32 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 31 ; + sh:path pav:createdOn ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path linkml:deprecated ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:annotations ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:order 4 ; + sh:path linkml:annotations ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path bibo:status ], + [ sh:class linkml:SlotDefinition ; + sh:description "list of slot names that form a key. The tuple formed from the values of all these slots should be unique." ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:unique_key_slots ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 23 ; + sh:path skos:mappingRelation ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 11 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 9 ; + sh:path linkml:todos ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 12 ; + sh:path linkml:examples ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 7 ; + sh:path dcterms:title ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 22 ; + sh:path skosxl:altLabel ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:string ; + sh:description "name of the unique key" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path linkml:unique_key_name ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 36 ; + sh:path dcterms:subject ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:order 16 ; sh:path dcterms:source ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 24 ; - sh:path skos:exactMatch ], - [ sh:datatype xsd:boolean ; - sh:description "By default, None values are considered equal for the purposes of comparisons in determining uniqueness. Set this to true to treat missing values as per ANSI-SQL NULLs, i.e NULL=NULL is always False." ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:consider_nulls_inequal ], - [ sh:description "agent that contributed to the element" ; - sh:order 30 ; - sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 27 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 28 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:class linkml:SlotDefinition ; - sh:description "list of slot names that form a key. The tuple formed from the values of all these slots should be unique." ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:unique_key_slots ] ; + sh:order 5 ; + sh:path skos:definition ] ; sh:targetClass linkml:UniqueKey . linkml:Setting a sh:NodeShape ; @@ -1803,218 +1989,211 @@ linkml:Element a sh:NodeShape ; sh:description "A named element in the model" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 42 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 16 ; - sh:path skos:note ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:datatype xsd:string ; - sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path rdfs:label ], - [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 1 ; - sh:path linkml:id_prefixes ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:id_prefixes_are_closed ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 41 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; sh:order 12 ; sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 28 ; - sh:path skos:mappingRelation ], - [ sh:description "status of the element" ; + [ sh:description "agent that contributed to the element" ; + sh:order 35 ; + sh:path dcterms:contributor ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 39 ; - sh:path bibo:status ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path OIO:inSubset ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 31 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + sh:order 38 ; + sh:path oslc:modifiedBy ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 41 ; + sh:path dcterms:subject ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 5 ; - sh:path dcterms:conformsTo ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:order 21 ; + sh:path dcterms:source ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 27 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 37 ; - sh:path pav:lastUpdatedOn ], + sh:order 8 ; + sh:path linkml:extensions ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; sh:order 9 ; sh:path linkml:annotations ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path skos:inScheme ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 29 ; + sh:path skos:exactMatch ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path pav:createdBy ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:extensions ], + sh:order 4 ; + sh:path linkml:local_names ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:deprecated ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 17 ; - sh:path linkml:examples ], + sh:order 5 ; + sh:path dcterms:conformsTo ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 26 ; + sh:path skos:altLabel ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:order 14 ; sh:path linkml:todos ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 23 ; + sh:path rdfs:seeAlso ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 32 ; + sh:path skos:narrowMatch ], [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; sh:order 3 ; sh:path linkml:definition_uri ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:imported_from ], - [ sh:class linkml:LocalName ; + sh:minCount 1 ; + sh:order 0 ; + sh:path rdfs:label ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 16 ; + sh:path skos:note ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 18 ; + sh:path OIO:inSubset ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:local_names ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 33 ; - sh:path skos:broadMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 35 ; - sh:path dcterms:contributor ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 6 ; - sh:path linkml:implements ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path pav:createdBy ], + sh:order 17 ; + sh:path linkml:examples ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 36 ; sh:path pav:createdOn ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 7 ; - sh:path linkml:instantiates ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 22 ; - sh:path schema1:inLanguage ], + sh:order 25 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:order 30 ; sh:path skos:closeMatch ], - [ sh:description "agent that modified the element" ; + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 15 ; + sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 28 ; + sh:path skos:mappingRelation ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 7 ; + sh:path linkml:instantiates ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 39 ; + sh:path bibo:status ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 37 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 42 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 38 ; - sh:path oslc:modifiedBy ], + sh:order 13 ; + sh:path linkml:deprecated ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 33 ; + sh:path skos:broadMatch ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 27 ; + sh:path skosxl:altLabel ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 6 ; + sh:path linkml:implements ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 31 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:string ; + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 1 ; + sh:path linkml:id_prefixes ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; sh:order 11 ; sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 32 ; - sh:path skos:narrowMatch ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 15 ; - sh:path skos:editorialNote ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 25 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 26 ; - sh:path skos:altLabel ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 40 ; - sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 29 ; - sh:path skos:exactMatch ], + sh:order 20 ; + sh:path linkml:imported_from ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:order 10 ; sh:path skos:definition ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 23 ; - sh:path rdfs:seeAlso ] ; + [ sh:datatype xsd:boolean ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 22 ; + sh:path schema1:inLanguage ] ; sh:targetClass linkml:Element . linkml:EnumExpression a sh:NodeShape ; sh:closed true ; sh:description "An expression that constrains the range of a slot" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "the identifier of an enumeration code set." ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:code_set ], - [ sh:class linkml:EnumDefinition ; - sh:description "An enum definition that is used as the basis to create a new enum" ; - sh:nodeKind sh:IRI ; - sh:order 7 ; - sh:path linkml:inherits ], + sh:property [ sh:class linkml:AnonymousEnumExpression ; + sh:description "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; + sh:nodeKind sh:BlankNode ; + sh:order 6 ; + sh:path linkml:minus ], [ sh:class linkml:AnonymousEnumExpression ; sh:description "An enum expression that yields a list of permissible values that are to be included, after subtracting the minus set" ; sh:nodeKind sh:BlankNode ; sh:order 5 ; sh:path linkml:include ], - [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; - sh:order 10 ; - sh:path linkml:concepts ], - [ sh:class linkml:AnonymousEnumExpression ; - sh:description "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; - sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:minus ], - [ sh:datatype xsd:string ; - sh:description "the version identifier of the enumeration code set" ; + [ sh:description "Defines the specific formula to be used to generate the permissible values." ; + sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:code_set_version ], + sh:order 3 ; + sh:path linkml:pv_formula ], + [ sh:class linkml:EnumDefinition ; + sh:description "An enum definition that is used as the basis to create a new enum" ; + sh:nodeKind sh:IRI ; + sh:order 7 ; + sh:path linkml:inherits ], [ sh:class linkml:MatchQuery ; sh:description "Specifies a match query that is used to calculate the list of permissible values" ; sh:maxCount 1 ; @@ -2026,22 +2205,29 @@ linkml:EnumExpression a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 4 ; sh:path linkml:permissible_values ], - [ sh:description "Defines the specific formula to be used to generate the permissible values." ; - sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:pv_formula ], [ sh:class linkml:ReachabilityQuery ; sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 8 ; sh:path linkml:reachable_from ], + [ sh:datatype xsd:string ; + sh:description "the version identifier of the enumeration code set" ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:code_set_version ], [ sh:datatype xsd:string ; sh:description "the version tag of the enumeration code set" ; sh:maxCount 1 ; sh:order 1 ; - sh:path linkml:code_set_tag ] ; + sh:path linkml:code_set_tag ], + [ sh:description "the identifier of an enumeration code set." ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:code_set ], + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; + sh:order 10 ; + sh:path linkml:concepts ] ; sh:targetClass linkml:EnumExpression . linkml:MatchQuery a sh:NodeShape ; @@ -2059,823 +2245,1022 @@ linkml:MatchQuery a sh:NodeShape ; sh:path linkml:identifier_pattern ] ; sh:targetClass linkml:MatchQuery . -linkml:PermissibleValue a sh:NodeShape ; +linkml:ReachabilityQuery a sh:NodeShape ; sh:closed true ; - sh:description "a permissible value, accompanied by intended text and an optional mapping to a concept URI" ; + sh:description "A query that is used on an enum expression to dynamically obtain a set of permissible values via walking from a set of source nodes to a set of descendants or ancestors over a set of relationship types." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 10 ; - sh:path skos:editorialNote ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 36 ; - sh:path dcterms:subject ], - [ sh:description "agent that created the element" ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "True if the reachability query should only include directly related nodes, if False then include also transitively connected" ; sh:maxCount 1 ; - sh:order 29 ; - sh:path pav:createdBy ], - [ sh:description "agent that modified the element" ; + sh:order 3 ; + sh:path linkml:is_direct ], + [ sh:description "A list of nodes that are used in the reachability query" ; + sh:order 1 ; + sh:path linkml:source_nodes ], + [ sh:datatype xsd:boolean ; + sh:description "True if the direction of the reachability query is reversed and ancestors are retrieved" ; sh:maxCount 1 ; - sh:order 33 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 5 ; + sh:path linkml:traverse_up ], + [ sh:datatype xsd:boolean ; + sh:description "True if the query is reflexive" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path linkml:include_self ], + [ sh:description "An ontology or vocabulary or terminology that is used in a query to obtain a set of permissible values" ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:source_ontology ], + [ sh:description "A list of relationship types (properties) that are used in a reachability query" ; + sh:order 2 ; + sh:path linkml:relationship_types ] ; + sh:targetClass linkml:ReachabilityQuery . + +linkml:EnumBinding a sh:NodeShape ; + sh:closed true ; + sh:description "A binding of a slot or a class to a permissible value from an enumeration." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path dcterms:source ], + [ sh:description "agent that contributed to the element" ; + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 16 ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "A path to a slot that is being bound to a permissible value from an enumeration." ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:binds_value_of ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 19 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 38 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 12 ; + sh:path skos:note ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:order 25 ; - sh:path skos:closeMatch ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 33 ; + sh:path pav:lastUpdatedOn ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path OIO:inSubset ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 24 ; + sh:path skos:mappingRelation ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 5 ; - sh:path linkml:annotations ], - [ sh:description "the value meaning of a permissible value" ; + sh:order 4 ; + sh:path linkml:extensions ], + [ sh:class linkml:EnumDefinition ; + sh:description """defines the type of the object of the slot. Given the following slot definition + S1: + domain: C1 + range: C2 +the declaration + X: + S1: Y + +implicitly asserts Y is an instance of C2 +""" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:range ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 23 ; + sh:path skosxl:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 29 ; + sh:path skos:broadMatch ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 35 ; + sh:path bibo:status ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 26 ; + sh:path skos:closeMatch ], + [ sh:description "Defines the specific formula to be used to generate the permissible values." ; + sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:meaning ], + sh:order 3 ; + sh:path linkml:pv_formula ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 27 ; - sh:path skos:narrowMatch ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:extensions ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path skosxl:altLabel ], + sh:order 6 ; + sh:path skos:definition ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 20 ; + sh:order 21 ; sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 30 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:imported_from ], + sh:order 9 ; + sh:path linkml:deprecated ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 37 ; + sh:path dcterms:subject ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 22 ; + sh:path skos:altLabel ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 11 ; + sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 28 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 31 ; + sh:order 32 ; sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 24 ; - sh:path skos:exactMatch ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 18 ; - sh:path rdfs:seeAlso ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 28 ; - sh:path skos:broadMatch ], + [ sh:description "The level of obligation or recommendation strength for a metadata element" ; + sh:in ( "REQUIRED" "RECOMMENDED" "OPTIONAL" "EXAMPLE" "DISCOURAGED" ) ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:obligation_level ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 35 ; + sh:order 36 ; sh:path sh:order ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path skos:definition ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 11 ; - sh:path skos:note ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 26 ; - sh:path skos:relatedMatch ], + sh:order 20 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path skos:inScheme ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 12 ; + sh:order 13 ; sh:path linkml:examples ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path dcterms:source ], - [ sh:description "agent that contributed to the element" ; - sh:order 30 ; - sh:path dcterms:contributor ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 10 ; + sh:path linkml:todos ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 27 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 5 ; + sh:path linkml:annotations ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:deprecated ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:order 34 ; + sh:path oslc:modifiedBy ] ; + sh:targetClass linkml:EnumBinding . + +linkml:EnumDefinition a sh:NodeShape ; + sh:closed true ; + sh:description "an element whose instances must be drawn from a specified set of permissible values" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; sh:maxCount 1 ; sh:order 14 ; - sh:path skos:inScheme ], + sh:path linkml:mixin ], + [ sh:class linkml:Definition ; + sh:description "A collection of secondary parent classes or slots from which inheritable metaslots are propagated from." ; + sh:nodeKind sh:IRI ; + sh:order 15 ; + sh:path linkml:mixins ], [ sh:datatype xsd:string ; - sh:description "The actual permissible value itself" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path linkml:text ], + sh:order 32 ; + sh:path linkml:deprecated ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 25 ; + sh:path linkml:implements ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 37 ; - sh:path schema1:keywords ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 35 ; + sh:path skos:note ], + [ sh:description "the identifier of an enumeration code set." ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path qudt:unit ], - [ sh:description "status of the element" ; + sh:order 1 ; + sh:path linkml:code_set ], + [ sh:description "Defines the specific formula to be used to generate the permissible values." ; + sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; sh:maxCount 1 ; - sh:order 34 ; - sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 9 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 4 ; + sh:path linkml:pv_formula ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:order 55 ; + sh:path pav:createdOn ], + [ sh:class linkml:EnumDefinition ; + sh:description "An enum definition that is used as the basis to create a new enum" ; sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path OIO:inSubset ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 21 ; - sh:path skos:altLabel ], + sh:order 8 ; + sh:path linkml:inherits ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ] ; - sh:targetClass linkml:PermissibleValue . - -linkml:ReachabilityQuery a sh:NodeShape ; - sh:closed true ; - sh:description "A query that is used on an enum expression to dynamically obtain a set of permissible values via walking from a set of source nodes to a set of descendants or ancestors over a set of relationship types." ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:boolean ; - sh:description "True if the query is reflexive" ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:include_self ], - [ sh:description "An ontology or vocabulary or terminology that is used in a query to obtain a set of permissible values" ; + sh:order 56 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 34 ; + sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 51 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:string ; + sh:description "the version tag of the enumeration code set" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:source_ontology ], - [ sh:description "A list of relationship types (properties) that are used in a reachability query" ; sh:order 2 ; - sh:path linkml:relationship_types ], - [ sh:datatype xsd:boolean ; - sh:description "True if the reachability query should only include directly related nodes, if False then include also transitively connected" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:is_direct ], - [ sh:description "A list of nodes that are used in the reachability query" ; - sh:order 1 ; - sh:path linkml:source_nodes ], - [ sh:datatype xsd:boolean ; - sh:description "True if the direction of the reachability query is reversed and ancestors are retrieved" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path linkml:traverse_up ] ; - sh:targetClass linkml:ReachabilityQuery . - -linkml:EnumDefinition a sh:NodeShape ; - sh:closed true ; - sh:description "an element whose instances must be drawn from a specified set of permissible values" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "status of the element" ; + sh:path linkml:code_set_tag ], + [ sh:description "agent that contributed to the element" ; + sh:order 54 ; + sh:path dcterms:contributor ], + [ sh:class linkml:AnonymousEnumExpression ; + sh:description "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:minus ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 46 ; + sh:path skosxl:altLabel ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 28 ; + sh:path linkml:annotations ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 58 ; - sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 34 ; - sh:path skos:editorialNote ], + sh:order 57 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 47 ; + sh:path skos:mappingRelation ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:order 44 ; sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 36 ; - sh:path linkml:examples ], + [ sh:datatype xsd:boolean ; + sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; + sh:maxCount 1 ; + sh:order 13 ; + sh:path linkml:abstract ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path OIO:inSubset ], [ sh:class linkml:Definition ; - sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; + sh:description "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 16 ; - sh:path linkml:apply_to ], - [ sh:description "Defines the specific formula to be used to generate the permissible values." ; - sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; + sh:order 12 ; + sh:path linkml:is_a ], + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; + sh:order 11 ; + sh:path linkml:concepts ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:pv_formula ], + sh:order 31 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. +We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. +Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects +For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path linkml:string_serialization ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 61 ; + sh:path schema1:keywords ], + [ sh:class linkml:MatchQuery ; + sh:description "Specifies a match query that is used to calculate the list of permissible values" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 10 ; + sh:path linkml:matches ], + [ sh:class linkml:ReachabilityQuery ; + sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:reachable_from ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 33 ; + sh:path linkml:todos ], [ sh:class linkml:PermissibleValue ; sh:description "A list of possible values for a slot range" ; sh:nodeKind sh:IRI ; sh:order 5 ; sh:path linkml:permissible_values ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 43 ; - sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 61 ; - sh:path schema1:keywords ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 60 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 21 ; - sh:path linkml:id_prefixes_are_closed ], + sh:order 39 ; + sh:path linkml:imported_from ], [ sh:datatype xsd:string ; sh:description "the version identifier of the enumeration code set" ; sh:maxCount 1 ; sh:order 3 ; sh:path linkml:code_set_version ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 26 ; - sh:path linkml:instantiates ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 52 ; - sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 41 ; + sh:path schema1:inLanguage ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; sh:order 59 ; sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 48 ; + sh:path skos:exactMatch ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 23 ; + sh:path linkml:local_names ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 33 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 50 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 20 ; + sh:path linkml:id_prefixes ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 60 ; + sh:path dcterms:subject ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 14 ; - sh:path linkml:mixin ], - [ sh:description "agent that contributed to the element" ; - sh:order 54 ; - sh:path dcterms:contributor ], + sh:order 53 ; + sh:path pav:createdBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 49 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:string ; - sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. -We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. -Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects -For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:string_serialization ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:minCount 1 ; + sh:order 19 ; + sh:path rdfs:label ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 52 ; + sh:path skos:broadMatch ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 26 ; + sh:path linkml:instantiates ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; - sh:order 46 ; - sh:path skosxl:altLabel ], + sh:order 30 ; + sh:path linkml:alt_descriptions ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 58 ; + sh:path bibo:status ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 38 ; + sh:path skos:inScheme ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path dcterms:source ], + [ sh:description "URI of the enum that provides a semantic interpretation of the element in a linked data context. The URI may come from any namespace and may be shared between schemas" ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:enum_uri ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path dcterms:conformsTo ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:order 42 ; sh:path rdfs:seeAlso ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + [ sh:class linkml:Definition ; + sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; + sh:nodeKind sh:IRI ; + sh:order 16 ; + sh:path linkml:apply_to ], + [ sh:datatype xsd:boolean ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:maxCount 1 ; + sh:order 21 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 28 ; - sh:path linkml:annotations ], + sh:order 27 ; + sh:path linkml:extensions ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 39 ; - sh:path linkml:imported_from ], + sh:order 29 ; + sh:path skos:definition ], [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 20 ; - sh:path linkml:id_prefixes ], + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 45 ; + sh:path skos:altLabel ], + [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; + sh:order 17 ; + sh:path linkml:values_from ], [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; sh:order 22 ; sh:path linkml:definition_uri ], - [ sh:description "agent that modified the element" ; + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 36 ; + sh:path linkml:examples ], + [ sh:class linkml:AnonymousEnumExpression ; + sh:description "An enum expression that yields a list of permissible values that are to be included, after subtracting the minus set" ; + sh:nodeKind sh:BlankNode ; + sh:order 6 ; + sh:path linkml:include ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 50 ; + sh:path skos:relatedMatch ] ; + sh:targetClass linkml:EnumDefinition . + +linkml:PermissibleValue a sh:NodeShape ; + sh:closed true ; + sh:description "a permissible value, accompanied by intended text and an optional mapping to a concept URI" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 57 ; - sh:path oslc:modifiedBy ], + sh:order 18 ; + sh:path skos:inScheme ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 29 ; + sh:order 1 ; sh:path skos:definition ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 31 ; - sh:path dcterms:title ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 27 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 32 ; + sh:order 12 ; sh:path linkml:deprecated ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 25 ; - sh:path linkml:implements ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; - sh:order 30 ; + sh:order 10 ; sh:path linkml:alt_descriptions ], - [ sh:class linkml:Definition ; - sh:description "A collection of secondary parent classes or slots from which inheritable metaslots are propagated from." ; - sh:nodeKind sh:IRI ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:annotations ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 33 ; + sh:path pav:createdBy ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:order 15 ; - sh:path linkml:mixins ], - [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; + sh:path skos:note ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 8 ; + sh:path linkml:extensions ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 5 ; + sh:path linkml:implements ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 41 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:abstract ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 51 ; - sh:path skos:narrowMatch ], + sh:order 35 ; + sh:path pav:createdOn ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 41 ; + sh:order 21 ; sh:path schema1:inLanguage ], - [ sh:class linkml:AnonymousEnumExpression ; - sh:description "An enum expression that yields a list of permissible values that are to be included, after subtracting the minus set" ; + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 23 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:include ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 49 ; - sh:path skos:closeMatch ], - [ sh:class linkml:Definition ; + sh:order 3 ; + sh:path qudt:unit ], + [ sh:class linkml:PermissibleValue ; sh:description "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 12 ; + sh:order 6 ; sh:path linkml:is_a ], - [ sh:description "URI of the enum that provides a semantic interpretation of the element in a linked data context. The URI may come from any namespace and may be shared between schemas" ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:enum_uri ], - [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; - sh:order 11 ; - sh:path linkml:concepts ], - [ sh:class linkml:AnonymousEnumExpression ; - sh:description "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:minus ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 27 ; - sh:path linkml:extensions ], [ sh:datatype xsd:string ; - sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 13 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:order 19 ; - sh:path rdfs:label ], - [ sh:class linkml:EnumDefinition ; - sh:description "An enum definition that is used as the basis to create a new enum" ; - sh:nodeKind sh:IRI ; - sh:order 8 ; - sh:path linkml:inherits ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 56 ; - sh:path pav:lastUpdatedOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 48 ; - sh:path skos:exactMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 47 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 45 ; - sh:path skos:altLabel ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + sh:order 39 ; + sh:path sh:order ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 24 ; - sh:path dcterms:conformsTo ], - [ sh:description "the identifier of an enumeration code set." ; + sh:order 37 ; + sh:path oslc:modifiedBy ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:code_set ], - [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; - sh:order 17 ; - sh:path linkml:values_from ], + sh:order 38 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "the version tag of the enumeration code set" ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:code_set_tag ], + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 14 ; + sh:path skos:editorialNote ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 16 ; + sh:path linkml:examples ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 30 ; + sh:path skos:relatedMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 32 ; + sh:path skos:broadMatch ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 40 ; + sh:order 20 ; sh:path dcterms:source ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 35 ; - sh:path skos:note ], + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 25 ; + sh:path skos:altLabel ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; - sh:order 37 ; + sh:order 17 ; sh:path OIO:inSubset ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 31 ; + sh:path skos:narrowMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 28 ; + sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 29 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "The actual permissible value itself" ; sh:maxCount 1 ; - sh:order 38 ; - sh:path skos:inScheme ], + sh:minCount 1 ; + sh:order 0 ; + sh:path linkml:text ], [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:order 55 ; - sh:path pav:createdOn ], - [ sh:class linkml:MatchQuery ; - sh:description "Specifies a match query that is used to calculate the list of permissible values" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:matches ], - [ sh:class linkml:ReachabilityQuery ; - sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:reachable_from ], - [ sh:description "agent that created the element" ; + sh:order 36 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 53 ; - sh:path pav:createdBy ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNode ; - sh:order 23 ; - sh:path linkml:local_names ] ; - sh:targetClass linkml:EnumDefinition . - -linkml:TypeDefinition a sh:NodeShape ; - sh:closed true ; - sh:description "an element that whose instances are atomic scalar values that can be mapped to primitive types" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 60 ; - sh:path schema1:keywords ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 26 ; - sh:path linkml:extensions ], + sh:order 11 ; + sh:path dcterms:title ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 4 ; + sh:path linkml:instantiates ], + [ sh:description "agent that contributed to the element" ; + sh:order 34 ; + sh:path dcterms:contributor ], + [ sh:class linkml:PermissibleValue ; + sh:description "A collection of secondary parent classes or slots from which inheritable metaslots are propagated from." ; + sh:nodeKind sh:IRI ; + sh:order 7 ; + sh:path linkml:mixins ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 40 ; + sh:path dcterms:subject ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 45 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 10 ; - sh:path linkml:equals_string_in ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 52 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:order 23 ; - sh:path dcterms:conformsTo ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:nodeKind sh:BlankNode ; + sh:order 26 ; + sh:path skosxl:altLabel ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 22 ; + sh:path rdfs:seeAlso ], + [ sh:description "the value meaning of a permissible value" ; sh:maxCount 1 ; - sh:order 40 ; - sh:path schema1:inLanguage ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 2 ; + sh:path linkml:meaning ] ; + sh:targetClass linkml:PermissibleValue . + +linkml:TypeDefinition a sh:NodeShape ; + sh:closed true ; + sh:description "an element that whose instances are atomic scalar values that can be mapped to primitive types" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:order 39 ; sh:path dcterms:source ], - [ sh:class linkml:TypeDefinition ; - sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; - sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:union_of ], [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 34 ; + sh:path skos:note ], + [ sh:datatype xsd:integer ; + sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path linkml:pattern ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 50 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:order 11 ; + sh:path linkml:equals_number ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 41 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 31 ; - sh:path linkml:deprecated ], + sh:order 37 ; + sh:path skos:inScheme ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 24 ; + sh:path linkml:implements ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 17 ; + sh:path linkml:all_of ], [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:order 56 ; sh:path oslc:modifiedBy ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path linkml:local_names ], - [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 49 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 21 ; - sh:path linkml:definition_uri ], + sh:order 30 ; + sh:path dcterms:title ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 52 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; sh:order 8 ; sh:path linkml:implicit_prefix ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 47 ; - sh:path skos:exactMatch ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 24 ; - sh:path linkml:implements ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 36 ; + sh:path OIO:inSubset ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 35 ; + sh:path linkml:examples ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 30 ; - sh:path dcterms:title ], + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 19 ; + sh:path linkml:id_prefixes ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 60 ; + sh:path schema1:keywords ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:order 32 ; sh:path linkml:todos ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + [ sh:datatype xsd:string ; + sh:description "python base type in the LinkML runtime that implements this type definition" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 12 ; - sh:path linkml:minimum_value ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 49 ; - sh:path skos:relatedMatch ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + sh:order 1 ; + sh:path linkml:base ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; + sh:order 40 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:structured_pattern ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 14 ; - sh:path linkml:none_of ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 36 ; - sh:path OIO:inSubset ], + sh:order 22 ; + sh:path linkml:local_names ], [ sh:datatype xsd:integer ; - sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 11 ; - sh:path linkml:equals_number ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 59 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:order 58 ; + sh:path sh:order ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 28 ; - sh:path skos:definition ], + sh:order 42 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 46 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:equals_string ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 44 ; - sh:path skos:altLabel ], + sh:order 5 ; + sh:path linkml:pattern ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 16 ; sh:path linkml:any_of ], - [ sh:datatype xsd:string ; - sh:description "the name of the python object that implements this type definition" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:repr ], [ sh:datatype xsd:string ; sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 18 ; sh:path rdfs:label ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 48 ; - sh:path skos:closeMatch ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 43 ; - sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if all of the expressions hold" ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 17 ; - sh:path linkml:all_of ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:order 14 ; + sh:path linkml:none_of ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 45 ; + sh:path skosxl:altLabel ], + [ sh:description "The uri that defines the possible values for the type definition" ; sh:maxCount 1 ; - sh:order 37 ; - sh:path skos:inScheme ], + sh:order 2 ; + sh:path linkml:type_uri ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 15 ; sh:path linkml:exactly_one_of ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 25 ; - sh:path linkml:instantiates ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 38 ; - sh:path linkml:imported_from ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 29 ; - sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 50 ; + sh:path skos:narrowMatch ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; sh:order 27 ; sh:path linkml:annotations ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 35 ; - sh:path linkml:examples ], - [ sh:description "The uri that defines the possible values for the type definition" ; + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:type_uri ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 31 ; + sh:path linkml:deprecated ], + [ sh:datatype xsd:string ; + sh:description "the name of the python object that implements this type definition" ; sh:maxCount 1 ; - sh:order 58 ; - sh:path sh:order ], + sh:order 3 ; + sh:path linkml:repr ], + [ sh:class linkml:PatternExpression ; + sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 6 ; + sh:path linkml:structured_pattern ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 34 ; - sh:path skos:note ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 46 ; - sh:path skos:mappingRelation ], + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path linkml:equals_string ], + [ sh:class linkml:TypeDefinition ; + sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path linkml:union_of ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:order 23 ; + sh:path dcterms:conformsTo ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 28 ; + sh:path skos:definition ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 29 ; + sh:path linkml:alt_descriptions ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:order 57 ; sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "python base type in the LinkML runtime that implements this type definition" ; + [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:base ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:order 21 ; + sh:path linkml:definition_uri ], + [ sh:class linkml:TypeDefinition ; + sh:description "A parent type from which type properties are inherited" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 13 ; - sh:path linkml:maximum_value ], + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:typeof ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 48 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; + sh:order 10 ; + sh:path linkml:equals_string_in ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 54 ; sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 51 ; - sh:path skos:broadMatch ], [ sh:datatype xsd:boolean ; sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; sh:maxCount 1 ; sh:order 20 ; sh:path linkml:id_prefixes_are_closed ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; + [ sh:description "agent that contributed to the element" ; + sh:order 53 ; + sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 47 ; + sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 51 ; + sh:path skos:broadMatch ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path qudt:unit ], + sh:order 12 ; + sh:path linkml:minimum_value ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 38 ; + sh:path linkml:imported_from ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 25 ; + sh:path linkml:instantiates ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:order 33 ; sh:path skos:editorialNote ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 42 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 19 ; - sh:path linkml:id_prefixes ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 41 ; - sh:path rdfs:seeAlso ], - [ sh:class linkml:TypeDefinition ; - sh:description "A parent type from which type properties are inherited" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:typeof ], - [ sh:description "agent that contributed to the element" ; - sh:order 53 ; - sh:path dcterms:contributor ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 55 ; - sh:path pav:lastUpdatedOn ] ; + sh:path pav:lastUpdatedOn ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 26 ; + sh:path linkml:extensions ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 13 ; + sh:path linkml:maximum_value ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 44 ; + sh:path skos:altLabel ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 59 ; + sh:path dcterms:subject ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path qudt:unit ] ; sh:targetClass linkml:TypeDefinition . linkml:AnonymousEnumExpression a sh:NodeShape ; sh:closed true ; sh:description "An enum_expression that is not named" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the version identifier of the enumeration code set" ; + sh:property [ sh:class linkml:MatchQuery ; + sh:description "Specifies a match query that is used to calculate the list of permissible values" ; sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:code_set_version ], + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:matches ], + [ sh:description "the identifier of an enumeration code set." ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:code_set ], + [ sh:class linkml:EnumDefinition ; + sh:description "An enum definition that is used as the basis to create a new enum" ; + sh:nodeKind sh:IRI ; + sh:order 7 ; + sh:path linkml:inherits ], [ sh:description "Defines the specific formula to be used to generate the permissible values." ; sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; sh:maxCount 1 ; sh:order 3 ; sh:path linkml:pv_formula ], - [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; - sh:order 10 ; - sh:path linkml:concepts ], - [ sh:class linkml:ReachabilityQuery ; - sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:reachable_from ], - [ sh:class linkml:PermissibleValue ; - sh:description "A list of possible values for a slot range" ; - sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:permissible_values ], [ sh:class linkml:AnonymousEnumExpression ; sh:description "An enum expression that yields a list of permissible values that are to be included, after subtracting the minus set" ; sh:nodeKind sh:BlankNode ; sh:order 5 ; sh:path linkml:include ], - [ sh:description "the identifier of an enumeration code set." ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:code_set ], [ sh:datatype xsd:string ; - sh:description "the version tag of the enumeration code set" ; + sh:description "the version identifier of the enumeration code set" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:code_set_tag ], + sh:order 2 ; + sh:path linkml:code_set_version ], [ sh:class linkml:AnonymousEnumExpression ; sh:description "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; sh:nodeKind sh:BlankNode ; sh:order 6 ; sh:path linkml:minus ], - [ sh:class linkml:EnumDefinition ; - sh:description "An enum definition that is used as the basis to create a new enum" ; - sh:nodeKind sh:IRI ; - sh:order 7 ; - sh:path linkml:inherits ], - [ sh:class linkml:MatchQuery ; - sh:description "Specifies a match query that is used to calculate the list of permissible values" ; + [ sh:datatype xsd:string ; + sh:description "the version tag of the enumeration code set" ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:code_set_tag ], + [ sh:class linkml:ReachabilityQuery ; + sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:matches ] ; + sh:order 8 ; + sh:path linkml:reachable_from ], + [ sh:class linkml:PermissibleValue ; + sh:description "A list of possible values for a slot range" ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path linkml:permissible_values ], + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; + sh:order 10 ; + sh:path linkml:concepts ] ; sh:targetClass linkml:AnonymousEnumExpression . linkml:PathExpression a sh:NodeShape ; @@ -2883,361 +3268,361 @@ linkml:PathExpression a sh:NodeShape ; sh:description "An expression that describes an abstract path from an object to another through a sequence of slot lookups" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 26 ; - sh:path skos:altLabel ], - [ sh:class linkml:PathExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path linkml:all_of ], - [ sh:class linkml:PathExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:exactly_one_of ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 22 ; - sh:path schema1:inLanguage ], - [ sh:class linkml:SlotDefinition ; - sh:description "the slot to traverse" ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:traverse ], - [ sh:description "agent that contributed to the element" ; - sh:order 35 ; - sh:path dcterms:contributor ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 17 ; - sh:path linkml:examples ], + sh:order 10 ; + sh:path skos:definition ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 23 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:order 42 ; sh:path schema1:keywords ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; - sh:maxCount 1 ; - sh:order 40 ; - sh:path sh:order ], [ sh:datatype xsd:string ; sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; sh:order 12 ; sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 33 ; - sh:path skos:broadMatch ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:annotations ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path pav:createdBy ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 17 ; + sh:path linkml:examples ], + [ sh:class linkml:PathExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path linkml:exactly_one_of ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 16 ; + sh:path skos:note ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 37 ; sh:path pav:lastUpdatedOn ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 25 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 30 ; - sh:path skos:closeMatch ], + sh:order 19 ; + sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 22 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:PathExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:any_of ], + [ sh:class linkml:PathExpression ; + sh:description "in a sequential list, this indicates the next member" ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:imported_from ], + sh:nodeKind sh:BlankNode ; + sh:order 0 ; + sh:path linkml:followed_by ], [ sh:datatype xsd:boolean ; sh:description "true if the slot is to be inversed" ; sh:maxCount 1 ; sh:order 5 ; sh:path linkml:reversed ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 14 ; - sh:path linkml:todos ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 33 ; + sh:path skos:broadMatch ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 8 ; + sh:path linkml:extensions ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:order 39 ; sh:path bibo:status ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:range_expression ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 18 ; + sh:path OIO:inSubset ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 10 ; - sh:path skos:definition ], + sh:order 20 ; + sh:path linkml:imported_from ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:order 29 ; sh:path skos:exactMatch ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 16 ; - sh:path skos:note ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 15 ; + sh:path skos:editorialNote ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 36 ; - sh:path pav:createdOn ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:order 25 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:class linkml:PathExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:extensions ], + sh:order 3 ; + sh:path linkml:all_of ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:order 13 ; sh:path linkml:deprecated ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 30 ; + sh:path skos:closeMatch ], + [ sh:class linkml:SlotDefinition ; + sh:description "the slot to traverse" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path OIO:inSubset ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 31 ; - sh:path skos:relatedMatch ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 6 ; + sh:path linkml:traverse ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:description "agent that created the element" ; + sh:order 38 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 28 ; + sh:path skos:mappingRelation ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 34 ; - sh:path pav:createdBy ], + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path sh:order ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:order 32 ; sh:path skos:narrowMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 31 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 14 ; + sh:path linkml:todos ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 41 ; + sh:path dcterms:subject ], [ sh:class linkml:PathExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 1 ; sh:path linkml:none_of ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 27 ; - sh:path skosxl:altLabel ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; sh:order 11 ; sh:path linkml:alt_descriptions ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:annotations ], - [ sh:class linkml:PathExpression ; - sh:description "holds if at least one of the expressions hold" ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:any_of ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:order 27 ; + sh:path skosxl:altLabel ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 26 ; + sh:path skos:altLabel ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 19 ; - sh:path skos:inScheme ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 41 ; - sh:path dcterms:subject ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:order 21 ; + sh:path dcterms:source ], + [ sh:description "agent that contributed to the element" ; + sh:order 35 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; + sh:order 36 ; + sh:path pav:createdOn ] ; + sh:targetClass linkml:PathExpression . + +linkml:PatternExpression a sh:NodeShape ; + sh:closed true ; + sh:description "a regular expression pattern used to evaluate conformance of a string" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:range_expression ], + sh:order 12 ; + sh:path linkml:examples ], [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 24 ; + sh:order 19 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 28 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that modified the element" ; + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 9 ; + sh:path linkml:todos ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNode ; + sh:order 22 ; + sh:path skosxl:altLabel ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 38 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 23 ; - sh:path rdfs:seeAlso ], + sh:order 16 ; + sh:path dcterms:source ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 15 ; + sh:order 10 ; sh:path skos:editorialNote ], - [ sh:class linkml:PathExpression ; - sh:description "in a sequential list, this indicates the next member" ; + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 0 ; - sh:path linkml:followed_by ] ; - sh:targetClass linkml:PathExpression . - -linkml:PatternExpression a sh:NodeShape ; - sh:closed true ; - sh:description "a regular expression pattern used to evaluate conformance of a string" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 18 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:boolean ; - sh:description "if true then the pattern is first string interpolated" ; + sh:order 5 ; + sh:path skos:definition ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 11 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:interpolated ], + sh:order 7 ; + sh:path dcterms:title ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:order 31 ; sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 12 ; - sh:path linkml:examples ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string. May be interpolated." ; sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:deprecated ], + sh:order 0 ; + sh:path linkml:syntax ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 27 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path dcterms:title ], + sh:order 17 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 18 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:boolean ; + sh:description "if true then the pattern is first string interpolated" ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:interpolated ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:imported_from ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 24 ; + sh:path skos:exactMatch ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; sh:order 6 ; sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 25 ; - sh:path skos:closeMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 30 ; - sh:path dcterms:contributor ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 21 ; - sh:path skos:altLabel ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path skosxl:altLabel ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 36 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 10 ; - sh:path skos:editorialNote ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path bibo:status ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 13 ; sh:path OIO:inSubset ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "A related resource from which the element is derived." ; + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 16 ; - sh:path dcterms:source ], + sh:order 35 ; + sh:path sh:order ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 3 ; sh:path linkml:extensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string. May be interpolated." ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:syntax ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 29 ; - sh:path pav:createdBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 24 ; - sh:path skos:exactMatch ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 37 ; - sh:path schema1:keywords ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 28 ; + sh:path skos:broadMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ sh:description "agent that contributed to the element" ; + sh:order 30 ; + sh:path dcterms:contributor ], [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:order 33 ; sh:path oslc:modifiedBy ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path skos:inScheme ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 32 ; + sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:boolean ; sh:description "if not true then the pattern must match the whole string, as if enclosed in ^...$" ; sh:maxCount 1 ; sh:order 2 ; sh:path linkml:partial_match ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 23 ; + sh:path skos:mappingRelation ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 29 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 9 ; - sh:path linkml:todos ], + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 21 ; + sh:path skos:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 26 ; + sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path skos:definition ], + sh:order 8 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 27 ; - sh:path skos:narrowMatch ], + sh:description "Keywords or tags used to describe the element" ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 36 ; + sh:path dcterms:subject ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; sh:order 4 ; - sh:path linkml:annotations ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 14 ; - sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 11 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; - sh:maxCount 1 ; - sh:order 35 ; - sh:path sh:order ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 26 ; - sh:path skos:relatedMatch ] ; + sh:path linkml:annotations ] ; sh:targetClass linkml:PatternExpression . qudt:Unit a sh:NodeShape ; @@ -3245,34 +3630,34 @@ qudt:Unit a sh:NodeShape ; sh:description "A unit of measure, or unit, is a particular quantity value that has been chosen as a scale for measuring other quantities the same kind (more generally of equivalent dimension)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "An abbreviation for a unit is a short ASCII string that is used in place of the full name for the unit in contexts where non-ASCII characters would be problematic, or where using the abbreviation will enhance readability. When a power of a base unit needs to be expressed, such as squares this can be done using abbreviations rather than symbols (source: qudt)" ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path qudt:abbreviation ], - [ sh:datatype xsd:string ; sh:description "the spelled out name of the unit, for example, meter" ; sh:maxCount 1 ; sh:order 2 ; sh:path rdfs:label ], + [ sh:datatype xsd:string ; + sh:description "name of the unit encoded as a symbol" ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path qudt:symbol ], [ sh:datatype xsd:string ; sh:description "Expression for deriving this unit from other units" ; sh:maxCount 1 ; sh:order 5 ; sh:path linkml:derivation ], + [ sh:datatype xsd:string ; + sh:description "associates a QUDT unit with its UCUM code (case-sensitive)." ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path qudt:ucumCode ], [ sh:description "Concept in a vocabulary or ontology that denotes the kind of quantity being measured, e.g. length" ; sh:maxCount 1 ; sh:order 6 ; sh:path qudt:hasQuantityKind ], [ sh:datatype xsd:string ; - sh:description "name of the unit encoded as a symbol" ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path qudt:symbol ], - [ sh:datatype xsd:string ; - sh:description "associates a QUDT unit with its UCUM code (case-sensitive)." ; + sh:description "An abbreviation for a unit is a short ASCII string that is used in place of the full name for the unit in contexts where non-ASCII characters would be problematic, or where using the abbreviation will enhance readability. When a power of a base unit needs to be expressed, such as squares this can be done using abbreviations rather than symbols (source: qudt)" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path qudt:ucumCode ], + sh:order 1 ; + sh:path qudt:abbreviation ], [ sh:description "Used to link a unit to equivalent concepts in ontologies such as UO, SNOMED, OEM, OBOE, NCIT" ; sh:order 3 ; sh:path skos:exactMatch ], @@ -3286,167 +3671,172 @@ linkml:ClassDefinition a sh:NodeShape ; sh:closed true ; sh:description "an element whose instances are complex objects that may have slot-value assignments" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 58 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:boolean ; - sh:description "if true then induced/mangled slot names are not created for class_usage and attributes" ; + sh:property [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 11 ; - sh:path linkml:slot_names_unique ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:order 49 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 43 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. +We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. +Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects +For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:maxCount 1 ; + sh:order 26 ; + sh:path linkml:string_serialization ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 56 ; + sh:path skos:exactMatch ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 54 ; - sh:path skosxl:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 55 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that created the element" ; + sh:order 18 ; + sh:path linkml:all_of ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 33 ; + sh:path linkml:implements ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 61 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:order 47 ; + sh:path linkml:imported_from ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:order 29 ; - sh:path linkml:id_prefixes_are_closed ], - [ sh:class linkml:SlotDefinition ; - sh:description "Inline definition of slots" ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:attributes ], + sh:order 48 ; + sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 53 ; + sh:path skos:altLabel ], [ sh:datatype xsd:boolean ; sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; sh:maxCount 1 ; sh:order 22 ; sh:path linkml:mixin ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 18 ; - sh:path linkml:all_of ], [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:order 32 ; - sh:path dcterms:conformsTo ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; - sh:order 63 ; - sh:path pav:createdOn ], - [ sh:class linkml:ClassDefinition ; - sh:description "A collection of secondary parent mixin classes from which inheritable metaslots are propagated" ; - sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path linkml:mixins ], - [ sh:class linkml:SlotDefinition ; - sh:description "the refinement of a slot in the context of the containing class definition." ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:slot_usage ], + sh:minCount 1 ; + sh:order 27 ; + sh:path rdfs:label ], [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; + sh:description "Indicates that this is the Container class which forms the root of the serialized document structure in tree serializations" ; sh:maxCount 1 ; - sh:order 21 ; - sh:path linkml:abstract ], + sh:order 7 ; + sh:path linkml:tree_root ], + [ sh:class linkml:ClassRule ; + sh:description "the collection of rules that apply to all members of this class" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path sh:rule ], [ sh:datatype xsd:string ; - sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. -We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. -Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects -For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 26 ; - sh:path linkml:string_serialization ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 39 ; + sh:path dcterms:title ], + [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; - sh:order 67 ; - sh:path sh:order ], + sh:order 30 ; + sh:path linkml:definition_uri ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 16 ; sh:path linkml:exactly_one_of ], [ sh:class linkml:ClassDefinition ; - sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; + sh:description "Two classes are disjoint if they have no instances in common, two slots are disjoint if they can never hold between the same two instances" ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:apply_to ], + sh:order 13 ; + sh:path linkml:disjoint_with ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 63 ; + sh:path pav:createdOn ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 38 ; + sh:path linkml:alt_descriptions ], + [ sh:class linkml:UniqueKey ; + sh:description "A collection of named unique keys for this class. Unique keys may be singular or compound." ; + sh:nodeKind sh:BlankNode ; + sh:order 8 ; + sh:path linkml:unique_keys ], [ sh:datatype xsd:boolean ; - sh:description "Indicates that this is the Container class which forms the root of the serialized document structure in tree serializations" ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; sh:maxCount 1 ; - sh:order 7 ; - sh:path linkml:tree_root ], + sh:order 29 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 45 ; + sh:path OIO:inSubset ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "The collection of classification rules that apply to all members of this class. Classification rules allow for automatically assigning the instantiated type of an instance." ; + sh:nodeKind sh:BlankNode ; + sh:order 10 ; + sh:path linkml:classification_rules ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 69 ; - sh:path schema1:keywords ], + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 37 ; + sh:path skos:definition ], + [ sh:description "URI of the class that provides a semantic interpretation of the element in a linked data context. The URI may come from any namespace and may be shared between schemas" ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path linkml:class_uri ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 31 ; + sh:path linkml:local_names ], [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:order 65 ; sh:path oslc:modifiedBy ], - [ sh:class linkml:ClassDefinition ; - sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; - sh:nodeKind sh:IRI ; - sh:order 5 ; - sh:path linkml:union_of ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + [ sh:datatype xsd:boolean ; + sh:description "if true then induced/mangled slot names are not created for class_usage and attributes" ; sh:maxCount 1 ; - sh:order 46 ; - sh:path skos:inScheme ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 38 ; - sh:path linkml:alt_descriptions ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 33 ; - sh:path linkml:implements ], - [ sh:class linkml:SlotDefinition ; - sh:description "collection of slot names that are applicable to a class" ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:slots ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 11 ; + sh:path linkml:slot_names_unique ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 64 ; - sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 42 ; - sh:path skos:editorialNote ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 67 ; + sh:path sh:order ], + [ sh:datatype xsd:boolean ; + sh:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; sh:maxCount 1 ; - sh:order 48 ; - sh:path dcterms:source ], + sh:order 14 ; + sh:path linkml:children_are_mutually_disjoint ], [ sh:description "Controlled terms used to categorize an element." ; sh:order 68 ; sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 39 ; - sh:path dcterms:title ], - [ sh:class linkml:ClassRule ; - sh:description "the collection of rules that apply to all members of this class" ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path sh:rule ], - [ sh:class linkml:UniqueKey ; - sh:description "A collection of named unique keys for this class. Unique keys may be singular or compound." ; - sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:unique_keys ], - [ sh:datatype xsd:string ; - sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; + [ sh:class linkml:ClassDefinition ; + sh:description "A collection of secondary parent mixin classes from which inheritable metaslots are propagated" ; + sh:nodeKind sh:IRI ; + sh:order 23 ; + sh:path linkml:mixins ], + [ sh:class linkml:ClassDefinition ; + sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; + sh:nodeKind sh:IRI ; + sh:order 24 ; + sh:path linkml:apply_to ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 27 ; - sh:path rdfs:label ], + sh:order 52 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 58 ; + sh:path skos:relatedMatch ], + [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; + sh:order 25 ; + sh:path linkml:values_from ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; @@ -3456,147 +3846,142 @@ For example, a Measurement class may have 3 fields: unit, value, and string_valu sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; sh:order 28 ; sh:path linkml:id_prefixes ], + [ sh:class linkml:SlotDefinition ; + sh:description "The combination of is a plus defining slots form a genus-differentia definition, or the set of necessary and sufficient conditions that can be transformed into an OWL equivalence axiom" ; + sh:nodeKind sh:IRI ; + sh:order 6 ; + sh:path linkml:defining_slots ], + [ sh:description "agent that contributed to the element" ; + sh:order 62 ; + sh:path dcterms:contributor ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 34 ; + sh:path linkml:instantiates ], [ sh:datatype xsd:boolean ; - sh:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; + sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; sh:maxCount 1 ; - sh:order 14 ; - sh:path linkml:children_are_mutually_disjoint ], - [ sh:class linkml:ClassDefinition ; - sh:description "Two classes are disjoint if they have no instances in common, two slots are disjoint if they can never hold between the same two instances" ; - sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path linkml:disjoint_with ], + sh:order 21 ; + sh:path linkml:abstract ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 35 ; sh:path linkml:extensions ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 43 ; - sh:path skos:note ], - [ sh:description "agent that contributed to the element" ; - sh:order 62 ; - sh:path dcterms:contributor ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 59 ; + sh:path skos:narrowMatch ], + [ sh:class linkml:SlotDefinition ; + sh:description "the refinement of a slot in the context of the containing class definition." ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:slot_usage ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 49 ; - sh:path schema1:inLanguage ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:order 66 ; + sh:path bibo:status ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 55 ; + sh:path skos:mappingRelation ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 36 ; - sh:path linkml:annotations ], - [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + sh:order 54 ; + sh:path skosxl:altLabel ], + [ sh:class linkml:ClassDefinition ; + sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; + sh:nodeKind sh:IRI ; + sh:order 5 ; + sh:path linkml:union_of ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 44 ; + sh:path linkml:examples ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 57 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:order 30 ; - sh:path linkml:definition_uri ], - [ sh:description "DEPRECATED -- rdfs:subClassOf to be emitted in OWL generation" ; + sh:order 64 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:boolean ; + sh:description "true if this class represents a relationship rather than an entity" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:subclass_of ], - [ sh:description "URI of the class that provides a semantic interpretation of the element in a linked data context. The URI may come from any namespace and may be shared between schemas" ; + sh:order 12 ; + sh:path linkml:represents_relationship ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 61 ; + sh:path pav:createdBy ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path linkml:deprecated ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 50 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:class_uri ], + sh:order 32 ; + sh:path dcterms:conformsTo ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 69 ; + sh:path schema1:keywords ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:order 60 ; sh:path skos:broadMatch ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 47 ; - sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 57 ; - sh:path skos:closeMatch ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:description "DEPRECATED -- rdfs:subClassOf to be emitted in OWL generation" ; sh:maxCount 1 ; - sh:order 52 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 4 ; + sh:path linkml:subclass_of ], [ sh:class linkml:ClassDefinition ; sh:description "A primary parent class from which inheritable metaslots are propagated" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 20 ; sh:path linkml:is_a ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 44 ; - sh:path linkml:examples ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 50 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 40 ; - sh:path linkml:deprecated ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + [ sh:class linkml:SlotDefinition ; + sh:description "expresses constraints on a group of slots for a class expression" ; sh:nodeKind sh:IRI ; - sh:order 45 ; - sh:path OIO:inSubset ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 56 ; - sh:path skos:exactMatch ], + sh:order 19 ; + sh:path linkml:slot_conditions ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 51 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 15 ; sh:path linkml:any_of ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 37 ; - sh:path skos:definition ], [ sh:class linkml:SlotDefinition ; - sh:description "expresses constraints on a group of slots for a class expression" ; + sh:description "Inline definition of slots" ; sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path linkml:slot_conditions ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "The collection of classification rules that apply to all members of this class. Classification rules allow for automatically assigning the instantiated type of an instance." ; - sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:classification_rules ], + sh:order 2 ; + sh:path linkml:attributes ], [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 53 ; - sh:path skos:altLabel ], - [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; - sh:order 25 ; - sh:path linkml:values_from ], + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 42 ; + sh:path skos:editorialNote ], [ sh:class linkml:SlotDefinition ; - sh:description "The combination of is a plus defining slots form a genus-differentia definition, or the set of necessary and sufficient conditions that can be transformed into an OWL equivalence axiom" ; + sh:description "collection of slot names that are applicable to a class" ; sh:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:defining_slots ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 51 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:boolean ; - sh:description "true if this class represents a relationship rather than an entity" ; + sh:order 0 ; + sh:path linkml:slots ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 12 ; - sh:path linkml:represents_relationship ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 59 ; - sh:path skos:narrowMatch ], - [ sh:class linkml:LocalName ; + sh:order 46 ; + sh:path skos:inScheme ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 31 ; - sh:path linkml:local_names ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 34 ; - sh:path linkml:instantiates ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 66 ; - sh:path bibo:status ], + sh:order 36 ; + sh:path linkml:annotations ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:order 41 ; @@ -3607,203 +3992,161 @@ linkml:Definition a sh:NodeShape ; sh:closed false ; sh:description "abstract base class for core metaclasses" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:Definition ; - sh:description "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; + sh:property [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 13 ; + sh:path linkml:implements ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:is_a ], - [ sh:class linkml:Definition ; - sh:description "A collection of secondary parent classes or slots from which inheritable metaslots are propagated from." ; - sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path linkml:mixins ], + sh:order 28 ; + sh:path dcterms:source ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 30 ; + sh:path rdfs:seeAlso ], [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:order 45 ; sh:path oslc:modifiedBy ], - [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 10 ; - sh:path linkml:definition_uri ], + sh:order 20 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 23 ; - sh:path skos:note ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:id_prefixes_are_closed ], + sh:minCount 1 ; + sh:order 7 ; + sh:path rdfs:label ], [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 33 ; - sh:path skos:altLabel ], + sh:description "Outstanding issues that needs resolution" ; + sh:order 21 ; + sh:path linkml:todos ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 22 ; - sh:path skos:editorialNote ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 40 ; - sh:path skos:broadMatch ], + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path skos:definition ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 16 ; + sh:path linkml:annotations ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; sh:order 24 ; sh:path linkml:examples ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 47 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 35 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:string ; sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; sh:order 8 ; sh:path linkml:id_prefixes ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 41 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 21 ; - sh:path linkml:todos ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:order 43 ; - sh:path pav:createdOn ], - [ sh:class linkml:LocalName ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 11 ; - sh:path linkml:local_names ], + sh:order 34 ; + sh:path skosxl:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 39 ; + sh:path skos:narrowMatch ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 18 ; + sh:path linkml:alt_descriptions ], + [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + sh:maxCount 1 ; + sh:order 10 ; + sh:path linkml:definition_uri ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 49 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; - sh:order 47 ; - sh:path sh:order ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 48 ; - sh:path dcterms:subject ], + sh:order 12 ; + sh:path dcterms:conformsTo ], [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:abstract ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; sh:maxCount 1 ; - sh:order 19 ; - sh:path dcterms:title ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 16 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 35 ; - sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 36 ; - sh:path skos:exactMatch ], + sh:order 9 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 14 ; + sh:path linkml:instantiates ], [ sh:datatype xsd:anyURI ; sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:order 26 ; sh:path skos:inScheme ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 34 ; - sh:path skosxl:altLabel ], + [ sh:class linkml:Definition ; + sh:description "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:is_a ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:order 27 ; sh:path linkml:imported_from ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 39 ; - sh:path skos:narrowMatch ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 13 ; - sh:path linkml:implements ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 14 ; - sh:path linkml:instantiates ], [ sh:description "agent that contributed to the element" ; sh:order 42 ; sh:path dcterms:contributor ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 44 ; - sh:path pav:lastUpdatedOn ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 46 ; - sh:path bibo:status ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 31 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:Definition ; + sh:description "A collection of secondary parent classes or slots from which inheritable metaslots are propagated from." ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path linkml:mixins ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 38 ; + sh:path skos:relatedMatch ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 25 ; sh:path OIO:inSubset ], - [ sh:class linkml:Definition ; - sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; - sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:apply_to ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path skos:definition ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 18 ; - sh:path linkml:alt_descriptions ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:order 29 ; sh:path schema1:inLanguage ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 15 ; - sh:path linkml:extensions ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 32 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 48 ; + sh:path dcterms:subject ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 23 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 49 ; + sh:path schema1:keywords ], + [ sh:class linkml:Definition ; + sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path linkml:apply_to ], [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; sh:order 5 ; sh:path linkml:values_from ], [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:order 12 ; - sh:path dcterms:conformsTo ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 37 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 38 ; - sh:path skos:relatedMatch ], + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 33 ; + sh:path skos:altLabel ], [ sh:datatype xsd:string ; - sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 7 ; - sh:path rdfs:label ], - [ sh:description "A related resource from which the element is derived." ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 28 ; - sh:path dcterms:source ], + sh:order 19 ; + sh:path dcterms:title ], [ sh:datatype xsd:string ; sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. @@ -3812,18 +4155,60 @@ For example, a Measurement class may have 3 fields: unit, value, and string_valu sh:maxCount 1 ; sh:order 6 ; sh:path linkml:string_serialization ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 30 ; - sh:path rdfs:seeAlso ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 32 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 46 ; + sh:path bibo:status ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 31 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 36 ; + sh:path skos:exactMatch ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 11 ; + sh:path linkml:local_names ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 40 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:boolean ; + sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path linkml:abstract ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 37 ; + sh:path skos:closeMatch ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 41 ; + sh:path pav:createdBy ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 15 ; + sh:path linkml:extensions ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 22 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 44 ; + sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:boolean ; sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; sh:maxCount 1 ; sh:order 2 ; - sh:path linkml:mixin ] ; + sh:path linkml:mixin ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path pav:createdOn ] ; sh:targetClass linkml:Definition . linkml:LocalName a sh:NodeShape ; @@ -3848,48 +4233,60 @@ linkml:AnonymousTypeExpression a sh:NodeShape ; sh:closed true ; sh:description "A type expression that is not a top-level named type definition. Used for nesting." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; + sh:property [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 8 ; + sh:path linkml:maximum_value ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:minimum_value ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path qudt:unit ], + [ sh:datatype xsd:integer ; sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; sh:maxCount 1 ; sh:order 6 ; sh:path linkml:equals_number ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 5 ; - sh:path linkml:equals_string_in ], [ sh:class linkml:PatternExpression ; sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 1 ; sh:path linkml:structured_pattern ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or higher than this" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:minimum_value ], - [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path linkml:pattern ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 9 ; sh:path linkml:none_of ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 11 ; + sh:path linkml:any_of ], [ sh:datatype xsd:string ; sh:description "the slot must have range string and the value of the slot must equal the specified value" ; sh:maxCount 1 ; sh:order 4 ; sh:path linkml:equals_string ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + [ sh:datatype xsd:string ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:pattern ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:maximum_value ], + sh:order 12 ; + sh:path linkml:all_of ], [ sh:datatype xsd:string ; sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; @@ -3900,36 +4297,73 @@ linkml:AnonymousTypeExpression a sh:NodeShape ; sh:nodeKind sh:BlankNode ; sh:order 10 ; sh:path linkml:exactly_one_of ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; + [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; + sh:order 5 ; + sh:path linkml:equals_string_in ] ; + sh:targetClass linkml:AnonymousTypeExpression . + +linkml:Any a sh:NodeShape ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ), + ( rdf:type ) ; + sh:targetClass linkml:Any . + +linkml:AnonymousSlotExpression a sh:NodeShape ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 54 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 35 ; + sh:path linkml:todos ], + [ sh:datatype xsd:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; + sh:order 21 ; + sh:path linkml:minimum_cardinality ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path qudt:unit ], - [ sh:class linkml:AnonymousTypeExpression ; + sh:order 26 ; + sh:path linkml:exactly_one_of ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path linkml:deprecated ], + [ sh:class linkml:AnonymousSlotExpression ; sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 12 ; - sh:path linkml:all_of ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if at least one of the expressions hold" ; + sh:order 28 ; + sh:path linkml:all_of ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 41 ; + sh:path linkml:imported_from ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 38 ; + sh:path linkml:examples ], + [ sh:datatype xsd:integer ; + sh:description "the maximum number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:order 22 ; + sh:path linkml:maximum_cardinality ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 11 ; - sh:path linkml:any_of ] ; - sh:targetClass linkml:AnonymousTypeExpression . - -linkml:Any a sh:NodeShape ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ), - ( rdf:type ) ; - sh:targetClass linkml:Any . - -linkml:AnonymousSlotExpression a sh:NodeShape ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Controlled terms used to categorize an element." ; - sh:order 60 ; - sh:path dcterms:subject ], + sh:order 25 ; + sh:path linkml:none_of ], [ sh:class linkml:Element ; sh:description """defines the type of the object of the slot. Given the following slot definition S1: @@ -3945,705 +4379,713 @@ implicitly asserts Y is an instance of C2 sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:range ], - [ sh:class linkml:EnumExpression ; - sh:description "An inlined enumeration" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:enum_range ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 10 ; - sh:path linkml:structured_pattern ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 49 ; - sh:path skos:closeMatch ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 61 ; - sh:path schema1:keywords ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:order 46 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 22 ; - sh:path linkml:all_members ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 23 ; - sh:path linkml:none_of ], + sh:order 42 ; + sh:path dcterms:source ], [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:maximum_cardinality ], + sh:order 61 ; + sh:path sh:order ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 51 ; + sh:order 53 ; sh:path skos:narrowMatch ], - [ sh:datatype xsd:boolean ; - sh:description "True means that keyed or identified slot appears in an outer structure by value. False means that only the key or identifier for the slot appears within the domain, referencing a structure that appears elsewhere." ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path linkml:inlined ], - [ sh:description "agent that contributed to the element" ; - sh:order 54 ; - sh:path dcterms:contributor ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 24 ; - sh:path linkml:exactly_one_of ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 25 ; - sh:path linkml:any_of ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 14 ; - sh:path linkml:equals_string ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; - sh:maxCount 1 ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 11 ; - sh:path qudt:unit ], + sh:order 48 ; + sh:path skosxl:altLabel ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 28 ; + sh:order 30 ; sh:path linkml:annotations ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 58 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot must be present in instances of the class definition" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path linkml:required ], + [ sh:datatype xsd:boolean ; + sh:description "true means that slot can have more than one value and should be represented using a list or collection structure." ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path linkml:multivalued ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 59 ; + sh:path oslc:modifiedBy ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 53 ; + sh:order 55 ; sh:path pav:createdBy ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:datatype xsd:string ; + sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path linkml:implicit_prefix ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; sh:maxCount 1 ; - sh:order 44 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 50 ; - sh:path skos:relatedMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 48 ; - sh:path skos:exactMatch ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 26 ; - sh:path linkml:all_of ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:order 10 ; + sh:path linkml:maximum_value ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 38 ; - sh:path skos:inScheme ], + sh:order 31 ; + sh:path skos:definition ], [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 15 ; - sh:path linkml:equals_string_in ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + sh:description "the value of the slot must equal the value of the evaluated expression" ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path linkml:equals_expression ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 30 ; - sh:path linkml:alt_descriptions ], + sh:order 23 ; + sh:path linkml:has_member ], + [ sh:datatype xsd:boolean ; + sh:description "True means that an inlined slot is represented as a list of range instances. False means that an inlined slot is represented as a dictionary, whose key is the slot key or identifier and whose value is the range instance." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path linkml:inlined_as_list ], [ sh:class linkml:Any ; sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 7 ; + sh:order 9 ; sh:path linkml:minimum_value ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 35 ; - sh:path skos:note ], - [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 49 ; + sh:path skos:mappingRelation ], + [ sh:class linkml:EnumExpression ; + sh:description "An inlined enumeration" ; sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:exact_cardinality ], + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:enum_range ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 63 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; sh:maxCount 1 ; - sh:order 31 ; - sh:path dcterms:title ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 5 ; + sh:path linkml:recommended ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 56 ; - sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; + sh:order 45 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 12 ; - sh:path linkml:implicit_prefix ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:order 40 ; + sh:path skos:inScheme ], + [ sh:description "if PRESENT then a value must be present (for lists there must be at least one value). If ABSENT then a value must be absent (for lists, must be empty)" ; + sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path linkml:value_presence ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 50 ; + sh:path skos:exactMatch ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 27 ; - sh:path linkml:extensions ], + sh:path linkml:any_of ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 32 ; - sh:path linkml:deprecated ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 57 ; - sh:path oslc:modifiedBy ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 59 ; - sh:path sh:order ], + sh:order 33 ; + sh:path dcterms:title ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 51 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:pattern ], + sh:order 16 ; + sh:path linkml:equals_string ], + [ sh:datatype xsd:integer ; + sh:description "the exact number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:exact_cardinality ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 36 ; + sh:path skos:editorialNote ], + [ sh:class linkml:PatternExpression ; + sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; sh:maxCount 1 ; - sh:order 41 ; - sh:path schema1:inLanguage ], + sh:nodeKind sh:BlankNode ; + sh:order 12 ; + sh:path linkml:structured_pattern ], [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 45 ; - sh:path skos:altLabel ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; + sh:order 17 ; + sh:path linkml:equals_string_in ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; sh:maxCount 1 ; - sh:order 43 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:nodeKind sh:BlankNode ; + sh:order 13 ; + sh:path qudt:unit ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 44 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 55 ; + sh:order 57 ; sh:path pav:createdOn ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 62 ; + sh:path dcterms:subject ], + [ sh:description "agent that contributed to the element" ; + sh:order 56 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:integer ; + sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path linkml:equals_number ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 47 ; + sh:path skos:altLabel ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; - sh:order 37 ; + sh:order 39 ; sh:path OIO:inSubset ], - [ sh:datatype xsd:boolean ; - sh:description "True means that an inlined slot is represented as a list of range instances. False means that an inlined slot is represented as a dictionary, whose key is the slot key or identifier and whose value is the range instance." ; + [ sh:datatype xsd:string ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; - sh:order 6 ; - sh:path linkml:inlined_as_list ], + sh:order 11 ; + sh:path linkml:pattern ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 52 ; + sh:path skos:relatedMatch ], [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 58 ; + sh:order 60 ; sh:path bibo:status ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 33 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 47 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:boolean ; - sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path linkml:recommended ], - [ sh:datatype xsd:string ; - sh:description "the value of the slot must equal the value of the evaluated expression" ; - sh:maxCount 1 ; - sh:order 17 ; - sh:path linkml:equals_expression ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; sh:order 29 ; - sh:path skos:definition ], + sh:path linkml:extensions ], + [ sh:class linkml:EnumBinding ; + sh:description """A collection of enum bindings that specify how a slot can be bound to a permissible value from an enumeration. +LinkML provides enums to allow string values to be restricted to one of a set of permissible values (specified statically or dynamically). +Enum bindings allow enums to be bound to any object, including complex nested objects. For example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the values the id takes on in a given context. For example, a HumanSample class may have a slot for representing sample site, with a range of concept, but the values of that slot may be restricted to concepts from a particular branch of an anatomy ontology.""" ; + sh:nodeKind sh:BlankNode ; + sh:order 3 ; + sh:path linkml:bindings ], [ sh:datatype xsd:boolean ; - sh:description "true means that the slot must be present in instances of the class definition" ; + sh:description "True means that keyed or identified slot appears in an outer structure by value. False means that only the key or identifier for the slot appears within the domain, referencing a structure that appears elsewhere." ; sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:required ], + sh:order 7 ; + sh:path linkml:inlined ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 32 ; + sh:path linkml:alt_descriptions ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 21 ; - sh:path linkml:has_member ], - [ sh:description "if true then a value must be present (for lists there must be at least one value). If false then a value must be absent (for lists, must be empty)" ; - sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:value_presence ], - [ sh:datatype xsd:integer ; - sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path linkml:equals_number ], + sh:order 24 ; + sh:path linkml:all_members ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 37 ; + sh:path skos:note ], [ sh:class linkml:AnonymousClassExpression ; sh:description "A range that is described as a boolean expression combining existing ranges" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 1 ; - sh:path linkml:range_expression ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 34 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 39 ; - sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 52 ; - sh:path skos:broadMatch ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:minimum_cardinality ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNode ; - sh:order 46 ; - sh:path skosxl:altLabel ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 40 ; - sh:path dcterms:source ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 42 ; - sh:path rdfs:seeAlso ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 36 ; - sh:path linkml:examples ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 8 ; - sh:path linkml:maximum_value ] ; + sh:path linkml:range_expression ] ; sh:targetClass linkml:AnonymousSlotExpression . linkml:AnonymousClassExpression a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 21 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 13 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 12 ; - sh:path linkml:todos ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 22 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:string ; sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; sh:order 24 ; sh:path skos:altLabel ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:extensions ], - [ sh:description "agent that created the element" ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 32 ; - sh:path pav:createdBy ], + sh:order 23 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 30 ; + sh:path skos:narrowMatch ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 36 ; + sh:path oslc:modifiedBy ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:order 37 ; sh:path bibo:status ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path linkml:all_of ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:order 34 ; + sh:path pav:createdOn ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 38 ; + sh:path sh:order ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 39 ; + sh:path dcterms:subject ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 13 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path linkml:imported_from ], [ sh:class linkml:SubsetDefinition ; sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; sh:nodeKind sh:IRI ; sh:order 16 ; sh:path OIO:inSubset ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:exactly_one_of ], [ sh:class linkml:Definition ; sh:description "A primary parent class or slot from which inheritable metaslots are propagated from. While multiple inheritance is not allowed, mixins can be provided effectively providing the same thing. The semantics are the same when translated to formalisms that allow MI (e.g. RDFS/OWL). When translating to a SI framework (e.g. java classes, python classes) then is a is used. When translating a framework without polymorphism (e.g. json-schema, solr document schema) then is a and mixins are recursively unfolded" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:is_a ], - [ sh:description "agent that modified the element" ; + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 26 ; + sh:path skos:mappingRelation ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 6 ; + sh:path linkml:extensions ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 19 ; + sh:path dcterms:source ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 36 ; - sh:path oslc:modifiedBy ], + sh:order 17 ; + sh:path skos:inScheme ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; sh:order 25 ; sh:path skosxl:altLabel ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 23 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "agent that contributed to the element" ; + sh:order 33 ; + sh:path dcterms:contributor ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; sh:order 3 ; sh:path linkml:none_of ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 28 ; - sh:path skos:closeMatch ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:annotations ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 27 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 14 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:order 11 ; + sh:path linkml:deprecated ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 29 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 12 ; + sh:path linkml:todos ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 22 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:class linkml:SlotDefinition ; sh:description "expresses constraints on a group of slots for a class expression" ; sh:nodeKind sh:IRI ; sh:order 5 ; sh:path linkml:slot_conditions ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 26 ; - sh:path skos:mappingRelation ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNode ; + sh:order 1 ; + sh:path linkml:any_of ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 35 ; sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 14 ; - sh:path skos:note ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path dcterms:source ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 29 ; - sh:path skos:relatedMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 33 ; - sh:path dcterms:contributor ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 7 ; - sh:path linkml:annotations ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 11 ; - sh:path linkml:deprecated ], + sh:order 10 ; + sh:path dcterms:title ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; sh:order 15 ; sh:path linkml:examples ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 40 ; + sh:path schema1:keywords ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 28 ; + sh:path skos:closeMatch ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 38 ; - sh:path sh:order ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:all_of ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 31 ; - sh:path skos:broadMatch ], + sh:order 32 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:order 8 ; sh:path skos:definition ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 30 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 40 ; - sh:path schema1:keywords ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 31 ; + sh:path skos:broadMatch ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 21 ; + sh:path rdfs:seeAlso ] ; + sh:targetClass linkml:AnonymousClassExpression . + +linkml:SlotDefinition a sh:NodeShape ; + sh:closed true ; + sh:description "an element that describes how instances are related to other instances" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:integer ; + sh:description "the exact number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:order 58 ; + sh:path linkml:exact_cardinality ], [ sh:datatype xsd:string ; sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 10 ; + sh:order 86 ; sh:path dcterms:title ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 27 ; - sh:path skos:exactMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path pav:createdOn ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNode ; - sh:order 1 ; - sh:path linkml:any_of ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + [ sh:datatype xsd:boolean ; + sh:description "If s is locally_reflexive, then i.s=i for all instances i where s is a class slot for the type of i" ; sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:imported_from ], + sh:order 19 ; + sh:path linkml:locally_reflexive ], [ sh:description "Controlled terms used to categorize an element." ; - sh:order 39 ; + sh:order 115 ; sh:path dcterms:subject ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if only one of the expressions hold" ; + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 102 ; + sh:path skos:mappingRelation ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:exactly_one_of ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + sh:order 66 ; + sh:path linkml:all_of ], + [ sh:class linkml:SlotDefinition ; + sh:description "A primary parent slot from which inheritable metaslots are propagated" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 67 ; + sh:path linkml:is_a ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 113 ; + sh:path bibo:status ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 99 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; + sh:order 48 ; + sh:path linkml:maximum_value ], + [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; + sh:order 72 ; + sh:path linkml:values_from ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 97 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:boolean ; + sh:description "True means that this slot was defined in a slot_usage situation" ; + sh:maxCount 1 ; + sh:order 28 ; + sh:path linkml:is_usage_slot ], + [ sh:datatype xsd:boolean ; + sh:description "If True, then the relationship between the slot domain and range is many to one or many to many" ; + sh:maxCount 1 ; sh:order 9 ; - sh:path linkml:alt_descriptions ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; + sh:path linkml:shared ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 111 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the *value* of a slot is inherited by subclasses" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path linkml:inherited ], + [ sh:datatype xsd:string ; + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 75 ; + sh:path linkml:id_prefixes ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 105 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 83 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:boolean ; + sh:description "If s is symmetric, and i.s=v, then v.s=i" ; sh:maxCount 1 ; sh:order 17 ; - sh:path skos:inScheme ] ; - sh:targetClass linkml:AnonymousClassExpression . - -linkml:SlotDefinition a sh:NodeShape ; - sh:closed true ; - sh:description "an element that describes how instances are related to other instances" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:boolean ; - sh:description "True means that an inlined slot is represented as a list of range instances. False means that an inlined slot is represented as a dictionary, whose key is the slot key or identifier and whose value is the range instance." ; + sh:path linkml:symmetric ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 88 ; + sh:path linkml:todos ], + [ sh:datatype xsd:boolean ; + sh:description "indicates that for any instance, i, the domain of this slot will include an assertion of i s range" ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path linkml:is_class_field ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 82 ; + sh:path linkml:extensions ], + [ sh:description "the role a slot on a relationship class plays, for example, the subject, object or predicate roles" ; + sh:in ( rdf:subject rdf:object rdf:predicate "NODE" "OTHER_ROLE" ) ; sh:maxCount 1 ; - sh:order 44 ; - sh:path linkml:inlined_as_list ], - [ sh:class linkml:SlotDefinition ; - sh:description "allows for grouping of related slots into a grouping slot that serves the role of a group" ; + sh:order 30 ; + sh:path linkml:relational_role ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 32 ; - sh:path sh:group ], + sh:nodeKind sh:BlankNode ; + sh:order 51 ; + sh:path qudt:unit ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 99 ; + sh:order 101 ; sh:path skosxl:altLabel ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; + sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 64 ; - sh:path linkml:all_of ], + sh:order 65 ; + sh:path linkml:any_of ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 107 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 90 ; + sh:path skos:note ], [ sh:datatype xsd:boolean ; - sh:description "True means that the key slot(s) is used to determine the instantiation (types) relation between objects and a ClassDefinition" ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:designates_type ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; + sh:description "If s is reflexive, then i.s=i for all instances i" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 49 ; - sh:path qudt:unit ], - [ sh:class linkml:EnumExpression ; - sh:description "An inlined enumeration" ; + sh:order 18 ; + sh:path linkml:reflexive ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 103 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "The name of the slot referenced in the slot_usage" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 40 ; - sh:path linkml:enum_range ], + sh:order 29 ; + sh:path linkml:usage_slot_name ], [ sh:class linkml:SlotDefinition ; - sh:description "Ontology property which this slot is a subproperty of. Note: setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; + sh:description "allows for grouping of related slots into a grouping slot that serves the role of a group" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path rdfs:subPropertyOf ], + sh:order 31 ; + sh:path sh:group ], + [ sh:datatype xsd:string ; + sh:description "the name used for a slot in the context of its owning class. If present, this is used instead of the actual slot name." ; + sh:maxCount 1 ; + sh:order 13 ; + sh:path skos:prefLabel ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 95 ; + sh:path dcterms:source ], + [ sh:datatype xsd:boolean ; + sh:description "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container" ; + sh:maxCount 1 ; + sh:order 11 ; + sh:path linkml:identifier ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 78 ; + sh:path linkml:local_names ], [ sh:datatype xsd:boolean ; sh:description "true means that the slot must be present in instances of the class definition" ; sh:maxCount 1 ; - sh:order 41 ; + sh:order 42 ; sh:path linkml:required ], [ sh:datatype xsd:boolean ; sh:description "If True, then there must be no duplicates in the elements of a multivalued slot" ; sh:maxCount 1 ; - sh:order 8 ; + sh:order 7 ; sh:path linkml:list_elements_unique ], [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; - sh:maxCount 1 ; - sh:order 67 ; - sh:path linkml:mixin ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 103 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 109 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:SlotDefinition ; - sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; - sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path linkml:union_of ], - [ sh:datatype xsd:boolean ; - sh:description "If s is antisymmetric, and i.s=v where i is different from v, v.s cannot have value i" ; - sh:maxCount 1 ; - sh:order 22 ; - sh:path linkml:asymmetric ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 104 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "a textual descriptor that indicates the role played by the slot range" ; - sh:maxCount 1 ; - sh:order 28 ; - sh:path linkml:role ], - [ sh:class linkml:ClassDefinition ; - sh:description """defines the type of the subject of the slot. Given the following slot definition - S1: - domain: C1 - range: C2 -the declaration - X: - S1: Y - -implicitly asserts that X is an instance of C1 -""" ; + sh:description "true if this slot is a grouping slot" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:domain ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; - sh:order 53 ; - sh:path linkml:equals_string_in ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 87 ; - sh:path skos:editorialNote ], + sh:order 32 ; + sh:path linkml:is_grouping_slot ], [ sh:datatype xsd:string ; sh:description "a name that is used in the singular form" ; sh:maxCount 1 ; sh:order 0 ; sh:path linkml:singular_name ], - [ sh:class linkml:SlotDefinition ; - sh:description "A collection of secondary parent mixin slots from which inheritable metaslots are propagated" ; - sh:nodeKind sh:IRI ; - sh:order 68 ; - sh:path linkml:mixins ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 114 ; + sh:path sh:order ], [ sh:datatype xsd:string ; sh:description "the value of the slot must equal the value of the evaluated expression" ; sh:maxCount 1 ; - sh:order 55 ; + sh:order 57 ; sh:path linkml:equals_expression ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 97 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:string ; - sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; - sh:maxCount 1 ; - sh:order 50 ; - sh:path linkml:implicit_prefix ], - [ sh:class linkml:SlotDefinition ; - sh:description "If s transitive_form_of d, then (1) s holds whenever d holds (2) s is transitive (3) d holds whenever s holds and there are no intermediates, and s is not reflexive" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path linkml:transitive_form_of ], - [ sh:class linkml:Definition ; - sh:description "the \"owner\" of the slot. It is the class if it appears in the slots list, otherwise the declaring slot" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 15 ; - sh:path linkml:owner ], - [ sh:class linkml:Element ; - sh:description """defines the type of the object of the slot. Given the following slot definition - S1: - domain: C1 - range: C2 -the declaration - X: - S1: Y - -implicitly asserts Y is an instance of C2 -""" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 38 ; - sh:path linkml:range ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 59 ; - sh:path linkml:has_member ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 114 ; - sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 100 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:order 112 ; + sh:path oslc:modifiedBy ], + [ sh:datatype xsd:boolean ; + sh:description "True means that an inlined slot is represented as a list of range instances. False means that an inlined slot is represented as a dictionary, whose key is the slot key or identifier and whose value is the range instance." ; sh:maxCount 1 ; - sh:order 82 ; - sh:path skos:definition ], + sh:order 46 ; + sh:path linkml:inlined_as_list ], [ sh:datatype xsd:integer ; sh:description "the slot must have range of a number and the value of the slot must equal the specified value" ; sh:maxCount 1 ; - sh:order 54 ; + sh:order 56 ; sh:path linkml:equals_number ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 88 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:order 85 ; - sh:path linkml:deprecated ], - [ sh:description "agent that modified the element" ; + [ sh:class linkml:SlotDefinition ; + sh:description "indicates that any instance of d s r implies that there is also an instance of r s' d" ; sh:maxCount 1 ; - sh:order 110 ; - sh:path oslc:modifiedBy ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + sh:nodeKind sh:IRI ; + sh:order 23 ; + sh:path owl:inverseOf ], + [ sh:datatype xsd:string ; + sh:description "a textual descriptor that indicates the role played by the slot range" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 45 ; - sh:path linkml:minimum_value ], + sh:order 27 ; + sh:path linkml:role ], [ sh:datatype xsd:string ; - sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; + sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. +We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. +Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects +For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 72 ; - sh:path rdfs:label ], + sh:order 73 ; + sh:path linkml:string_serialization ], [ sh:datatype xsd:boolean ; - sh:description "If s is locally_reflexive, then i.s=i for all instances i where s is a class slot for the type of i" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:locally_reflexive ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNode ; - sh:order 76 ; - sh:path linkml:local_names ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; sh:maxCount 1 ; - sh:order 112 ; - sh:path sh:order ], + sh:order 35 ; + sh:path linkml:children_are_mutually_disjoint ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 108 ; + sh:order 110 ; sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 105 ; - sh:path skos:broadMatch ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; + sh:maxCount 1 ; + sh:order 43 ; + sh:path linkml:recommended ], + [ sh:datatype xsd:string ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:maxCount 1 ; + sh:order 49 ; + sh:path linkml:pattern ], + [ sh:description "if PRESENT then a value must be present (for lists there must be at least one value). If ABSENT then a value must be absent (for lists, must be empty)" ; + sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; + sh:maxCount 1 ; + sh:order 53 ; + sh:path linkml:value_presence ], + [ sh:class linkml:EnumBinding ; + sh:description """A collection of enum bindings that specify how a slot can be bound to a permissible value from an enumeration. +LinkML provides enums to allow string values to be restricted to one of a set of permissible values (specified statically or dynamically). +Enum bindings allow enums to be bound to any object, including complex nested objects. For example, given a (generic) class Concept with slots id and label, it may be desirable to restrict the values the id takes on in a given context. For example, a HumanSample class may have a slot for representing sample site, with a range of concept, but the values of that slot may be restricted to concepts from a particular branch of an anatomy ontology.""" ; + sh:nodeKind sh:BlankNode ; + sh:order 41 ; + sh:path linkml:bindings ], + [ sh:class linkml:SlotDefinition ; + sh:description "Ontology property which this slot is a subproperty of. Note: setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 16 ; + sh:path rdfs:subPropertyOf ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 92 ; + sh:path OIO:inSubset ], [ sh:datatype xsd:string ; - sh:description """function that provides a default value for the slot. Possible values for this slot are defined in linkml.utils.ifabsent_functions.default_library: + sh:description """function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * bnode -- blank node identifier @@ -4654,515 +5096,487 @@ implicitly asserts Y is an instance of C2 * int(value) -- integer value * slot_uri -- URI for the slot * slot_curie -- CURIE for the slot - * string(value) -- string value""" ; + * string(value) -- string value + * EnumName(PermissibleValue) -- enum value""" ; sh:maxCount 1 ; - sh:order 7 ; + sh:order 6 ; sh:path linkml:ifabsent ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 102 ; - sh:path skos:closeMatch ], - [ sh:description "agent that contributed to the element" ; - sh:order 107 ; - sh:path dcterms:contributor ], - [ sh:datatype xsd:boolean ; - sh:description "True means that the key slot(s) uniquely identify the elements within a single container" ; - sh:maxCount 1 ; - sh:order 11 ; - sh:path linkml:key ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 95 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:boolean ; - sh:description "If True, then the relationship between the slot domain and range is many to one or many to many" ; - sh:maxCount 1 ; - sh:order 10 ; - sh:path linkml:shared ], [ sh:datatype xsd:boolean ; - sh:description "If s is transitive, and i.s=z, and s.s=j, then i.s=j" ; + sh:description "If s is antisymmetric, and i.s=v where i is different from v, v.s cannot have value i" ; sh:maxCount 1 ; - sh:order 23 ; - sh:path linkml:transitive ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 113 ; - sh:path dcterms:subject ], + sh:order 21 ; + sh:path linkml:asymmetric ], [ sh:datatype xsd:string ; - sh:description "If present, slot is read only. Text explains why" ; + sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; - sh:order 6 ; - sh:path linkml:readonly ], - [ sh:datatype xsd:string ; - sh:description "The name of the slot referenced in the slot_usage" ; + sh:order 52 ; + sh:path linkml:implicit_prefix ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:order 81 ; + sh:path linkml:instantiates ], + [ sh:datatype xsd:boolean ; + sh:description "If True, then the order of elements of a multivalued slot is guaranteed to be preserved. If False, the order may still be preserved but this is not guaranteed" ; sh:maxCount 1 ; - sh:order 30 ; - sh:path linkml:usage_slot_name ], + sh:order 8 ; + sh:path linkml:list_elements_ordered ], [ sh:class linkml:SlotDefinition ; - sh:description "A primary parent slot from which inheritable metaslots are propagated" ; + sh:description "transitive_form_of including the reflexive case" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 65 ; - sh:path linkml:is_a ], + sh:order 26 ; + sh:path linkml:reflexive_transitive_form_of ], + [ sh:class linkml:SlotDefinition ; + sh:description "Two classes are disjoint if they have no instances in common, two slots are disjoint if they can never hold between the same two instances" ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path linkml:disjoint_with ], [ sh:class linkml:PathExpression ; sh:description "a rule for inferring a slot assignment based on evaluating a path through a sequence of slot assignments" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 34 ; + sh:order 33 ; sh:path linkml:path_rule ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:order 57 ; - sh:path linkml:minimum_cardinality ], - [ sh:datatype xsd:string ; - sh:description "the slot must have range string and the value of the slot must equal the specified value" ; - sh:maxCount 1 ; - sh:order 52 ; - sh:path linkml:equals_string ], - [ sh:datatype xsd:boolean ; - sh:description "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container" ; - sh:maxCount 1 ; - sh:order 12 ; - sh:path linkml:identifier ], - [ sh:datatype xsd:boolean ; - sh:description "If s is reflexive, then i.s=i for all instances i" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path linkml:reflexive ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 80 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:order 56 ; - sh:path linkml:exact_cardinality ], - [ sh:datatype xsd:boolean ; - sh:description "If s is symmetric, and i.s=v, then v.s=i" ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path linkml:symmetric ], - [ sh:description "the role a slot on a relationship class plays, for example, the subject, object or predicate roles" ; - sh:in ( rdf:subject rdf:object rdf:predicate "NODE" "OTHER_ROLE" ) ; + sh:order 63 ; + sh:path linkml:none_of ], + [ sh:class linkml:Definition ; + sh:description "the \"owner\" of the slot. It is the class if it appears in the slots list, otherwise the declaring slot" ; sh:maxCount 1 ; - sh:order 31 ; - sh:path linkml:relational_role ], - [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path linkml:owner ], + [ sh:class linkml:SlotDefinition ; + sh:description "If s transitive_form_of d, then (1) s holds whenever d holds (2) s is transitive (3) d holds whenever s holds and there are no intermediates, and s is not reflexive" ; sh:maxCount 1 ; - sh:order 58 ; - sh:path linkml:maximum_cardinality ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path linkml:transitive_form_of ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 80 ; + sh:path linkml:implements ], + [ sh:class linkml:ArrayExpression ; + sh:description "coerces the value of the slot into an array and defines the dimensions of that array" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; - sh:order 39 ; - sh:path linkml:range_expression ], + sh:order 3 ; + sh:path linkml:array ], [ sh:datatype xsd:string ; sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 98 ; + sh:order 100 ; sh:path skos:altLabel ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 81 ; - sh:path linkml:annotations ], [ sh:class linkml:SlotDefinition ; - sh:description "Two classes are disjoint if they have no instances in common, two slots are disjoint if they can never hold between the same two instances" ; + sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path linkml:disjoint_with ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:order 79 ; - sh:path linkml:instantiates ], + sh:order 71 ; + sh:path linkml:apply_to ], + [ sh:datatype xsd:anyURI ; + sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:order 93 ; + sh:path skos:inScheme ], [ sh:datatype xsd:boolean ; - sh:description "If s is irreflexive, then there exists no i such i.s=i" ; + sh:description "True means that keyed or identified slot appears in an outer structure by value. False means that only the key or identifier for the slot appears within the domain, referencing a structure that appears elsewhere." ; sh:maxCount 1 ; - sh:order 21 ; - sh:path linkml:irreflexive ], + sh:order 45 ; + sh:path linkml:inlined ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 116 ; + sh:path schema1:keywords ], + [ sh:class linkml:TypeMapping ; + sh:description "A collection of type mappings that specify how a slot's range should be mapped or serialized in different frameworks" ; + sh:nodeKind sh:BlankNode ; + sh:order 37 ; + sh:path linkml:type_mappings ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:order 84 ; - sh:path dcterms:title ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + sh:order 87 ; + sh:path linkml:deprecated ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:order 96 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 83 ; - sh:path linkml:alt_descriptions ], - [ sh:class linkml:SlotDefinition ; - sh:description "indicates that any instance of d s r implies that there is also an instance of r s' d" ; + sh:order 64 ; + sh:path linkml:exactly_one_of ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 84 ; + sh:path skos:definition ], + [ sh:datatype xsd:string ; + sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 74 ; + sh:path rdfs:label ], + [ sh:class linkml:SlotDefinition ; + sh:description "indicates that the domain element consists exactly of the members of the element in the range." ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path owl:inverseOf ], + sh:order 36 ; + sh:path linkml:union_of ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if none of the expressions hold" ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 62 ; + sh:path linkml:all_members ], + [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; + sh:order 54 ; + sh:path linkml:equals_string ], + [ sh:datatype xsd:boolean ; + sh:description "True means that the key slot(s) uniquely identify the elements within a single container" ; + sh:maxCount 1 ; + sh:order 10 ; + sh:path linkml:key ], + [ sh:datatype xsd:boolean ; + sh:description "If s is irreflexive, then there exists no i such i.s=i" ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path linkml:irreflexive ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with at least one member satisfying the condition" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNode ; sh:order 61 ; - sh:path linkml:none_of ], - [ sh:description "URI of the class that provides a semantic interpretation of the slot in a linked data context. The URI may come from any namespace and may be shared between schemas." ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:slot_uri ], - [ sh:datatype xsd:anyURI ; - sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:order 91 ; - sh:path skos:inScheme ], + sh:path linkml:has_member ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 85 ; + sh:path linkml:alt_descriptions ], [ sh:class linkml:SlotDefinition ; - sh:description "transitive_form_of including the reflexive case" ; - sh:maxCount 1 ; + sh:description "A collection of secondary parent mixin slots from which inheritable metaslots are propagated" ; sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path linkml:reflexive_transitive_form_of ], + sh:order 70 ; + sh:path linkml:mixins ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 106 ; + sh:path skos:narrowMatch ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 108 ; + sh:path pav:createdBy ], [ sh:datatype xsd:boolean ; - sh:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; + sh:description "True means that the key slot(s) is used to determine the instantiation (types) relation between objects and a ClassDefinition" ; sh:maxCount 1 ; - sh:order 36 ; - sh:path linkml:children_are_mutually_disjoint ], + sh:order 12 ; + sh:path linkml:designates_type ], [ sh:class linkml:ClassDefinition ; sh:description "the class(es) that reference the slot in a \"slots\" or \"slot_usage\" context" ; sh:nodeKind sh:IRI ; - sh:order 16 ; + sh:order 15 ; sh:path linkml:domain_of ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:order 77 ; - sh:path dcterms:conformsTo ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 86 ; - sh:path linkml:todos ], [ sh:datatype xsd:boolean ; sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; sh:maxCount 1 ; - sh:order 74 ; + sh:order 76 ; sh:path linkml:id_prefixes_are_closed ], + [ sh:description "agent that contributed to the element" ; + sh:order 109 ; + sh:path dcterms:contributor ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 89 ; + sh:path skos:editorialNote ], + [ sh:description "URI of the class that provides a semantic interpretation of the slot in a linked data context. The URI may come from any namespace and may be shared between schemas." ; sh:maxCount 1 ; - sh:order 92 ; - sh:path linkml:imported_from ], - [ sh:datatype xsd:string ; - sh:description "the name used for a slot in the context of its owning class. If present, this is used instead of the actual slot name." ; + sh:order 2 ; + sh:path linkml:slot_uri ], + [ sh:class linkml:EnumExpression ; + sh:description "An inlined enumeration" ; sh:maxCount 1 ; - sh:order 14 ; - sh:path skos:prefLabel ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 63 ; - sh:path linkml:any_of ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 96 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:boolean ; - sh:description "True means that keyed or identified slot appears in an outer structure by value. False means that only the key or identifier for the slot appears within the domain, referencing a structure that appears elsewhere." ; + sh:order 40 ; + sh:path linkml:enum_range ], + [ sh:class linkml:Element ; + sh:description """defines the type of the object of the slot. Given the following slot definition + S1: + domain: C1 + range: C2 +the declaration + X: + S1: Y + +implicitly asserts Y is an instance of C2 +""" ; sh:maxCount 1 ; - sh:order 43 ; - sh:path linkml:inlined ], - [ sh:class linkml:SlotDefinition ; - sh:description "Used to extend class or slot definitions. For example, if we have a core schema where a gene has two slots for identifier and symbol, and we have a specialized schema for my_organism where we wish to add a slot systematic_name, we can avoid subclassing by defining a class gene_my_organism, adding the slot to this class, and then adding an apply_to pointing to the gene class. The new slot will be 'injected into' the gene class." ; sh:nodeKind sh:IRI ; - sh:order 69 ; - sh:path linkml:apply_to ], - [ sh:class linkml:Any ; - sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 46 ; - sh:path linkml:maximum_value ], + sh:order 38 ; + sh:path linkml:range ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 104 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; - sh:maxCount 1 ; - sh:order 47 ; - sh:path linkml:pattern ], - [ sh:datatype xsd:boolean ; - sh:description "indicates that for any instance, i, the domain of this slot will include an assertion of i s range" ; - sh:maxCount 1 ; - sh:order 25 ; - sh:path linkml:is_class_field ], - [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; - sh:maxCount 1 ; - sh:order 66 ; - sh:path linkml:abstract ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 111 ; - sh:path bibo:status ], - [ sh:datatype xsd:boolean ; - sh:description "If True, then the order of elements of a multivalued slot is guaranteed to be preserved. If False, the order may still be preserved but this is not guaranteed" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:list_elements_ordered ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 48 ; - sh:path linkml:structured_pattern ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 101 ; - sh:path skos:exactMatch ], - [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 75 ; - sh:path linkml:definition_uri ], + sh:order 94 ; + sh:path linkml:imported_from ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; - sh:order 89 ; + sh:order 91 ; sh:path linkml:examples ], - [ sh:datatype xsd:boolean ; - sh:description "True means that this slot was defined in a slot_usage situation" ; + [ sh:datatype xsd:integer ; + sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:order 29 ; - sh:path linkml:is_usage_slot ], - [ sh:datatype xsd:boolean ; - sh:description "true if this slot is a grouping slot" ; + sh:order 60 ; + sh:path linkml:maximum_cardinality ], + [ sh:class linkml:Any ; + sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; - sh:order 33 ; - sh:path linkml:is_grouping_slot ], + sh:nodeKind sh:BlankNode ; + sh:order 47 ; + sh:path linkml:minimum_value ], [ sh:datatype xsd:boolean ; - sh:description "true means that the slot should be present in instances of the class definition, but this is not required" ; + sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; sh:maxCount 1 ; - sh:order 42 ; - sh:path linkml:recommended ], + sh:order 68 ; + sh:path linkml:abstract ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 98 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 73 ; - sh:path linkml:id_prefixes ], - [ sh:description "if true then a value must be present (for lists there must be at least one value). If false then a value must be absent (for lists, must be empty)" ; - sh:in ( "UNCOMMITTED" "PRESENT" "ABSENT" ) ; + sh:description "If present, slot is read only. Text explains why" ; sh:maxCount 1 ; - sh:order 51 ; - sh:path linkml:value_presence ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:order 5 ; + sh:path linkml:readonly ], + [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 60 ; - sh:path linkml:all_members ], + sh:order 77 ; + sh:path linkml:definition_uri ], [ sh:datatype xsd:boolean ; sh:description "true means that slot can have more than one value and should be represented using a list or collection structure." ; sh:maxCount 1 ; - sh:order 3 ; + sh:order 44 ; sh:path linkml:multivalued ], - [ sh:class linkml:ArrayExpression ; - sh:description "coerces the value of the slot into an array and defines the dimensions of that array" ; + [ sh:datatype xsd:boolean ; + sh:description "Indicates the class or slot is intended to be inherited from without being an is_a parent. mixins should not be inherited from using is_a, except by other mixins." ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:array ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 69 ; + sh:path linkml:mixin ], + [ sh:class linkml:ClassDefinition ; + sh:description """defines the type of the subject of the slot. Given the following slot definition + S1: + domain: C1 + range: C2 +the declaration + X: + S1: Y + +implicitly asserts that X is an instance of C1 +""" ; sh:maxCount 1 ; - sh:order 94 ; - sh:path schema1:inLanguage ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 78 ; - sh:path linkml:implements ], - [ sh:description "The identifier of a \"value set\" -- a set of identifiers that form the possible values for the range of a slot. Note: this is different than 'subproperty_of' in that 'subproperty_of' is intended to be a single ontology term while 'values_from' is the identifier of an entire value set. Additionally, this is different than an enumeration in that in an enumeration, the values of the enumeration are listed directly in the model itself. Setting this property on a slot does not guarantee an expansion of the ontological hierarchy into an enumerated list of possible values in every serialization of the model." ; - sh:order 70 ; - sh:path linkml:values_from ], - [ sh:description "A related resource from which the element is derived." ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:domain ], + [ sh:datatype xsd:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:order 93 ; - sh:path dcterms:source ], + sh:order 59 ; + sh:path linkml:minimum_cardinality ], [ sh:datatype xsd:string ; - sh:description """Used on a slot that stores the string serialization of the containing object. The syntax follows python formatted strings, with slot names enclosed in {}s. These are expanded using the values of those slots. -We call the slot with the serialization the s-slot, the slots used in the {}s are v-slots. If both s-slots and v-slots are populated on an object then the value of the s-slot should correspond to the expansion. -Implementations of frameworks may choose to use this property to either (a) PARSE: implement automated normalizations by parsing denormalized strings into complex objects (b) GENERARE: implement automated to_string labeling of complex objects -For example, a Measurement class may have 3 fields: unit, value, and string_value. The string_value slot may have a string_serialization of {value}{unit} such that if unit=cm and value=2, the value of string_value shouldd be 2cm""" ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:order 79 ; + sh:path dcterms:conformsTo ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; sh:maxCount 1 ; - sh:order 71 ; - sh:path linkml:string_serialization ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 90 ; - sh:path OIO:inSubset ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNode ; - sh:order 62 ; - sh:path linkml:exactly_one_of ], + sh:order 39 ; + sh:path linkml:range_expression ], [ sh:datatype xsd:boolean ; - sh:description "true means that the *value* of a slot is inherited by subclasses" ; + sh:description "If s is transitive, and i.s=z, and s.s=j, then i.s=j" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path linkml:inherited ], - [ sh:description "agent that created the element" ; + sh:order 22 ; + sh:path linkml:transitive ], + [ sh:class linkml:PatternExpression ; + sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; sh:maxCount 1 ; - sh:order 106 ; - sh:path pav:createdBy ] ; + sh:nodeKind sh:BlankNode ; + sh:order 50 ; + sh:path linkml:structured_pattern ], + [ sh:datatype xsd:string ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; + sh:order 55 ; + sh:path linkml:equals_string_in ] ; sh:targetClass linkml:SlotDefinition . skosxl:Label a sh:NodeShape ; sh:closed true ; sh:description "object that contains meta data about a synonym or alias including where it came from (source) and its scope (narrow, broad, etc.)" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + sh:property [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; - sh:order 12 ; - sh:path linkml:examples ], - [ sh:description "agent that modified the element" ; + sh:order 5 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path skos:definition ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:order 33 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "agent that contributed to the element" ; + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 34 ; sh:path oslc:modifiedBy ], + [ sh:description "The category or categories of an alias. This can be drawn from any relevant vocabulary" ; + sh:order 2 ; + sh:path dcterms:subject ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 10 ; + sh:order 11 ; sh:path skos:editorialNote ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:deprecated ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNode ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], + sh:order 16 ; + sh:path linkml:imported_from ], [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 18 ; + sh:order 19 ; sh:path rdfs:seeAlso ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:annotations ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:description "The literal lexical form of a structured alias; i.e the actual alias value." ; sh:maxCount 1 ; - sh:order 5 ; - sh:path skos:definition ], + sh:minCount 1 ; + sh:order 0 ; + sh:path skosxl:literalForm ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; sh:order 9 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:path linkml:deprecated ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:order 25 ; + sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 26 ; sh:path skos:closeMatch ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path dcterms:source ], - [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:description "The category or categories of an alias. This can be drawn from any relevant vocabulary" ; - sh:order 2 ; - sh:path dcterms:subject ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path linkml:extensions ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 29 ; + sh:path skos:broadMatch ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 36 ; - sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 27 ; - sh:path skos:narrowMatch ], + sh:description "Outstanding issues that needs resolution" ; + sh:order 10 ; + sh:path linkml:todos ], [ sh:description "The relationship between an element and its alias." ; sh:in ( skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ) ; sh:maxCount 1 ; sh:order 1 ; sh:path rdf:predicate ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:order 29 ; - sh:path pav:createdBy ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 31 ; + sh:order 32 ; sh:path pav:createdOn ], - [ sh:datatype xsd:string ; - sh:description "The literal lexical form of a structured alias; i.e the actual alias value." ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 28 ; + sh:path skos:narrowMatch ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 13 ; + sh:path linkml:examples ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path OIO:inSubset ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path skosxl:literalForm ], + sh:order 21 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 17 ; + sh:order 18 ; sh:path schema1:inLanguage ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path dcterms:source ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path linkml:extensions ], [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 19 ; + sh:order 20 ; sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 26 ; + sh:order 27 ; sh:path skos:relatedMatch ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 22 ; + sh:path skos:altLabel ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; - sh:order 22 ; + sh:order 23 ; sh:path skosxl:altLabel ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNode ; + sh:order 7 ; + sh:path linkml:alt_descriptions ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], + sh:order 35 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 11 ; + sh:order 12 ; sh:path skos:note ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:order 24 ; - sh:path skos:exactMatch ], [ sh:datatype xsd:anyURI ; sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:order 14 ; + sh:order 15 ; sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 21 ; - sh:path skos:altLabel ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:order 30 ; + sh:path pav:createdBy ], [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 23 ; + sh:order 24 ; sh:path skos:mappingRelation ], - [ sh:description "agent that contributed to the element" ; - sh:order 30 ; - sh:path dcterms:contributor ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; - sh:order 35 ; + sh:order 36 ; sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path OIO:inSubset ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:order 15 ; - sh:path linkml:imported_from ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:order 34 ; - sh:path bibo:status ] ; + [ sh:datatype xsd:anyURI ; + sh:description "The context in which an alias should be applied" ; + sh:order 3 ; + sh:path linkml:alias_contexts ] ; sh:targetClass skosxl:Label . linkml:AltDescription a sh:NodeShape ; @@ -5170,17 +5584,17 @@ linkml:AltDescription a sh:NodeShape ; sh:description "an attributed description" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "the source of an attributed description" ; + sh:description "text of an attributed description" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 0 ; - sh:path linkml:alt_description_source ], + sh:order 1 ; + sh:path linkml:alt_description_text ], [ sh:datatype xsd:string ; - sh:description "text of an attributed description" ; + sh:description "the source of an attributed description" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 1 ; - sh:path linkml:alt_description_text ] ; + sh:order 0 ; + sh:path linkml:alt_description_source ] ; sh:targetClass linkml:AltDescription . linkml:Example a sh:NodeShape ; @@ -5188,10 +5602,10 @@ linkml:Example a sh:NodeShape ; sh:description "usage example and description" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "description of what the value is doing" ; + sh:description "example value" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path linkml:value_description ], + sh:order 0 ; + sh:path skos:example ], [ sh:class linkml:Any ; sh:description "direct object representation of the example" ; sh:maxCount 1 ; @@ -5199,17 +5613,24 @@ linkml:Example a sh:NodeShape ; sh:order 2 ; sh:path linkml:value_object ], [ sh:datatype xsd:string ; - sh:description "example value" ; + sh:description "description of what the value is doing" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path skos:example ] ; + sh:order 1 ; + sh:path linkml:value_description ] ; sh:targetClass linkml:Example . linkml:Annotation a sh:NodeShape ; sh:closed true ; sh:description "a tag/value pair with the semantics of OWL Annotation" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:Annotation ; + sh:property [ sh:class linkml:Any ; + sh:description "the actual annotation" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:order 2 ; + sh:path linkml:extension_value ], + [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNode ; sh:order 0 ; @@ -5219,216 +5640,204 @@ linkml:Annotation a sh:NodeShape ; sh:minCount 1 ; sh:order 1 ; sh:path linkml:extension_tag ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path linkml:extensions ], - [ sh:class linkml:Any ; - sh:description "the actual annotation" ; - sh:maxCount 1 ; - sh:minCount 1 ; + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path linkml:extension_value ] ; + sh:order 3 ; + sh:path linkml:extensions ] ; sh:targetClass linkml:Annotation . linkml:SubsetDefinition a sh:NodeShape ; sh:closed true ; sh:description "an element that can be used to group other metamodel elements" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:order 32 ; - sh:path skos:narrowMatch ], - [ sh:description "agent that created the element" ; + sh:property [ sh:datatype xsd:string ; + sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; sh:maxCount 1 ; - sh:order 34 ; - sh:path pav:createdBy ], + sh:order 12 ; + sh:path dcterms:title ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path linkml:local_names ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:order 21 ; + sh:path dcterms:source ], [ sh:description "An element in another schema which this element instantiates." ; sh:order 7 ; sh:path linkml:instantiates ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:order 42 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:order 16 ; - sh:path skos:note ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:order 22 ; sh:path schema1:inLanguage ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNode ; - sh:order 4 ; - sh:path linkml:local_names ], [ sh:datatype xsd:string ; - sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; - sh:order 1 ; - sh:path linkml:id_prefixes ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:order 25 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:order 15 ; - sh:path skos:editorialNote ], - [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; + sh:order 20 ; + sh:path linkml:imported_from ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:order 3 ; - sh:path linkml:definition_uri ], + sh:order 34 ; + sh:path pav:createdBy ], + [ sh:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path sh:order ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:order 38 ; + sh:path oslc:modifiedBy ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:order 39 ; + sh:path bibo:status ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNode ; sh:order 17 ; sh:path linkml:examples ], - [ sh:description "agent that contributed to the element" ; - sh:order 35 ; - sh:path dcterms:contributor ], - [ sh:class linkml:SubsetDefinition ; - sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; - sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path OIO:inSubset ], - [ sh:datatype xsd:boolean ; - sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path linkml:id_prefixes_are_closed ], - [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; - sh:order 6 ; - sh:path linkml:implements ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 8 ; sh:path linkml:extensions ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "Outstanding issues that needs resolution" ; + sh:order 14 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; + sh:order 26 ; + sh:path skos:altLabel ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:order 20 ; - sh:path linkml:imported_from ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:order 23 ; - sh:path rdfs:seeAlso ], - [ sh:description "status of the element" ; + sh:order 25 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:order 39 ; - sh:path bibo:status ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 10 ; + sh:path skos:definition ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; - sh:order 40 ; - sh:path sh:order ], + sh:order 36 ; + sh:path pav:createdOn ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNode ; + sh:order 9 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:order 42 ; + sh:path schema1:keywords ], [ sh:datatype xsd:string ; sh:description "the unique name of the element within the context of the schema. Name is combined with the default prefix to form the globally unique subject of the target class." ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path rdfs:label ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:order 37 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:order 41 ; + sh:path dcterms:subject ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:order 29 ; sh:path skos:exactMatch ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 30 ; + sh:path skos:closeMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; + sh:order 28 ; + sh:path skos:mappingRelation ], + [ sh:description "agent that contributed to the element" ; + sh:order 35 ; + sh:path dcterms:contributor ], + [ sh:description "The native URI of the element. This is always within the namespace of the containing schema. Contrast with the assigned URI, via class_uri or slot_uri" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path dcterms:conformsTo ], + sh:order 3 ; + sh:path linkml:definition_uri ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNode ; sh:order 27 ; sh:path skosxl:altLabel ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:order 14 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ; - sh:order 28 ; - sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:order 10 ; - sh:path skos:definition ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:order 37 ; - sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 31 ; + sh:path skos:relatedMatch ], [ sh:datatype xsd:anyURI ; sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:order 19 ; sh:path skos:inScheme ], + [ sh:class linkml:SubsetDefinition ; + sh:description "used to indicate membership of a term in a defined subset of terms used for a particular domain or application." ; + sh:nodeKind sh:IRI ; + sh:order 18 ; + sh:path OIO:inSubset ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path dcterms:conformsTo ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 16 ; + sh:path skos:note ], + [ sh:datatype xsd:boolean ; + sh:description "If true, then the id_prefixes slot is treated as being closed, and any use of an id that does not have this prefix is considered a violation." ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:datatype xsd:string ; + sh:description "An allowed list of prefixes for which identifiers must conform. The identifier of this class or slot must begin with the URIs referenced by this prefix" ; + sh:order 1 ; + sh:path linkml:id_prefixes ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:order 13 ; sh:path linkml:deprecated ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:order 41 ; - sh:path dcterms:subject ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 32 ; + sh:path skos:narrowMatch ], + [ sh:description "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + sh:order 6 ; + sh:path linkml:implements ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNode ; sh:order 11 ; sh:path linkml:alt_descriptions ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 23 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; - sh:description "A concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:order 12 ; - sh:path dcterms:title ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNode ; - sh:order 9 ; - sh:path linkml:annotations ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:order 36 ; - sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:order 31 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:string ; - sh:description "Alternate names/labels for the element. These do not alter the semantics of the schema, but may be useful to support search and alignment." ; - sh:order 26 ; - sh:path skos:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:order 30 ; - sh:path skos:closeMatch ], + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:order 15 ; + sh:path skos:editorialNote ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:order 33 ; - sh:path skos:broadMatch ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:order 38 ; - sh:path oslc:modifiedBy ] ; + sh:path skos:broadMatch ] ; sh:targetClass linkml:SubsetDefinition . linkml:Extension a sh:NodeShape ; sh:closed true ; sh:description "a tag/value pair used to add non-model information to an entry" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "a tag associated with an extension" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path linkml:extension_tag ], - [ sh:class linkml:Any ; + sh:property [ sh:class linkml:Any ; sh:description "the actual annotation" ; sh:maxCount 1 ; sh:minCount 1 ; @@ -5439,6 +5848,11 @@ linkml:Extension a sh:NodeShape ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNode ; sh:order 2 ; - sh:path linkml:extensions ] ; + sh:path linkml:extensions ], + [ sh:description "a tag associated with an extension" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path linkml:extension_tag ] ; sh:targetClass linkml:Extension . diff --git a/linkml_runtime/linkml_model/shex/meta.shex b/linkml_runtime/linkml_model/shex/meta.shex index abdb049a..1465ba9c 100644 --- a/linkml_runtime/linkml_model/shex/meta.shex +++ b/linkml_runtime/linkml_model/shex/meta.shex @@ -175,8 +175,10 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ ? ; + @ * ; @ ? ; @ ? ; + @ ? ; @ ? ; @ ? ; @ ? ; @@ -248,7 +250,6 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ ? ; - @ ? ; @ * ; @ * ; @ * ; @@ -562,6 +563,61 @@ PREFIX oboInOwl: ) } + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + & ; + rdf:type [ ] ? ; + & ; + rdf:type [ ] ? ; + @ ? ; + [ + + ] ? ; + @ ? ; + [ + + ] ? ; + @ * ; + @ * ; + skos:definition @ ? ; + @ * ; + dcterms:title @ ? ; + @ ? ; + @ * ; + skos:editorialNote @ * ; + skos:note @ * ; + @ * ; + oboInOwl:inSubset @ * ; + skos:inScheme @ ? ; + @ ? ; + dcterms:source @ ? ; + schema1:inLanguage @ ? ; + rdfs:seeAlso @ * ; + @ ? ; + @ ? ; + skos:altLabel @ * ; + skosxl:altLabel @ * ; + skos:mappingRelation @ * ; + skos:exactMatch @ * ; + skos:closeMatch @ * ; + skos:relatedMatch @ * ; + skos:narrowMatch @ * ; + skos:broadMatch @ * ; + pav:createdBy @ ? ; + dcterms:contributor @ * ; + pav:createdOn @ ? ; + pav:lastUpdatedOn @ ? ; + oslc:modifiedBy @ ? ; + bibo:status @ ? ; + sh:order @ ? ; + dcterms:subject @ * ; + schema1:keywords @ * + ) ; + rdf:type [ ] ? + ) +} + CLOSED { ( $ ( & ; rdf:type [ ] ? ; @@ -826,6 +882,8 @@ PREFIX oboInOwl: skos:definition @ ? ; @ ? ; qudt:unit @ ? ; + @ * ; + @ * ; @ * ; @ * ; @ * ; @@ -909,7 +967,8 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ ? ; - @ * + @ * ; + @ * ) ; rdf:type [ ] ) @@ -931,7 +990,6 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ ? ; - @ ? ; @ ? ; @ ? ; @ ? ; @@ -967,13 +1025,16 @@ PREFIX oboInOwl: @ * ; @ ? ; @ * ; + @ * ; @ * ; @ * ; @ ? ; @ ? ; @ ? ; + @ * ; @ ? ; @ ? ; + @ ? ; @ ? ; @ ? ; @ ? ; @@ -1008,8 +1069,10 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ ? ; + @ * ; @ ? ; @ ? ; + @ ? ; @ ? ; @ ? ; @ ? ; @@ -1050,6 +1113,7 @@ PREFIX oboInOwl: skosxl:literalForm @ ; rdf:predicate [ skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ] ? ; dcterms:subject @ * ; + @ * ; @ * ; @ * ; skos:definition @ ? ; @@ -1146,6 +1210,56 @@ PREFIX oboInOwl: ) } + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + & ; + rdf:type [ ] ? ; + & ; + rdf:type [ ] ? ; + @ ; + @ ? ; + @ ? ; + @ * ; + @ * ; + skos:definition @ ? ; + @ * ; + dcterms:title @ ? ; + @ ? ; + @ * ; + skos:editorialNote @ * ; + skos:note @ * ; + @ * ; + oboInOwl:inSubset @ * ; + skos:inScheme @ ? ; + @ ? ; + dcterms:source @ ? ; + schema1:inLanguage @ ? ; + rdfs:seeAlso @ * ; + @ ? ; + @ ? ; + skos:altLabel @ * ; + skosxl:altLabel @ * ; + skos:mappingRelation @ * ; + skos:exactMatch @ * ; + skos:closeMatch @ * ; + skos:relatedMatch @ * ; + skos:narrowMatch @ * ; + skos:broadMatch @ * ; + pav:createdBy @ ? ; + dcterms:contributor @ * ; + pav:createdOn @ ? ; + pav:lastUpdatedOn @ ? ; + oslc:modifiedBy @ ? ; + bibo:status @ ? ; + sh:order @ ? ; + dcterms:subject @ * ; + schema1:keywords @ * + ) ; + rdf:type [ ] + ) +} + CLOSED { ( $ ( & ; rdf:type [ ] ? ; diff --git a/linkml_runtime/linkml_model/sqlschema/meta.sql b/linkml_runtime/linkml_model/sqlschema/meta.sql index aa2d615a..50c40a47 100644 --- a/linkml_runtime/linkml_model/sqlschema/meta.sql +++ b/linkml_runtime/linkml_model/sqlschema/meta.sql @@ -113,8 +113,10 @@ CREATE TABLE anonymous_slot_expression ( range TEXT, range_expression TEXT, enum_range TEXT, + bindings TEXT, required BOOLEAN, recommended BOOLEAN, + multivalued BOOLEAN, inlined BOOLEAN, inlined_as_list BOOLEAN, minimum_value TEXT, @@ -137,7 +139,7 @@ CREATE TABLE anonymous_slot_expression ( exactly_one_of TEXT, any_of TEXT, all_of TEXT, - PRIMARY KEY (extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords, range, range_expression, enum_range, required, recommended, inlined, inlined_as_list, minimum_value, maximum_value, pattern, structured_pattern, unit, implicit_prefix, value_presence, equals_string, equals_string_in, equals_number, equals_expression, exact_cardinality, minimum_cardinality, maximum_cardinality, has_member, all_members, none_of, exactly_one_of, any_of, all_of) + PRIMARY KEY (extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords, range, range_expression, enum_range, bindings, required, recommended, multivalued, inlined, inlined_as_list, minimum_value, maximum_value, pattern, structured_pattern, unit, implicit_prefix, value_presence, equals_string, equals_string_in, equals_number, equals_expression, exact_cardinality, minimum_cardinality, maximum_cardinality, has_member, all_members, none_of, exactly_one_of, any_of, all_of) ); CREATE TABLE anonymous_type_expression ( @@ -161,7 +163,6 @@ CREATE TABLE array_expression ( exact_number_dimensions INTEGER, minimum_number_dimensions INTEGER, maximum_number_dimensions TEXT, - has_extra_dimensions BOOLEAN, dimensions TEXT, extensions TEXT, annotations TEXT, @@ -198,7 +199,7 @@ CREATE TABLE array_expression ( rank INTEGER, categories TEXT, keywords TEXT, - PRIMARY KEY (exact_number_dimensions, minimum_number_dimensions, maximum_number_dimensions, has_extra_dimensions, dimensions, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords) + PRIMARY KEY (exact_number_dimensions, minimum_number_dimensions, maximum_number_dimensions, dimensions, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords) ); CREATE TABLE class_definition ( @@ -520,6 +521,7 @@ CREATE TABLE structured_alias ( literal_form TEXT NOT NULL, predicate VARCHAR(15), categories TEXT, + contexts TEXT, extensions TEXT, annotations TEXT, description TEXT, @@ -554,7 +556,7 @@ CREATE TABLE structured_alias ( status TEXT, rank INTEGER, keywords TEXT, - PRIMARY KEY (literal_form, predicate, categories, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, keywords) + PRIMARY KEY (literal_form, predicate, categories, contexts, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, keywords) ); CREATE TABLE subset_definition ( @@ -694,6 +696,50 @@ CREATE TABLE class_rule ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); +CREATE TABLE enum_binding ( + range TEXT, + obligation_level VARCHAR(11), + binds_value_of TEXT, + pv_formula VARCHAR(11), + extensions TEXT, + annotations TEXT, + description TEXT, + alt_descriptions TEXT, + title TEXT, + deprecated TEXT, + todos TEXT, + notes TEXT, + comments TEXT, + examples TEXT, + in_subset TEXT, + from_schema TEXT, + imported_from TEXT, + source TEXT, + in_language TEXT, + see_also TEXT, + deprecated_element_has_exact_replacement TEXT, + deprecated_element_has_possible_replacement TEXT, + aliases TEXT, + structured_aliases TEXT, + mappings TEXT, + exact_mappings TEXT, + close_mappings TEXT, + related_mappings TEXT, + narrow_mappings TEXT, + broad_mappings TEXT, + created_by TEXT, + contributors TEXT, + created_on DATETIME, + last_updated_on DATETIME, + modified_by TEXT, + status TEXT, + rank INTEGER, + categories TEXT, + keywords TEXT, + PRIMARY KEY (range, obligation_level, binds_value_of, pv_formula, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords), + FOREIGN KEY(range) REFERENCES enum_definition (name) +); + CREATE TABLE schema_definition ( id_prefixes_are_closed BOOLEAN, definition_uri TEXT, @@ -737,6 +783,7 @@ CREATE TABLE schema_definition ( generation_date DATETIME, slot_names_unique BOOLEAN, settings TEXT, + bindings TEXT, name TEXT NOT NULL, PRIMARY KEY (name), FOREIGN KEY(default_range) REFERENCES type_definition (name) @@ -775,7 +822,6 @@ CREATE TABLE slot_definition ( singular_name TEXT, domain TEXT, slot_uri TEXT, - multivalued BOOLEAN, array TEXT, inherited BOOLEAN, readonly TEXT, @@ -816,8 +862,10 @@ CREATE TABLE slot_definition ( range TEXT, range_expression TEXT, enum_range TEXT, + bindings TEXT, required BOOLEAN, recommended BOOLEAN, + multivalued BOOLEAN, inlined BOOLEAN, inlined_as_list BOOLEAN, minimum_value TEXT, @@ -1166,6 +1214,20 @@ CREATE TABLE enum_definition_concepts ( FOREIGN KEY(backref_id) REFERENCES enum_definition (name) ); +CREATE TABLE permissible_value_instantiates ( + backref_id TEXT, + instantiates TEXT, + PRIMARY KEY (backref_id, instantiates), + FOREIGN KEY(backref_id) REFERENCES permissible_value (text) +); + +CREATE TABLE permissible_value_implements ( + backref_id TEXT, + implements TEXT, + PRIMARY KEY (backref_id, implements), + FOREIGN KEY(backref_id) REFERENCES permissible_value (text) +); + CREATE TABLE permissible_value_todos ( backref_id TEXT, todos TEXT, @@ -1565,6 +1627,51 @@ CREATE TABLE prefix ( FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); +CREATE TABLE type_mapping ( + framework TEXT NOT NULL, + type TEXT, + string_serialization TEXT, + extensions TEXT, + annotations TEXT, + description TEXT, + alt_descriptions TEXT, + title TEXT, + deprecated TEXT, + todos TEXT, + notes TEXT, + comments TEXT, + examples TEXT, + in_subset TEXT, + from_schema TEXT, + imported_from TEXT, + source TEXT, + in_language TEXT, + see_also TEXT, + deprecated_element_has_exact_replacement TEXT, + deprecated_element_has_possible_replacement TEXT, + aliases TEXT, + structured_aliases TEXT, + mappings TEXT, + exact_mappings TEXT, + close_mappings TEXT, + related_mappings TEXT, + narrow_mappings TEXT, + broad_mappings TEXT, + created_by TEXT, + contributors TEXT, + created_on DATETIME, + last_updated_on DATETIME, + modified_by TEXT, + status TEXT, + rank INTEGER, + categories TEXT, + keywords TEXT, + slot_definition_name TEXT, + PRIMARY KEY (framework, type, string_serialization, extensions, annotations, description, alt_descriptions, title, deprecated, todos, notes, comments, examples, in_subset, from_schema, imported_from, source, in_language, see_also, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, aliases, structured_aliases, mappings, exact_mappings, close_mappings, related_mappings, narrow_mappings, broad_mappings, created_by, contributors, created_on, last_updated_on, modified_by, status, rank, categories, keywords, slot_definition_name), + FOREIGN KEY(type) REFERENCES type_definition (name), + FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) +); + CREATE TABLE schema_definition_id_prefixes ( backref_id TEXT, id_prefixes TEXT, diff --git a/linkml_runtime/linkml_model/types.py b/linkml_runtime/linkml_model/types.py index 522a9e97..b7034f6f 100644 --- a/linkml_runtime/linkml_model/types.py +++ b/linkml_runtime/linkml_model/types.py @@ -1,5 +1,5 @@ # Auto generated from types.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-02-07T17:29:42 +# Generation date: 2024-06-27T23:15:31 # Schema: types # # id: https://w3id.org/linkml/types diff --git a/linkml_runtime/linkml_model/units.py b/linkml_runtime/linkml_model/units.py index 30fbae46..88f68a31 100644 --- a/linkml_runtime/linkml_model/units.py +++ b/linkml_runtime/linkml_model/units.py @@ -1,5 +1,5 @@ # Auto generated from units.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-02-07T17:29:43 +# Generation date: 2024-06-27T23:15:33 # Schema: units # # id: https://w3id.org/linkml/units diff --git a/linkml_runtime/linkml_model/validation.py b/linkml_runtime/linkml_model/validation.py index b9fe24f8..222f1511 100644 --- a/linkml_runtime/linkml_model/validation.py +++ b/linkml_runtime/linkml_model/validation.py @@ -1,5 +1,5 @@ # Auto generated from validation.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-02-07T17:29:45 +# Generation date: 2024-06-27T23:15:35 # Schema: reporting # # id: https://w3id.org/linkml/reporting From 9df8c0690da2b19efdf5c759920871a2f3bbadd9 Mon Sep 17 00:00:00 2001 From: Vincent Kelleher Date: Thu, 27 Jun 2024 11:56:07 +0200 Subject: [PATCH 05/33] remove all references to the now deleted linkml_runtime.utils.ifabsent_functions Signed-off-by: Vincent Kelleher --- linkml_runtime/linkml_model/json/meta.json | 2 +- linkml_runtime/linkml_model/owl/meta.owl.ttl | 8 + .../linkml_model/rdf/meta.model.ttl | 3 +- linkml_runtime/linkml_model/rdf/meta.ttl | 3 +- linkml_runtime/linkml_model/sqlddl/meta.sql | 2 +- notebooks/SchemaView_BioLink.ipynb | 444 ++---------------- notebooks/SchemaView_MIxS.ipynb | 216 +-------- notebooks/SchemaView_Monarch.ipynb | 165 +------ 8 files changed, 106 insertions(+), 737 deletions(-) diff --git a/linkml_runtime/linkml_model/json/meta.json b/linkml_runtime/linkml_model/json/meta.json index db7650e9..21f2e7e1 100644 --- a/linkml_runtime/linkml_model/json/meta.json +++ b/linkml_runtime/linkml_model/json/meta.json @@ -2590,7 +2590,7 @@ { "name": "ifabsent", "definition_uri": "https://w3id.org/linkml/ifabsent", - "description": "function that provides a default value for the slot. Possible values for this slot are defined in\nlinkml_runtime.utils.ifabsent_functions.default_library:\n * [Tt]rue -- boolean True\n * [Ff]alse -- boolean False\n * int(value) -- integer value\n * str(value) -- string value\n * default_range -- schema default range\n * bnode -- blank node identifier\n * slot_uri -- URI for the slot\n * class_curie -- CURIE for the containing class\n * class_uri -- URI for the containing class", + "description": "function that provides a default value for the slot.\n * [Tt]rue -- boolean True\n * [Ff]alse -- boolean False\n * int(value) -- integer value\n * str(value) -- string value\n * default_range -- schema default range\n * bnode -- blank node identifier\n * slot_uri -- URI for the slot\n * class_curie -- CURIE for the containing class\n * class_uri -- URI for the containing class", "from_schema": "https://w3id.org/linkml/meta", "close_mappings": [ "https://w3id.org/shacl/defaultValue" diff --git a/linkml_runtime/linkml_model/owl/meta.owl.ttl b/linkml_runtime/linkml_model/owl/meta.owl.ttl index c2667db1..b8cf1624 100644 --- a/linkml_runtime/linkml_model/owl/meta.owl.ttl +++ b/linkml_runtime/linkml_model/owl/meta.owl.ttl @@ -1421,6 +1421,14 @@ linkml:ifabsent a owl:ObjectProperty, * EnumName(PermissibleValue) -- enum value""" ; skos:inScheme linkml:meta . +linkml:implements a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "implements" ; + rdfs:domain linkml:Element ; + rdfs:range linkml:Uriorcurie ; + skos:definition "An element in another schema which this element conforms to. The referenced element is not imported into the schema for the implementing element. However, the referenced schema may be used to check conformance of the implementing element." ; + skos:inScheme linkml:meta . + linkml:import_as a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "import_as" ; diff --git a/linkml_runtime/linkml_model/rdf/meta.model.ttl b/linkml_runtime/linkml_model/rdf/meta.model.ttl index e6983074..fdb4d5b4 100644 --- a/linkml_runtime/linkml_model/rdf/meta.model.ttl +++ b/linkml_runtime/linkml_model/rdf/meta.model.ttl @@ -1228,8 +1228,7 @@ linkml:iec61360code a linkml:SlotDefinition ; linkml:ifabsent a linkml:SlotDefinition ; skos:closeMatch sh1:defaultValue ; - skos:definition """function that provides a default value for the slot. Possible values for this slot are defined in -linkml_runtime.utils.ifabsent_functions.default_library: + skos:definition """function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * int(value) -- integer value diff --git a/linkml_runtime/linkml_model/rdf/meta.ttl b/linkml_runtime/linkml_model/rdf/meta.ttl index 9bfc0e56..5cb10163 100644 --- a/linkml_runtime/linkml_model/rdf/meta.ttl +++ b/linkml_runtime/linkml_model/rdf/meta.ttl @@ -1228,8 +1228,7 @@ linkml:iec61360code a linkml:SlotDefinition ; linkml:ifabsent a linkml:SlotDefinition ; skos:closeMatch sh1:defaultValue ; - skos:definition """function that provides a default value for the slot. Possible values for this slot are defined in -linkml_runtime.utils.ifabsent_functions.default_library: + skos:definition """function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * int(value) -- integer value diff --git a/linkml_runtime/linkml_model/sqlddl/meta.sql b/linkml_runtime/linkml_model/sqlddl/meta.sql index 423d58ce..cab7d715 100644 --- a/linkml_runtime/linkml_model/sqlddl/meta.sql +++ b/linkml_runtime/linkml_model/sqlddl/meta.sql @@ -313,7 +313,7 @@ -- * Slot: multivalued Description: true means that slot can have more than one value -- * Slot: inherited Description: true means that the *value* of a slot is inherited by subclasses -- * Slot: readonly Description: If present, slot is read only. Text explains why --- * Slot: ifabsent Description: function that provides a default value for the slot. Possible values for this slot are defined inlinkml_runtime.utils.ifabsent_functions.default_library: * [Tt]rue -- boolean True * [Ff]alse -- boolean False * int(value) -- integer value * str(value) -- string value * default_range -- schema default range * bnode -- blank node identifier * slot_uri -- URI for the slot * class_curie -- CURIE for the containing class * class_uri -- URI for the containing class +-- * Slot: ifabsent Description: function that provides a default value for the slot. * [Tt]rue -- boolean True * [Ff]alse -- boolean False * int(value) -- integer value * str(value) -- string value * default_range -- schema default range * bnode -- blank node identifier * slot_uri -- URI for the slot * class_curie -- CURIE for the containing class * class_uri -- URI for the containing class -- * Slot: list_elements_unique Description: If True, then there must be no duplicates in the elements of a multivalued slot -- * Slot: list_elements_ordered Description: If True, then the order of elements of a multivalued slot is guaranteed to be preserved. If False, the order may still be preserved but this is not guaranteed -- * Slot: shared Description: If True, then the relationship between the slot domain and range is many to one or many to many diff --git a/notebooks/SchemaView_BioLink.ipynb b/notebooks/SchemaView_BioLink.ipynb index 1966e23d..49a4dc4a 100644 --- a/notebooks/SchemaView_BioLink.ipynb +++ b/notebooks/SchemaView_BioLink.ipynb @@ -4,551 +4,191 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], "source": [ "from linkml_runtime.utils.schemaview import SchemaView" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], "source": [ "view = SchemaView(\"../tests/test_utils/input/biolink-model.yaml\")" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading schema https://w3id.org/linkml/types from ../tests/test_utils/input/biolink-model.yaml\n" - ] - }, - { - "data": { - "text/plain": [ - "['Biolink-Model', 'linkml:types']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.imports_closure()" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(257, 421, 4)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "len(view.all_classes()), len(view.all_slots()), len(view.all_subsets())" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['gene',\n", - " 'gene or gene product',\n", - " 'genomic entity',\n", - " 'chemical entity or gene or gene product',\n", - " 'physical essence',\n", - " 'ontology class',\n", - " 'biological entity',\n", - " 'named thing',\n", - " 'entity',\n", - " 'physical essence or occurrent',\n", - " 'thing with taxon',\n", - " 'macromolecular machine mixin']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.class_ancestors('gene')" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['biolink:Gene',\n", - " 'biolink:GeneOrGeneProduct',\n", - " 'biolink:GenomicEntity',\n", - " 'biolink:ChemicalEntityOrGeneOrGeneProduct',\n", - " 'biolink:PhysicalEssence',\n", - " 'biolink:OntologyClass',\n", - " 'biolink:BiologicalEntity',\n", - " 'biolink:NamedThing',\n", - " 'biolink:Entity',\n", - " 'biolink:PhysicalEssenceOrOccurrent',\n", - " 'biolink:ThingWithTaxon',\n", - " 'biolink:MacromolecularMachineMixin']" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "[view.get_uri(c) for c in view.class_ancestors('gene')]" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['https://w3id.org/biolink/vocab/Gene',\n", - " 'https://w3id.org/biolink/vocab/GeneOrGeneProduct',\n", - " 'https://w3id.org/biolink/vocab/GenomicEntity',\n", - " 'https://w3id.org/biolink/vocab/ChemicalEntityOrGeneOrGeneProduct',\n", - " 'https://w3id.org/biolink/vocab/PhysicalEssence',\n", - " 'https://w3id.org/biolink/vocab/OntologyClass',\n", - " 'https://w3id.org/biolink/vocab/BiologicalEntity',\n", - " 'https://w3id.org/biolink/vocab/NamedThing',\n", - " 'https://w3id.org/biolink/vocab/Entity',\n", - " 'https://w3id.org/biolink/vocab/PhysicalEssenceOrOccurrent',\n", - " 'https://w3id.org/biolink/vocab/ThingWithTaxon',\n", - " 'https://w3id.org/biolink/vocab/MacromolecularMachineMixin']" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "[view.get_uri(c, expand=True) for c in view.class_ancestors('gene')]" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['gene', 'biological entity', 'named thing', 'entity']" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.class_ancestors('gene', mixins=False)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['affects', 'related to']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.slot_ancestors('affects')" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['affects abundance of',\n", - " 'abundance affected by',\n", - " 'affects activity of',\n", - " 'activity affected by',\n", - " 'activity affects',\n", - " 'affects expression of',\n", - " 'expression affected by',\n", - " 'affects folding of',\n", - " 'folding affected by',\n", - " 'affects localization of',\n", - " 'localization affected by',\n", - " 'affects metabolic processing of',\n", - " 'metabolic processing affected by',\n", - " 'affects molecular modification of',\n", - " 'molecular modification affected by',\n", - " 'affects synthesis of',\n", - " 'sythesis affected by',\n", - " 'affects degradation of',\n", - " 'degradation affected by',\n", - " 'affects mutation rate of',\n", - " 'mutation rate affected by',\n", - " 'affects response to',\n", - " 'response affected by',\n", - " 'affects splicing of',\n", - " 'splicing affected by',\n", - " 'affects stability of',\n", - " 'stability affected by',\n", - " 'affects transport of',\n", - " 'transport affected by',\n", - " 'affects secretion of',\n", - " 'secretion affected by',\n", - " 'affects uptake of',\n", - " 'uptake affected by',\n", - " 'process regulates process',\n", - " 'entity regulates entity',\n", - " 'disrupts',\n", - " 'ameliorates',\n", - " 'exacerbates',\n", - " 'affects expression in']" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.slot_children('affects')" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, - "outputs": [], "source": [ "affects = view.get_slot('affects')" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['SEMMEDDB:AFFECTS', 'SEMMEDDB:affects', 'DGIdb:affects', 'RTXKG1:affects']" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "affects.exact_mappings" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'self': ['biolink:affects'],\n", - " 'native': ['biolink:affects'],\n", - " 'exact': ['SEMMEDDB:AFFECTS',\n", - " 'SEMMEDDB:affects',\n", - " 'DGIdb:affects',\n", - " 'RTXKG1:affects'],\n", - " 'narrow': ['SEMMEDDB:administered_to',\n", - " 'CTD:prediction_hypothesis',\n", - " 'GOREL:0001006',\n", - " 'CTD:inferred',\n", - " 'UPHENO:0000001',\n", - " 'RO:0002263',\n", - " 'RO:0002264',\n", - " 'NCIT:R158',\n", - " 'NCIT:R160',\n", - " 'NCIT:R30',\n", - " 'NCIT:R150',\n", - " 'NCIT:R72',\n", - " 'NCIT:R146',\n", - " 'NCIT:R124',\n", - " 'NCIT:R173',\n", - " 'NCIT:R100',\n", - " 'NCIT:R102',\n", - " 'NCIT:R101',\n", - " 'NCIT:R113',\n", - " 'NCIT:R23',\n", - " 'NCIT:R25',\n", - " 'NCIT:gene_mapped_to_disease',\n", - " 'NCIT:R133',\n", - " 'RO:0002343',\n", - " 'RO:0002355',\n", - " 'RO:0002591',\n", - " 'RO:0002592',\n", - " 'RO:0012003',\n", - " 'SNOMED:has_pathological_process'],\n", - " 'broad': [],\n", - " 'related': ['DRUGBANK:pathway'],\n", - " 'close': [],\n", - " 'undefined': []}" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.get_mappings(affects.name)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'self': ['https://w3id.org/biolink/vocab/affects'],\n", - " 'native': ['https://w3id.org/biolink/vocab/affects'],\n", - " 'exact': ['https://skr3.nlm.nih.gov/SemMedDBAFFECTS',\n", - " 'https://skr3.nlm.nih.gov/SemMedDBaffects',\n", - " 'https://www.dgidb.org/interaction_typesaffects',\n", - " 'http://kg1endpoint.rtx.ai/affects'],\n", - " 'narrow': ['https://skr3.nlm.nih.gov/SemMedDBadministered_to',\n", - " 'http://translator.ncats.nih.gov/CTD_prediction_hypothesis',\n", - " 'http://purl.obolibrary.org/obo/GOREL_0001006',\n", - " 'http://translator.ncats.nih.gov/CTD_inferred',\n", - " 'http://purl.obolibrary.org/obo/UPHENO_0000001',\n", - " 'http://purl.obolibrary.org/obo/RO_0002263',\n", - " 'http://purl.obolibrary.org/obo/RO_0002264',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R158',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R160',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R30',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R150',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R72',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R146',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R124',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R173',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R100',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R102',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R101',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R113',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R23',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R25',\n", - " 'http://purl.obolibrary.org/obo/NCIT_gene_mapped_to_disease',\n", - " 'http://purl.obolibrary.org/obo/NCIT_R133',\n", - " 'http://purl.obolibrary.org/obo/RO_0002343',\n", - " 'http://purl.obolibrary.org/obo/RO_0002355',\n", - " 'http://purl.obolibrary.org/obo/RO_0002591',\n", - " 'http://purl.obolibrary.org/obo/RO_0002592',\n", - " 'http://purl.obolibrary.org/obo/RO_0012003',\n", - " 'http://purl.obolibrary.org/obo/SNOMED_has_pathological_process'],\n", - " 'broad': [],\n", - " 'related': ['http://identifiers.org/drugbank/pathway'],\n", - " 'close': [],\n", - " 'undefined': []}" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.get_mappings(affects.name, expand=True)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['association',\n", - " 'contributor association',\n", - " 'genotype to genotype part association',\n", - " 'genotype to gene association',\n", - " 'genotype to variant association',\n", - " 'gene to gene association',\n", - " 'gene to gene homology association',\n", - " 'gene to gene coexpression association',\n", - " 'pairwise gene to gene interaction',\n", - " 'pairwise molecular interaction',\n", - " 'cell line to disease or phenotypic feature association',\n", - " 'chemical to chemical association',\n", - " 'reaction to participant association',\n", - " 'reaction to catalyst association',\n", - " 'chemical to chemical derivation association',\n", - " 'chemical to disease or phenotypic feature association',\n", - " 'chemical to pathway association',\n", - " 'chemical to gene association',\n", - " 'drug to gene association',\n", - " 'material sample derivation association']" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "[c for c in view.all_classes().keys() if view.is_relationship(c)][0:20]" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{}" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.annotation_dict(affects.name)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'biolink:canonical_predicate': Annotation(tag='biolink:canonical_predicate', value='True', extensions={}, annotations={})}" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "affects.annotations" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "from linkml_runtime.linkml_model.annotations import Annotation, Annotatable\n", "\n", "isinstance(affects, Annotatable)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SlotDefinition(name='affects', id_prefixes=[], definition_uri=None, aliases=[], local_names={}, mappings=[], exact_mappings=['SEMMEDDB:AFFECTS', 'SEMMEDDB:affects', 'DGIdb:affects', 'RTXKG1:affects'], close_mappings=[], related_mappings=['DRUGBANK:pathway'], narrow_mappings=['SEMMEDDB:administered_to', 'CTD:prediction_hypothesis', 'GOREL:0001006', 'CTD:inferred', 'UPHENO:0000001', 'RO:0002263', 'RO:0002264', 'NCIT:R158', 'NCIT:R160', 'NCIT:R30', 'NCIT:R150', 'NCIT:R72', 'NCIT:R146', 'NCIT:R124', 'NCIT:R173', 'NCIT:R100', 'NCIT:R102', 'NCIT:R101', 'NCIT:R113', 'NCIT:R23', 'NCIT:R25', 'NCIT:gene_mapped_to_disease', 'NCIT:R133', 'RO:0002343', 'RO:0002355', 'RO:0002591', 'RO:0002592', 'RO:0012003', 'SNOMED:has_pathological_process'], broad_mappings=[], extensions={}, annotations={'biolink:canonical_predicate': Annotation(tag='biolink:canonical_predicate', value='True', extensions={}, annotations={})}, description=\"describes an entity that has a direct affect on the state or quality of another existing entity. Use of the 'affects' predicate implies that the affected entity already exists, unlike predicates such as 'affects risk for' and 'prevents, where the outcome is something that may or may not come to be.\", alt_descriptions={}, deprecated=None, todos=[], notes=[], comments=[], examples=[], in_subset=['translator_minimal'], from_schema=None, imported_from=None, see_also=[], deprecated_element_has_exact_replacement=None, deprecated_element_has_possible_replacement=None, is_a='related to', abstract=None, mixin=None, mixins=[], apply_to=[], values_from=[], created_by=None, created_on=None, last_updated_on=None, modified_by=None, status=None, string_serialization=None, singular_name=None, domain=None, range=None, slot_uri=None, multivalued=None, inherited=None, readonly=None, ifabsent=None, required=None, recommended=None, inlined=None, inlined_as_list=None, key=None, identifier=None, alias=None, owner=None, domain_of=[], subproperty_of=None, symmetric=None, inverse=None, is_class_field=None, role=None, is_usage_slot=None, usage_slot_name=None, minimum_value=None, maximum_value=None, pattern=None)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "affects" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SlotDefinition(name='affects', id_prefixes=[], definition_uri=None, aliases=[], local_names={}, mappings=[], exact_mappings=['SEMMEDDB:AFFECTS', 'SEMMEDDB:affects', 'DGIdb:affects', 'RTXKG1:affects'], close_mappings=[], related_mappings=['DRUGBANK:pathway'], narrow_mappings=['SEMMEDDB:administered_to', 'CTD:prediction_hypothesis', 'GOREL:0001006', 'CTD:inferred', 'UPHENO:0000001', 'RO:0002263', 'RO:0002264', 'NCIT:R158', 'NCIT:R160', 'NCIT:R30', 'NCIT:R150', 'NCIT:R72', 'NCIT:R146', 'NCIT:R124', 'NCIT:R173', 'NCIT:R100', 'NCIT:R102', 'NCIT:R101', 'NCIT:R113', 'NCIT:R23', 'NCIT:R25', 'NCIT:gene_mapped_to_disease', 'NCIT:R133', 'RO:0002343', 'RO:0002355', 'RO:0002591', 'RO:0002592', 'RO:0012003', 'SNOMED:has_pathological_process'], broad_mappings=[], extensions={}, annotations={'biolink:canonical_predicate': Annotation(tag='biolink:canonical_predicate', value='True', extensions={}, annotations={})}, description=\"describes an entity that has a direct affect on the state or quality of another existing entity. Use of the 'affects' predicate implies that the affected entity already exists, unlike predicates such as 'affects risk for' and 'prevents, where the outcome is something that may or may not come to be.\", alt_descriptions={}, deprecated=None, todos=[], notes=[], comments=[], examples=[], in_subset=['translator_minimal'], from_schema=None, imported_from=None, see_also=[], deprecated_element_has_exact_replacement=None, deprecated_element_has_possible_replacement=None, is_a='related to', abstract=None, mixin=None, mixins=[], apply_to=[], values_from=[], created_by=None, created_on=None, last_updated_on=None, modified_by=None, status=None, string_serialization=None, singular_name=None, domain=None, range=None, slot_uri=None, multivalued=None, inherited=None, readonly=None, ifabsent=None, required=None, recommended=None, inlined=None, inlined_as_list=None, key=None, identifier=None, alias=None, owner=None, domain_of=[], subproperty_of=None, symmetric=None, inverse=None, is_class_field=None, role=None, is_usage_slot=None, usage_slot_name=None, minimum_value=None, maximum_value=None, pattern=None)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "e = view.get_element('affects')\n", "e" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] + "source": [], + "outputs": [] } ], "metadata": { diff --git a/notebooks/SchemaView_MIxS.ipynb b/notebooks/SchemaView_MIxS.ipynb index 45901bff..23fc76a8 100644 --- a/notebooks/SchemaView_MIxS.ipynb +++ b/notebooks/SchemaView_MIxS.ipynb @@ -5,292 +5,128 @@ "execution_count": 1, "id": "d82643aa", "metadata": {}, - "outputs": [], "source": [ "from linkml_runtime.utils.schemaview import SchemaView" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 2, "id": "850e4b34", "metadata": {}, - "outputs": [], "source": [ "view = SchemaView(\"../tests/test_utils/input/mixs/mixs.yaml\")" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 4, "id": "c0e9ccd4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading schema water from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema terms from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema ranges from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema https://w3id.org/linkml/types from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema wastewater_sludge from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema soil from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema sediment from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema plant_associated from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema miscellaneous_natural_or_artificial_environment from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema microbial_mat_biofilm from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema hydrocarbon_resources_fluids_swabs from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema hydrocarbon_resources_cores from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema human_vaginal from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema human_skin from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema human_oral from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema human_gut from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema human_associated from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema host_associated from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema built_environment from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema air from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema core from ../tests/test_utils/input/mixs/mixs.yaml\n", - "Loading schema checklists from ../tests/test_utils/input/mixs/mixs.yaml\n" - ] - }, - { - "data": { - "text/plain": [ - "609" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "len(view.all_slots())" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 10, "id": "98f7305b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['water',\n", - " 'quantity value',\n", - " 'wastewater_sludge',\n", - " 'soil',\n", - " 'sediment',\n", - " 'plant-associated',\n", - " 'miscellaneous natural or artificial environment',\n", - " 'microbial mat_biofilm',\n", - " 'hydrocarbon resources-fluids_swabs',\n", - " 'hydrocarbon resources-cores']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "list(view.all_classes().keys())[0:10]" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 19, "id": "84e6ff27", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.get_slot('elev').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 20, "id": "cf892380", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.induced_slot('elev', 'soil').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 21, "id": "735859e1", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.induced_slot('elev', 'human-gut').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 23, "id": "ff33091c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Minimum Information About an Uncultivated Virus Genome'" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.get_class('MIUVIG').description" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 25, "id": "11a0226e", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['MIUVIG',\n", - " 'air MIUVIG',\n", - " 'built environment MIUVIG',\n", - " 'host-associated MIUVIG',\n", - " 'human-associated MIUVIG',\n", - " 'human-gut MIUVIG',\n", - " 'human-oral MIUVIG',\n", - " 'human-skin MIUVIG',\n", - " 'human-vaginal MIUVIG',\n", - " 'hydrocarbon resources-cores MIUVIG',\n", - " 'hydrocarbon resources-fluids_swabs MIUVIG',\n", - " 'microbial mat_biofilm MIUVIG',\n", - " 'miscellaneous natural or artificial environment MIUVIG',\n", - " 'plant-associated MIUVIG',\n", - " 'sediment MIUVIG',\n", - " 'soil MIUVIG',\n", - " 'wastewater_sludge MIUVIG',\n", - " 'water MIUVIG']" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.class_descendants('MIUVIG')" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 26, "id": "4656e62b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.induced_slot('vir_ident_software', 'MIUVIG').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 27, "id": "2e103d35", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.induced_slot('vir_ident_software', 'soil MIUVIG').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 28, "id": "1b9d4bd2", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "view.induced_slot('vir_ident_software', 'soil').required is True" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": null, "id": "1b8dcfa2", "metadata": {}, - "outputs": [], - "source": [] + "source": [], + "outputs": [] } ], "metadata": { diff --git a/notebooks/SchemaView_Monarch.ipynb b/notebooks/SchemaView_Monarch.ipynb index 9455a67c..98ec7743 100644 --- a/notebooks/SchemaView_Monarch.ipynb +++ b/notebooks/SchemaView_Monarch.ipynb @@ -5,41 +5,31 @@ "execution_count": 1, "id": "3e37f9e6", "metadata": {}, - "outputs": [], "source": [ "# what biolink:category does my identifier represent\n", "# how to find the predicates used for gene to disease mappings\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 14, "id": "169c9e40", "metadata": {}, - "outputs": [], "source": [ "from linkml_runtime.utils.schemaview import SchemaView\n", "import requests \n", "from pprint import pprint\n", "# note you can also use a path on a local filesystem\n", "view = SchemaView(\"https://raw.githubusercontent.com/biolink/biolink-model/master/biolink-model.yaml\")" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 15, "id": "54424ac5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "phenotype of\n" - ] - } - ], "source": [ "# what biolink:category does my identifier represent?\n", "# id_prefixes\n", @@ -50,92 +40,50 @@ "\n", "element = view.get_element('phenotype of')\n", "print(element.name)\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 16, "id": "61eeb009", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "inverse is: has phenotype\n" - ] - } - ], "source": [ "# find inverses of a predicate\n", "print(\"inverse is: \" + view.inverse(element.name))" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 17, "id": "91212ad9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['disease']\n" - ] - } - ], "source": [ "# id_prefixes\n", "prefixed_categories = view.get_elements_applicable_by_identifier(\"DOID:4\")\n", "print(prefixed_categories)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 18, "id": "49d364e9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['is missense variant of']\n" - ] - } - ], "source": [ "# mappings \n", "\n", "mapped_categories = view.get_category_by_mapping('SO:0001583')\n", "print(mapped_categories)\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 21, "id": "a7a0fa3f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GENO:0000002\n", - "description: An allele that varies in its sequence from what is considered the reference allele at that locus.\n", - "\n", - "OLS description: An allele that varies in it sequence from what is considered the reference or canonical sequence at that location.\n", - "WIKIDATA:Q15304597: can't find any matching terms in OLS that don't return 404 errors\n", - "SIO:010277: can't find any matching terms in OLS that don't return 404 errors\n", - "VMC:Allele: can't find any matching terms in OLS that don't return 404 errors\n", - "SO:0001059\n", - "description: An allele that varies in its sequence from what is considered the reference allele at that locus.\n", - "\n", - "OLS description: A sequence_alteration is a sequence_feature whose extent is the deviation from another sequence.\n" - ] - } - ], "source": [ "# object = 'gene'\n", "# object = 'disease'\n", @@ -164,90 +112,41 @@ " else:\n", " print(exact_mapping + \": can't find any matching terms in OLS that don't return 404 errors\")\n", " " - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 10, "id": "5fbbc1c1", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "# is my element a mixin?\n", "\n", "e = view.get_element('gene or gene product')\n", "view.is_mixin(e.name)" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 22, "id": "5ab2f5c3", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "gene\n", - "gene or gene product\n", - "genomic entity\n", - "chemical entity or gene or gene product\n", - "physical essence\n", - "ontology class\n", - "biological entity\n", - "named thing\n", - "entity\n", - "physical essence or occurrent\n", - "thing with taxon\n", - "macromolecular machine mixin\n" - ] - } - ], "source": [ "# view poly hierarchy - a gene is a chemical and biological entity\n", "\n", "ancestors = view.class_ancestors('gene')\n", "for a in ancestors:\n", " print(a)\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 23, "id": "2f9e0c55", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "72\n", - "gene to gene association\n", - "gene to gene homology association\n", - "gene to gene coexpression association\n", - "gene to phenotypic feature association\n", - "gene to disease association\n", - "gene as a model of disease association\n", - "gene has variant that contributes to disease association\n", - "gene to expression site association\n", - "gene to go term association\n", - "gene to gene product relationship\n", - "gene regulatory relationship\n" - ] - } - ], "source": [ "# how to find the predicates used for gene to disease mappings\n", "# association: \n", @@ -262,27 +161,14 @@ "for a in associations:\n", " if a.startswith('gene'):\n", " print(a)\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": 26, "id": "2779d0d9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "gene to disease association\n", - "SlotDefinition(name='subject', id_prefixes=[], definition_uri=None, aliases=[], local_names={'ga4gh': LocalName(local_name_source='ga4gh', local_name_value='annotation subject'), 'neo4j': LocalName(local_name_source='neo4j', local_name_value='node with outgoing relationship')}, conforms_to=None, mappings=[], exact_mappings=['owl:annotatedSource', 'OBAN:association_has_subject'], close_mappings=[], related_mappings=[], narrow_mappings=[], broad_mappings=[], extensions={}, annotations={}, description='gene in which variation is correlated with the disease, may be protective or causative or associative, or as a model', alt_descriptions={}, title=None, deprecated=None, todos=[], notes=[], comments=[], examples=[], in_subset=[], from_schema='https://w3id.org/biolink/biolink-model', imported_from=None, see_also=[], deprecated_element_has_exact_replacement=None, deprecated_element_has_possible_replacement=None, is_a='association slot', abstract=None, mixin=None, mixins=[], apply_to=[], values_from=[], created_by=None, created_on=None, last_updated_on=None, modified_by=None, status=None, string_serialization=None, singular_name=None, domain=None, slot_uri='rdf:subject', multivalued=None, inherited=None, readonly=None, ifabsent=None, inlined=None, inlined_as_list=None, key=None, identifier=None, designates_type=None, alias=None, owner='gene to disease association', domain_of=[], subproperty_of=None, symmetric=None, inverse=None, is_class_field=None, role=None, is_usage_slot=None, usage_slot_name=None, range='gene or gene product', range_expression=None, required=True, recommended=None, minimum_value=None, maximum_value=None, pattern=None, equals_string=None, equals_string_in=[], equals_number=None, equals_expression=None, minimum_cardinality=None, maximum_cardinality=None, has_member=None, all_members={}, none_of=[], exactly_one_of=[], any_of=[], all_of=[])\n", - "gene as a model of disease association\n", - "SlotDefinition(name='subject', id_prefixes=[], definition_uri=None, aliases=[], local_names={'ga4gh': LocalName(local_name_source='ga4gh', local_name_value='annotation subject'), 'neo4j': LocalName(local_name_source='neo4j', local_name_value='node with outgoing relationship')}, conforms_to=None, mappings=[], exact_mappings=['owl:annotatedSource', 'OBAN:association_has_subject'], close_mappings=[], related_mappings=[], narrow_mappings=[], broad_mappings=[], extensions={}, annotations={}, description='A gene that has a role in modeling the disease. This may be a model organism ortholog of a known disease gene, or it may be a gene whose mutants recapitulate core features of the disease.', alt_descriptions={}, title=None, deprecated=None, todos=[], notes=[], comments=[], examples=[], in_subset=[], from_schema='https://w3id.org/biolink/biolink-model', imported_from=None, see_also=[], deprecated_element_has_exact_replacement=None, deprecated_element_has_possible_replacement=None, is_a='association slot', abstract=None, mixin=None, mixins=[], apply_to=[], values_from=[], created_by=None, created_on=None, last_updated_on=None, modified_by=None, status=None, string_serialization=None, singular_name=None, domain=None, slot_uri='rdf:subject', multivalued=None, inherited=None, readonly=None, ifabsent=None, inlined=None, inlined_as_list=None, key=None, identifier=None, designates_type=None, alias=None, owner='gene as a model of disease association', domain_of=[], subproperty_of=None, symmetric=None, inverse=None, is_class_field=None, role=None, is_usage_slot=None, usage_slot_name=None, range='gene or gene product', range_expression=None, required=True, recommended=None, minimum_value=None, maximum_value=None, pattern=None, equals_string=None, equals_string_in=[], equals_number=None, equals_expression=None, minimum_cardinality=None, maximum_cardinality=None, has_member=None, all_members={}, none_of=[], exactly_one_of=[], any_of=[], all_of=[])\n", - "gene has variant that contributes to disease association\n", - "SlotDefinition(name='subject', id_prefixes=[], definition_uri=None, aliases=[], local_names={'ga4gh': LocalName(local_name_source='ga4gh', local_name_value='annotation subject'), 'neo4j': LocalName(local_name_source='neo4j', local_name_value='node with outgoing relationship')}, conforms_to=None, mappings=[], exact_mappings=['owl:annotatedSource', 'OBAN:association_has_subject'], close_mappings=[], related_mappings=[], narrow_mappings=[], broad_mappings=[], extensions={}, annotations={}, description='A gene that has a role in modeling the disease. This may be a model organism ortholog of a known disease gene, or it may be a gene whose mutants recapitulate core features of the disease.', alt_descriptions={}, title=None, deprecated=None, todos=[], notes=[], comments=[], examples=[], in_subset=[], from_schema='https://w3id.org/biolink/biolink-model', imported_from=None, see_also=[], deprecated_element_has_exact_replacement=None, deprecated_element_has_possible_replacement=None, is_a='association slot', abstract=None, mixin=None, mixins=[], apply_to=[], values_from=[], created_by=None, created_on=None, last_updated_on=None, modified_by=None, status=None, string_serialization=None, singular_name=None, domain=None, slot_uri='rdf:subject', multivalued=None, inherited=None, readonly=None, ifabsent=None, inlined=None, inlined_as_list=None, key=None, identifier=None, designates_type=None, alias=None, owner='gene has variant that contributes to disease association', domain_of=[], subproperty_of=None, symmetric=None, inverse=None, is_class_field=None, role=None, is_usage_slot=None, usage_slot_name=None, range='gene or gene product', range_expression=None, required=True, recommended=None, minimum_value=None, maximum_value=None, pattern=None, equals_string=None, equals_string_in=[], equals_number=None, equals_expression=None, minimum_cardinality=None, maximum_cardinality=None, has_member=None, all_members={}, none_of=[], exactly_one_of=[], any_of=[], all_of=[])\n" - ] - } - ], "source": [ "for association in associations:\n", " domain_element = view.get_element(view.induced_slot('subject', association).range)\n", @@ -294,28 +180,29 @@ " if 'gene or gene product' in view.class_ancestors(domain_element.name) and 'disease' in view.class_ancestors(range_element.name):\n", " print(association)\n", " print(view.induced_slot('subject', association))\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": null, "id": "04093dc5", "metadata": {}, - "outputs": [], "source": [ "# find predicates for those associations\n", "# at this point, navigating the online doc might be easiest if you just want answers. \n", "# programatically, we can get the predicates that have equivalent domain and range constraints to find which \n", "# coudl be used for associations above.\n" - ] + ], + "outputs": [] }, { "cell_type": "code", "execution_count": null, "id": "6c8ade22", "metadata": {}, - "outputs": [], - "source": [] + "source": [], + "outputs": [] } ], "metadata": { From 7ef6d905d32289ed59ae49e5c4e69670262a215e Mon Sep 17 00:00:00 2001 From: Vincent Kelleher Date: Thu, 27 Jun 2024 15:07:56 +0200 Subject: [PATCH 06/33] disable CI fail when code coverage upload fails Signed-off-by: Vincent Kelleher --- .github/workflows/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index e4ea7a4b..973acf9c 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -63,4 +63,4 @@ jobs: name: codecov-results-${{ matrix.os }}-${{ matrix.python-version }} token: ${{ secrets.CODECOV_TOKEN }} file: coverage.xml - fail_ci_if_error: true + fail_ci_if_error: false From af5a1a6e40ac24f8bd0eabe6ab37d04f1021a326 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 23 Jul 2024 19:30:11 -0700 Subject: [PATCH 07/33] follow paths in multi-layer relative imports --- linkml_runtime/utils/schemaview.py | 21 +++++- .../L0_0/L1_0_0/L2_0_0_0/child.yaml | 15 +++++ .../L0_0/L1_0_0/L2_0_0_1/child.yaml | 15 +++++ .../imports_relative/L0_0/L1_0_0/main.yaml | 17 +++++ .../L0_0/L1_0_0/neighbor.yaml | 13 ++++ .../L0_0/L1_0_1/L2_0_1_0/grandchild.yaml | 13 ++++ .../imports_relative/L0_0/L1_0_1/dupe.yaml | 11 ++++ .../L0_0/neighborhood_parent.yaml | 11 ++++ .../input/imports_relative/L0_0/parent.yaml | 13 ++++ .../L0_1/L1_1_0/L2_1_0_0/apple.yaml | 9 +++ .../L0_1/L1_1_0/L2_1_0_0/index.yaml | 12 ++++ .../L0_1/L1_1_0/L2_1_0_1/banana.yaml | 9 +++ .../L0_1/L1_1_0/L2_1_0_1/index.yaml | 12 ++++ .../imports_relative/L0_1/L1_1_0/index.yaml | 13 ++++ .../input/imports_relative/L0_1/cousin.yaml | 14 ++++ .../input/imports_relative/README.md | 65 +++++++++++++++++++ tests/test_utils/test_schemaview.py | 36 ++++++++++ 17 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_0/child.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_1/child.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_0/main.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_0/neighbor.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_1/L2_0_1_0/grandchild.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/L1_0_1/dupe.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/neighborhood_parent.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_0/parent.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/apple.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/index.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/banana.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/index.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/L1_1_0/index.yaml create mode 100644 tests/test_utils/input/imports_relative/L0_1/cousin.yaml create mode 100644 tests/test_utils/input/imports_relative/README.md diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 1511ca06..db479121 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -279,8 +279,25 @@ def imports_closure(self, imports: bool = True, traverse: Optional[bool] = None, if sn not in visited: for i in self.schema_map[sn].imports: # no self imports ;) - if i != sn: - todo.append(i) + if i == sn: + continue + + # resolve relative imports relative to the importing schema, rather than the + # origin schema. Imports can be a URI or Curie, and imports from the same + # directory don't require a ./, so if the current (sn) import is a relative + # path, and the target import doesn't have : (as in a curie or a URI) + # we prepend the relative path. This WILL make the key in the `schema_map` not + # equal to the literal text specified in the importing schema, but this is + # essential to sensible deduplication: eg. for + # - main.yaml (imports ./types.yaml, ./subdir/subschema.yaml) + # - types.yaml + # - subdir/subschema.yaml (imports ./types.yaml) + # - subdir/types.yaml + # we should treat the two `types.yaml` as separate schemas from the POV of the + # origin schema. + if sn.startswith('.') and ':' not in i: + i = os.path.normpath(str(Path(sn).parent / i)) + todo.append(i) # add item to closure # append + pop (above) is FILO queue, which correctly extends tree leaves, diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_0/child.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_0/child.yaml new file mode 100644 index 00000000..c3e714f5 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_0/child.yaml @@ -0,0 +1,15 @@ +id: child +name: child +title: child +description: | + Child class that shares the same name and ID as another child and should *not* be deduplicated, + but imports the dupe schema which *should* be deduplicated +imports: + - linkml:types + - ../../L1_0_1/dupe +classes: + Child1: + attributes: + value: + range: string + ifabsent: "Child1" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_1/child.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_1/child.yaml new file mode 100644 index 00000000..574e41c8 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/L2_0_0_1/child.yaml @@ -0,0 +1,15 @@ +id: child +name: child +title: child +description: | + Child class that shares the same name and ID as another child and should *not* be deduplicated, + but imports the dupe schema which *should* be deduplicated +imports: + - linkml:types + - ../../L1_0_1/dupe +classes: + Child2: + attributes: + value: + range: string + ifabsent: "Child2" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_0/main.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/main.yaml new file mode 100644 index 00000000..ad5c48a2 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/main.yaml @@ -0,0 +1,17 @@ +id: main +name: main +title: main +imports: + - linkml:types + - neighbor + - ../parent + - ../../L0_1/cousin + - ./L2_0_0_0/child + - ./L2_0_0_1/child +classes: + Main: + description: "Our intrepid main class!" + attributes: + value: + range: string + ifabsent: "Main" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_0/neighbor.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/neighbor.yaml new file mode 100644 index 00000000..f5635ef2 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_0/neighbor.yaml @@ -0,0 +1,13 @@ +id: neighbor +name: neighbor +title: neighbor +description: neighbor class imported without ./, but has relative imports of its own +imports: + - ../neighborhood_parent +classes: + Neighbor: + description: "Our main class's best friend!" + attributes: + value: + range: string + ifabsent: "Neighbor" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_1/L2_0_1_0/grandchild.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_1/L2_0_1_0/grandchild.yaml new file mode 100644 index 00000000..6a712980 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_1/L2_0_1_0/grandchild.yaml @@ -0,0 +1,13 @@ +id: grandchild +name: grandchild +title: grandchild +description: Grandchild schema that should cause a cycle with parent if we are just naively concatenating paths +imports: + - ../../parent +classes: + Grandchild: + description: "spoiled rotten!" + attributes: + value: + range: string + ifabsent: "Grandchild" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/L1_0_1/dupe.yaml b/tests/test_utils/input/imports_relative/L0_0/L1_0_1/dupe.yaml new file mode 100644 index 00000000..2223f898 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/L1_0_1/dupe.yaml @@ -0,0 +1,11 @@ +id: dupe +name: dupe +title: dupe +description: A Duplicate schema that is imported from multiple places (but should only actually be imported once) +classes: + Dupe: + description: "A class from the duplicated import!" + attributes: + value: + range: string + ifabsent: "Dupe" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/neighborhood_parent.yaml b/tests/test_utils/input/imports_relative/L0_0/neighborhood_parent.yaml new file mode 100644 index 00000000..1f94d4bc --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/neighborhood_parent.yaml @@ -0,0 +1,11 @@ +id: neighborhood_parent +name: neighborhood_parent +title: neighborhood_parent +description: parent of same-directory import +classes: + Neighborhood_Parent: + description: "Keeps the cul-de-sac fed and scolds the speeding traffic" + attributes: + value: + range: string + ifabsent: "Neighborhood_Parent" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_0/parent.yaml b/tests/test_utils/input/imports_relative/L0_0/parent.yaml new file mode 100644 index 00000000..f482e1d7 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_0/parent.yaml @@ -0,0 +1,13 @@ +id: parent +name: parent +title: parent +description: Parent of our main schema, imports two layers down in the grandchild +imports: + - linkml:types + - ./L1_0_1/L2_0_1_0/grandchild +classes: + Parent: + attributes: + value: + range: string + ifabsent: "Parent" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/apple.yaml b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/apple.yaml new file mode 100644 index 00000000..742e27bd --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/apple.yaml @@ -0,0 +1,9 @@ +id: apple +name: apple +title: apple +classes: + Apple: + attributes: + value: + range: string + ifabsent: "Apple" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/index.yaml b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/index.yaml new file mode 100644 index 00000000..685f5e61 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_0/index.yaml @@ -0,0 +1,12 @@ +id: L1_1_0/L2_1_0_0/index +name: index +title: index +imports: + - apple +classes: + L2100Index: + description: "A class from an index!" + attributes: + value: + range: string + ifabsent: "L2100Index" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/banana.yaml b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/banana.yaml new file mode 100644 index 00000000..88dd3bb8 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/banana.yaml @@ -0,0 +1,9 @@ +id: banana +name: banana +title: banana +classes: + Banana: + attributes: + value: + range: string + ifabsent: "Banana" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/index.yaml b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/index.yaml new file mode 100644 index 00000000..fae27ce5 --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/L2_1_0_1/index.yaml @@ -0,0 +1,12 @@ +id: L1_1_0/L2_1_0_1/index +name: index +title: index +imports: + - ./banana +classes: + L2101Index: + description: "A class from an index!" + attributes: + value: + range: string + ifabsent: "L2101Index" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/L1_1_0/index.yaml b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/index.yaml new file mode 100644 index 00000000..84efda1f --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/L1_1_0/index.yaml @@ -0,0 +1,13 @@ +id: L1_1_0/index +name: index +title: index +imports: + - ./L2_1_0_0/index + - ./L2_1_0_1/index +classes: + L110Index: + description: "A class from an index!" + attributes: + value: + range: string + ifabsent: "L110Index" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/L0_1/cousin.yaml b/tests/test_utils/input/imports_relative/L0_1/cousin.yaml new file mode 100644 index 00000000..0f82a56a --- /dev/null +++ b/tests/test_utils/input/imports_relative/L0_1/cousin.yaml @@ -0,0 +1,14 @@ +id: cousin +name: cousin +title: cousin +description: Testing for "index" style imports where the same name is used multiple times in a non-duplicating way +imports: + - linkml:types + - ./L1_1_0/index +classes: + Cousin: + description: "The cousin of our intrepid main class!" + attributes: + value: + range: string + ifabsent: "Cousin" \ No newline at end of file diff --git a/tests/test_utils/input/imports_relative/README.md b/tests/test_utils/input/imports_relative/README.md new file mode 100644 index 00000000..a9f97ec7 --- /dev/null +++ b/tests/test_utils/input/imports_relative/README.md @@ -0,0 +1,65 @@ +# Relative Imports test schemas + +This tests the ability for schemaview to follow chains of relative imports - ie. that it resolves +each schema's relative imports with respect to the *imported* schema rather than the *origin* schema. + +This test case handles resolving relative imports in both directions, as well as neighboring directories +starting from `L0_0/L1_0_0/main.yaml` schema. Each directory is labeled with a "level" (`L{n}`) and a second number for +the "column" of the directory - eg `L1_1_*` is within `L0_1`, and each subdirectory adds more children. + +Note that this does **not** test that overrides are parsed correctly, that is tested in the `imports` directory +next to this - this is specifically about relative file handling (the same import ordering should happen regardless of +where the imports are located) + +The schema in this directory make a graph like this, starting from main (as absolute paths) + +``` +main --> linkml:types +main --> L0_0/L1_0_0/neighbor +main --> L0_0/parent +main --> L0_1/cousin +main --> L0_0/L1_0_0/L2_0_0_0/child +main --> L0_0/L1_0_0/L2_0_0_1/child +L0_0/L1_0_0/neighbor --> L0_0/neighborhood_parent +L0_0/parent --> L0_0/L1_0_1/L2_0_1_0/grandchild +L0_0/L1_0_1/L2_0_1_0/grandchild --> L0_0/parent +L0_1/cousin --> L0_1/L1_1_0/index +L0_1/L1_1_0/index --> L0_1/L1_1_0/L2_1_0_0/index +L0_1/L1_1_0/index --> L0_1/L1_1_0/L2_1_0_1/index +L0_1/L1_1_0/L2_1_0_0/index --> L0_1/L1_1_0/L2_1_0_0/apple +L0_1/L1_1_0/L2_1_0_1/index --> L0_1/L1_1_0/L2_1_0_1/banana +L0_0/L1_0_0/L2_0_0_0/child --> L0_0/L1_0_1/dupe +L0_0/L1_0_0/L2_0_0_1/child --> L0_0/L1_0_1/dupe + +``` + +From the perspective of the main schema, we should end up with a resolved set of imports like: + +``` +- linkml:types' +- ../neighborhood_parent +- neighbor +- ../parent +- ../L1_0_1/L2_0_1_0/grandchild +- ../../L0_1/L1_1_0/L2_1_0_0/apple +- ../../L0_1/L1_1_0/L2_1_0_0/index +- ../../L0_1/L1_1_0/L2_1_0_1/banana +- ../../L0_1/L1_1_0/L2_1_0_1/index +- ../../L0_1/L1_1_0/index +- ../../L0_1/cousin +- ../L1_0_1/dupe +- ./L2_0_0_0/child +- ./L2_0_0_1/child +- main +``` + +(see the `imports` test directory and `test_imports_closure_order` for notes on ordering) + +The specific things tested by the schemas are: +- same-directory import +- child directory import (`./`) +- parent directory import (`../`) +- double child and parent skips (`../../`, `./path/path`) +- schemas with duplicate names (`child.yaml`, `index.yaml`) that should all be imported +- multiple imports of the same schema (`dupe.yaml`) +- cycles: since importing will mutate the path, ensure that we don't end up importing the same schemas forever. \ No newline at end of file diff --git a/tests/test_utils/test_schemaview.py b/tests/test_utils/test_schemaview.py index 367fb842..de2634d6 100644 --- a/tests/test_utils/test_schemaview.py +++ b/tests/test_utils/test_schemaview.py @@ -19,6 +19,7 @@ SCHEMA_WITH_IMPORTS = Path(INPUT_DIR) / 'kitchen_sink.yaml' SCHEMA_WITH_STRUCTURED_PATTERNS = Path(INPUT_DIR) / "pattern-example.yaml" SCHEMA_IMPORT_TREE = Path(INPUT_DIR) / 'imports' / 'main.yaml' +SCHEMA_RELATIVE_IMPORT_TREE = Path(INPUT_DIR) / 'imports_relative' / 'L0_0' / 'L1_0_0' / 'main.yaml' yaml_loader = YAMLLoader() IS_CURRENT = 'is current' @@ -577,6 +578,41 @@ def test_imports_overrides(self): self.assertEqual(defaults, target) + def test_imports_relative(self): + """ + Relative imports from relative imports should evaluate relative to the *importing* schema, + not the *origin* schema. + + See + - input/imports_relative/README.md for an explanation of the test schema + """ + sv = SchemaView(SCHEMA_RELATIVE_IMPORT_TREE) + closure = sv.imports_closure(imports=True) + + assert len(closure) == len(sv.schema_map.keys()) + assert closure == [ + 'linkml:types', + '../neighborhood_parent', + 'neighbor', + '../parent', + '../L1_0_1/L2_0_1_0/grandchild', + '../../L0_1/L1_1_0/L2_1_0_0/apple', + '../../L0_1/L1_1_0/L2_1_0_0/index', + '../../L0_1/L1_1_0/L2_1_0_1/banana', + '../../L0_1/L1_1_0/L2_1_0_1/index', + '../../L0_1/L1_1_0/index', + '../../L0_1/cousin', + '../L1_0_1/dupe', + './L2_0_0_0/child', + './L2_0_0_1/child', + 'main' + ] + + # check that we can actually get the classes from the same-named schema + classes = sv.all_classes(imports=True) + assert 'L110Index' in classes + assert 'L2100Index' in classes + assert 'L2101Index' in classes def test_direct_remote_imports(self): """ From 363757377a456fbefff7c638c5dff6948f5c6aa1 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 23 Jul 2024 21:14:03 -0700 Subject: [PATCH 08/33] swap out bool with is None --- linkml_runtime/utils/schemaview.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 1511ca06..504bee44 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1317,7 +1317,7 @@ def induced_slot(self, slot_name: SLOT_NAME, class_name: CLASS_NAME = None, impo # attributes take priority over schema-level slot definitions, IF # the attributes is declared for the class or an ancestor slot_comes_from_attribute = False - if cls: + if cls is not None: slot = self.get_slot(slot_name, imports, attributes=False) # traverse ancestors (reflexive), starting with # the main class @@ -1353,7 +1353,7 @@ def induced_slot(self, slot_name: SLOT_NAME, class_name: CLASS_NAME = None, impo # inheritance of slots; priority order # slot-level assignment < ancestor slot_usage < self slot_usage v = getattr(induced_slot, metaslot_name, None) - if not cls: + if cls is None: propagated_from = [] else: propagated_from = self.class_ancestors(class_name, reflexive=True, mixins=True) From 652262dc3018bfe99acf25cec66946489dd4d99e Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 21:58:08 -0700 Subject: [PATCH 09/33] fetch upstream tags and ensure dynamic versioning plugin installed --- .github/workflows/test-upstream.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index c009610f..bd3a7d5c 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -43,6 +43,13 @@ jobs: path: linkml-runtime fetch-depth: 0 + - name: Ensure tags if not run from main repo + if: github.repository != 'linkml/linkml-runtime' + working-directory: linkml-runtime + run: | + git remote add upstream https://github.com/linkml/linkml-runtime + git fetch upstream --tags + - name: set up python uses: actions/setup-python@v5 with: @@ -54,6 +61,9 @@ jobs: virtualenvs-create: true virtualenvs-in-project: true + - name: Install dynamic versioning plugin + run: poetry self add "poetry-dynamic-versioning[plugin]" + - name: Load cached venv id: cached-poetry-dependencies uses: actions/cache@v3 From d9cbabcc114f810278f3a4f6d7394016b35b7e95 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 22:00:23 -0700 Subject: [PATCH 10/33] how about just the tags --- .github/workflows/test-upstream.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index bd3a7d5c..d893d514 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -61,9 +61,6 @@ jobs: virtualenvs-create: true virtualenvs-in-project: true - - name: Install dynamic versioning plugin - run: poetry self add "poetry-dynamic-versioning[plugin]" - - name: Load cached venv id: cached-poetry-dependencies uses: actions/cache@v3 From 6109b4214dba163f4bf77baff4f7fab6c67786dd Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 22:03:22 -0700 Subject: [PATCH 11/33] nope need the plugin explicitly installed --- .github/workflows/test-upstream.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index d893d514..8b6b057f 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -24,6 +24,8 @@ jobs: - python-version: "3.10" pydantic-version: "1" runs-on: ${{ matrix.os }} + env: + POETRY_VIRTUALENVS_IN_PROJECT: true steps: @@ -55,11 +57,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: install poetry - uses: snok/install-poetry@v1 - with: - virtualenvs-create: true - virtualenvs-in-project: true + - name: Install poetry + run: pipx install poetry + + - name: Install dynamic versioning plugin + run: poetry self add "poetry-dynamic-versioning[plugin]" - name: Load cached venv id: cached-poetry-dependencies From 0cf5c124113654047f5039489321d7612256e548 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 22:06:23 -0700 Subject: [PATCH 12/33] upstream dropped support for pydantic 1 --- .github/workflows/test-upstream.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index 8b6b057f..d667ed6a 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -11,18 +11,9 @@ jobs: matrix: os: [ ubuntu-latest, windows-latest ] python-version: [ "3.8", "3.9", "3.10", "3.11" ] - pydantic-version: [ "1", "2" ] exclude: - os: windows-latest python-version: "3.8" - - os: windows-latest - pydantic-version: "1" - - python-version: "3.8" - pydantic-version: "1" - - python-version: "3.9" - pydantic-version: "1" - - python-version: "3.10" - pydantic-version: "1" runs-on: ${{ matrix.os }} env: POETRY_VIRTUALENVS_IN_PROJECT: true @@ -81,11 +72,6 @@ jobs: working-directory: linkml run: poetry add ../linkml-runtime - # use correct pydantic version - - name: install pydantic - working-directory: linkml - run: poetry add pydantic@^${{ matrix.pydantic-version }} - # note that we run the installation step always, even if we restore a venv, # the cache will restore the old version of linkml-runtime, but the lockfile # will only store the directory dependency (and thus will reinstall it) From 0646a42eb82a1a2f7baf3168c77b16808e4e142a Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 22:09:36 -0700 Subject: [PATCH 13/33] add 3.12 bc upstream has it --- .github/workflows/test-upstream.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index d667ed6a..780e53d3 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -10,7 +10,7 @@ jobs: strategy: matrix: os: [ ubuntu-latest, windows-latest ] - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] exclude: - os: windows-latest python-version: "3.8" From 42181a70da14869f4b7cc7aaa89e7e0d3fb2b91b Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 25 Jul 2024 22:11:50 -0700 Subject: [PATCH 14/33] make exclusions match upstream --- .github/workflows/test-upstream.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-upstream.yaml b/.github/workflows/test-upstream.yaml index 780e53d3..eb07758c 100644 --- a/.github/workflows/test-upstream.yaml +++ b/.github/workflows/test-upstream.yaml @@ -13,7 +13,11 @@ jobs: python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] exclude: - os: windows-latest - python-version: "3.8" + python-version: "3.9" + - os: windows-latest + python-version: "3.10" + - os: windows-latest + python-version: "3.11" runs-on: ${{ matrix.os }} env: POETRY_VIRTUALENVS_IN_PROJECT: true From 798591b29661efa8fef05703c79e3614d40f911d Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Wed, 31 Jul 2024 16:37:45 -0700 Subject: [PATCH 15/33] induced_slot() now materializes non-scalar metaslots --- linkml_runtime/utils/schemaview.py | 6 +- .../test_issues/input/linkml_issue_2224.yaml | 62 +++++++++++++++++++ tests/test_issues/test_issue_2224.py | 52 ++++++++++++++++ 3 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 tests/test_issues/input/linkml_issue_2224.yaml create mode 100644 tests/test_issues/test_issue_2224.py diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 504bee44..829729fc 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -12,6 +12,7 @@ from linkml_runtime.utils.namespaces import Namespaces from deprecated.classic import deprecated from linkml_runtime.utils.context_utils import parse_import_map, map_import +from linkml_runtime.utils.formatutils import is_empty from linkml_runtime.utils.pattern import PatternResolver from linkml_runtime.linkml_model.meta import * from linkml_runtime.exceptions import OrderingError @@ -1369,7 +1370,10 @@ def induced_slot(self, slot_name: SLOT_NAME, class_name: CLASS_NAME = None, impo if v2 is not None: v = COMBINE[metaslot_name](v, v2) else: - if v2 is not None: + # can rewrite below as: + # 1. if v2: + # 2. if v2 is not None and ((isinstance(v2, (dict, list)) and v2) or (isinstance(v2, JsonObj) and as_dict(v2))) + if not is_empty(v2): v = v2 logging.debug(f'{v} takes precedence over {v2} for {induced_slot.name}.{metaslot_name}') if v is None: diff --git a/tests/test_issues/input/linkml_issue_2224.yaml b/tests/test_issues/input/linkml_issue_2224.yaml new file mode 100644 index 00000000..1adc807e --- /dev/null +++ b/tests/test_issues/input/linkml_issue_2224.yaml @@ -0,0 +1,62 @@ +id: DJControllerSchema +name: DJControllerSchema +title: LinkML schema for my DJ controller +imports: +- linkml:types +classes: + DJController: + slots: + - jog_wheels + - tempo + - volume_faders + - crossfaders + slot_usage: + tempo: + examples: + - value: 120.0 + - value: 144.0 + - value: 126.8 + - value: 102.6 + annotations: + expected_value: a number between 0 and 300 + preferred_unit: BPM +slots: + jog_wheels: + description: The number of jog wheels on the DJ controller + range: integer + examples: + - value: 2 + annotations: + expected_value: an integer between 0 and 4 + in_subset: decks + tempo: + description: The tempo of the track (in BPM) + range: float + examples: + - value: 120.0 + - value: 144.0 + annotations: + expected_value: a number between 0 and 200 + preferred_unit: BPM + in_subset: decks + volume_faders: + description: The number of volume faders on the DJ controller + range: integer + examples: + - value: 4 + annotations: + expected_value: an integer between 0 and 8 + in_subset: mixer + crossfaders: + description: The number of crossfaders on the DJ controller + range: integer + examples: + - value: 1 + annotations: + expected_value: an integer between 0 and 2 + in_subset: mixer +subsets: + decks: + description: A subset that represents the components in the deck portion of a DJ controller + mixer: + description: A subset that represents the components in the mixer portion of a DJ controller diff --git a/tests/test_issues/test_issue_2224.py b/tests/test_issues/test_issue_2224.py new file mode 100644 index 00000000..b570679e --- /dev/null +++ b/tests/test_issues/test_issue_2224.py @@ -0,0 +1,52 @@ +import unittest +from unittest import TestCase +from linkml_runtime.utils.schemaview import SchemaView +from jsonasobj2 import JsonObj + +from tests.test_issues.environment import env + + +class Issue2224TestCase(TestCase): + env = env + + def test_issue_2224_slot_classes(self): + sv = SchemaView(env.input_path("linkml_issue_2224.yaml")) + cls = sv.induced_class("DJController") + + # jog_wheels is a slot asserted at the schema level + # check that the range (scalar value) is being materialized properly + self.assertEqual(cls.attributes["jog_wheels"].range, "integer") + # check that the examples (list) is being materialized properly + self.assertIsInstance(cls.attributes["jog_wheels"].examples, list) + for example in cls.attributes["jog_wheels"].examples: + self.assertEqual(example.value, "2") + for example in cls.attributes["volume_faders"].examples: + self.assertEqual(example.value, "4") + for example in cls.attributes["crossfaders"].examples: + self.assertEqual(example.value, "1") + # check that the annotations (dictionary) is being materialized properly + self.assertIsInstance(cls.attributes["jog_wheels"].annotations, JsonObj) + self.assertEqual( + cls.attributes["jog_wheels"].annotations.expected_value.value, + "an integer between 0 and 4", + ) + self.assertEqual( + cls.attributes["volume_faders"].annotations.expected_value.value, + "an integer between 0 and 8", + ) + + # examples being overriden by slot_usage modification + for example in cls.attributes["tempo"].examples: + self.assertIn(example.value, ["120.0", "144.0", "126.8", "102.6"]) + # annotations being overriden by slot_usage modification + self.assertEqual( + cls.attributes["tempo"].annotations.expected_value.value, + "a number between 0 and 300", + ) + self.assertEqual( + cls.attributes["tempo"].annotations.preferred_unit.value, "BPM" + ) + + +if __name__ == "__main__": + unittest.main() From 672c80d83e391b67211554d7788dc65d0c9f198f Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Thu, 1 Aug 2024 12:20:12 -0700 Subject: [PATCH 16/33] test for exact values in examples under `tempo` slot in `linkml_issue_2224.yaml` Co-authored-by: Jonny Saunders --- tests/test_issues/test_issue_2224.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_issues/test_issue_2224.py b/tests/test_issues/test_issue_2224.py index b570679e..eeb77fcf 100644 --- a/tests/test_issues/test_issue_2224.py +++ b/tests/test_issues/test_issue_2224.py @@ -36,8 +36,7 @@ def test_issue_2224_slot_classes(self): ) # examples being overriden by slot_usage modification - for example in cls.attributes["tempo"].examples: - self.assertIn(example.value, ["120.0", "144.0", "126.8", "102.6"]) + assert cls.attributes["tempo"].examples == [Example(value='120.0'), Example(value='144.0'), Example(value='126.8'), Example(value='102.6')] # annotations being overriden by slot_usage modification self.assertEqual( cls.attributes["tempo"].annotations.expected_value.value, From 15c17895d4ef776ad272a79549c998571582b87c Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Thu, 1 Aug 2024 14:58:25 -0700 Subject: [PATCH 17/33] address PR review comments on improving test_materialize_nonscalar_slot_usage() --- linkml_runtime/utils/schemaview.py | 6 ++- tests/test_issues/test_issue_2224.py | 51 ------------------- .../input/DJ_controller_schema.yaml} | 3 -- 3 files changed, 5 insertions(+), 55 deletions(-) delete mode 100644 tests/test_issues/test_issue_2224.py rename tests/{test_issues/input/linkml_issue_2224.yaml => test_utils/input/DJ_controller_schema.yaml} (93%) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 829729fc..60619281 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1372,7 +1372,11 @@ def induced_slot(self, slot_name: SLOT_NAME, class_name: CLASS_NAME = None, impo else: # can rewrite below as: # 1. if v2: - # 2. if v2 is not None and ((isinstance(v2, (dict, list)) and v2) or (isinstance(v2, JsonObj) and as_dict(v2))) + # 2. if v2 is not None and + # ( + # (isinstance(v2, (dict, list)) and v2) or + # (isinstance(v2, JsonObj) and as_dict(v2)) + # ) if not is_empty(v2): v = v2 logging.debug(f'{v} takes precedence over {v2} for {induced_slot.name}.{metaslot_name}') diff --git a/tests/test_issues/test_issue_2224.py b/tests/test_issues/test_issue_2224.py deleted file mode 100644 index eeb77fcf..00000000 --- a/tests/test_issues/test_issue_2224.py +++ /dev/null @@ -1,51 +0,0 @@ -import unittest -from unittest import TestCase -from linkml_runtime.utils.schemaview import SchemaView -from jsonasobj2 import JsonObj - -from tests.test_issues.environment import env - - -class Issue2224TestCase(TestCase): - env = env - - def test_issue_2224_slot_classes(self): - sv = SchemaView(env.input_path("linkml_issue_2224.yaml")) - cls = sv.induced_class("DJController") - - # jog_wheels is a slot asserted at the schema level - # check that the range (scalar value) is being materialized properly - self.assertEqual(cls.attributes["jog_wheels"].range, "integer") - # check that the examples (list) is being materialized properly - self.assertIsInstance(cls.attributes["jog_wheels"].examples, list) - for example in cls.attributes["jog_wheels"].examples: - self.assertEqual(example.value, "2") - for example in cls.attributes["volume_faders"].examples: - self.assertEqual(example.value, "4") - for example in cls.attributes["crossfaders"].examples: - self.assertEqual(example.value, "1") - # check that the annotations (dictionary) is being materialized properly - self.assertIsInstance(cls.attributes["jog_wheels"].annotations, JsonObj) - self.assertEqual( - cls.attributes["jog_wheels"].annotations.expected_value.value, - "an integer between 0 and 4", - ) - self.assertEqual( - cls.attributes["volume_faders"].annotations.expected_value.value, - "an integer between 0 and 8", - ) - - # examples being overriden by slot_usage modification - assert cls.attributes["tempo"].examples == [Example(value='120.0'), Example(value='144.0'), Example(value='126.8'), Example(value='102.6')] - # annotations being overriden by slot_usage modification - self.assertEqual( - cls.attributes["tempo"].annotations.expected_value.value, - "a number between 0 and 300", - ) - self.assertEqual( - cls.attributes["tempo"].annotations.preferred_unit.value, "BPM" - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_issues/input/linkml_issue_2224.yaml b/tests/test_utils/input/DJ_controller_schema.yaml similarity index 93% rename from tests/test_issues/input/linkml_issue_2224.yaml rename to tests/test_utils/input/DJ_controller_schema.yaml index 1adc807e..1c82c9a5 100644 --- a/tests/test_issues/input/linkml_issue_2224.yaml +++ b/tests/test_utils/input/DJ_controller_schema.yaml @@ -17,9 +17,6 @@ classes: - value: 144.0 - value: 126.8 - value: 102.6 - annotations: - expected_value: a number between 0 and 300 - preferred_unit: BPM slots: jog_wheels: description: The number of jog wheels on the DJ controller From 929e147b57c9d2c7bcc71cfefaebc8982d7942de Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Thu, 1 Aug 2024 14:59:34 -0700 Subject: [PATCH 18/33] push up test_materialize_nonscalar_slot_usage() --- tests/test_utils/test_schemaview.py | 32 ++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/test_utils/test_schemaview.py b/tests/test_utils/test_schemaview.py index 367fb842..7f093c6b 100644 --- a/tests/test_utils/test_schemaview.py +++ b/tests/test_utils/test_schemaview.py @@ -6,8 +6,10 @@ from typing import List from unittest import TestCase +from jsonasobj2 import JsonObj + from linkml_runtime.dumpers import yaml_dumper -from linkml_runtime.linkml_model.meta import SchemaDefinition, ClassDefinition, SlotDefinitionName, SlotDefinition, \ +from linkml_runtime.linkml_model.meta import Example, SchemaDefinition, ClassDefinition, SlotDefinitionName, SlotDefinition, \ ClassDefinitionName, Prefix from linkml_runtime.loaders.yaml_loader import YAMLLoader from linkml_runtime.utils.introspection import package_schemaview @@ -945,6 +947,34 @@ def test_is_inlined(self): actual_result = sv.is_inlined(slot) self.assertEqual(actual_result, expected_result) + def test_materialize_nonscalar_slot_usage(self): + schema_path = os.path.join(INPUT_DIR, "DJ_controller_schema.yaml") + sv = SchemaView(schema_path) + cls = sv.induced_class("DJController") + + # jog_wheels is a slot asserted at the schema level + # check that the range (scalar value) is being materialized properly + assert cls.attributes["jog_wheels"].range == "integer" + # check that the examples (list) is being materialized properly + assert isinstance(cls.attributes["jog_wheels"].examples, list) + for example in cls.attributes["jog_wheels"].examples: + assert example.value == "2" + for example in cls.attributes["volume_faders"].examples: + assert example.value == "4" + for example in cls.attributes["crossfaders"].examples: + assert example.value == "1" + # check that the annotations (dictionary) is being materialized properly + assert isinstance(cls.attributes["jog_wheels"].annotations, JsonObj) + assert cls.attributes["jog_wheels"].annotations.expected_value.value == "an integer between 0 and 4" + assert cls.attributes["volume_faders"].annotations.expected_value.value == "an integer between 0 and 8" + + # examples being overridden by slot_usage modification + assert cls.attributes["tempo"].examples == [Example(value='120.0'), Example(value='144.0'), Example(value='126.8'), Example(value='102.6')] + # annotations remain the same / propagated as is from schema-level + # definition of `tempo` slot + assert cls.attributes["tempo"].annotations.expected_value.value == "a number between 0 and 200" + assert cls.attributes["tempo"].annotations.preferred_unit.value == "BPM" + if __name__ == '__main__': unittest.main() From 0f263b9689ff5f6034ddf3bd08b7de7448b54c16 Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Thu, 1 Aug 2024 16:56:32 -0700 Subject: [PATCH 19/33] docstring for `test_materialize_nonscalar_slot_usage()` in `tests/test_utils/test_schemaview.py` Co-authored-by: Jonny Saunders --- tests/test_utils/test_schemaview.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_utils/test_schemaview.py b/tests/test_utils/test_schemaview.py index 7f093c6b..705d19e7 100644 --- a/tests/test_utils/test_schemaview.py +++ b/tests/test_utils/test_schemaview.py @@ -948,6 +948,14 @@ def test_is_inlined(self): self.assertEqual(actual_result, expected_result) def test_materialize_nonscalar_slot_usage(self): + """ + ``slot_usage`` overrides values in the base slot definition without + clobbering unrelated, nonscalar values. + + See: + - https://github.com/linkml/linkml/issues/2224 + - https://github.com/linkml/linkml-runtime/pull/335 + """ schema_path = os.path.join(INPUT_DIR, "DJ_controller_schema.yaml") sv = SchemaView(schema_path) cls = sv.induced_class("DJController") From 3d8de35527dedf8e2fd9ead1fdc49008c33c055f Mon Sep 17 00:00:00 2001 From: Bob Chevalier Date: Fri, 2 Aug 2024 20:30:38 -0400 Subject: [PATCH 20/33] Handle attributes edge case in schema_as_dict --- linkml_runtime/utils/schema_as_dict.py | 2 +- tests/test_utils/test_schema_as_dict.py | 27 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/linkml_runtime/utils/schema_as_dict.py b/linkml_runtime/utils/schema_as_dict.py index b83b02dc..34fe2f89 100644 --- a/linkml_runtime/utils/schema_as_dict.py +++ b/linkml_runtime/utils/schema_as_dict.py @@ -42,7 +42,7 @@ def _remove_names(obj: Any, parent: Optional[str]) -> Any: :return: """ if isinstance(obj, dict): - return {k: _remove_names(v, k) for k, v in obj.items() if k != 'name' or parent is None or parent in ['slots', 'slot_usage']} + return {k: _remove_names(v, k) for k, v in obj.items() if k != 'name' or parent is None or parent in ['slots', 'slot_usage', 'attributes']} elif isinstance(obj, list): return [_remove_names(x, parent) for x in obj] else: diff --git a/tests/test_utils/test_schema_as_dict.py b/tests/test_utils/test_schema_as_dict.py index 0965df5a..569e84f0 100644 --- a/tests/test_utils/test_schema_as_dict.py +++ b/tests/test_utils/test_schema_as_dict.py @@ -7,6 +7,7 @@ from linkml_runtime.loaders.yaml_loader import YAMLLoader from linkml_runtime.utils.schema_as_dict import schema_as_yaml_dump, schema_as_dict from linkml_runtime.utils.schemaview import SchemaView +from linkml_runtime.utils.schema_builder import ClassDefinition, SchemaBuilder, SlotDefinition from tests.test_utils import INPUT_DIR, OUTPUT_DIR @@ -45,5 +46,31 @@ def test_as_dict(self): assert 'text' not in pv self.assertIn('name', obj['slots']) + + def test_as_dict_with_attributes(self): + """ + tests schema_as_dict, see https://github.com/linkml/linkml/issues/100 + """ + + # Create a class with an attribute named 'name' + cls = ClassDefinition(name="Patient") + slots = [ + SlotDefinition(name="id", range="string"), + SlotDefinition(name="name", range="string"), + ] + builder = SchemaBuilder() + builder.add_class(cls=cls, slots=slots, use_attributes=True) + + # Verify that the 'name' slot exists in the schema + view = SchemaView(builder.schema) + self.assertIn('name', view.all_slots()) + + # Convert the schema to a dict + obj = schema_as_dict(view.schema) + + # Verify that the 'name' slot still exists, as an attribute + self.assertIn('name', obj['classes']['Patient']['attributes']) + + if __name__ == '__main__': unittest.main() From 8a157fb6d79b503e820e04e523b2cc6a6061e011 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 21 Mar 2024 05:36:42 -0700 Subject: [PATCH 21/33] pretty print models --- linkml_runtime/utils/yamlutils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index a4b0677f..4c41f3a9 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -1,6 +1,7 @@ from copy import copy from json import JSONDecoder from typing import Union, Any, List, Optional, Type, Callable, Dict +from pprint import pformat import yaml from deprecated.classic import deprecated @@ -11,6 +12,7 @@ from linkml_runtime.utils.context_utils import CONTEXTS_PARAM_TYPE, merge_contexts from linkml_runtime.utils.formatutils import is_empty +from linkml_runtime.utils.formatutils import remove_empty_items YAMLObjTypes = Union[JsonObjTypes, "YAMLRoot"] @@ -277,6 +279,11 @@ def MissingRequiredField(self, field_name: str) -> None: """ Generic loader error handler """ raise ValueError(f"{field_name} must be supplied") + def __str__(self): + res = remove_empty_items(self) + return pformat(as_dict(res),indent=2,compact=True) + + def root_representer(dumper: yaml.Dumper, data: YAMLRoot): """ YAML callback -- used to filter out empty values (None, {}, [] and false) From 48a6465f254556af701e2a3810357fb0189394f9 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 21 Mar 2024 05:45:40 -0700 Subject: [PATCH 22/33] whoops thatos the same module --- linkml_runtime/utils/yamlutils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 4c41f3a9..1042c769 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -11,8 +11,7 @@ from yaml.constructor import ConstructorError from linkml_runtime.utils.context_utils import CONTEXTS_PARAM_TYPE, merge_contexts -from linkml_runtime.utils.formatutils import is_empty -from linkml_runtime.utils.formatutils import remove_empty_items +from linkml_runtime.utils.formatutils import is_empty, remove_empty_items YAMLObjTypes = Union[JsonObjTypes, "YAMLRoot"] From 9613bd4772bb833d6fcce337627c6b348464cd09 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 25 Mar 2024 17:08:38 -0700 Subject: [PATCH 23/33] separate repr and str --- linkml_runtime/utils/yamlutils.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 1042c769..4b4d184a 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -1,7 +1,9 @@ +import pdb from copy import copy from json import JSONDecoder from typing import Union, Any, List, Optional, Type, Callable, Dict from pprint import pformat +import textwrap import yaml from deprecated.classic import deprecated @@ -11,7 +13,7 @@ from yaml.constructor import ConstructorError from linkml_runtime.utils.context_utils import CONTEXTS_PARAM_TYPE, merge_contexts -from linkml_runtime.utils.formatutils import is_empty, remove_empty_items +from linkml_runtime.utils.formatutils import is_empty, remove_empty_items, is_list, is_dict, items YAMLObjTypes = Union[JsonObjTypes, "YAMLRoot"] @@ -278,10 +280,20 @@ def MissingRequiredField(self, field_name: str) -> None: """ Generic loader error handler """ raise ValueError(f"{field_name} must be supplied") + def __repr__(self): + """Only reformat 1-layer deep to preserve __repr__ of child objects""" + res = {} + for key, val in items(self): + if val == [] or val == {} or val is None: + continue + res[key] = val + return self.__class__.__name__ + '(' + pformat(res, indent=2, + compact=True) + ')' + def __str__(self): + """Dump everything into a dict, recursively, stringifying it all""" res = remove_empty_items(self) - return pformat(as_dict(res),indent=2,compact=True) - + return self.__class__.__name__ + '(' + pformat(res, indent=2, compact=True) + ')' def root_representer(dumper: yaml.Dumper, data: YAMLRoot): From 23c7c6225d9379fbaffa580d96f397c4cbe736ef Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 25 Mar 2024 17:37:02 -0700 Subject: [PATCH 24/33] convert string comparison tests to instance comparisons --- .../test_utils/test_inlined_as_dict_forms.py | 78 +++++++++++-------- .../test_utils/test_inlined_as_list_forms.py | 70 +++++++++-------- 2 files changed, 84 insertions(+), 64 deletions(-) diff --git a/tests/test_utils/test_inlined_as_dict_forms.py b/tests/test_utils/test_inlined_as_dict_forms.py index 406bdb81..01aa4ac1 100644 --- a/tests/test_utils/test_inlined_as_dict_forms.py +++ b/tests/test_utils/test_inlined_as_dict_forms.py @@ -9,25 +9,25 @@ class InlinedAsDictTestcase(unittest.TestCase): """ Test the various YAML forms for inlined_as_dict entries""" def test_list_variations(self): v = E() - self.assertEqual("E(ev={})", str(v), "No entries, period") + self.assertEqual(v.ev, {}, "No entries, period") v = E({}) - self.assertEqual("E(ev={})", str(v), "Default is empty dictionary") + self.assertEqual(v.ev, {}, "Default is empty dictionary") v = E([]) - self.assertEqual('E(ev={})', str(v), "Empty list becomes empty dictionary") + self.assertEqual(v.ev, {}, "Empty list becomes empty dictionary") v = E(JsonObj()) - self.assertEqual('E(ev={})', str(v), "Empty JsonObj becomes empty dictionary") + self.assertEqual(v.ev, {}, "Empty JsonObj becomes empty dictionary") # Form 5 -- list of keys v1 = JsonObj(["k1", "k2"]) v = E(v1) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2=None, s3=None), 'k2': EInst(s1='k2', s2=None, s3=None)})", - str(v)) + self.assertEqual(v.ev, {'k1': EInst(s1='k1'), 'k2': EInst(s1='k2')}) # Form 4: -- list of key/object pairs v = E([{"k1": {"s1": "k1", "s2": "v21", "s3": "v23"}}, {"k2": {"s2": "v22", "s3": "v23"}}, {"k3": {}}]) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2='v21', s3='v23')," - " 'k2': EInst(s1='k2', s2='v22', s3='v23')," - " 'k3': EInst(s1='k3', s2=None, s3=None)})", str(v), + self.assertEqual(v.ev, + {'k1': EInst(s1='k1', s2='v21', s3='v23'), + 'k2': EInst(s1='k2', s2='v22', s3='v23'), + 'k3': EInst(s1='k3', s2=None, s3=None)}, "List of key value constructors") with self.assertRaises(ValueError) as e: @@ -41,28 +41,34 @@ def test_list_variations(self): v = E([{"k1": EInst(s1="k1", s2="v21", s3="v23")}, {"k2": JsonObj({"s2": "v22", "s3": "v23"})}, {"k3": None}]) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2='v21', s3='v23')," - " 'k2': EInst(s1='k2', s2='v22', s3='v23')," - " 'k3': EInst(s1='k3', s2=None, s3=None)})", str(v)) + self.assertEqual(v.ev, + { + 'k1': EInst(s1='k1', s2='v21', s3='v23'), + 'k2': EInst(s1='k2', s2='v22', s3='v23'), + 'k3': EInst(s1='k3', s2=None, s3=None) + }) # More Form 5 variations v = E(["k1", "k2", {"k3": "v3"}, ["k4", "v4"], {"s1": "k5", "s2": "v52"}]) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2=None, s3=None), " - "'k2': EInst(s1='k2', s2=None, s3=None), " - "'k3': EInst(s1='k3', s2='v3', s3=None), " - "'k4': EInst(s1='k4', s2='v4', s3=None), " - "'k5': EInst(s1='k5', s2='v52', s3=None)})", str(v), "Key value tuples") + self.assertEqual(v.ev, + {'k1': EInst(s1='k1', s2=None, s3=None), + 'k2': EInst(s1='k2', s2=None, s3=None), + 'k3': EInst(s1='k3', s2='v3', s3=None), + 'k4': EInst(s1='k4', s2='v4', s3=None), + 'k5': EInst(s1='k5', s2='v52', s3=None)}, "Key value tuples") # Form 6 - list of positional object values v = E([["k1", "v12", "v13"], ["k2", "v22"], ["k3"]]) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2='v12', s3='v13'), " - "'k2': EInst(s1='k2', s2='v22', s3=None), " - "'k3': EInst(s1='k3', s2=None, s3=None)})", str(v), "Positional objects") + self.assertEqual(v.ev, + {'k1': EInst(s1='k1', s2='v12', s3='v13'), + 'k2': EInst(s1='k2', s2='v22', s3=None), + 'k3': EInst(s1='k3', s2=None, s3=None)}, "Positional objects") # Form 7 - list of kv dictionaries v = E([{"s1": "v11", "s2": "v12"}, {"s1": "v21", "s2": "v22", "s3": "v23"}]) - self.assertEqual("E(ev={'v11': EInst(s1='v11', s2='v12', s3=None), " - "'v21': EInst(s1='v21', s2='v22', s3='v23')})", str(v), "List of dictionaries") + self.assertEqual(v.ev, + {'v11': EInst(s1='v11', s2='v12', s3=None), + 'v21': EInst(s1='v21', s2='v22', s3='v23')}, "List of dictionaries") def test_dict_variations(self): @@ -72,23 +78,30 @@ def test_dict_variations(self): "k2": JsonObj({"s2": "v22", "s3": "v23"}), "k3": {"s2": "v32", "s3": "v33"}, "k4": {"s1": "k4"}}) - self.assertEqual(("E(ev={'k1': EInst(s1='k1', s2='v21', s3='v23'), " - "'k2': EInst(s1='k2', s2='v22', s3='v23'), " - "'k3': EInst(s1='k3', s2='v32', s3='v33'), " - "'k4': EInst(s1='k4', s2=None, s3=None)})"), str(v), "Dictionary of key/object entries") + self.assertEqual(v.ev, + {'k1': EInst(s1='k1', s2='v21', s3='v23'), + 'k2': EInst(s1='k2', s2='v22', s3='v23'), + 'k3': EInst(s1='k3', s2='v32', s3='v33'), + 'k4': EInst(s1='k4', s2=None, s3=None)}, + "Dictionary of key/object entries") # Form 2: key/value tuples (only works when at most two values are required v = E(ev={"k1": "v11", "k2": "v21", "k3": {}}) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2='v11', s3=None)," - " 'k2': EInst(s1='k2', s2='v21', s3=None), " - "'k3': EInst(s1='k3', s2=None, s3=None)})", str(v), "Dictionary of two-key entries") + expected = ("E({ 'ev': { 'k1': {'s1': 'k1', 's2': 'v11'},\n" + " 'k2': {'s1': 'k2', 's2': 'v21'},\n" + " 'k3': {'s1': 'k3'}}})") + self.assertEqual(v.ev, + {'k1': EInst(s1='k1', s2='v11', s3=None), + 'k2': EInst(s1='k2', s2='v21', s3=None), + 'k3': EInst(s1='k3', s2=None, s3=None)}, + "Dictionary of two-key entries") # Form 3: Basic single object (differentiated from form2 by the presence of the key name v = E({"s1": "k1"}) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2=None, s3=None)})", - str(v), "Single entry dictionary") + self.assertEqual(v.ev, {'k1': EInst(s1='k1', s2=None, s3=None)}, + "Single entry dictionary") v = E({"s1": "k1", "s2": "v12"}) - self.assertEqual("E(ev={'k1': EInst(s1='k1', s2='v12', s3=None)})", str(v), "Single entry dictionary") + self.assertEqual(v.ev, {'k1': EInst(s1='k1', s2='v12', s3=None)}, "Single entry dictionary") def test_isempties(self): base = E() @@ -106,3 +119,4 @@ def test_isempties(self): if __name__ == '__main__': unittest.main() + diff --git a/tests/test_utils/test_inlined_as_list_forms.py b/tests/test_utils/test_inlined_as_list_forms.py index 22b862db..6c606097 100644 --- a/tests/test_utils/test_inlined_as_list_forms.py +++ b/tests/test_utils/test_inlined_as_list_forms.py @@ -9,25 +9,25 @@ class InlinedAsListTestcase(unittest.TestCase): """ Test the various YAML forms for inlined_as_list entries""" def test_list_variations(self): v = E() - self.assertEqual("E(ev=[])", str(v), "No entries, period") + self.assertEqual(v.ev, [], "No entries, period") v = E({}) - self.assertEqual("E(ev=[])", str(v), "Default is empty dictionary") + self.assertEqual(v.ev, [], "Default is empty dictionary") v = E([]) - self.assertEqual('E(ev=[])', str(v), "Empty list becomes empty dictionary") + self.assertEqual(v.ev, [], "Empty list becomes empty dictionary") v = E(JsonObj()) - self.assertEqual('E(ev=[])', str(v), "Empty JsonObj becomes empty dictionary") + self.assertEqual(v.ev, [], "Empty JsonObj becomes empty dictionary") # Form 5 -- list of keys v1 = JsonObj(["k1", "k2"]) v = E(v1) - self.assertEqual("E(ev=[EInst(s1='k1', s2=None, s3=None), EInst(s1='k2', s2=None, s3=None)])", - str(v)) + self.assertEqual(v.ev, [EInst(s1='k1', s2=None, s3=None), EInst(s1='k2', s2=None, s3=None)]) # Form 4: -- list of key/object pairs v = E([{"k1": {"s1": "k1", "s2": "v21", "s3": "v23"}}, {"k2": {"s2": "v22", "s3": "v23"}}, {"k3": {}}]) - self.assertEqual("E(ev=[EInst(s1='k1', s2='v21', s3='v23')," - " EInst(s1='k2', s2='v22', s3='v23')," - " EInst(s1='k3', s2=None, s3=None)])", str(v), + self.assertEqual(v.ev, + [EInst(s1='k1', s2='v21', s3='v23'), + EInst(s1='k2', s2='v22', s3='v23'), + EInst(s1='k3', s2=None, s3=None)], "List of key value constructors") with self.assertRaises(ValueError) as e: @@ -41,28 +41,32 @@ def test_list_variations(self): v = E([{"k1": EInst(s1="k1", s2="v21", s3="v23")}, {"k2": JsonObj({"s2": "v22", "s3": "v23"})}, {"k3": None}]) - self.assertEqual("E(ev=[EInst(s1='k1', s2='v21', s3='v23')," - " EInst(s1='k2', s2='v22', s3='v23')," - " EInst(s1='k3', s2=None, s3=None)])", str(v)) + self.assertEqual(v.ev, + [EInst(s1='k1', s2='v21', s3='v23'), + EInst(s1='k2', s2='v22', s3='v23'), + EInst(s1='k3', s2=None, s3=None)]) # More Form 5 variations v = E(["k1", "k2", {"k3": "v3"}, ["k4", "v4"], {"s1": "k5", "s2": "v52"}]) - self.assertEqual("E(ev=[EInst(s1='k1', s2=None, s3=None), " - "EInst(s1='k2', s2=None, s3=None), " - "EInst(s1='k3', s2='v3', s3=None), " - "EInst(s1='k4', s2='v4', s3=None), " - "EInst(s1='k5', s2='v52', s3=None)])", str(v), "Key value tuples") + self.assertEqual(v.ev, + [EInst(s1='k1', s2=None, s3=None), + EInst(s1='k2', s2=None, s3=None), + EInst(s1='k3', s2='v3', s3=None), + EInst(s1='k4', s2='v4', s3=None), + EInst(s1='k5', s2='v52', s3=None)], "Key value tuples") # Form 6 - list of positional object values v = E([["k1", "v12", "v13"], ["k2", "v22"], ["k3"]]) - self.assertEqual("E(ev=[EInst(s1='k1', s2='v12', s3='v13'), " - "EInst(s1='k2', s2='v22', s3=None), " - "EInst(s1='k3', s2=None, s3=None)])", str(v), "Positional objects") + self.assertEqual(v.ev, + [EInst(s1='k1', s2='v12', s3='v13'), + EInst(s1='k2', s2='v22', s3=None), + EInst(s1='k3', s2=None, s3=None)], "Positional objects") # Form 7 - list of kv dictionaries v = E([{"s1": "v11", "s2": "v12"}, {"s1": "v21", "s2": "v22", "s3": "v23"}]) - self.assertEqual("E(ev=[EInst(s1='v11', s2='v12', s3=None), " - "EInst(s1='v21', s2='v22', s3='v23')])", str(v), "List of dictionaries") + self.assertEqual(v.ev, + [EInst(s1='v11', s2='v12', s3=None), + EInst(s1='v21', s2='v22', s3='v23')], "List of dictionaries") def test_dict_variations(self): @@ -72,23 +76,25 @@ def test_dict_variations(self): "k2": JsonObj({"s2": "v22", "s3": "v23"}), "k3": {"s2": "v32", "s3": "v33"}, "k4": {"s1": "k4"}}) - self.assertEqual(("E(ev=[EInst(s1='k1', s2='v21', s3='v23'), " - "EInst(s1='k2', s2='v22', s3='v23'), " - "EInst(s1='k3', s2='v32', s3='v33'), " - "EInst(s1='k4', s2=None, s3=None)])"), str(v), "Dictionary of key/object entries") + self.assertEqual(v.ev, + [EInst(s1='k1', s2='v21', s3='v23'), + EInst(s1='k2', s2='v22', s3='v23'), + EInst(s1='k3', s2='v32', s3='v33'), + EInst(s1='k4', s2=None, s3=None)], "Dictionary of key/object entries") # Form 2: key/value tuples (only works when at most two values are required v = E(ev={"k1": "v11", "k2": "v21", "k3": {}}) - self.assertEqual("E(ev=[EInst(s1='k1', s2='v11', s3=None)," - " EInst(s1='k2', s2='v21', s3=None), " - "EInst(s1='k3', s2=None, s3=None)])", str(v), "Dictionary of two-key entries") + self.assertEqual(v.ev, + [EInst(s1='k1', s2='v11', s3=None), + EInst(s1='k2', s2='v21', s3=None), + EInst(s1='k3', s2=None, s3=None)], "Dictionary of two-key entries") # Form 3: Basic single object (differentiated from form2 by the presence of the key name v = E({"s1": "k1"}) - self.assertEqual("E(ev=[EInst(s1='k1', s2=None, s3=None)])", - str(v), "Single entry dictionary") + self.assertEqual(v.ev, [EInst(s1='k1', s2=None, s3=None)], + "Single entry dictionary") v = E({"s1": "k1", "s2": "v12"}) - self.assertEqual("E(ev=[EInst(s1='k1', s2='v12', s3=None)])", str(v), "Single entry dictionary") + self.assertEqual(v.ev, [EInst(s1='k1', s2='v12', s3=None)], "Single entry dictionary") if __name__ == '__main__': From 8b8b48aebc3818497519d2b2f47c6d1e552c58cb Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 25 Mar 2024 17:45:58 -0700 Subject: [PATCH 25/33] remove unused imports --- linkml_runtime/utils/yamlutils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 4b4d184a..8f06f78b 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -1,9 +1,7 @@ -import pdb from copy import copy from json import JSONDecoder from typing import Union, Any, List, Optional, Type, Callable, Dict from pprint import pformat -import textwrap import yaml from deprecated.classic import deprecated From 2acff669b8cfb3ca19d5aaa04a124daddcf0d39d Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 26 Mar 2024 18:50:27 -0700 Subject: [PATCH 26/33] add no repr to enum parent class, and to tested metaclasses --- linkml_runtime/linkml_model/meta.py | 70 ++++++++++++++-------------- linkml_runtime/utils/enumerations.py | 2 +- linkml_runtime/utils/yamlutils.py | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/linkml_runtime/linkml_model/meta.py b/linkml_runtime/linkml_model/meta.py index a56a0ad9..fee7f676 100644 --- a/linkml_runtime/linkml_model/meta.py +++ b/linkml_runtime/linkml_model/meta.py @@ -148,7 +148,7 @@ class TypeMappingFramework(extended_str): Anything = Any -@dataclass +@dataclass(repr=False) class CommonMetadata(YAMLRoot): """ Generic metadata shared across definitions @@ -311,7 +311,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Element(YAMLRoot): """ A named element in the model @@ -516,7 +516,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class SchemaDefinition(Element): """ A collection of definitions that make up a schema or a data model. @@ -628,7 +628,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AnonymousTypeExpression(YAMLRoot): """ A type expression that is not a top-level named type definition. Used for nesting. @@ -696,7 +696,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class TypeDefinition(Element): """ an element that whose instances are atomic scalar values that can be mapped to primitive types @@ -791,7 +791,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class SubsetDefinition(Element): """ an element that can be used to group other metamodel elements @@ -814,7 +814,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Definition(Element): """ abstract base class for core metaclasses @@ -863,7 +863,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AnonymousEnumExpression(YAMLRoot): """ An enum_expression that is not named @@ -927,7 +927,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class EnumDefinition(Definition): """ an element whose instances must be drawn from a specified set of permissible values @@ -1001,7 +1001,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class EnumBinding(YAMLRoot): """ A binding of a slot or a class to a permissible value from an enumeration. @@ -1186,7 +1186,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class MatchQuery(YAMLRoot): """ A query that is used on an enum expression to dynamically obtain a set of permissivle values via a query that @@ -1212,7 +1212,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ReachabilityQuery(YAMLRoot): """ A query that is used on an enum expression to dynamically obtain a set of permissible values via walking from a @@ -1256,7 +1256,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class StructuredAlias(YAMLRoot): """ object that contains meta data about a synonym or alias including where it came from (source) and its scope @@ -1453,7 +1453,7 @@ class Expression(YAMLRoot): class_model_uri: ClassVar[URIRef] = LINKML.Expression -@dataclass +@dataclass(repr=False) class TypeExpression(Expression): """ An abstract class grouping named types and anonymous type expressions @@ -1521,7 +1521,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class EnumExpression(Expression): """ An expression that constrains the range of a slot @@ -1585,7 +1585,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AnonymousExpression(YAMLRoot): """ An abstract parent class for any nested expression @@ -1754,7 +1754,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class PathExpression(YAMLRoot): """ An expression that describes an abstract path from an object to another through a sequence of slot lookups @@ -1959,7 +1959,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class SlotExpression(Expression): """ an expression that constrains the range of values a slot can take @@ -2092,7 +2092,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AnonymousSlotExpression(AnonymousExpression): _inherited_slots: ClassVar[List[str]] = ["range", "required", "recommended", "multivalued", "inlined", "inlined_as_list", "minimum_value", "maximum_value", "pattern", "structured_pattern", "value_presence", "equals_string", "equals_string_in", "equals_number", "equals_expression", "exact_cardinality", "minimum_cardinality", "maximum_cardinality"] @@ -2222,7 +2222,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class SlotDefinition(Definition): """ an element that describes how instances are related to other instances @@ -2531,7 +2531,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ClassExpression(YAMLRoot): """ A boolean expression that can be used to dynamically determine membership of a class @@ -2571,7 +2571,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AnonymousClassExpression(AnonymousExpression): _inherited_slots: ClassVar[List[str]] = [] @@ -2612,7 +2612,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ClassDefinition(Definition): """ an element whose instances are complex objects that may have slot-value assignments @@ -2747,7 +2747,7 @@ class ClassLevelRule(YAMLRoot): class_model_uri: ClassVar[URIRef] = LINKML.ClassLevelRule -@dataclass +@dataclass(repr=False) class ClassRule(ClassLevelRule): """ A rule that applies to instances of a class @@ -2940,7 +2940,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ArrayExpression(YAMLRoot): """ defines the dimensions of an array @@ -3123,7 +3123,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class DimensionExpression(YAMLRoot): """ defines one of the dimensions of an array @@ -3308,7 +3308,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class PatternExpression(YAMLRoot): """ a regular expression pattern used to evaluate conformance of a string @@ -3489,7 +3489,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ImportExpression(YAMLRoot): """ an expression describing an import @@ -3671,7 +3671,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Setting(YAMLRoot): """ assignment of a key to a value @@ -3700,7 +3700,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Prefix(YAMLRoot): """ prefix URI tuple @@ -3729,7 +3729,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class LocalName(YAMLRoot): """ an attributed label @@ -3758,7 +3758,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Example(YAMLRoot): """ usage example and description @@ -3784,7 +3784,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class AltDescription(YAMLRoot): """ an attributed description @@ -3813,7 +3813,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class PermissibleValue(YAMLRoot): """ a permissible value, accompanied by intended text and an optional mapping to a concept URI @@ -4015,7 +4015,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class UniqueKey(YAMLRoot): """ a collection of slots whose values uniquely identify an instance of a class diff --git a/linkml_runtime/utils/enumerations.py b/linkml_runtime/utils/enumerations.py index 75e5a8a6..5cd06ed2 100644 --- a/linkml_runtime/utils/enumerations.py +++ b/linkml_runtime/utils/enumerations.py @@ -102,4 +102,4 @@ def __str__(self) -> str: def __repr__(self) -> str: rlist = [(f.name, getattr(self._code, f.name)) for f in fields(self._code)] - return '(' + ', '.join([f"{f[0]}={repr(f[1])}" for f in rlist if f[1]]) + ')' + return self.__class__.__name__ + '(' + ', '.join([f"{f[0]}={repr(f[1])}" for f in rlist if f[1]]) + ')' diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 8f06f78b..1c4803a0 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -286,7 +286,7 @@ def __repr__(self): continue res[key] = val return self.__class__.__name__ + '(' + pformat(res, indent=2, - compact=True) + ')' + compact=True, sort_dicts=False) + ')' def __str__(self): """Dump everything into a dict, recursively, stringifying it all""" From 641c4d8a822e937d7dd3df4cc28922928f6b568e Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 26 Mar 2024 22:24:13 -0700 Subject: [PATCH 27/33] actually pretty printing that doesn't get all bunched up all over the console --- linkml_runtime/utils/yamlutils.py | 50 ++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 1c4803a0..219cb135 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -2,6 +2,8 @@ from json import JSONDecoder from typing import Union, Any, List, Optional, Type, Callable, Dict from pprint import pformat +import textwrap +import re import yaml from deprecated.classic import deprecated @@ -279,19 +281,45 @@ def MissingRequiredField(self, field_name: str) -> None: raise ValueError(f"{field_name} must be supplied") def __repr__(self): - """Only reformat 1-layer deep to preserve __repr__ of child objects""" - res = {} - for key, val in items(self): - if val == [] or val == {} or val is None: - continue - res[key] = val - return self.__class__.__name__ + '(' + pformat(res, indent=2, - compact=True, sort_dicts=False) + ')' + return _pformat(items(self), self.__class__.__name__) def __str__(self): - """Dump everything into a dict, recursively, stringifying it all""" - res = remove_empty_items(self) - return self.__class__.__name__ + '(' + pformat(res, indent=2, compact=True) + ')' + return repr(self) + +def _pformat(fields:dict, cls_name:str, indent:str = ' ') -> str: + """ + pretty format the fields of the items of a ``YAMLRoot`` object without the wonky indentation of pformat. + see ``YAMLRoot.__repr__``. + + formatting is similar to black - items at similar levels of nesting have similar levels of indentation, + rather than getting placed at essentially random levels of indentation depending on what came before them. + """ + res = [] + total_len = 0 + for key, val in fields: + if val == [] or val == {} or val is None: + continue + # pformat handles everything else that isn't a YAMLRoot object, but it sure does look ugly + # use it to split lines and as the thing of last resort, but otherwise indent = 0, we'll do that + val_str = pformat(val, indent=0, compact=True, sort_dicts=False) + # now we indent everything except the first line by indenting and then using regex to remove just the first indent + val_str = re.sub(rf'\A{re.escape(indent)}', '', textwrap.indent(val_str, indent)) + # now recombine with the key in a format that can be re-eval'd into an object if indent is just whitespace + val_str = f"'{key}': " + val_str + + # count the total length of this string so we know if we need to linebreak or not later + total_len += len(val_str) + res.append(val_str) + + if total_len > 80: + inside = ',\n'.join(res) + # we indent twice - once for the inner contents of every inner object, and one to + # offset from the root element. that keeps us from needing to be recursive except for the + # single pformat call + inside = textwrap.indent(inside, indent) + return cls_name + '({\n' + inside + '\n})' + else: + return cls_name + '({' + ', '.join(res) + '})' def root_representer(dumper: yaml.Dumper, data: YAMLRoot): From ba677c6fb8576390cf6a508ed49e0329cd17dc48 Mon Sep 17 00:00:00 2001 From: Sujay Patil Date: Wed, 7 Aug 2024 17:57:24 -0700 Subject: [PATCH 28/33] assertion that ensure that domain_of is not populated in slot_usage --- tests/test_utils/test_schemaview.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_utils/test_schemaview.py b/tests/test_utils/test_schemaview.py index 705d19e7..8e059689 100644 --- a/tests/test_utils/test_schemaview.py +++ b/tests/test_utils/test_schemaview.py @@ -983,6 +983,11 @@ def test_materialize_nonscalar_slot_usage(self): assert cls.attributes["tempo"].annotations.expected_value.value == "a number between 0 and 200" assert cls.attributes["tempo"].annotations.preferred_unit.value == "BPM" + assert cls.attributes["tempo"].domain_of == ["DJController"] + # ensure that domain_of is not being populated in slot_usage + # test for https://github.com/linkml/linkml/pull/2262 from upstream linkml + assert cls.slot_usage["tempo"].domain_of == [] + if __name__ == '__main__': unittest.main() From cf9ada15d0ce36c8125ae38e851acfdf80bcc8f7 Mon Sep 17 00:00:00 2001 From: Nomi Harris Date: Thu, 15 Aug 2024 16:03:56 -0700 Subject: [PATCH 29/33] fix typo in docstring fixes #2233 --- linkml_runtime/utils/schemaview.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 60619281..a2cbadcb 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -400,7 +400,7 @@ def _order_inheritance(self, elements: DefDict) -> DefDict: @lru_cache(None) def all_classes(self, ordered_by=OrderedBy.PRESERVE, imports=True) -> Dict[ClassDefinitionName, ClassDefinition]: """ - :param ordered_by: an enumerated parameter that returns all the slots in the order specified. + :param ordered_by: an enumerated parameter that returns all the classes in the order specified. :param imports: include imports closure :return: all classes in schema view """ @@ -1899,4 +1899,4 @@ def materialize_derived_schema(self) -> SchemaDefinition: derived_schema.subsets[subset.name] = subset for enum in [deepcopy(e) for e in self.all_enums().values()]: derived_schema.enums[enum.name] = enum - return derived_schema \ No newline at end of file + return derived_schema From 20ebae8b473f77d42bf2a44e447800312817e645 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 15 Aug 2024 16:05:49 -0700 Subject: [PATCH 30/33] no op to trigger upstream tests running --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4020b7c9..b4e44ad8 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,4 @@ It also includes the [SchemaView](https://linkml.io/linkml/developers/manipulati ## Notebooks -See the [notebooks](https://github.com/linkml/linkml-runtime/tree/main/notebooks) folder for examples +See the [notebooks](https://github.com/linkml/linkml-runtime/tree/main/notebooks) folder for examples From 3d2acf2d2679cf503d1230dd94fa9a86b3659552 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Thu, 15 Aug 2024 16:05:59 -0700 Subject: [PATCH 31/33] revert no op --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4e44ad8..4020b7c9 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,4 @@ It also includes the [SchemaView](https://linkml.io/linkml/developers/manipulati ## Notebooks -See the [notebooks](https://github.com/linkml/linkml-runtime/tree/main/notebooks) folder for examples +See the [notebooks](https://github.com/linkml/linkml-runtime/tree/main/notebooks) folder for examples From b5f2b4b58377cf92734d58e13b8d22541268b192 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 22 Jul 2024 18:54:24 -0700 Subject: [PATCH 32/33] cache schemaview hash --- linkml_runtime/utils/schemaview.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 4ca36121..0a4ce77b 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -6,7 +6,7 @@ from copy import copy, deepcopy from collections import defaultdict, deque from pathlib import Path -from typing import Mapping, Tuple, TypeVar +from typing import Mapping, Optional, Tuple, TypeVar import warnings from linkml_runtime.utils.namespaces import Namespaces @@ -145,6 +145,11 @@ class SchemaView(object): modifications: int = 0 uuid: str = None + ## private vars -------- + # cached hash + _hash: Optional[int] = None + + def __init__(self, schema: Union[str, Path, SchemaDefinition], importmap: Optional[Dict[str, str]] = None, merge_imports: bool = False, base_dir: str = None): if isinstance(schema, Path): @@ -166,8 +171,10 @@ def __eq__(self, other): return self.__key() == other.__key() return NotImplemented - def __hash__(self): - return hash(self.__key()) + def __hash__(self) -> int: + if self._hash is None: + self._hash = hash(self.__key()) + return self._hash @lru_cache(None) def namespaces(self) -> Namespaces: @@ -1850,6 +1857,7 @@ def copy_schema(self, new_name: str = None) -> SchemaDefinition: return s2 def set_modified(self) -> None: + self._hash = None self.modifications += 1 def materialize_patterns(self) -> None: From e6981707bf3067eb58785ad96a21d5527e38bf11 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Tue, 27 Aug 2024 19:00:20 -0700 Subject: [PATCH 33/33] use model_dump not dict --- linkml_runtime/dumpers/yaml_dumper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml_runtime/dumpers/yaml_dumper.py b/linkml_runtime/dumpers/yaml_dumper.py index 994c2fb6..a6360608 100644 --- a/linkml_runtime/dumpers/yaml_dumper.py +++ b/linkml_runtime/dumpers/yaml_dumper.py @@ -13,7 +13,7 @@ def dumps(self, element: Union[BaseModel, YAMLRoot], **kwargs) -> str: # Internal note: remove_empty_items will also convert Decimals to int/float; # this is necessary until https://github.com/yaml/pyyaml/pull/372 is merged - dumper_safe_element = element.dict() if isinstance(element, BaseModel) else element + dumper_safe_element = element.model_dump() if isinstance(element, BaseModel) else element return yaml.dump(remove_empty_items(dumper_safe_element, hide_protected_keys=True), Dumper=yaml.SafeDumper, sort_keys=False, allow_unicode=True,